diff --git a/lib/closed_struct.rb b/lib/closed_struct.rb index b28fae4..c0e8568 100644 --- a/lib/closed_struct.rb +++ b/lib/closed_struct.rb @@ -2,13 +2,13 @@ # Like OpenStruct, but raises an exception if you try to access a member that wasn't specified in the initializer. class ClosedStruct < OpenStruct - + def self.r_new(hash) closed_struct = ClosedStruct.new(hash) closed_struct.send(:recursive_initialize) closed_struct end - + def initialize(*args) if args.length == 1 and args.first.kind_of?(Hash) super(args.first) @@ -18,21 +18,8 @@ def initialize(*args) else raise ArgumentError, "invalid arguments: #{args.inspect}" end - @closed = true - end - - def new_ostruct_member(name) - if @closed - raise RuntimeError, "cannot add members to closed struct" - else - super - end - end - - def method_missing(name, *args) - raise NoMethodError, "undefined method '#{name}' for #{self}" end - + def id if @table.has_key?(:id) @table[:id] @@ -40,13 +27,13 @@ def id method_missing(:id) end end - + def to_h @table.dup end - + private - + def recursive_initialize @table.each do |k, v| if v.kind_of?(Hash) @@ -56,5 +43,5 @@ def recursive_initialize end end end - + end