Module: Kennel::SettingsAsMethods::ClassMethods

Defined in:
lib/kennel/settings_as_methods.rb

Instance Method Summary collapse

Instance Method Details

#defaults(options) ⇒ Object



34
35
36
37
38
39
# File 'lib/kennel/settings_as_methods.rb', line 34

def defaults(options)
  options.each do |name, block|
    validate_setting_exist name
    define_method name, &block
  end
end

#settings(*names) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 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
      message = "Trying to call #{name} for #{self.class} but it was never set or passed as option"
      raise_with_location ArgumentError, message
    end
  end
end