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