Sha256: cf02cbdbb447466c4b20edf69556a7f5f9e9be1ac7c965e86890879a6b48d668

Contents?: true

Size: 1.67 KB

Versions: 13

Compression:

Stored size: 1.67 KB

Contents

require 'active_support/rescuable'
require 'rack/response'
require 'active_support/json'

module JSONAPIonify::Api
  class Resource
    extend JSONAPIonify::Autoload
    autoload_all

    extend Definitions
    extend ClassMethods
    extend Documentation

    include ErrorHandling
    include Includer
    include Builders
    include Defaults

    delegate :type, :attributes, :relationships, to: :class

    def self.inherited(subclass)
      super(subclass)
      subclass.class_eval do
        context(:api, readonly: true, persisted: true) { self.class.api }
        context(:resource, readonly: true, persisted: true) { self }
      end
    end

    def self.cache_key(**options)
      api.cache_key(
        **options,
        resource: name
      )
    end

    attr_reader :errors, :action, :response_headers

    def initialize(
      request:,
      context_definitions: self.class.context_definitions,
      commit: true,
      callbacks: true,
      context_overrides: {},
      cacheable: true,
      action: nil
    )
      context_overrides[:action_name] = action.name if action
      @__context                      = ContextDelegate.new(
        request,
        self,
        context_definitions,
        context_overrides
      )
      @errors                         = @__context.errors
      @action                         = action
      @response_headers               = @__context.response_headers
      @callbacks                      = action ? callbacks : false
      @cache_options                  = {}
      extend Caller if commit && action
      extend Exec unless action
      extend Caching if cacheable
    end

    def action_name
      action&.name
    end

  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
jsonapionify-0.11.11 lib/jsonapionify/api/resource.rb
jsonapionify-0.11.10 lib/jsonapionify/api/resource.rb
jsonapionify-0.11.9 lib/jsonapionify/api/resource.rb
jsonapionify-0.11.8 lib/jsonapionify/api/resource.rb
jsonapionify-0.11.7 lib/jsonapionify/api/resource.rb
jsonapionify-0.11.6 lib/jsonapionify/api/resource.rb
jsonapionify-0.11.5 lib/jsonapionify/api/resource.rb
jsonapionify-0.11.0 lib/jsonapionify/api/resource.rb
jsonapionify-0.10.2 lib/jsonapionify/api/resource.rb
jsonapionify-0.10.1 lib/jsonapionify/api/resource.rb
jsonapionify-0.10.0 lib/jsonapionify/api/resource.rb
jsonapionify-0.9.3 lib/jsonapionify/api/resource.rb
jsonapionify-0.9.2 lib/jsonapionify/api/resource.rb