Sha256: 5d5cefa6281212d4ddac309e5a3c2708b94b444cfb7ac9ba0f0dcb68b639d0af

Contents?: true

Size: 803 Bytes

Versions: 17

Compression:

Stored size: 803 Bytes

Contents

module ROM
  # ROM's open structs are used for relations with empty schemas.
  # Such relations may exist in cases like using raw SQL strings
  # where schema was not explicitly defined using `view` DSL.
  #
  # @api public
  class OpenStruct
    IVAR = -> v { :"@#{v}" }

    # @api private
    def initialize(attributes)
      attributes.each do |key, value|
        instance_variable_set(IVAR[key], value)
      end
    end

    # @api private
    def respond_to_missing?(meth, include_private = false)
      super || instance_variables.include?(IVAR[meth])
    end

    private

    # @api private
    def method_missing(meth, *args, &block)
      ivar = IVAR[meth]

      if instance_variables.include?(ivar)
        instance_variable_get(ivar)
      else
        super
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 2 rubygems

Version Path
rom-mapper-1.2.1 lib/rom/open_struct.rb
rom-mapper-1.2.0 lib/rom/open_struct.rb
rom-mapper-1.1.0 lib/rom/open_struct.rb
rom-mapper-1.0.2 lib/rom/open_struct.rb
rom-mapper-1.0.1 lib/rom/open_struct.rb
rom-mapper-1.0.0 lib/rom/open_struct.rb
rom-mapper-1.0.0.rc2 lib/rom/open_struct.rb
rom-mapper-1.0.0.rc1 lib/rom/open_struct.rb
rom-mapper-1.0.0.beta3 lib/rom/open_struct.rb
rom-mapper-1.0.0.beta2 lib/rom/open_struct.rb
rom-repository-1.4.0 lib/rom/open_struct.rb
rom-mapper-1.0.0.beta1 lib/rom/open_struct.rb
rom-repository-1.3.3 lib/rom/open_struct.rb
rom-repository-1.3.2 lib/rom/open_struct.rb
rom-repository-1.3.1 lib/rom/open_struct.rb
rom-repository-1.3.0 lib/rom/open_struct.rb
rom-repository-1.2.0 lib/rom/open_struct.rb