Class: Configurate::Proxy
- Inherits:
- BasicObject
- Defined in:
- lib/configurate/proxy.rb
Overview
Proxy object to support nested settings
Cavehats: Since this object is always true, adding a ? at the end returns the value, if found, instead of the proxy object. So instead of if settings.foo.bar use if settings.foo.bar? to check for boolean values, if settings.foo.bar.nil? to check for nil values and of course you can do if settings.foo.bar.present? to check for empty values if you’re in Rails. Call #get to actually return the value, commonly when doing settings.foo.bar.get || “default”. Also don’t use this in case statements since Module#=== can’t be fooled, again call #get.
If a setting ends with = it’s too called directly, just like with ?.
Instance Method Summary collapse
- #! ⇒ Object
- #_proxy? ⇒ Boolean
-
#initialize(lookup_chain) ⇒ Proxy
constructor
A new instance of Proxy.
-
#method_missing(setting, *args, &block) ⇒ Object
rubocop:disable Style/MethodMissingSuper we handle all calls rubocop:disable Style/MissingRespondToMissing we override respond_to? instead.
- #respond_to?(method, include_private = false) ⇒ Boolean
- #send(*args, &block) ⇒ Object (also: #public_send)
- #singleton_class ⇒ Object
-
#target(*args) ⇒ Object
(also: #get)
Get the setting at the current path, if found.
Constructor Details
#initialize(lookup_chain) ⇒ Proxy
Returns a new instance of Proxy.
19 20 21 22 |
# File 'lib/configurate/proxy.rb', line 19 def initialize lookup_chain @lookup_chain = lookup_chain @setting_path = SettingPath.new end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(setting, *args, &block) ⇒ Object
rubocop:disable Style/MethodMissingSuper we handle all calls rubocop:disable Style/MissingRespondToMissing we override respond_to? instead
72 73 74 75 76 77 78 79 80 |
# File 'lib/configurate/proxy.rb', line 72 def method_missing setting, *args, &block return target.public_send(setting, *args, &block) if target_respond_to? setting @setting_path << setting return target(*args) if @setting_path.question_action_or_setter? self end |
Instance Method Details
#! ⇒ Object
24 25 26 |
# File 'lib/configurate/proxy.rb', line 24 def ! !target end |
#_proxy? ⇒ Boolean
48 49 50 |
# File 'lib/configurate/proxy.rb', line 48 def _proxy? true end |
#respond_to?(method, include_private = false) ⇒ Boolean
52 53 54 |
# File 'lib/configurate/proxy.rb', line 52 def respond_to? method, include_private=false method == :_proxy? || target_respond_to?(method, include_private) end |
#send(*args, &block) ⇒ Object Also known as: public_send
56 57 58 |
# File 'lib/configurate/proxy.rb', line 56 def send *args, &block __send__(*args, &block) end |
#singleton_class ⇒ Object
61 62 63 64 65 66 67 |
# File 'lib/configurate/proxy.rb', line 61 def singleton_class target.singleton_class rescue ::TypeError class << self self end end |
#target(*args) ⇒ Object Also known as: get
Get the setting at the current path, if found. (see LookupChain#lookup)
85 86 87 88 89 |
# File 'lib/configurate/proxy.rb', line 85 def target *args return if @setting_path.empty? @lookup_chain.lookup @setting_path, *args end |