class Stark::Struct
Public Class Methods
attr_accessor(*attrs)
click to toggle source
Calls superclass method
# File lib/stark/struct.rb, line 46 def self.attr_accessor(*attrs) attrs.each do |a| n = field_number fields[n] = a self.field_number n + 1 end super end
field_number(n = nil)
click to toggle source
# File lib/stark/struct.rb, line 55 def self.field_number(n = nil) @field_number = n if n @field_number ||= 1 end
fields()
click to toggle source
# File lib/stark/struct.rb, line 42 def self.fields @fields ||= {} end
new(fields={})
click to toggle source
# File lib/stark/struct.rb, line 3 def initialize(fields={}) fields.each do |k,v| send(:"#{k}=", v) if respond_to?(:"#{k}=") end end
Public Instance Methods
[](*args)
click to toggle source
# File lib/stark/struct.rb, line 9 def [](*args) values = [] args.each do |a| case a when Fixnum n = self.class.fields[a] values << (n ? send(n) : nil) when Range values += self[*a.to_a] when String, Symbol values << send(a) end end values = values.first if values.size == 1 values end
to_hash()
click to toggle source
# File lib/stark/struct.rb, line 26 def to_hash {}.tap do |hash| self.class.fields.each do |idx,name| v = send name case v when Array hash[name] = v.map {|e| e.respond_to?(:to_hash) ? e.to_hash : e} when Struct hash[name] = v.to_hash else hash[name] = v if v end end end end