From b50e4a5f40bc64fa1893d249d83c05ecd217de1d Mon Sep 17 00:00:00 2001 From: mms Date: Mon, 6 Jan 2025 22:17:43 +0100 Subject: feat(new): rss + batch --- new/lib/crys/pages_db_manager.rb | 62 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 new/lib/crys/pages_db_manager.rb (limited to 'new/lib/crys/pages_db_manager.rb') diff --git a/new/lib/crys/pages_db_manager.rb b/new/lib/crys/pages_db_manager.rb new file mode 100644 index 0000000..6a5e71c --- /dev/null +++ b/new/lib/crys/pages_db_manager.rb @@ -0,0 +1,62 @@ +module Crys + class PagesDbManager + PAGES_KEY = :pages + PAGE = Struct.new(:filename, :file_path, :last_update, :in_rss, keyword_init: true) + + def db_path + end + + def add_page(processor) + @processor = processor + hash = Digest::MD5.hexdigest(processor.file_path) + known_page = known_page(hash) + + upsert_db(hash, known_page) + save_db + end + + def pages + db.fetch(:pages).map do | _, data| + PAGE.new(data) + end + end + + private + + attr_reader :hash, :processor + + + def db + @db ||= YAML.load_file( + db_path, + permitted_classes: [Time, Symbol] + ) + end + + def upsert_db(hash, known_page) + if known_page + record = PAGE.new(known_page) + else + record = PAGE.new( + filename: processor.filename, + file_path: processor.file_path, + in_rss: true + ) + end + + record.last_update = Time.now + + @db[PAGES_KEY][hash] = record.to_h + end + + def save_db + File.open(db_path, 'w') do |f| + f.write db.to_yaml + end + end + + def known_page(hash) + db[PAGES_KEY][hash] + end + end +end -- cgit v1.2.3