Module: ActiveScaffold::Configurable
- Included in:
- ActiveScaffold::Config::Base, ActiveScaffold::Config::Base, ActiveScaffold::Config::Core::UserSettings, DataStructures::ActionColumns, DataStructures::Column, DataStructures::Columns, DataStructures::Set
- Defined in:
- lib/active_scaffold/configurable.rb
Overview
Exposes a configure
method that accepts a block and runs all contents of the block in two contexts, as opposed to the normal one. First, everything gets evaluated as part of the object including Configurable. Then, as a failover, missing methods and variables are evaluated in the original binding of the block.
Note that this only works with “barewords”. Constants, instance variables, and class variables are not currently supported in both contexts.
May add the given functionality at both the class and instance level. For the former, use extend
, and for the latter, use include
.
Instance Method Summary collapse
- #configure(&configuration_block) ⇒ Object
- #method_missing(name, *args) ⇒ Object
- #respond_to_missing?(name, include_all = false) ⇒ Boolean
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args) ⇒ Object
18 19 20 21 22 23 24 |
# File 'lib/active_scaffold/configurable.rb', line 18 def method_missing(name, *args) if @configuration_binding&.respond_to?(name, true) @configuration_binding.send(name, *args) else super end end |
Instance Method Details
#configure(&configuration_block) ⇒ Object
10 11 12 13 14 15 16 |
# File 'lib/active_scaffold/configurable.rb', line 10 def configure(&configuration_block) return unless configuration_block @configuration_binding = configuration_block.binding.eval('self') ret = instance_exec(self, &configuration_block) @configuration_binding = nil ret end |
#respond_to_missing?(name, include_all = false) ⇒ Boolean
26 27 28 29 30 31 32 |
# File 'lib/active_scaffold/configurable.rb', line 26 def respond_to_missing?(name, include_all = false) if defined? @configuration_binding @configuration_binding&.respond_to?(name, include_all) else super end end |