58 lines
1.2 KiB
Ruby
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
|