class Quby::Answers::Repos::DiskRepo

Attributes

path[R]

Public Class Methods

new(path) click to toggle source
# File lib/quby/answers/repos/disk_repo.rb, line 15
def initialize(path)
  @path = Pathname.new(path).expand_path
end

Public Instance Methods

find_completed_after(time, answer_ids) click to toggle source
# File lib/quby/answers/repos/disk_repo.rb, line 19
def find_completed_after(time, answer_ids)
  records = storage.map { |filename| load_file(filename) }.select do |record|
    answer_ids.include?(record._id) && record.completed_at.present? && record.completed_at > time
  end
  records.map { |record| entity(record) }
end

Private Instance Methods

all_records(questionnaire_key) click to toggle source
# File lib/quby/answers/repos/disk_repo.rb, line 28
def all_records(questionnaire_key)
  storage.map    { |filename| load_file(filename) }
         .select { |record| record.questionnaire_key == questionnaire_key }
end
build_record() click to toggle source
# File lib/quby/answers/repos/disk_repo.rb, line 47
def build_record
  Record.new(_id: SecureRandom.uuid)
end
entity(record) click to toggle source
# File lib/quby/answers/repos/disk_repo.rb, line 63
def entity(record)
  entity_class.new(**record.to_h).tap(&:enhance_by_dsl)
end
find_record(id) click to toggle source
# File lib/quby/answers/repos/disk_repo.rb, line 33
def find_record(id)
  load_file(path.join("answer-#{id}.yml"))
rescue StandardError
  nil
end
load_file(filename) click to toggle source
# File lib/quby/answers/repos/disk_repo.rb, line 39
def load_file(filename)
  File.open(filename, 'r') do |file|
    record = YAML.load(file.read)
    record.created_at ||= File.ctime(filename)
    record
  end
end
storage() click to toggle source
# File lib/quby/answers/repos/disk_repo.rb, line 59
def storage
  Dir[path.join("*.yml")]
end
store_record(record) click to toggle source
# File lib/quby/answers/repos/disk_repo.rb, line 51
def store_record(record)
  filename = path.join("answer-#{record[:_id]}.yml")
  File.open(filename, 'w') do |file|
    file.write YAML.dump(record)
  end
  record.created_at ||= File.ctime(filename)
end