Added type checking on the period flag
[jello.git] / lib / jello.rb
blob50ffc5e4895d7825c3c65785a11b8c4a90bdd8ab
1 require 'jello/core_ext/kernel'
2 require 'jello/pasteboard'
3 require 'jello/mould'
5 module Jello
6   Version = 3
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 = mould.on_paste[paste]
23             paste = modified if modified.is_a?(String)
24           end
25           
26           if paste.is_a?(String) and paste != initial_paste
27             puts " --> [#{paste}]" if options[:verbose]
28             print "\a" if options[:feedback]
29             pasteboard.puts paste 
30           end
31         end
32       end
33       
34       sleep options[:period]
35     end
36   end
37   
38   def self.stop!
39     raise Interrupt # …
40   end
41   
42 end