class Tablets::Utils::Config

Config utility. Allows to write configs in declarative form. And fetch values with defaults:

config = Config.new do
  some_var 32
  another_var 42

  some_callback do |arg|
    do_something_with arg
  end
end

config.get(:some_var) #=> 32
config.get(:non_existent_var) #=> ArgumentError
config.get(:non_existent_var, 'default') #=> 'default'

config.call(:some_callback, 'my_arg') { |arg| default_action arg }

Public Class Methods

new(&block) click to toggle source

Initializes config with block Block is optional and can be applied later

# File lib/tablets/utils/config.rb, line 26
def initialize(&block)
  @hash = {}

  apply(&block) unless block.nil?
end

Public Instance Methods

apply(&block) click to toggle source

Executes block in config context

# File lib/tablets/utils/config.rb, line 33
def apply(&block)
  instance_eval(&block)
end
call(name, *params, &default) click to toggle source

Calls callback If no calbback defined, calls default If no default raises ArgumentError

# File lib/tablets/utils/config.rb, line 62
def call(name, *params, &default)
  callback = @hash[name][0] if @hash[name]

  if !callback.nil?
    callback.call(*params)
  elsif !default.nil?
    default.call(*params)
  else
    fail ArgumentError, "Callback :#{name} is not registered."
  end
end
get(name, default = nil, &default_block) click to toggle source

Returns value If no value defined, returns default If no default raises ArgumentError

# File lib/tablets/utils/config.rb, line 45
def get(name, default = nil, &default_block)
  value = @hash[name][0] if @hash[name]

  if !value.nil?
    value
  elsif !default.nil?
    default
  elsif !default_block.nil?
    default_block.call
  else
    fail ArgumentError, "Value :#{name} is not set."
  end
end
has?(name) click to toggle source

Checks if value or callback is defined with specified name

# File lib/tablets/utils/config.rb, line 38
def has?(name)
  @hash[name].present?
end

Private Instance Methods

method_missing(name, *args, &block) click to toggle source

Gathers all calls

# File lib/tablets/utils/config.rb, line 77
def method_missing(name, *args, &block)
  @hash[name] = [*args, block]
end