Sha256: bee9a3ed6e6adb1d4db4226fc8270700eea71cde85f1787625e634e6e5dbc2a4
Contents?: true
Size: 1.26 KB
Versions: 1
Compression:
Stored size: 1.26 KB
Contents
require_relative 'process' module Dogviz module Flowable def does(action) Process.new(self, action) end def receives(requests, &block) @requests = self.requests.merge requests if requests.is_a?(Hash) self.requests[requests] = block if requests.is_a?(Symbol) end def note(where, what) @flow.add_note(self, where, what) end def start_flow(flow) @flow = flow end def stop_flow @flow = nil end def method_missing(m, *args, &block) if requests.has_key?(m) @flow ||= nil request_def = requests[m] if request_def.is_a?(String) label = request_def return_label = nil else request_def = request_def.call(*args) if request_def.is_a?(Proc) label = request_def.keys.first return_label = request_def.values.first end @flow.next_call self, label block.call if block_given? @flow.end_call(return_label) else raise "this flowable does not know about receiving '#{m}', only know about: #{requests.keys}" end end def requests @requests ||= {} end def request_handlers @request_handlers ||= {} end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dogviz-0.0.22 | lib/dogviz/flowable.rb |