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