class StaticStruct::Structure
Attributes
static_methods[R]
Public Class Methods
new(hash)
click to toggle source
# File lib/static_struct/structure.rb, line 7 def initialize(hash) @static_methods = SortedSet.new define_structure(hash) end
Public Instance Methods
==(other)
click to toggle source
# File lib/static_struct/structure.rb, line 24 def ==(other) current_state == other.current_state end
each() { |m, public_send(m)| ... }
click to toggle source
# File lib/static_struct/structure.rb, line 28 def each static_methods.each do |m| yield m, public_send(m) end end
inspect()
click to toggle source
# File lib/static_struct/structure.rb, line 20 def inspect to_s end
to_s()
click to toggle source
# File lib/static_struct/structure.rb, line 12 def to_s joined_line = [self.class, current_state].map(&:to_s).select do |str| str.size > 0 end.join(' ') "#<#{joined_line}>" end
Protected Instance Methods
current_state()
click to toggle source
# File lib/static_struct/structure.rb, line 36 def current_state static_methods.map do |method| "#{method}=#{public_send(method)}" end.join(' ') end
Private Instance Methods
define_structure(hash)
click to toggle source
# File lib/static_struct/structure.rb, line 44 def define_structure(hash) Hash(hash).each do |key, val| safe_define_method(key, val) end end
safe_define_method(method, return_value)
click to toggle source
# File lib/static_struct/structure.rb, line 50 def safe_define_method(method, return_value) if respond_to?(method) fail MethodAlreadyDefinedError, "`#{method}' is already defined for #{self}" end static_methods.add(method.to_s) case when return_value.is_a?(Array) define_singleton_method(method) do return_value.map do |array_value| if array_value.respond_to?(:to_hash) Structure.new(array_value) else array_value end end end when return_value.is_a?(Hash) define_singleton_method(method) { Structure.new(return_value) } when return_value.respond_to?(:to_hash) define_singleton_method(method) { Structure.new(Hash(return_value)) } else define_singleton_method(method) { return_value } end end