Sha256: 1a79e091decb7ffc5a6610cdbd0b62c80dacf9499b8312e02c5fa1cd5248b6cb
Contents?: true
Size: 1.23 KB
Versions: 1
Compression:
Stored size: 1.23 KB
Contents
require "mighty_struct/version" class MightyStruct def self.define_property_accessors!(mighty_struct, object) if object.is_a?(Hash) object.keys.each do |_key| class_eval <<-EORUBY, __FILE__, __LINE__ + 1 def #{_key} value = @object[#{_key.is_a?(Symbol) ? ':' << _key.to_s : '"' << _key << '"'}] self.class.new?(value) ? self.class.new(value) : value end EORUBY end end end def self.new?(object) object.is_a?(Array) || object.is_a?(Hash) end def initialize(object) unless self.class.new?(object) raise ArgumentError.new("Cannot create a an instance of #{self.class} for the given object!") end self.class.define_property_accessors!(self, @object = object) end # # last line of defense # def method_missing(method_name, *arguments, &block) if @object.respond_to?(method_name) result = @object.send(method_name, *arguments, &block) # ensure that results of called methods are mighty structs again self.class.new?(result) ? self.class.new(result) : result else super end end def respond_to_missing?(method_name, include_private = false) @object.respond_to?(method_name) || super end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mighty_struct-0.1.2 | lib/mighty_struct.rb |