class Minicontext::Context
Constants
- COMPOSE
- KEYWORD
- RELAY
Public Class Methods
new(parent = nil)
click to toggle source
# File lib/minicontext/context.rb, line 7 def initialize(parent = nil) @vars = {} @parent = parent end
Public Instance Methods
[](name)
click to toggle source
# File lib/minicontext/context.rb, line 53 def [](name) router[name] end
[]=(name, val)
click to toggle source
# File lib/minicontext/context.rb, line 57 def []=(name, val) raise AssignError, name if @vars[name] @vars[name] = val end
action(&block)
click to toggle source
# File lib/minicontext/context.rb, line 37 def action(&block) instance_eval &block end
call(name)
click to toggle source
# File lib/minicontext/context.rb, line 45 def call(name) Proc === (val = @vars[name]) ? apply(name) : val end
context(name, &block)
click to toggle source
# File lib/minicontext/context.rb, line 12 def context(name, &block) raise AssignError, name if KEYWORD.include?(name) raise AssignError, name if (val = @vars[name]) && Proc === val val ? val.action(&block) : define_context(name, &block) end
let(name, &block)
click to toggle source
# File lib/minicontext/context.rb, line 23 def let(name, &block) raise AssignError, name if KEYWORD.include?(name) self[name] = -> (env) do env.memoized.fetch([self, name]) do env.memoized[[self, name]] = env.(self, &block) end end end
load(filename)
click to toggle source
# File lib/minicontext/context.rb, line 41 def load(filename) instance_eval open(filename) {|f| f.read}, filename end
lookup(name)
click to toggle source
# File lib/minicontext/context.rb, line 49 def lookup(name) Proc === (val = @vars[name]) ? val : (@parent && @parent.lookup(name)) end
task(name, &block)
click to toggle source
# File lib/minicontext/context.rb, line 19 def task(name, &block) self[name] = -> (env) { env.(self, &block) } end
Private Instance Methods
apply(name)
click to toggle source
# File lib/minicontext/context.rb, line 72 def apply(name) compose(@vars[name]) end
compose(f)
click to toggle source
# File lib/minicontext/context.rb, line 76 def compose(f) g = COMPOSE.(@vars[:after] || RELAY, COMPOSE.(f, @vars[:before] || RELAY)) @parent ? @parent.send(:compose, g) : g end
define_context(name, &block)
click to toggle source
# File lib/minicontext/context.rb, line 65 def define_context(name, &block) self.class.new(self).tap do |ctx| self[name] = ctx ctx.action &block end end
router()
click to toggle source
# File lib/minicontext/context.rb, line 82 def router Router::Maybe.new(self) end