Sha256: f4b02c5d5a15aeb084c47afefe280b3ccd5147a84303d6c690e6a5b9915ba834

Contents?: true

Size: 940 Bytes

Versions: 1

Compression:

Stored size: 940 Bytes

Contents

module JSONAPIonify::Api
  class ContextDelegate
    class Mock
      def method_missing(*args, &block)
        self
      end
    end

    def initialize(request, instance, definitions)
      memo         = {}
      delegate     = self
      @definitions = definitions

      define_singleton_method :request do
        request
      end

      %i{initialize_dup initialize_clone}.each do |method|
        define_singleton_method method do |copy|
          memo.each do |k, v|
            copy.public_send "#{k}=", v
          end
        end
      end

      define_singleton_method(:reset) do |key|
        memo.delete(key)
      end

      definitions.each do |name, context|
        define_singleton_method name do
          memo[name] ||= context.call(instance, delegate)
        end

        define_singleton_method "#{name}=" do |value|
          memo[name] = value
        end unless context.readonly?
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jsonapionify-0.9.0 lib/jsonapionify/api/context_delegate.rb