Class: Rulebow::System
- Inherits:
-
Module
- Object
- Module
- Rulebow::System
- Defined in:
- lib/rulebow/system.rb
Constant Summary collapse
- RULEBOOK_GLOB =
"{,.,_}{R,r}ulebook{,.rb}"
Instance Attribute Summary collapse
-
#digests ⇒ Hash
readonly
Digests [Hash].
-
#root ⇒ String
readonly
Project’s root directory.
-
#rulesets ⇒ Hash
readonly
Rulesets indexed by name.
-
#session ⇒ Hash
readonly
Session variables.
Instance Method Summary collapse
-
#home ⇒ String
Home directory.
-
#ignore(*globs) ⇒ Array<String>
Add paths to be ignored in file rules.
-
#ignore!(*globs) ⇒ Array<String>
Replace globs in ignore list.
-
#import(*globs) ⇒ void
Import from another file, or glob of files, relative to project root.
-
#initialize(options = {}) ⇒ System
constructor
Initialize new System instance.
- #inspect ⇒ Object
-
#parse_ruleset_name(name) ⇒ Array
private
Parse out a ruleset’s name from it’s ruleset dependencies.
-
#rulebook ⇒ Object
Rulebook file.
-
#ruleset(name_and_chain, &block) ⇒ Ruleset
Rulesets provide a separate space for rules which are only run when the ruleset name is specifically given.
-
#state_file ⇒ Object
State file.
Constructor Details
#initialize(options = {}) ⇒ System
Initialize new System instance.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/rulebow/system.rb', line 18 def initialize(={}) extend self extend ShellUtils @root = [:root] || Dir.pwd @ignore = [:ignore] || [] #Ignore.new @rulebook = [:rulebook] @state_file = [:statefile] @session = OpenStruct.new @scripts = [] @rules = [] #@facts = [] @digests = {} @rulesets = {} import(*rulebook) end |
Instance Attribute Details
#digests ⇒ Hash (readonly)
Digests [Hash]
47 48 49 |
# File 'lib/rulebow/system.rb', line 47 def digests @digests end |
#root ⇒ String (readonly)
Project’s root directory. [String]
41 42 43 |
# File 'lib/rulebow/system.rb', line 41 def root @root end |
#rulesets ⇒ Hash (readonly)
Rulesets indexed by name. [Hash]
50 51 52 |
# File 'lib/rulebow/system.rb', line 50 def rulesets @rulesets end |
#session ⇒ Hash (readonly)
Session variables. [Hash]
44 45 46 |
# File 'lib/rulebow/system.rb', line 44 def session @session end |
Instance Method Details
#home ⇒ String
Home directory.
131 132 133 |
# File 'lib/rulebow/system.rb', line 131 def home @home ||= File.('~') end |
#ignore(*globs) ⇒ Array<String>
Add paths to be ignored in file rules.
108 109 110 111 |
# File 'lib/rulebow/system.rb', line 108 def ignore(*globs) @ignore.concat(globs) unless globs.empty? @ignore end |
#ignore!(*globs) ⇒ Array<String>
Replace globs in ignore list.
118 119 120 121 |
# File 'lib/rulebow/system.rb', line 118 def ignore!(*globs) @ignore.replace(globs) @ignore end |
#import(*globs) ⇒ void
Should importing be relative to the importing file?
This method returns an undefined value.
Import from another file, or glob of files, relative to project root.
88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/rulebow/system.rb', line 88 def import(*globs) globs.each do |glob| #if File.relative?(glob) # dir = Dir.pwd #session.root #File.dirname(caller[0]) # glob = File.join(dir, glob) #end Dir[glob].each do |file| next unless File.file?(file) # add warning next if @scripts.include?(file) @scripts << file module_eval(File.read(file), file) end end end |
#inspect ⇒ Object
124 125 126 |
# File 'lib/rulebow/system.rb', line 124 def inspect "#<Rulebow::System>" end |
#parse_ruleset_name(name) ⇒ Array (private)
Parse out a ruleset’s name from it’s ruleset dependencies.
140 141 142 143 144 145 146 147 148 149 |
# File 'lib/rulebow/system.rb', line 140 def parse_ruleset_name(name) if Hash === name raise ArgumentError if name.size > 1 list = [name.values].flatten.map{ |b| b.to_sym } name = name.keys.first else list = [] end return name.to_sym, list end |
#rulebook ⇒ Object
Rulebook file.
53 54 55 |
# File 'lib/rulebow/system.rb', line 53 def rulebook @rulebook ||= Dir[File.join(root, RULEBOOK_GLOB)].first end |
#ruleset(name_and_chain, &block) ⇒ Ruleset
Rulesets provide a separate space for rules which are only run when the ruleset name is specifically given.
71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/rulebow/system.rb', line 71 def ruleset(name_and_chain, &block) name, chain = parse_ruleset_name(name_and_chain) if @rulesets.key?(name) ruleset = @rulesets[name] ruleset.update(chain, &block) else ruleset = Ruleset.new(self, name_and_chain, &block) @rulesets[name] = ruleset end ruleset end |
#state_file ⇒ Object
State file.
58 59 60 |
# File 'lib/rulebow/system.rb', line 58 def state_file @state_file ||= rulebook.chomp('.rb') + '.state' end |