class Rulebow::System
Constants
- RULEBOOK_GLOB
Attributes
digests[R]
Digests [Hash]
root[R]
Project’s root directory. [String]
rulesets[R]
Rulesets indexed by name. [Hash]
session[R]
Session variables. [Hash]
Public Class Methods
new(options={})
click to toggle source
Initialize new System
instance.
# File lib/rulebow/system.rb, line 18 def initialize(options={}) extend self extend ShellUtils @root = options[:root] || Dir.pwd @ignore = options[:ignore] || [] #Ignore.new @rulebook = options[:rulebook] @state_file = options[:statefile] @session = OpenStruct.new @scripts = [] @rules = [] #@facts = [] @digests = {} @rulesets = {} import(*rulebook) end
Public Instance Methods
home()
click to toggle source
Home directory.
Returns [String]
# File lib/rulebow/system.rb, line 131 def home @home ||= File.expand_path('~') end
ignore(*globs)
click to toggle source
Add paths to be ignored in file rules.
globs - List of file globs. [Array<String>]
Returns [Array<String>]
# File lib/rulebow/system.rb, line 108 def ignore(*globs) @ignore.concat(globs) unless globs.empty? @ignore end
ignore!(*globs)
click to toggle source
Replace globs in ignore list.
globs - List of file globs. [Array<String>]
Returns [Array<String>]
# File lib/rulebow/system.rb, line 118 def ignore!(*globs) @ignore.replace(globs) @ignore end
import(*globs)
click to toggle source
Import from another file, or glob of files, relative to project root.
TODO: Should importing be relative to the importing file?
Returns nothing.
# 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()
click to toggle source
# File lib/rulebow/system.rb, line 124 def inspect "#<Rulebow::System>" end
rulebook()
click to toggle source
Rulebook file.
# File lib/rulebow/system.rb, line 53 def rulebook @rulebook ||= Dir[File.join(root, RULEBOOK_GLOB)].first end
ruleset(name_and_chain, &block)
click to toggle source
Rulesets provide a separate space for rules which are only run when the ruleset name is specifically given.
Return [Ruleset]
# 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()
click to toggle source
State file.
# File lib/rulebow/system.rb, line 58 def state_file @state_file ||= rulebook.chomp('.rb') + '.state' end
Private Instance Methods
parse_ruleset_name(name)
click to toggle source
Parse out a ruleset’s name from it’s ruleset dependencies.
Returns [Array]
# 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