Module: SimpleDSL
- Defined in:
- lib/rbbt/util/simpleDSL.rb
Overview
This class helps designing DSL in ruby based on method_missing. Class is initialize with a block of code or a file with the code, and it is given a method to be invoked instead of method missing. This class deals simply with making the method_missing alias and removing it and executing the block of file with code.
Defined Under Namespace
Classes: ConfigFileMissingError, NoRuby2Ruby
Instance Method Summary collapse
- #config(action = nil) ⇒ Object
-
#load_config(method = nil, file = nil, &block) ⇒ Object
Processes a DSL.
- #parse(method = nil, actions = nil, &block) ⇒ Object
Instance Method Details
#config(action = nil) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/rbbt/util/simpleDSL.rb', line 79 def config(action = nil) if action config = @config[action.to_sym] else config = @config[:DSL_action] end raise config if NoRuby2Ruby === config config end |
#load_config(method = nil, file = nil, &block) ⇒ Object
Processes a DSL. method
is the name of the method executed instead of method_missing. The code to be evaluated as a DSL is either specified in &block or in the file pointed by file
.
67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/rbbt/util/simpleDSL.rb', line 67 def load_config(method = nil, file = nil, &block) @config = {} if file raise ConfigFileMissingError.new "Config file '#{ file }' is missing" unless File.exist? file parse(method, file) end if block parse(method, block) end end |
#parse(method = nil, actions = nil, &block) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/rbbt/util/simpleDSL.rb', line 34 def parse(method = nil, actions = nil, &block) actions ||= block hook_method(method) # Execute @config ||= {} if actions.is_a? Proc begin require 'method_source' @config[@@method_name] = actions.source.split("\n")[1..-2] * "\n" rescue Exception Log.exception $! @config[@@method_name] = NoRuby2Ruby.new "The gem ruby2ruby is not installed. It will not work on ruby 1.9." end instance_eval &actions elsif File.exist?(actions) @config[@@method_name] = File.open(actions).read instance_eval Open.read(actions), actions end unhook_method end |