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) ⇒ 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) ⇒ Object
21 22 23 24 25 26 27 |
# File 'lib/active_scaffold/configurable.rb', line 21 def method_missing(name, *) if @configuration_binding&.respond_to?(name, true) # rubocop:disable Lint/RedundantSafeNavigation @configuration_binding.send(name, *) else super end end |
Instance Method Details
#configure(&configuration_block) ⇒ Object
12 13 14 15 16 17 18 19 |
# File 'lib/active_scaffold/configurable.rb', line 12 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
29 30 31 32 33 34 35 |
# File 'lib/active_scaffold/configurable.rb', line 29 def respond_to_missing?(name, include_all = false) if defined? @configuration_binding @configuration_binding&.respond_to?(name, include_all) else super end end |