module ResourceFetch
Public Instance Methods
has_resource(resource_name, default_url: '/', expiry: 1.day)
click to toggle source
# File lib/tanoshimu_utils/concerns/resource_fetch.rb, line 11 def has_resource(resource_name, default_url: '/', expiry: 1.day) resource_url = :"#{resource_name}_url" db_resource_url = :"db_#{resource_url}?" send(:define_method, db_resource_url) do @db_resource_url ||= self.class.column_names.include?(resource_url.to_s) end send(:define_method, resource_url) do ensure_fetchable_resource!(resource_name) resource_url_for(resource_name, default_url: default_url, expiry: expiry) end send(:define_method, "#{resource_url}!") do attachment = resource_for(resource_name).attachment return default_url if attachment.nil? if Config.uses_disk_storage? Rails.application.routes.url_helpers.rails_blob_url(attachment, only_path: true) else attachment.service_url(expires_in: expiry) end end send(:define_method, "#{resource_name}?") do (fetch!(resource_name, default_url)&.attached?).present? end end
Private Instance Methods
ensure_attachable_resource!(resource_name)
click to toggle source
# File lib/tanoshimu_utils/concerns/resource_fetch.rb, line 73 def ensure_attachable_resource!(resource_name) resource_for(resource_name) rescue NameError raise ResourceFetch::ResourceNotAttachable.new(resource_name)#, resource unless resource.respond_to?(:attached?) end
ensure_fetchable_resource!(resource_name)
click to toggle source
# File lib/tanoshimu_utils/concerns/resource_fetch.rb, line 69 def ensure_fetchable_resource!(resource_name) raise NoMethodError, "Don't know how to fetch #{resource_name}" unless respond_to?(resource_name) end
fetch!(resource_name, default_url)
click to toggle source
# File lib/tanoshimu_utils/concerns/resource_fetch.rb, line 58 def fetch!(resource_name, default_url) ensure_attachable_resource!(resource_name) resource = resource_for(resource_name) #return resource if resource.attached? #resource.attach(io: File.open("./public/#{default_url}"), filename: "episode-#{id}") rescue ResourceFetch::ResourceNotAttachable, Errno::ENOENT nil end
resource_for(resource_name)
click to toggle source
# File lib/tanoshimu_utils/concerns/resource_fetch.rb, line 39 def resource_for(resource_name) method(resource_name).call end
resource_url_for(resource_name, default_url: '/', expiry: 1.day)
click to toggle source
# File lib/tanoshimu_utils/concerns/resource_fetch.rb, line 43 def resource_url_for(resource_name, default_url: '/', expiry: 1.day) ensure_attachable_resource!(resource_name) resource_url = :"#{resource_name}_url" if try(:"db_#{resource_url}?") self[resource_url] || default_url else resource = resource_for(resource_name) if resource.attached? resource.service_url(expires_in: expiry) else default_url end end end