class Croudia::Base

Public Class Methods

attr_object_reader(attrs) click to toggle source

@param [Hash] attrs { name: Class, name: Class, … }

# File lib/croudia/base.rb, line 13
def attr_object_reader(attrs)
  attrs.each_pair do |path, klass|
    path = [path] unless path.is_a?(Array)
    attr = path.join('_').to_sym

    define_method(path.last) do
      object = instance_variable_get("@#{attr}")

      unless object
        object_attrs = @attrs
        path.each { |p| object_attrs = object_attrs[p.to_s] }

        object = if object_attrs.nil?
          nil
        elsif klass.is_a?(Array)
          klass = klass.shift
          object_attrs.map { |o| klass.new(o) }
        else
          klass.new(object_attrs)
        end

        instance_variable_set("@#{attr}", object)
      end

      object
    end
  end
end
attr_reader(*attrs) click to toggle source
# File lib/croudia/base.rb, line 4
def attr_reader(*attrs)
  attrs.each do |attr|
    define_method(attr) do
      @attrs[attr.to_s] || @attrs[attr.to_sym]
    end
  end
end
new(attrs = {}) click to toggle source

Initialize a new object

@param [Hash] attrs @return [Croudia::Base]

# File lib/croudia/base.rb, line 47
def initialize(attrs = {})
  @attrs = attrs
end

Public Instance Methods

[](name) click to toggle source

Fetch an attribute

@param [String, Symobol] name

# File lib/croudia/base.rb, line 54
def [](name)
  __send__(name.to_sym)
rescue NoMethodError
  nil
end
attrs() click to toggle source

@return [Hash]

# File lib/croudia/base.rb, line 61
def attrs
  @attrs
end
Also aliased as: to_h, to_hash
inspect() click to toggle source
# File lib/croudia/base.rb, line 67
def inspect
  "#<#{self.class} #{@attrs.inspect}>"
end
to_h()
Alias for: attrs
to_hash()
Alias for: attrs