Sha256: abd955d2c656deb23d56e925a5a5824765b8208f719e1a0b668ce8c42a8b7b56

Contents?: true

Size: 1.51 KB

Versions: 23

Compression:

Stored size: 1.51 KB

Contents

require 'active_support/rescuable'

module JSONAPIonify::Api
  module Resource::ClassMethods

    def self.extended(klass)
      klass.include ActiveSupport::Rescuable
    end

    def description(description)
      @description = description
    end

    def set_api(api)
      self.tap do
        define_singleton_method :api do
          api
        end
      end
    end

    def set_type(type)
      type = type.to_s
      self.tap do
        define_singleton_method :type do
          type
        end
      end
    end

    def type
      nil
    end

    def api
      nil
    end

    def eager_load
      relationships.map(&:name).each do |name|
        relationship name
      end
    end

    def get_url(base)
      URI.parse(base).tap do |uri|
        uri.path  = File.join(uri.path, type)
        params    = sticky_params(Rack::Utils.parse_nested_query(uri.query))
        uri.query = params.to_param if params.present?
      end.to_s
    end

    def cache(store, *args)
      self.cache_store = ActiveSupport::Cache.lookup_store(store, *args)
    end

    def cache_store=(store)
      @cache_store = store
    end

    def cache_store
      @cache_store ||= api.cache_store
    end

    def default_strategy
      if defined?(ActiveRecord) && current_scope.is_a?(Class) && current_scope < ActiveRecord::Base
        :active_record
      elsif Enumerable === current_scope || (current_scope.is_a?(Class) && current_scope < Enumerable)
        :enumerable
      end
    rescue NotImplementedError
      nil
    end

  end
end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
jsonapionify-0.12.10 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.12.9 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.12.8 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.12.7 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.12.5 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.12.4 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.12.3 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.12.2 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.12.1 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.12.0 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.11.11 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.11.10 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.11.9 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.11.8 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.11.7 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.11.6 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.11.5 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.11.0 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.10.2 lib/jsonapionify/api/resource/class_methods.rb
jsonapionify-0.10.1 lib/jsonapionify/api/resource/class_methods.rb