Sha256: 6c028434a9c29c4d639389819b871ee73f048c900aae06fde6f80548ae5e6329

Contents?: true

Size: 657 Bytes

Versions: 1

Compression:

Stored size: 657 Bytes

Contents

require 'ostruct'

class ClosedStruct < OpenStruct # :nodoc:
  
  def initialize(*args)
    if args.length == 1
      super(args.first)
    else
      h = args.inject({}){ |memo, k| memo[k] = nil; memo }
      super(h)
    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]
    else
      method_missing(:id)
    end
  end
  
  def to_h
    @table.dup
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cjbottaro-app_config-1.0.0 lib/closed_struct.rb