Sha256: c6a31ea5118e4502a73cd568a113285f588ad97b254e302878faff20e57fb562
Contents?: true
Size: 886 Bytes
Versions: 1
Compression:
Stored size: 886 Bytes
Contents
module Structure def self.included(base) base.extend(ClassMethods) base.instance_variable_set(:@value_names, []) end def values vals = {} self.class.value_names.each { |name| vals[name] = self.send(name) } vals end def to_h Hash[values.dup.map { |k, v| [k, v.respond_to?(:to_h) ? v.to_h : v] } ] end def ==(other) values == other.values end alias :eql? :== def inspect str = "#<#{self.class}" first = true values.each do |k, v| str << ',' unless first first = false str << " #{k}=#{v.inspect}" end str << '>' end alias :to_s :inspect module ClassMethods attr :value_names def inherited(subclass) subclass.instance_variable_set(:@value_names, value_names.dup) end def value(name, &blk) define_method(name, &blk) @value_names << name end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
structure-0.26.0 | lib/structure.rb |