module Infrastructure::Configurable

Public Class Methods

included(base) click to toggle source
# File lib/infrastructure/configurable.rb, line 4
def self.included(base)
  base.extend Forwardable
  base.send :def_delegators, :configuration, :assign, :fetch, :configure, :each
  base.send :def_delegators, :configuration, :load_config, :load_config_if_exists, :save_config
end

Public Instance Methods

after_assignment(*params) click to toggle source
# File lib/infrastructure/configurable.rb, line 38
def after_assignment(*params)
  callbacks[:after_assignment].each { |block| block.call *params }
end
after_configure(*params) click to toggle source
# File lib/infrastructure/configurable.rb, line 46
def after_configure(*params)
  callbacks[:after_configure].each { |block| block.call *params }
end
before_assignment(*params) click to toggle source
# File lib/infrastructure/configurable.rb, line 34
def before_assignment(*params)
  callbacks[:before_assignment].each { |block| block.call *params }
end
before_configure(*params) click to toggle source
# File lib/infrastructure/configurable.rb, line 42
def before_configure(*params)
  callbacks[:before_configure].each { |block| block.call *params }
end
callback(key, *params, &block) click to toggle source
# File lib/infrastructure/configurable.rb, line 14
def callback(key, *params, &block)
  callbacks[key] << block if block
  callbacks[key] += Array(params)
end
callbacks() click to toggle source
# File lib/infrastructure/configurable.rb, line 19
def callbacks
  @callbacks ||= { 
    before_configure: [],
    after_configure: [],
    before_assignment: [ 
      -> (key, value) { configuration_accessor key unless respond_to? key }
    ],
    after_assignment: []
  }
end
configuration() click to toggle source
# File lib/infrastructure/configurable.rb, line 10
def configuration
  @configuration ||= Configuration.new self
end
configuration_accessor(key) click to toggle source
# File lib/infrastructure/configurable.rb, line 30
def configuration_accessor(key)
  self.class.send(:define_method, key) { configuration.send(key) }
end