Sha256: 11500e1b8d864663fc793752e8f9149b30e7872eca6c1a7442b8bf310364efb6

Contents?: true

Size: 848 Bytes

Versions: 1

Compression:

Stored size: 848 Bytes

Contents

# frozen_string_literal: false

require 'ostruct'

class OpenStruct

  def initialize(hash = nil, &block)
    @table = if block && block.arity == 2
               Hash.new(&block)
             else
               {}
             end

    if hash
      hash.each do |key, val|
        @table[key.to_sym] = val
        new_ostruct_member(key)
      end
    end

    yield self if block && block.arity == 1
  end

  def [](key)
    key = key.to_sym unless key.is_a?(Symbol)
    @table[key]
  end

  def []=(key, val)
    raise TypeError, "can't modify frozen #{self.class}", caller(1) if frozen?

    key = key.to_sym unless key.is_a?(Symbol)
    @table[key] = val
  end

  def attributes
    each_pair.with_object({}) { |(key, val), hash| hash[key] = val }
  end

  def replace(args)
    args.each_pair { |key, val| send("#{key}=", val) }
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lite-ruby-1.0.2 lib/lite/ruby/open_struct.rb