module HOALife::Resources::HasNestedObject

Wrap an attribute in an object

Public Instance Methods

add_nested_object_methods!(key, class_name) click to toggle source

rubocop:disable Metrics/MethodLength

Calls superclass method
# File lib/hoalife/resources/has_nested_object.rb, line 23
def add_nested_object_methods!(key, class_name)
  define_method key do
    raw_value = super()

    begin
      klass = Object.const_get("HOALife::#{class_name}")
    rescue NameError
      raise HOALife::UndefinedResourceError,
            "HOALife::#{class_name} not defined"
    end

    if raw_value.is_a?(Array)
      raw_value.collect { |value| klass.new(value) }
    elsif raw_value.is_a?(Hash)
      klass.new(raw_value)
    else
      raw_value
    end
  end
end
has_nested_object(key, class_name) click to toggle source

rubocop:disable Naming/PredicateName

# File lib/hoalife/resources/has_nested_object.rb, line 11
def has_nested_object(key, class_name)
  @has_nested_objects ||= {}

  @has_nested_objects[key] = class_name

  add_nested_object_methods!(key, class_name)
end