module Kennel::SettingsAsMethods::ClassMethods

Public Instance Methods

defaults(options) click to toggle source
# File lib/kennel/settings_as_methods.rb, line 33
def defaults(options)
  options.each do |name, block|
    validate_setting_exist name
    define_method name, &block
  end
end
settings(*names) click to toggle source
# File lib/kennel/settings_as_methods.rb, line 12
def settings(*names)
  duplicates = (@settings & names)
  if duplicates.any?
    raise ArgumentError, "Settings #{duplicates.map(&:inspect).join(", ")} are already defined"
  end

  overrides = ((instance_methods - self::SETTING_OVERRIDABLE_METHODS) & names)
  if overrides.any?
    raise ArgumentError, "Settings #{overrides.map(&:inspect).join(", ")} are already used as methods"
  end

  @settings.concat names

  names.each do |name|
    next if method_defined?(name)
    define_method name do
      raise_with_location ArgumentError, "'#{name}' on #{self.class} was not set or passed as option"
    end
  end
end

Private Instance Methods

inherited(child) click to toggle source
Calls superclass method
# File lib/kennel/settings_as_methods.rb, line 48
def inherited(child)
  super
  child.instance_variable_set(:@settings, (@settings || []).dup)
end
validate_setting_exist(name) click to toggle source
# File lib/kennel/settings_as_methods.rb, line 42
def validate_setting_exist(name)
  return if !@settings || @settings.include?(name)
  supported = @settings.map(&:inspect)
  raise ArgumentError, "Unsupported setting #{name.inspect}, supported settings are #{supported.join(", ")}"
end