Sha256: e84cb4dbf12ee3acdc046b3c762c978c7b3f2352da0cf2095762c57b477ffe12

Contents?: true

Size: 906 Bytes

Versions: 7

Compression:

Stored size: 906 Bytes

Contents

module JSONAPIonify::Api
  class Context
    using JSONAPIonify::DestructuredProc

    def initialize(name, readonly: false, persisted: false, existing_context: nil, &block)
      @name             = name.to_sym
      @readonly         = readonly
      @persisted        = persisted
      @existing_context = existing_context
      @block            = block || proc {}
    end

    def call(instance, delegate)
      existing_context = @existing_context || proc {}
      existing_block   = proc { existing_context.call(instance, delegate) }
      JSONAPIonify::CustomRescue.perform(remove: __FILE__, source: @block, formatter: ->(meta) { meta.source_location.join(':') + ":in context: `#{@name}''" }) do
        instance.instance_exec(delegate, existing_block, &@block.destructure(0))
      end
    end

    def readonly?
      !!@readonly
    end

    def persisted?
      !!@persisted
    end

  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
jsonapionify-0.12.10 lib/jsonapionify/api/context.rb
jsonapionify-0.12.9 lib/jsonapionify/api/context.rb
jsonapionify-0.12.8 lib/jsonapionify/api/context.rb
jsonapionify-0.12.7 lib/jsonapionify/api/context.rb
jsonapionify-0.12.5 lib/jsonapionify/api/context.rb
jsonapionify-0.12.4 lib/jsonapionify/api/context.rb
jsonapionify-0.12.3 lib/jsonapionify/api/context.rb