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
- #respond_to?(method, include_private = false) ⇒ Boolean
- #send(*args, &block) ⇒ Object (also: #public_send)
-
#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.
17 18 19 20 |
# File 'lib/configurate/proxy.rb', line 17 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
58 59 60 61 62 63 64 65 66 |
# File 'lib/configurate/proxy.rb', line 58 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
22 23 24 |
# File 'lib/configurate/proxy.rb', line 22 def ! !target end |
#_proxy? ⇒ Boolean
45 46 47 |
# File 'lib/configurate/proxy.rb', line 45 def _proxy? true end |
#respond_to?(method, include_private = false) ⇒ Boolean
49 50 51 |
# File 'lib/configurate/proxy.rb', line 49 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
53 54 55 |
# File 'lib/configurate/proxy.rb', line 53 def send *args, &block __send__(*args, &block) end |
#target(*args) ⇒ Object Also known as: get
Get the setting at the current path, if found. (see LookupChain#lookup)
70 71 72 73 74 |
# File 'lib/configurate/proxy.rb', line 70 def target *args return if @setting_path.empty? @lookup_chain.lookup @setting_path, *args end |