Sha256: 4dbe5ad7080fff692b9effbc46a6a0e0d2a7d831f83ddf6343778a31f2e524d6

Contents?: true

Size: 1.75 KB

Versions: 14

Compression:

Stored size: 1.75 KB

Contents

# frozen_string_literal: true

require 'uploadcare/rails/api/rest/file_api'
require 'uploadcare/rails/transformations/image_transformations'
require 'uploadcare/rails/objects/concerns/loadable'

module Uploadcare
  module Rails
    # A wrapper class for Uploadcare::File object.
    # Allows caching loaded files and has methods for Rails model attributes
    class File < Uploadcare::Entity::File
      include Objects::Loadable

      ATTR_ENTITIES = [:cdn_url].freeze

      attr_entity(*superclass.entity_attributes + ATTR_ENTITIES)

      def transform_url(transformations, transformator_class = Uploadcare::Rails::Transformations::ImageTransformations)
        return if cdn_url.blank?

        transformations_query = transformator_class.new(transformations).call if transformations.present?
        [cdn_url, transformations_query].compact.join('-')
      end

      def store
        file_info = Uploadcare::FileApi.store_file(uuid).merge(cdn_url: cdn_url).to_h
        ::Rails.cache.write(cache_key, file_info, expires_in: cache_expires_in) if caching_enabled?
        update_attrs(file_info)
      end

      def delete
        Uploadcare::FileApi.delete_file(uuid)
      end

      def to_s
        cdn_url
      end

      def load
        file_info = if caching_enabled?
                      ::Rails.cache.fetch(cache_key, expires_in: cache_expires_in) do
                        request_file_info_from_api
                      end
                    else
                      request_file_info_from_api
                    end
        update_attrs(file_info)
      end

      def loaded?
        datetime_uploaded.present?
      end

      private

      def request_file_info_from_api
        Uploadcare::FileApi.get_file(uuid).merge(self).to_h
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
uploadcare-rails-3.4.4 lib/uploadcare/rails/objects/file.rb
uploadcare-rails-3.4.3 lib/uploadcare/rails/objects/file.rb
uploadcare-rails-3.4.1 lib/uploadcare/rails/objects/file.rb
uploadcare-rails-3.4.0 lib/uploadcare/rails/objects/file.rb
uploadcare-rails-3.3.4 lib/uploadcare/rails/objects/file.rb
uploadcare-rails-3.3.3 lib/uploadcare/rails/objects/file.rb
uploadcare-rails-3.3.2.1 lib/uploadcare/rails/objects/file.rb
uploadcare-rails-3.3.2 lib/uploadcare/rails/objects/file.rb
uploadcare-rails-3.3.1 lib/uploadcare/rails/objects/file.rb
uploadcare-rails-3.3.0 lib/uploadcare/rails/objects/file.rb
uploadcare-rails-3.2.0 lib/uploadcare/rails/objects/file.rb
uploadcare-rails-2.1.1 lib/uploadcare/rails/objects/file.rb
uploadcare-rails-2.1.0 lib/uploadcare/rails/objects/file.rb
uploadcare-rails-2.0.0 lib/uploadcare/rails/objects/file.rb