* Added error toleration for moulds, now a broken mould won't crash Jello
[jello.git] / lib / jello.rb
blob424343f1739478dfe2967e01a1d995bc84f974ff
1 require 'jello/core_ext/kernel'
2 require 'jello/pasteboard'
3 require 'jello/mould'
5 module Jello
6   Version = 4
7   
8   def self.start! options = {}
9     options = {:verbose => false, :period => 0.5}.merge(options)
10     raise ArgumentError, 'period must be capable of becoming a Numeric Float' unless
11       options[:period].respond_to? :to_f
12     options[:period] = options[:period].to_f
13     
14     forever do
15       
16       Moulds.each do |pasteboard, moulds|
17         if (paste = pasteboard.gets) != pasteboard.last
18           initial_paste = paste.dup
19           
20           puts "#{pasteboard.board} received: [#{initial_paste}]" if options[:verbose]
21           moulds.each do |mould|
22             modified = begin
23               mould.on_paste[paste]
24             rescue => error
25               puts " !!> #{error}"
26               nil
27             end
28             paste = modified if modified.is_a?(String)
29           end
30           
31           if paste.is_a?(String) and paste != initial_paste
32             puts " --> [#{paste}]" if options[:verbose]
33             print "\a" if options[:feedback]
34             pasteboard.puts paste 
35           end
36         end
37       end
38       
39       sleep options[:period]
40     end
41   end
42   
43   def self.stop!
44     raise Interrupt # …
45   end
46   
47 end