fic_tracker/lib/fic_tracker/models/author.rb

58 lines
1.2 KiB
Ruby

# frozen_string_literal: true
module FicTracker::Models
class Author < Sequel::Model
# 2/month
METADATA_REFRESH_INTERVAL = 14 * 24 * 60 * 60
plugin :serialization, :json, :data
many_to_many :stories
def before_create
backend.load_author(self) if last_metadata_refresh.nil?
super
end
def self.expire
# TODO: Improve
all.select { |a| a.stories.empty? }.each(&:destroy)
end
def backend
return unless backend_name
@backend ||= FicTracker::Backends.get(backend_name)
end
def backend=(backend)
@backend = backend
self.backend_name = backend.name
end
def refresh_metadata
return unless backend && needs_metadata_refresh?
refresh_metadata!
end
def refresh_metadata!
backend.load_author(self)
end
def needs_metadata_refresh?
Time.now - (last_metadata_refresh || Time.at(0)) >= METADATA_REFRESH_INTERVAL
end
def self.needing_metadata_refresh
where { Sequel.|(last_metadata_refresh.nil?, last_metadata_refresh < date.function(Time.now - METADATA_REFRESH_INTERVAL, 'localtime')) }
end
def to_s
return name if name
slug
end
end
end