module Seam
  module Persistence
    def self.find_by_effort_id effort_id
      effort = Seam::InMemory.records.select { |x| x.id == effort_id }.first
      return nil unless effort
      effort.clone
    end

    def self.find_all_pending_executions_by_step step
      Seam::InMemory.records
        .select { |x| x.next_step == step && x.next_execute_at <= Time.now }
        .map { |x| x.clone }
    end

    def self.save effort
      old_record = find_by_effort_id effort.id
      if old_record
        Seam::InMemory.records = Seam::InMemory.records.select { |x| x.id != effort.id }.to_a
      end
      create effort
    end

    def self.create effort
      Seam::InMemory.records = [Seam::InMemory.records, effort].flatten
    end

    def self.all
      Seam::InMemory.records.to_a
    end

    def self.destroy
      Seam::InMemory.records = []
    end
  end
end

module Seam
  module Persistence
    def self.find_by_effort_id effort_id
      effort = Seam::InMemory.records.select { |x| x.id == effort_id }.first
      return nil unless effort
      effort.clone
    end

    def self.find_all_pending_executions_by_step step
      Seam::InMemory.records
        .select { |x| x.next_step == step && x.next_execute_at <= Time.now }
        .map { |x| x.clone }
    end

    def self.find_something_to_do step
      Seam::InMemory.records
        .select { |x| x.next_execute_at <= Time.now }
        .map    { |x| x.clone }
    end

    def self.save effort
      old_record = find_by_effort_id effort.id
      if old_record
        Seam::InMemory.records = Seam::InMemory.records.select { |x| x.id != effort.id }.to_a
      end
      create effort
    end

    def self.create effort
      Seam::InMemory.records = [Seam::InMemory.records, effort].flatten
    end

    def self.all
      Seam::InMemory.records.to_a
    end

    def self.destroy
      Seam::InMemory.records = []
    end
  end
end

Add way to get something to do.
Add way to get something to do.
