class Eligible::EligibleObject
Attributes
Public Class Methods
Source
# File lib/eligible/eligible_object.rb, line 23 def self.construct_from(values, api_key = nil) obj = new(values[:eligible_id], api_key) obj.refresh_from(values, api_key) obj end
Source
# File lib/eligible/eligible_object.rb, line 13 def initialize(id = nil, api_key = nil) @api_key = api_key @values = {} # This really belongs in APIResource, but not putting it there allows us # to have a unified inspect method @unsaved_values = Set.new @transient_values = Set.new self.eligible_id = id if id end
Public Instance Methods
Source
# File lib/eligible/eligible_object.rb, line 54 def [](k) k = k.to_sym if k.is_a?(String) @values[k] end
Source
# File lib/eligible/eligible_object.rb, line 59 def []=(k, v) send(:"#{k}=", v) end
Source
# File lib/eligible/eligible_object.rb, line 79 def each(&blk) @values.each(&blk) end
Source
# File lib/eligible/eligible_object.rb, line 83 def error keys.include?(:error) ? @values[:error] : nil end
Source
# File lib/eligible/eligible_object.rb, line 29 def refresh_from(values, api_key, partial = false) @api_key = api_key removed = partial ? Set.new : Set.new(@values.keys - values.keys) added = Set.new(values.keys - @values.keys) # Wipe old state before setting new. This is useful for e.g. updating a # customer, where there is no persistent card parameter. Mark those values # which don't persist as transient instance_eval do remove_accessors(removed) add_accessors(added) end removed.each do |k| @values.delete(k) @transient_values.add(k) @unsaved_values.delete(k) end values.each do |k, v| @values[k] = v @transient_values.delete(k) @unsaved_values.delete(k) end end
Source
# File lib/eligible/eligible_object.rb, line 71 def to_json Eligible::JSON.dump(@values) end
Protected Instance Methods
Source
# File lib/eligible/eligible_object.rb, line 104 def add_accessors(keys) metaclass.instance_eval do keys.each do |k| next if @@permanent_attributes.include?(k) k_eq = :"#{k}=" define_method(k) { @values[k] } define_method(k_eq) do |v| @values[k] = v @unsaved_values.add(k) end end end end
Source
# File lib/eligible/eligible_object.rb, line 89 def metaclass class << self; self; end end
Source
# File lib/eligible/eligible_object.rb, line 93 def remove_accessors(keys) metaclass.instance_eval do keys.each do |k| next if @@permanent_attributes.include?(k) k_eq = :"#{k}=" remove_method(k) if method_defined?(k) remove_method(k_eq) if method_defined?(k_eq) end end end