module DslOrganizer::Core
Load methods for control dsl commands.
Attributes
dsl_commands[R]
Public Instance Methods
dictionary(commands: [])
click to toggle source
@syntax
commands: { <command>:<class executor> }
@example
commands: { after: AfterHook, before: BeforeHook }
@return [Module]
# File lib/dsl_organizer/core.rb, line 9 def dictionary(commands: []) CommandContainer.reset @dsl_commands = commands validate_commands dsl_module = new_dsl_module(dsl_operator: new_dsl_operator) Module.new do singleton_class.send :define_method, :included do |host_class| host_class.extend dsl_module end end end
Private Instance Methods
new_dsl_module(dsl_operator:)
click to toggle source
# File lib/dsl_organizer/core.rb, line 40 def new_dsl_module(dsl_operator:) commands = dsl_commands Module.new do define_method :used_dsl do @used_dsl ||= dsl_operator.new end define_method :dsl_commands do @dsl_commands ||= commands end define_method :dsl_container do CommandContainer end def run(&block) used_dsl.instance_eval(&block) end end end
new_dsl_operator()
click to toggle source
# File lib/dsl_organizer/core.rb, line 61 def new_dsl_operator commands = dsl_commands Class.new do commands.each do |command| define_method command do |values = [], &block| unless ExportContainer[command].method_defined? :call raise( Errors::MethodCallNotFound, 'Not found `call` method for the' \ " `#{ExportContainer[command].name}` class and" \ " the `#{command}` command" ) end command_instance = CommandContainer[command] || ExportContainer[command].new unless CommandContainer[command] CommandContainer[command] = command_instance end command_instance.call(*values, &block) end end end end
run(&block)
click to toggle source
# File lib/dsl_organizer/core.rb, line 55 def run(&block) used_dsl.instance_eval(&block) end
validate_commands()
click to toggle source
# File lib/dsl_organizer/core.rb, line 27 def validate_commands if dsl_commands.nil? || dsl_commands.empty? raise Errors::DslCommandsNotFound, 'Add DSL commands for work' end dsl_commands.each do |command| unless ExportContainer.real_container.key?(command) raise(Errors::DslCommandsNotFound, "Add an executor for the `#{command}` command for work") end end end