module RSpec::Core::HashImitatable

Mixin that makes the including class imitate a hash for backwards compatibility. The including class should use ‘attr_accessor` to declare attributes. @private

Public Class Methods

included(klass) click to toggle source
# File lib/rspec/core/metadata.rb, line 350
def self.included(klass)
  klass.extend ClassMethods
end

Public Instance Methods

[](key) click to toggle source
# File lib/rspec/core/metadata.rb, line 388
def [](key)
  issue_deprecation(:[], key)

  if directly_supports_attribute?(key)
    get_value(key)
  else
    extra_hash_attributes[key]
  end
end
[]=(key, value) click to toggle source
# File lib/rspec/core/metadata.rb, line 398
def []=(key, value)
  issue_deprecation(:[]=, key, value)

  if directly_supports_attribute?(key)
    set_value(key, value)
  else
    extra_hash_attributes[key] = value
  end
end
to_h() click to toggle source
# File lib/rspec/core/metadata.rb, line 354
def to_h
  hash = extra_hash_attributes.dup

  self.class.hash_attribute_names.each do |name|
    hash[name] = __send__(name)
  end

  hash
end

Private Instance Methods

directly_supports_attribute?(name) click to toggle source
# File lib/rspec/core/metadata.rb, line 414
def directly_supports_attribute?(name)
  self.class.hash_attribute_names.include?(name)
end
extra_hash_attributes() click to toggle source
# File lib/rspec/core/metadata.rb, line 410
def extra_hash_attributes
  @extra_hash_attributes ||= {}
end
get_value(name) click to toggle source
# File lib/rspec/core/metadata.rb, line 418
def get_value(name)
  __send__(name)
end
hash_for_delegation() click to toggle source
# File lib/rspec/core/metadata.rb, line 426
def hash_for_delegation
  to_h
end
issue_deprecation(_method_name, *_args) click to toggle source
# File lib/rspec/core/metadata.rb, line 430
def issue_deprecation(_method_name, *_args)
  # no-op by default: subclasses can override
end
set_value(name, value) click to toggle source
# File lib/rspec/core/metadata.rb, line 422
def set_value(name, value)
  __send__(:"#{name}=", value)
end