class SolveBio::SolveObject
Public Class Methods
construct_from(values)
click to toggle source
# File lib/solvebio/solve_object.rb, line 19 def self.construct_from(values) self.new(values[:id]).refresh_from(values) end
new(id=nil)
click to toggle source
# File lib/solvebio/solve_object.rb, line 11 def initialize(id=nil) @values = {} # store manually updated values for partial updates @unsaved_values = Set.new @values[:id] = id if id end
Public Instance Methods
[](k)
click to toggle source
# File lib/solvebio/solve_object.rb, line 64 def [](k) @values[k.to_sym] end
[]=(k, v)
click to toggle source
# File lib/solvebio/solve_object.rb, line 68 def []=(k, v) send(:"#{k}=", v) end
as_json(*a)
click to toggle source
# File lib/solvebio/solve_object.rb, line 84 def as_json(*a) @values.as_json(*a) end
each(&blk)
click to toggle source
# File lib/solvebio/solve_object.rb, line 95 def each(&blk) @values.each(&blk) end
inspect()
click to toggle source
# File lib/solvebio/solve_object.rb, line 45 def inspect ident = (self.respond_to?(:id) && !self.id.nil?) ? " id=#{self.id}" : "" if self.respond_to?(:full_name) && !self.full_name.nil? ident += " full_name=#{self.full_name}" end "#<#{self.class}:0x#{self.object_id.to_s(16)}#{ident}> JSON: " + JSON.pretty_generate(@values) end
keys()
click to toggle source
# File lib/solvebio/solve_object.rb, line 72 def keys @values.keys end
refresh_from(values, partial=false)
click to toggle source
# File lib/solvebio/solve_object.rb, line 23 def refresh_from(values, partial=false) removed = partial ? Set.new : Set.new(@values.keys - values.keys) added = Set.new(values.keys - @values.keys) instance_eval do remove_accessors(removed) add_accessors(added) end removed.each do |k| @values.delete(k) @unsaved_values.delete(k) end values.each do |k, v| @values[k] = Util.to_solve_object(v) @unsaved_values.delete(k) end self end
respond_to?(symbol)
click to toggle source
Calls superclass method
# File lib/solvebio/solve_object.rb, line 100 def respond_to?(symbol) @values.has_key?(symbol) || super end
to_hash()
click to toggle source
# File lib/solvebio/solve_object.rb, line 88 def to_hash @values.inject({}) do |acc, (key, value)| acc[key] = value.respond_to?(:to_hash) ? value.to_hash : value acc end end
to_json(*a)
click to toggle source
# File lib/solvebio/solve_object.rb, line 80 def to_json(*a) JSON.generate(@values) end
to_s()
click to toggle source
# File lib/solvebio/solve_object.rb, line 55 def to_s if self.respond_to?(:tabulate) self.tabulate(@values) else # No equivalent of Python's json sort_keys? JSON.pretty_generate(@values, :indent => ' ') end end
values()
click to toggle source
# File lib/solvebio/solve_object.rb, line 76 def values @values.values end
Protected Instance Methods
add_accessors(keys)
click to toggle source
# File lib/solvebio/solve_object.rb, line 122 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| if v == "" raise ArgumentError.new( "You cannot set #{k} to an empty string." + "We interpret empty strings as nil in requests." + "You may set #{self}.#{k} = nil to delete the property.") end @values[k] = v @unsaved_values.add(k) end end end end
metaclass()
click to toggle source
# File lib/solvebio/solve_object.rb, line 107 def metaclass class << self; self; end end
method_missing(name, *args)
click to toggle source
Calls superclass method
# File lib/solvebio/solve_object.rb, line 142 def method_missing(name, *args) if name.to_s.end_with?('=') attr = name.to_s[0...-1].to_sym add_accessors([attr]) begin mth = method(name) rescue NameError raise NoMethodError.new("Cannot set #{attr} on this object. HINT: you can't set: #{@@permanent_attributes.to_a.join(', ')}") end return mth.call(args[0]) else return @values[name] if @values.has_key?(name) end super end
remove_accessors(keys)
click to toggle source
# File lib/solvebio/solve_object.rb, line 111 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
respond_to_missing?(symbol, include_private = false)
click to toggle source
Calls superclass method
# File lib/solvebio/solve_object.rb, line 159 def respond_to_missing?(symbol, include_private = false) @values && @values.has_key?(symbol) || super end