class HaveAPI::Common

Attributes

custom_attrs[RW]

Public Class Methods

check_build(msg) { || ... } click to toggle source
# File lib/haveapi/common.rb, line 35
def check_build(msg)
  yield
rescue StandardError => e
  raise BuildError.new(msg, e)
end
has_attr(name, default = nil) click to toggle source
# File lib/haveapi/common.rb, line 6
def has_attr(name, default = nil)
  @custom_attrs ||= []
  @custom_attrs << name

  instance_variable_set("@#{name}", default)

  self.class.send(:define_method, name) do |value = nil|
    if value.nil?
      instance_variable_get("@#{name}")
    else
      instance_variable_set("@#{name}", value)
    end
  end
end
inherit_attrs(subclass) click to toggle source

Called before subclass defines it’s attributes (before has_attr or custom attr setting), so copy defaults from parent and let it override it.

# File lib/haveapi/common.rb, line 23
def inherit_attrs(subclass)
  return unless @custom_attrs

  subclass.custom_attrs = []

  @custom_attrs.each do |attr|
    # puts "#{subclass}: Inherit #{attr} = #{instance_variable_get("@#{attr}")}"
    subclass.method(attr).call(instance_variable_get("@#{attr}"))
    subclass.custom_attrs << attr
  end
end