Sha256: f9e2a942faed67ce8293145ab2bfd1a19a759ad842f36811ca33b919e32e00f6
Contents?: true
Size: 1.7 KB
Versions: 12
Compression:
Stored size: 1.7 KB
Contents
module JSONAPIonify::Api class ContextDelegate class Mock def initialize(**attrs) attrs.each do |attr, value| define_singleton_method(attr) { value } end end def method_missing(*) self end end attr_reader :request def initialize(request, resource_instance, definitions, **overrides) @memo = {} @request = request @persisted_memo = {} @definitions = definitions @overrides = overrides @resource_instance = resource_instance delegate = self %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 definitions.each do |name, context| raise Errors::ReservedContextName if respond_to? name define_singleton_method name do return @overrides[name] if @overrides.has_key? name return @persisted_memo[name] if @persisted_memo.has_key? name return @memo[name] if @memo.has_key? name write_memo = (context.persisted? ? @persisted_memo : @memo) write_memo[name] = context.call(@resource_instance, delegate) end define_singleton_method "#{name}=" do |value| @persisted_memo[name] = value end unless context.readonly? end freeze end def reset key @memo.delete(key) end def clear @memo.clear end def inspect to_s.chomp('>') << " memoed: #{@memo.keys.inspect}, persisted: #{@persisted_memo.keys.inspect}, overridden: #{@overrides.keys}" << '>' end end end
Version data entries
12 entries across 12 versions & 1 rubygems