Sha256: 4b2fe4a62f07fb60be3db860c8b2b021787305bf2b05b0b35a8a44815c0e3a6d
Contents?: true
Size: 1.5 KB
Versions: 1
Compression:
Stored size: 1.5 KB
Contents
module Uploadcare module Rails module ActiveRecord def is_uploadcare_file attribute, options = {} options.symbolize_keys! opts = { autostore: true, force_autostore: false }.update options get_uuid = lambda do |attributes| re = /[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/i m = re.match(attributes[attribute.to_s]) if m.nil? nil else m[0] end end define_method "#{attribute}" do uuid = get_uuid.call(attributes) return nil unless uuid if instance_variable_defined?("@#{attribute}_cached") instance_variable_get("@#{attribute}_cached") else file_data = ::Rails.application.config.uploadcare.api.file(uuid) instance_variable_set("@#{attribute}_cached", file_data) file_data end end if opts[:autostore] after_save "store_#{attribute}" define_method "store_#{attribute}" do uuid = get_uuid.call(attributes) stored = ::Rails.cache.exist?( "uploadcare.file.#{uuid}.store", force: opts[:force_autostore] ) unless stored send(attribute).store ::Rails.cache.write("uploadcare.file.#{uuid}.store", true) end end end end end end end ActiveRecord::Base.extend Uploadcare::Rails::ActiveRecord
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
uploadcare-rails-0.4.2 | lib/uploadcare/rails/active_record.rb |