Module: SettingMacro

Defined in:
lib/setting_macro.rb,
lib/setting_macro/version.rb

Constant Summary collapse

Undefined =
Object.new.freeze
VERSION =
"0.1.0"

Instance Method Summary collapse

Instance Method Details

#setting(name, default: nil) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/setting_macro.rb', line 6

def setting(name, default: nil)
  mod = Module.new
  mod.module_eval <<-RUBY, __FILE__, __LINE__ + 1
    def #{name}(value = ::SettingMacro::Undefined)
      if value == ::SettingMacro::Undefined
        defined?(@#{name}) && @#{name}
      else
        @#{name} = value
      end
    end
  RUBY

  mod.send(:define_method, :inherited) do |klass|
    super(klass)

    # Make sure we inherit properly
    klass.public_send(name, send(name))
  end

  mod.send(:define_singleton_method, :extended) do |base|
    # Set the default value
    base.public_send(name, default)
  end

  extend(mod)
end