Sha256: d3a8cf210557f70a969c2152419364084e18da29c5a54de3efd7cf0822a91336

Contents?: true

Size: 952 Bytes

Versions: 10

Compression:

Stored size: 952 Bytes

Contents

# frozen_string_literal: false

if Lite::Ruby.configuration.monkey_patches.include?('open_struct')
  require 'ostruct'

  class OpenStruct

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

      hash&.each do |key, val|
        @table[key.to_sym] = val
        new_ostruct_member(key)
      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
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
lite-ruby-1.0.24 lib/lite/ruby/open_struct.rb
lite-ruby-1.0.23 lib/lite/ruby/open_struct.rb
lite-ruby-1.0.22 lib/lite/ruby/open_struct.rb
lite-ruby-1.0.21 lib/lite/ruby/open_struct.rb
lite-ruby-1.0.20 lib/lite/ruby/open_struct.rb
lite-ruby-1.0.19 lib/lite/ruby/open_struct.rb
lite-ruby-1.0.18 lib/lite/ruby/open_struct.rb
lite-ruby-1.0.17 lib/lite/ruby/open_struct.rb
lite-ruby-1.0.16 lib/lite/ruby/open_struct.rb
lite-ruby-1.0.15 lib/lite/ruby/open_struct.rb