Class: Yao::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/yao/config.rb

Constant Summary collapse

HOOK_RENEW_CLIENT_KEYS =
%i(tenant_name username password auth_url debug debug_record_response)

Instance Method Summary collapse

Instance Method Details

#_configuration_defaultsObject



3
4
5
# File 'lib/yao/config.rb', line 3

def _configuration_defaults
  @_configuration_defaults ||= {}
end

#_configuration_hooksObject



7
8
9
# File 'lib/yao/config.rb', line 7

def _configuration_hooks
  @_configuration_hooks ||= {}
end

#_configuration_hooks_queueObject



11
12
13
# File 'lib/yao/config.rb', line 11

def _configuration_hooks_queue
  @_configuration_hooks_queue ||= []
end

#configurationObject



15
16
17
# File 'lib/yao/config.rb', line 15

def configuration
  @configuration ||= {}
end

#delay_hook=(v) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/yao/config.rb', line 20

def delay_hook=(v)
  @delay_hook = v
  if !v and !_configuration_hooks_queue.empty?
    _configuration_hooks_queue.each do |n, val|
      _configuration_hooks[n].call(val) if _configuration_hooks[n]
    end
    # Authorization process should have special hook
    # and should run last
    unless (_configuration_hooks_queue.map(&:first) & HOOK_RENEW_CLIENT_KEYS).empty?
      Yao::Auth.try_new
    end

    _configuration_hooks_queue.clear
  end
end

#delay_hook?Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/yao/config.rb', line 36

def delay_hook?
  @delay_hook
end

#param(name, default, &hook) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/yao/config.rb', line 40

def param(name, default, &hook)
  raise("Duplicate definition of #{name}") if self.respond_to?(name)

  name = name.to_sym
  _configuration_defaults[name] = default
  _configuration_hooks[name] = hook if block_given?
  self.define_singleton_method(name) do |*a|
    case a.size
    when 0
      configuration[name] || _configuration_defaults[name]
    when 1
      set(name, a.first)
    else
      raise ArgumentError, "wrong number of arguments (#{a.size} for 0, 1)"
    end
  end
end

#set(name, value) ⇒ Object



58
59
60
61
62
63
64
65
66
67
# File 'lib/yao/config.rb', line 58

def set(name, value)
  raise("Undefined config key #{name}") unless self.respond_to?(name)
  configuration[name.to_sym] = value
  if delay_hook?
    _configuration_hooks_queue.push([name, value])
  else
    _configuration_hooks[name].call(value) if _configuration_hooks[name]
  end
  value
end