flor 0.0.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +13 -0
 - data/LICENSE.txt +1 -1
 - data/Makefile +66 -0
 - data/README.md +57 -0
 - data/fail.txt +7 -0
 - data/flor.gemspec +12 -9
 - data/intercepted.txt +123 -0
 - data/lib/flor/colours.rb +140 -0
 - data/lib/flor/conf.rb +88 -0
 - data/lib/flor/core/executor.rb +473 -0
 - data/lib/flor/core/node.rb +397 -0
 - data/lib/flor/core/procedure.rb +600 -0
 - data/lib/flor/core/texecutor.rb +209 -0
 - data/lib/flor/core.rb +93 -0
 - data/lib/flor/dollar.rb +248 -0
 - data/lib/flor/errors.rb +36 -0
 - data/lib/flor/flor.rb +556 -0
 - data/lib/flor/log.rb +336 -0
 - data/lib/flor/migrations/0001_tables.rb +122 -0
 - data/lib/flor/parser.rb +414 -0
 - data/lib/flor/pcore/_arr.rb +49 -0
 - data/lib/flor/pcore/_atom.rb +43 -0
 - data/lib/flor/pcore/_att.rb +160 -0
 - data/lib/flor/pcore/_dump.rb +60 -0
 - data/lib/flor/pcore/_err.rb +30 -0
 - data/lib/flor/pcore/_happly.rb +73 -0
 - data/lib/flor/pcore/_obj.rb +65 -0
 - data/lib/flor/pcore/_skip.rb +63 -0
 - data/lib/flor/pcore/apply.rb +60 -0
 - data/lib/flor/pcore/arith.rb +46 -0
 - data/lib/flor/pcore/break.rb +71 -0
 - data/lib/flor/pcore/cmp.rb +72 -0
 - data/lib/flor/pcore/cond.rb +57 -0
 - data/lib/flor/pcore/cursor.rb +223 -0
 - data/lib/flor/pcore/define.rb +96 -0
 - data/lib/flor/pcore/fail.rb +45 -0
 - data/lib/flor/pcore/ife.rb +56 -0
 - data/lib/flor/pcore/loop.rb +53 -0
 - data/lib/flor/pcore/map.rb +75 -0
 - data/lib/flor/pcore/match.rb +70 -0
 - data/lib/flor/pcore/move.rb +65 -0
 - data/lib/flor/pcore/noeval.rb +46 -0
 - data/lib/flor/pcore/noret.rb +47 -0
 - data/lib/flor/pcore/push.rb +69 -0
 - data/lib/flor/pcore/sequence.rb +39 -0
 - data/lib/flor/pcore/set.rb +76 -0
 - data/lib/flor/pcore/stall.rb +35 -0
 - data/lib/flor/pcore/until.rb +122 -0
 - data/lib/flor/pcore/val.rb +40 -0
 - data/lib/flor/punit/cancel.rb +69 -0
 - data/lib/flor/punit/cmap.rb +76 -0
 - data/lib/flor/punit/concurrence.rb +149 -0
 - data/lib/flor/punit/every.rb +46 -0
 - data/lib/flor/punit/on.rb +81 -0
 - data/lib/flor/punit/schedule.rb +68 -0
 - data/lib/flor/punit/signal.rb +47 -0
 - data/lib/flor/punit/sleep.rb +53 -0
 - data/lib/flor/punit/task.rb +109 -0
 - data/lib/flor/punit/trace.rb +51 -0
 - data/lib/flor/punit/trap.rb +100 -0
 - data/lib/flor/to_string.rb +81 -0
 - data/lib/flor/tools/env.rb +103 -0
 - data/lib/flor/tools/repl.rb +231 -0
 - data/lib/flor/unit/executor.rb +260 -0
 - data/lib/flor/unit/hooker.rb +186 -0
 - data/lib/flor/unit/journal.rb +52 -0
 - data/lib/flor/unit/loader.rb +181 -0
 - data/lib/flor/unit/logger.rb +181 -0
 - data/lib/flor/unit/models/execution.rb +105 -0
 - data/lib/flor/unit/models/pointer.rb +31 -0
 - data/lib/flor/unit/models/timer.rb +52 -0
 - data/lib/flor/unit/models/trace.rb +31 -0
 - data/lib/flor/unit/models/trap.rb +130 -0
 - data/lib/flor/unit/models.rb +106 -0
 - data/lib/flor/unit/scheduler.rb +419 -0
 - data/lib/flor/unit/storage.rb +633 -0
 - data/lib/flor/unit/tasker.rb +191 -0
 - data/lib/flor/unit/waiter.rb +146 -0
 - data/lib/flor/unit/wlist.rb +77 -0
 - data/lib/flor/unit.rb +50 -0
 - data/lib/flor.rb +40 -3
 - metadata +152 -22
 - checksums.yaml +0 -7
 - data/Rakefile +0 -52
 
    
        data/CHANGELOG.md
    ADDED
    
    
    
        data/LICENSE.txt
    CHANGED
    
    | 
         @@ -1,5 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         | 
| 
       2 
     | 
    
         
            -
            Copyright (c) 2015- 
     | 
| 
      
 2 
     | 
    
         
            +
            Copyright (c) 2015-2017, John Mettraux, jmettraux+flor@gmail.com
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            Permission is hereby granted, free of charge, to any person obtaining a copy
         
     | 
| 
       5 
5 
     | 
    
         
             
            of this software and associated documentation files (the "Software"), to deal
         
     | 
    
        data/Makefile
    ADDED
    
    | 
         @@ -0,0 +1,66 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            ## gem tasks ##
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            NAME = \
         
     | 
| 
      
 5 
     | 
    
         
            +
              $(shell ruby -e "s = eval(File.read(Dir['*.gemspec'][0])); puts s.name")
         
     | 
| 
      
 6 
     | 
    
         
            +
            VERSION = \
         
     | 
| 
      
 7 
     | 
    
         
            +
              $(shell ruby -e "s = eval(File.read(Dir['*.gemspec'][0])); puts s.version")
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            count_lines:
         
     | 
| 
      
 10 
     | 
    
         
            +
            	find lib -name "*.rb" | xargs cat | ruby -e "p STDIN.readlines.count { |l| l = l.strip; l[0, 1] != '#' && l != '' }"
         
     | 
| 
      
 11 
     | 
    
         
            +
            cl: count_lines
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            gemspec_validate:
         
     | 
| 
      
 14 
     | 
    
         
            +
            	@echo "---"
         
     | 
| 
      
 15 
     | 
    
         
            +
            	ruby -e "s = eval(File.read(Dir['*.gemspec'].first)); s.validate"
         
     | 
| 
      
 16 
     | 
    
         
            +
            	@echo "---"
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            name: gemspec_validate
         
     | 
| 
      
 19 
     | 
    
         
            +
            	@echo "$(NAME) $(VERSION)"
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            build: gemspec_validate
         
     | 
| 
      
 22 
     | 
    
         
            +
            	gem build $(NAME).gemspec
         
     | 
| 
      
 23 
     | 
    
         
            +
            	mkdir -p pkg
         
     | 
| 
      
 24 
     | 
    
         
            +
            	mv $(NAME)-$(VERSION).gem pkg/
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            push: build
         
     | 
| 
      
 27 
     | 
    
         
            +
            	gem push pkg/$(NAME)-$(VERSION).gem
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            ## flor tasks ##
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            RUBY=bundle exec ruby
         
     | 
| 
      
 33 
     | 
    
         
            +
            FLOR_ENV?=dev
         
     | 
| 
      
 34 
     | 
    
         
            +
            TO?=nil
         
     | 
| 
      
 35 
     | 
    
         
            +
            FROM?=nil
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            migrate:
         
     | 
| 
      
 38 
     | 
    
         
            +
            	$(RUBY) -Ilib -e "require 'flor/unit'; Flor::Unit.new('envs/$(FLOR_ENV)/etc/conf.json').storage.migrate($(TO), $(FROM))"
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            start:
         
     | 
| 
      
 41 
     | 
    
         
            +
            	$(RUBY) -Ilib -e "require 'flor/unit'; Flor::Unit.new('envs/$(FLOR_ENV)/etc/conf.json').start.join"
         
     | 
| 
      
 42 
     | 
    
         
            +
            s: start
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            ## misc tasks ##
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            backup_notes_and_todos:
         
     | 
| 
      
 48 
     | 
    
         
            +
            	tar czvf flor_notes_$(shell date "+%Y%m%d_%H%M").tgz .notes.md .todo.md && mv flor_notes_*.tgz ~/Dropbox/backup/
         
     | 
| 
      
 49 
     | 
    
         
            +
            ba: backup_notes_and_todos
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            t:
         
     | 
| 
      
 52 
     | 
    
         
            +
            	tree spec/unit/loader
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            mk:
         
     | 
| 
      
 55 
     | 
    
         
            +
            	# testing lib/flor/tools/env.rb
         
     | 
| 
      
 56 
     | 
    
         
            +
            	$(RUBY) -Ilib -e "require 'flor/tools/env'; Flor::Tools::Env.make('tmp', '$(FLOR_ENV)', gitkeep: true)"
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            doc:
         
     | 
| 
      
 59 
     | 
    
         
            +
            	$(RUBY) -Imak -r 'doc' -e "make_procedures_doc()"
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            repl:
         
     | 
| 
      
 62 
     | 
    
         
            +
            	$(RUBY) -Ilib -r 'flor/tools/repl' -e 'Flor::Tools::Repl.new("$(FLOR_ENV)")'
         
     | 
| 
      
 63 
     | 
    
         
            +
            r: repl
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            .PHONY: doc repl
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,6 +1,63 @@ 
     | 
|
| 
       1 
1 
     | 
    
         | 
| 
       2 
2 
     | 
    
         
             
            # flor
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
      
 4 
     | 
    
         
            +
            [](http://travis-ci.org/floraison/flor)
         
     | 
| 
      
 5 
     | 
    
         
            +
            [](http://badge.fury.io/rb/flor)
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            Flor is a "Ruby workflow engine", if that makes any sense.
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            ## Design
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            * Strives to propose a scheming interpreter for long running executions
         
     | 
| 
      
 12 
     | 
    
         
            +
            * Is written in Ruby a rather straightforward language with at least two
         
     | 
| 
      
 13 
     | 
    
         
            +
              wonderful implementations (MRI and JRuby, which is enterprise-friendly)
         
     | 
| 
      
 14 
     | 
    
         
            +
            * Stores everything as JSON (if it breaks it's still readable)
         
     | 
| 
      
 15 
     | 
    
         
            +
            * Stores in any database supported by [Sequel](http://sequel.jeremyevans.net/)
         
     | 
| 
      
 16 
     | 
    
         
            +
              (the JSON goes in the "content" columns, along with some index columns)
         
     | 
| 
      
 17 
     | 
    
         
            +
            * Favours naive/simple implementations over smart ones
         
     | 
| 
      
 18 
     | 
    
         
            +
            * All in all should be easy to maintain (engine itself and executions running
         
     | 
| 
      
 19 
     | 
    
         
            +
              on top of it)
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            ## Documentation
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            see [doc/](tree/master/doc).
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            ## Running the specs
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            (Most of the time, as developer of flor, I'm writing specs, running them with `FLOR_DEBUG=dbg` and hammering the code until the specs are green. The following lines are about setting `FLOR_DEBUG` for flor development).
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            ##### setting FLOR_DEBUG
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            This is a targetted run of a spec file:
         
     | 
| 
      
 32 
     | 
    
         
            +
            ```
         
     | 
| 
      
 33 
     | 
    
         
            +
            FLOR_DEBUG=msg,err bundle exec rspec spec/punit/cancel_spec.rb
         
     | 
| 
      
 34 
     | 
    
         
            +
            ```
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            * `msg` displays the flor messages in a summary, colored format
         
     | 
| 
      
 37 
     | 
    
         
            +
            * `err` displays errors with details, when and if they happen
         
     | 
| 
      
 38 
     | 
    
         
            +
            * `src` displays the source before it gets parsed and launched
         
     | 
| 
      
 39 
     | 
    
         
            +
            * `tree` displays the syntax tree as parsed from the source, right before launch
         
     | 
| 
      
 40 
     | 
    
         
            +
            * `run` shows info about each [run](doc/glossary.md#run) that just ended
         
     | 
| 
      
 41 
     | 
    
         
            +
            * `sto` displays debug information about the [storage](doc/glossary.md#storage), it's mostly SQL statements
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            #### `FLOR_DEBUG=dbg` and `FLOR_DEBUG=all`
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            There are two shortcuts for the flags above:
         
     | 
| 
      
 46 
     | 
    
         
            +
            ```
         
     | 
| 
      
 47 
     | 
    
         
            +
            FLOR_DEBUG=dbg bundle exec rspec spec/punit/cancel_spec.rb
         
     | 
| 
      
 48 
     | 
    
         
            +
              # is equivalent to
         
     | 
| 
      
 49 
     | 
    
         
            +
            FLOR_DEBUG=msg,err,src,tree,run bundle exec rspec spec/punit/cancel_spec.rb
         
     | 
| 
      
 50 
     | 
    
         
            +
            ```
         
     | 
| 
      
 51 
     | 
    
         
            +
            and
         
     | 
| 
      
 52 
     | 
    
         
            +
            ```
         
     | 
| 
      
 53 
     | 
    
         
            +
            FLOR_DEBUG=all bundle exec rspec spec/punit/cancel_spec.rb
         
     | 
| 
      
 54 
     | 
    
         
            +
              # is equivalent to
         
     | 
| 
      
 55 
     | 
    
         
            +
            FLOR_DEBUG=msg,err,src,tree,run,log,sto bundle exec rspec spec/punit/cancel_spec.rb
         
     | 
| 
      
 56 
     | 
    
         
            +
            ```
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            I tend to use `FLOR_DEBUG=dbg` when developping flor.
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
       4 
61 
     | 
    
         
             
            ## LICENSE
         
     | 
| 
       5 
62 
     | 
    
         | 
| 
       6 
63 
     | 
    
         
             
            MIT, see [LICENSE.txt](LICENSE.txt)
         
     | 
    
        data/fail.txt
    ADDED
    
    | 
         @@ -0,0 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            rspec ./spec/pcore/cursor_spec.rb:184 # Flor pcore cursor re-break/continue accepts "break" when breaking
         
     | 
| 
      
 3 
     | 
    
         
            +
            rspec ./spec/pcore/cursor_spec.rb:230 # Flor pcore cursor re-break/continue accepts "break" when continuing
         
     | 
| 
      
 4 
     | 
    
         
            +
            rspec ./spec/pcore/cursor_spec.rb:282 # Flor pcore cursor re-break/continue accepts "break" when continuing (nest-1)
         
     | 
| 
      
 5 
     | 
    
         
            +
            rspec ./spec/pcore/cursor_spec.rb:327 # Flor pcore cursor re-break/continue rejects "continue" when breaking
         
     | 
| 
      
 6 
     | 
    
         
            +
            rspec ./spec/pcore/cursor_spec.rb:371 # Flor pcore cursor re-break/continue rejects "move" when breaking
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
    
        data/flor.gemspec
    CHANGED
    
    | 
         @@ -9,27 +9,30 @@ Gem::Specification.new do |s| 
     | 
|
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              s.platform = Gem::Platform::RUBY
         
     | 
| 
       11 
11 
     | 
    
         
             
              s.authors = [ 'John Mettraux' ]
         
     | 
| 
       12 
     | 
    
         
            -
              s.email = [ 'jmettraux@gmail.com' ]
         
     | 
| 
       13 
     | 
    
         
            -
              s.homepage = 'http://github.com/ 
     | 
| 
      
 12 
     | 
    
         
            +
              s.email = [ 'jmettraux+flor@gmail.com' ]
         
     | 
| 
      
 13 
     | 
    
         
            +
              s.homepage = 'http://github.com/floraison'
         
     | 
| 
       14 
14 
     | 
    
         
             
              #s.rubyforge_project = 'flor'
         
     | 
| 
       15 
15 
     | 
    
         
             
              s.license = 'MIT'
         
     | 
| 
       16 
     | 
    
         
            -
              s.summary = ' 
     | 
| 
      
 16 
     | 
    
         
            +
              s.summary = 'A Ruby workflow engine'
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
              s.description = %{
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 19 
     | 
    
         
            +
            A Ruby workflow engine (ruote next generation)
         
     | 
| 
       20 
20 
     | 
    
         
             
              }.strip
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
              #s.files = `git ls-files`.split("\n")
         
     | 
| 
       23 
23 
     | 
    
         
             
              s.files = Dir[
         
     | 
| 
       24 
     | 
    
         
            -
                ' 
     | 
| 
       25 
     | 
    
         
            -
                'lib/**/*.rb', 'spec/**/*.rb', 'test/**/*.rb',
         
     | 
| 
      
 24 
     | 
    
         
            +
                'Makefile',
         
     | 
| 
      
 25 
     | 
    
         
            +
                'lib/**/*.rb', #'spec/**/*.rb', 'test/**/*.rb',
         
     | 
| 
       26 
26 
     | 
    
         
             
                '*.gemspec', '*.txt', '*.rdoc', '*.md'
         
     | 
| 
       27 
27 
     | 
    
         
             
              ]
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
               
     | 
| 
      
 29 
     | 
    
         
            +
              s.add_runtime_dependency 'munemo', '>= 1.0.1'
         
     | 
| 
      
 30 
     | 
    
         
            +
              s.add_runtime_dependency 'raabro', '>= 1.1.3'
         
     | 
| 
      
 31 
     | 
    
         
            +
              #s.add_runtime_dependency 'rufus-lru', '>= 1.1.0'
         
     | 
| 
      
 32 
     | 
    
         
            +
              s.add_runtime_dependency 'fugit', '>= 0.9.5'
         
     | 
| 
       30 
33 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
              s.add_development_dependency ' 
     | 
| 
       32 
     | 
    
         
            -
              s.add_development_dependency ' 
     | 
| 
      
 34 
     | 
    
         
            +
              s.add_development_dependency 'rspec', '3.4.0'
         
     | 
| 
      
 35 
     | 
    
         
            +
              s.add_development_dependency 'sequel', '~> 4'
         
     | 
| 
       33 
36 
     | 
    
         | 
| 
       34 
37 
     | 
    
         
             
              s.require_path = 'lib'
         
     | 
| 
       35 
38 
     | 
    
         
             
            end
         
     | 
    
        data/intercepted.txt
    ADDED
    
    | 
         @@ -0,0 +1,123 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ================================================================================
         
     | 
| 
      
 2 
     | 
    
         
            +
            "java.lang.ArrayIndexOutOfBoundsException: 7"
         
     | 
| 
      
 3 
     | 
    
         
            +
            org.jruby.RubyArray.collect(RubyArray.java:2399)
         
     | 
| 
      
 4 
     | 
    
         
            +
            org.jruby.RubyArray.collect19(RubyArray.java:2407)
         
     | 
| 
      
 5 
     | 
    
         
            +
            org.jruby.RubyArray$INVOKER$i$0$0$collect19.call(RubyArray$INVOKER$i$0$0$collect19.gen)
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            rubyjit.RSpec::Core::Example$$run_e23a0386b8914aee0fb2ff25382f02e76d718a30548153399.chained_4_rescue_2$RUBY$SYNTHETIC__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example.rb:236)
         
     | 
| 
      
 8 
     | 
    
         
            +
            rubyjit.RSpec::Core::Example$$run_e23a0386b8914aee0fb2ff25382f02e76d718a30548153399.chained_3_ensure_3$RUBY$__ensure__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example.rb)
         
     | 
| 
      
 9 
     | 
    
         
            +
            rubyjit.RSpec::Core::Example$$run_e23a0386b8914aee0fb2ff25382f02e76d718a30548153399.block_0$RUBY$__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example.rb:234)
         
     | 
| 
      
 10 
     | 
    
         
            +
            rubyjit$RSpec::Core::Example$$run_e23a0386b8914aee0fb2ff25382f02e76d718a30548153399$block_0$RUBY$__file__.call(rubyjit$RSpec::Core::Example$$run_e23a0386b8914aee0fb2ff25382f02e76d718a30548153399$block_0$RUBY$__file__)
         
     | 
| 
      
 11 
     | 
    
         
            +
            org.jruby.runtime.CompiledBlock19.yieldSpecificInternal(CompiledBlock19.java:117)
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            rubyjit.RSpec::Core::Example$$with_around_and_singleton_context_hooks_3b50427a6d5505735484cd86431f6a767c1d18f4548153399.block_0$RUBY$__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example.rb:478)
         
     | 
| 
      
 15 
     | 
    
         
            +
            rubyjit$RSpec::Core::Example$$with_around_and_singleton_context_hooks_3b50427a6d5505735484cd86431f6a767c1d18f4548153399$block_0$RUBY$__file__.call(rubyjit$RSpec::Core::Example$$with_around_and_singleton_context_hooks_3b50427a6d5505735484cd86431f6a767c1d18f4548153399$block_0$RUBY$__file__)
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            rubyjit.RSpec::Core::Example$$with_around_example_hooks_f42ef83f37556525813c37189c97bfafa418095d548153399.block_0$RUBY$__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example.rb:435)
         
     | 
| 
      
 20 
     | 
    
         
            +
            rubyjit$RSpec::Core::Example$$with_around_example_hooks_f42ef83f37556525813c37189c97bfafa418095d548153399$block_0$RUBY$__file__.call(rubyjit$RSpec::Core::Example$$with_around_example_hooks_f42ef83f37556525813c37189c97bfafa418095d548153399$block_0$RUBY$__file__)
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            rubyjit.RSpec::Core::Hooks::HookCollections$$run_5d8d48da1a9e19fa57aca42145bb7983771aa82e548153399.block_0$RUBY$__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/hooks.rb:478)
         
     | 
| 
      
 25 
     | 
    
         
            +
            rubyjit$RSpec::Core::Hooks::HookCollections$$run_5d8d48da1a9e19fa57aca42145bb7983771aa82e548153399$block_0$RUBY$__file__.call(rubyjit$RSpec::Core::Hooks::HookCollections$$run_5d8d48da1a9e19fa57aca42145bb7983771aa82e548153399$block_0$RUBY$__file__)
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            rubyjit.RSpec::Core::Hooks::HookCollections$$run_around_example_hooks_for_46882d65b8cfc96e5a66894bebd6d613fe20048a548153399.__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/hooks.rb:616)
         
     | 
| 
      
 30 
     | 
    
         
            +
            rubyjit.RSpec::Core::Hooks::HookCollections$$run_around_example_hooks_for_46882d65b8cfc96e5a66894bebd6d613fe20048a548153399.__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/hooks.rb)
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            rubyjit.RSpec::Core::Hooks::HookCollections$$run_5d8d48da1a9e19fa57aca42145bb7983771aa82e548153399.__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/hooks.rb:478)
         
     | 
| 
      
 35 
     | 
    
         
            +
            rubyjit.RSpec::Core::Hooks::HookCollections$$run_5d8d48da1a9e19fa57aca42145bb7983771aa82e548153399.__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/hooks.rb)
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            rubyjit.RSpec::Core::Example$$with_around_example_hooks_f42ef83f37556525813c37189c97bfafa418095d548153399.chained_0_rescue_1$RUBY$SYNTHETIC__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example.rb:435)
         
     | 
| 
      
 40 
     | 
    
         
            +
            rubyjit.RSpec::Core::Example$$with_around_example_hooks_f42ef83f37556525813c37189c97bfafa418095d548153399.__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example.rb)
         
     | 
| 
      
 41 
     | 
    
         
            +
            rubyjit.RSpec::Core::Example$$with_around_example_hooks_f42ef83f37556525813c37189c97bfafa418095d548153399.__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example.rb)
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            rubyjit.RSpec::Core::Example$$with_around_and_singleton_context_hooks_3b50427a6d5505735484cd86431f6a767c1d18f4548153399.chained_0_ensure_1$RUBY$__ensure__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example.rb:478)
         
     | 
| 
      
 46 
     | 
    
         
            +
            rubyjit.RSpec::Core::Example$$with_around_and_singleton_context_hooks_3b50427a6d5505735484cd86431f6a767c1d18f4548153399.__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example.rb)
         
     | 
| 
      
 47 
     | 
    
         
            +
            rubyjit.RSpec::Core::Example$$with_around_and_singleton_context_hooks_3b50427a6d5505735484cd86431f6a767c1d18f4548153399.__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example.rb)
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            rubyjit.RSpec::Core::Example$$run_e23a0386b8914aee0fb2ff25382f02e76d718a30548153399.chained_2_rescue_1$RUBY$SYNTHETIC__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example.rb:233)
         
     | 
| 
      
 52 
     | 
    
         
            +
            rubyjit.RSpec::Core::Example$$run_e23a0386b8914aee0fb2ff25382f02e76d718a30548153399.chained_1_ensure_2$RUBY$__ensure__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example.rb)
         
     | 
| 
      
 53 
     | 
    
         
            +
            rubyjit.RSpec::Core::Example$$run_e23a0386b8914aee0fb2ff25382f02e76d718a30548153399.chained_0_ensure_1$RUBY$__ensure__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example.rb:229)
         
     | 
| 
      
 54 
     | 
    
         
            +
            rubyjit.RSpec::Core::Example$$run_e23a0386b8914aee0fb2ff25382f02e76d718a30548153399.__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example.rb)
         
     | 
| 
      
 55 
     | 
    
         
            +
            rubyjit.RSpec::Core::Example$$run_e23a0386b8914aee0fb2ff25382f02e76d718a30548153399.__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example.rb)
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            rubyjit.RSpec::Core::ExampleGroup$$run_examples_d1ecff0be8f52462c9431f9e5a26b42be542fee3548153399.block_0$RUBY$__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example_group.rb:581)
         
     | 
| 
      
 59 
     | 
    
         
            +
            rubyjit$RSpec::Core::ExampleGroup$$run_examples_d1ecff0be8f52462c9431f9e5a26b42be542fee3548153399$block_0$RUBY$__file__.call(rubyjit$RSpec::Core::ExampleGroup$$run_examples_d1ecff0be8f52462c9431f9e5a26b42be542fee3548153399$block_0$RUBY$__file__)
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
            rubyjit.RSpec::Core::ExampleGroup$$run_examples_d1ecff0be8f52462c9431f9e5a26b42be542fee3548153399.__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example_group.rb:577)
         
     | 
| 
      
 68 
     | 
    
         
            +
            rubyjit.RSpec::Core::ExampleGroup$$run_examples_d1ecff0be8f52462c9431f9e5a26b42be542fee3548153399.__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example_group.rb)
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
            rubyjit.RSpec::Core::ExampleGroup$$run_a3bf101cd7bf6e139f3a52a1db889d129cb68613548153399.chained_1_rescue_1$RUBY$SYNTHETIC__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example_group.rb:543)
         
     | 
| 
      
 73 
     | 
    
         
            +
            rubyjit.RSpec::Core::ExampleGroup$$run_a3bf101cd7bf6e139f3a52a1db889d129cb68613548153399.chained_0_ensure_1$RUBY$__ensure__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example_group.rb)
         
     | 
| 
      
 74 
     | 
    
         
            +
            rubyjit.RSpec::Core::ExampleGroup$$run_a3bf101cd7bf6e139f3a52a1db889d129cb68613548153399.__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example_group.rb:541)
         
     | 
| 
      
 75 
     | 
    
         
            +
            rubyjit.RSpec::Core::ExampleGroup$$run_a3bf101cd7bf6e139f3a52a1db889d129cb68613548153399.__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example_group.rb)
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            rubyjit.RSpec::Core::ExampleGroup$$run_a3bf101cd7bf6e139f3a52a1db889d129cb68613548153399.block_0$RUBY$__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example_group.rb:544)
         
     | 
| 
      
 81 
     | 
    
         
            +
            rubyjit$RSpec::Core::ExampleGroup$$run_a3bf101cd7bf6e139f3a52a1db889d129cb68613548153399$block_0$RUBY$__file__.call(rubyjit$RSpec::Core::ExampleGroup$$run_a3bf101cd7bf6e139f3a52a1db889d129cb68613548153399$block_0$RUBY$__file__)
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
            rubyjit.RSpec::Core::ExampleGroup$$run_a3bf101cd7bf6e139f3a52a1db889d129cb68613548153399.chained_1_rescue_1$RUBY$SYNTHETIC__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example_group.rb:544)
         
     | 
| 
      
 90 
     | 
    
         
            +
            rubyjit.RSpec::Core::ExampleGroup$$run_a3bf101cd7bf6e139f3a52a1db889d129cb68613548153399.chained_0_ensure_1$RUBY$__ensure__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example_group.rb)
         
     | 
| 
      
 91 
     | 
    
         
            +
            rubyjit.RSpec::Core::ExampleGroup$$run_a3bf101cd7bf6e139f3a52a1db889d129cb68613548153399.__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example_group.rb:541)
         
     | 
| 
      
 92 
     | 
    
         
            +
            rubyjit.RSpec::Core::ExampleGroup$$run_a3bf101cd7bf6e139f3a52a1db889d129cb68613548153399.__file__(/home/travis/build/floraison/flor/vendor/bundle/jruby/1.9/gems/rspec-core-3.4.2/lib/rspec/core/example_group.rb)
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
            --------------------------------------------------------------------------------
         
     | 
| 
      
 95 
     | 
    
         
            +
            Failures:
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
              2) Flor unit Flor::Scheduler#hook may filter on point:/p:
         
     | 
| 
      
 98 
     | 
    
         
            +
                 Failure/Error: fail "**INTERCEPTED**"
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                 RuntimeError:
         
     | 
| 
      
 101 
     | 
    
         
            +
                   **INTERCEPTED**
         
     | 
| 
      
 102 
     | 
    
         
            +
                 # ./spec/unit/hooks_spec.rb:117:in `(root)'
         
     | 
| 
      
 103 
     | 
    
         
            +
                 # /home/travis/.rvm/gems/jruby-d20@global/gems/bundler-1.13.7/lib/bundler/cli/exec.rb:1:in `(root)'
         
     | 
| 
      
 104 
     | 
    
         
            +
                 # /home/travis/.rvm/gems/jruby-d20@global/gems/bundler-1.13.7/lib/bundler/cli/exec.rb:74:in `kernel_load'
         
     | 
| 
      
 105 
     | 
    
         
            +
                 # /home/travis/.rvm/gems/jruby-d20@global/gems/bundler-1.13.7/lib/bundler/cli/exec.rb:27:in `run'
         
     | 
| 
      
 106 
     | 
    
         
            +
                 # /home/travis/.rvm/gems/jruby-d20@global/gems/bundler-1.13.7/lib/bundler/cli.rb:332:in `exec'
         
     | 
| 
      
 107 
     | 
    
         
            +
                 # /home/travis/.rvm/gems/jruby-d20@global/gems/bundler-1.13.7/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
         
     | 
| 
      
 108 
     | 
    
         
            +
                 # /home/travis/.rvm/gems/jruby-d20@global/gems/bundler-1.13.7/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
         
     | 
| 
      
 109 
     | 
    
         
            +
                 # /home/travis/.rvm/gems/jruby-d20@global/gems/bundler-1.13.7/lib/bundler/vendor/thor/lib/thor.rb:359:in `dispatch'
         
     | 
| 
      
 110 
     | 
    
         
            +
                 # /home/travis/.rvm/gems/jruby-d20@global/gems/bundler-1.13.7/lib/bundler/cli.rb:20:in `dispatch'
         
     | 
| 
      
 111 
     | 
    
         
            +
                 # /home/travis/.rvm/gems/jruby-d20@global/gems/bundler-1.13.7/lib/bundler/vendor/thor/lib/thor/base.rb:440:in `start'
         
     | 
| 
      
 112 
     | 
    
         
            +
                 # /home/travis/.rvm/gems/jruby-d20@global/gems/bundler-1.13.7/lib/bundler/cli.rb:11:in `start'
         
     | 
| 
      
 113 
     | 
    
         
            +
                 # /home/travis/.rvm/gems/jruby-d20@global/gems/bundler-1.13.7/exe/bundle:34:in `(root)'
         
     | 
| 
      
 114 
     | 
    
         
            +
                 # /home/travis/.rvm/gems/jruby-d20@global/gems/bundler-1.13.7/lib/bundler/friendly_errors.rb:100:in `with_friendly_errors'
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
            Finished in 1 minute 49.84 seconds (files took 1.05 seconds to load)
         
     | 
| 
      
 117 
     | 
    
         
            +
            460 examples, 2 failures, 2 pending
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
            Failed examples:
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
            rspec ./spec/punit/schedule_spec.rb:64 # Flor punit schedule cron triggers repeatedly
         
     | 
| 
      
 122 
     | 
    
         
            +
            rspec ./spec/unit/hooks_spec.rb:95 # Flor unit Flor::Scheduler#hook may filter on point:/p:
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
    
        data/lib/flor/colours.rb
    ADDED
    
    | 
         @@ -0,0 +1,140 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (c) 2015-2017, John Mettraux, jmettraux+flor@gmail.com
         
     | 
| 
      
 3 
     | 
    
         
            +
            #
         
     | 
| 
      
 4 
     | 
    
         
            +
            # Permission is hereby granted, free of charge, to any person obtaining a copy
         
     | 
| 
      
 5 
     | 
    
         
            +
            # of this software and associated documentation files (the "Software"), to deal
         
     | 
| 
      
 6 
     | 
    
         
            +
            # in the Software without restriction, including without limitation the rights
         
     | 
| 
      
 7 
     | 
    
         
            +
            # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
         
     | 
| 
      
 8 
     | 
    
         
            +
            # copies of the Software, and to permit persons to whom the Software is
         
     | 
| 
      
 9 
     | 
    
         
            +
            # furnished to do so, subject to the following conditions:
         
     | 
| 
      
 10 
     | 
    
         
            +
            #
         
     | 
| 
      
 11 
     | 
    
         
            +
            # The above copyright notice and this permission notice shall be included in
         
     | 
| 
      
 12 
     | 
    
         
            +
            # all copies or substantial portions of the Software.
         
     | 
| 
      
 13 
     | 
    
         
            +
            #
         
     | 
| 
      
 14 
     | 
    
         
            +
            # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
         
     | 
| 
      
 15 
     | 
    
         
            +
            # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
         
     | 
| 
      
 16 
     | 
    
         
            +
            # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
         
     | 
| 
      
 17 
     | 
    
         
            +
            # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
         
     | 
| 
      
 18 
     | 
    
         
            +
            # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
         
     | 
| 
      
 19 
     | 
    
         
            +
            # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
         
     | 
| 
      
 20 
     | 
    
         
            +
            # THE SOFTWARE.
         
     | 
| 
      
 21 
     | 
    
         
            +
            #
         
     | 
| 
      
 22 
     | 
    
         
            +
            # Made in Japan.
         
     | 
| 
      
 23 
     | 
    
         
            +
            #++
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            module Flor
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              class Colours
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                def reset; "[0;0m"; end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                def bright;      "[1m"; end
         
     | 
| 
      
 33 
     | 
    
         
            +
                def dim;         "[2m"; end
         
     | 
| 
      
 34 
     | 
    
         
            +
                def underlined;  "[4m"; end
         
     | 
| 
      
 35 
     | 
    
         
            +
                def blink;       "[5m"; end
         
     | 
| 
      
 36 
     | 
    
         
            +
                def reverse;     "[7m"; end
         
     | 
| 
      
 37 
     | 
    
         
            +
                def hidden;      "[8m"; end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                def default;        "[39m"; end
         
     | 
| 
      
 40 
     | 
    
         
            +
                def black;          "[30m"; end
         
     | 
| 
      
 41 
     | 
    
         
            +
                def red;            "[31m"; end
         
     | 
| 
      
 42 
     | 
    
         
            +
                def green;          "[32m"; end
         
     | 
| 
      
 43 
     | 
    
         
            +
                def yellow;         "[33m"; end
         
     | 
| 
      
 44 
     | 
    
         
            +
                def blue;           "[34m"; end
         
     | 
| 
      
 45 
     | 
    
         
            +
                def magenta;        "[35m"; end
         
     | 
| 
      
 46 
     | 
    
         
            +
                def cyan;           "[36m"; end
         
     | 
| 
      
 47 
     | 
    
         
            +
                def light_gray;     "[37m"; end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                def dark_gray;      "[90m"; end
         
     | 
| 
      
 50 
     | 
    
         
            +
                def light_red;      "[91m"; end
         
     | 
| 
      
 51 
     | 
    
         
            +
                def light_green;    "[92m"; end
         
     | 
| 
      
 52 
     | 
    
         
            +
                def light_yellow;   "[93m"; end
         
     | 
| 
      
 53 
     | 
    
         
            +
                def light_blue;     "[94m"; end
         
     | 
| 
      
 54 
     | 
    
         
            +
                def light_magenta;  "[95m"; end
         
     | 
| 
      
 55 
     | 
    
         
            +
                def light_cyan;     "[96m"; end
         
     | 
| 
      
 56 
     | 
    
         
            +
                def white;          "[97m"; end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                def bg_default;        "[49m"; end
         
     | 
| 
      
 59 
     | 
    
         
            +
                def bg_black;          "[40m"; end
         
     | 
| 
      
 60 
     | 
    
         
            +
                def bg_red;            "[41m"; end
         
     | 
| 
      
 61 
     | 
    
         
            +
                def bg_green;          "[42m"; end
         
     | 
| 
      
 62 
     | 
    
         
            +
                def bg_yellow;         "[43m"; end
         
     | 
| 
      
 63 
     | 
    
         
            +
                def bg_blue;           "[44m"; end
         
     | 
| 
      
 64 
     | 
    
         
            +
                def bg_magenta;        "[45m"; end
         
     | 
| 
      
 65 
     | 
    
         
            +
                def bg_cyan;           "[46m"; end
         
     | 
| 
      
 66 
     | 
    
         
            +
                def bg_light_gray;     "[47m"; end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                def bg_dark_gray;      "[100m"; end
         
     | 
| 
      
 69 
     | 
    
         
            +
                def bg_light_red;      "[101m"; end
         
     | 
| 
      
 70 
     | 
    
         
            +
                def bg_light_green;    "[102m"; end
         
     | 
| 
      
 71 
     | 
    
         
            +
                def bg_light_yellow;   "[103m"; end
         
     | 
| 
      
 72 
     | 
    
         
            +
                def bg_light_blue;     "[104m"; end
         
     | 
| 
      
 73 
     | 
    
         
            +
                def bg_light_magenta;  "[105m"; end
         
     | 
| 
      
 74 
     | 
    
         
            +
                def bg_light_cyan;     "[106m"; end
         
     | 
| 
      
 75 
     | 
    
         
            +
                def bg_white;          "[107m"; end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                alias brown yellow
         
     | 
| 
      
 78 
     | 
    
         
            +
                alias purple magenta
         
     | 
| 
      
 79 
     | 
    
         
            +
                alias dark_grey dark_gray
         
     | 
| 
      
 80 
     | 
    
         
            +
                alias light_grey light_gray
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                alias rd red
         
     | 
| 
      
 83 
     | 
    
         
            +
                alias bl blue
         
     | 
| 
      
 84 
     | 
    
         
            +
                alias bu blue
         
     | 
| 
      
 85 
     | 
    
         
            +
                alias ba black
         
     | 
| 
      
 86 
     | 
    
         
            +
                alias bk black
         
     | 
| 
      
 87 
     | 
    
         
            +
                alias gn green
         
     | 
| 
      
 88 
     | 
    
         
            +
                alias gr green
         
     | 
| 
      
 89 
     | 
    
         
            +
                alias dg dark_gray
         
     | 
| 
      
 90 
     | 
    
         
            +
                alias gy light_gray
         
     | 
| 
      
 91 
     | 
    
         
            +
                alias lg light_gray
         
     | 
| 
      
 92 
     | 
    
         
            +
                alias yl yellow
         
     | 
| 
      
 93 
     | 
    
         
            +
                alias ma magenta
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                alias rs reset
         
     | 
| 
      
 96 
     | 
    
         
            +
                alias br bright
         
     | 
| 
      
 97 
     | 
    
         
            +
                alias un underlined
         
     | 
| 
      
 98 
     | 
    
         
            +
                alias rv reverse
         
     | 
| 
      
 99 
     | 
    
         
            +
                alias bn blink
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                alias blg bg_light_gray
         
     | 
| 
      
 102 
     | 
    
         
            +
                alias bri bright
         
     | 
| 
      
 103 
     | 
    
         
            +
                alias und underlined
         
     | 
| 
      
 104 
     | 
    
         
            +
                alias rev reverse
         
     | 
| 
      
 105 
     | 
    
         
            +
              end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
              class NoColours < Colours
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                %w[
         
     | 
| 
      
 110 
     | 
    
         
            +
                  reset
         
     | 
| 
      
 111 
     | 
    
         
            +
                  bright dim underlined blink reverse hidden
         
     | 
| 
      
 112 
     | 
    
         
            +
                  default black red green yellow blue magenta cyan light_gray
         
     | 
| 
      
 113 
     | 
    
         
            +
                  dark_gray light_red light_green light_yellow light_blue light_magenta
         
     | 
| 
      
 114 
     | 
    
         
            +
                  light_cyan white
         
     | 
| 
      
 115 
     | 
    
         
            +
                  bg_default bg_black bg_red bg_green bg_yellow bg_blue bg_magenta bg_cyan
         
     | 
| 
      
 116 
     | 
    
         
            +
                  bg_light_gray
         
     | 
| 
      
 117 
     | 
    
         
            +
                  bg_dark_gray bg_light_red bg_light_green bg_light_yellow bg_light_blue
         
     | 
| 
      
 118 
     | 
    
         
            +
                  bg_light_magenta bg_light_cyan bg_white
         
     | 
| 
      
 119 
     | 
    
         
            +
                ].each { |m| define_method(m) { '' } }
         
     | 
| 
      
 120 
     | 
    
         
            +
              end
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
              @colours = Colours.new
         
     | 
| 
      
 123 
     | 
    
         
            +
              @no_colours = NoColours.new
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
              def self.no_colours
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                @no_colours
         
     | 
| 
      
 128 
     | 
    
         
            +
              end
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
              def self.colours(opts={})
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
                return @no_colours unless $stdout.tty?
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                opts[:colour] = true unless opts.has_key?(:color) || opts.has_key?(:colour)
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
                return @colours if opts[:color] || opts[:colour]
         
     | 
| 
      
 137 
     | 
    
         
            +
                @no_colours
         
     | 
| 
      
 138 
     | 
    
         
            +
              end
         
     | 
| 
      
 139 
     | 
    
         
            +
            end
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
    
        data/lib/flor/conf.rb
    ADDED
    
    | 
         @@ -0,0 +1,88 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (c) 2015-2017, John Mettraux, jmettraux+flor@gmail.com
         
     | 
| 
      
 3 
     | 
    
         
            +
            #
         
     | 
| 
      
 4 
     | 
    
         
            +
            # Permission is hereby granted, free of charge, to any person obtaining a copy
         
     | 
| 
      
 5 
     | 
    
         
            +
            # of this software and associated documentation files (the "Software"), to deal
         
     | 
| 
      
 6 
     | 
    
         
            +
            # in the Software without restriction, including without limitation the rights
         
     | 
| 
      
 7 
     | 
    
         
            +
            # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
         
     | 
| 
      
 8 
     | 
    
         
            +
            # copies of the Software, and to permit persons to whom the Software is
         
     | 
| 
      
 9 
     | 
    
         
            +
            # furnished to do so, subject to the following conditions:
         
     | 
| 
      
 10 
     | 
    
         
            +
            #
         
     | 
| 
      
 11 
     | 
    
         
            +
            # The above copyright notice and this permission notice shall be included in
         
     | 
| 
      
 12 
     | 
    
         
            +
            # all copies or substantial portions of the Software.
         
     | 
| 
      
 13 
     | 
    
         
            +
            #
         
     | 
| 
      
 14 
     | 
    
         
            +
            # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
         
     | 
| 
      
 15 
     | 
    
         
            +
            # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
         
     | 
| 
      
 16 
     | 
    
         
            +
            # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
         
     | 
| 
      
 17 
     | 
    
         
            +
            # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
         
     | 
| 
      
 18 
     | 
    
         
            +
            # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
         
     | 
| 
      
 19 
     | 
    
         
            +
            # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
         
     | 
| 
      
 20 
     | 
    
         
            +
            # THE SOFTWARE.
         
     | 
| 
      
 21 
     | 
    
         
            +
            #
         
     | 
| 
      
 22 
     | 
    
         
            +
            # Made in Japan.
         
     | 
| 
      
 23 
     | 
    
         
            +
            #++
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            module Flor
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              module Conf
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                #
         
     | 
| 
      
 31 
     | 
    
         
            +
                # * uni_ unit prefix (or no prefix like for :env)
         
     | 
| 
      
 32 
     | 
    
         
            +
                # * sch_ scheduler prefix
         
     | 
| 
      
 33 
     | 
    
         
            +
                # * sto_ storage prefix
         
     | 
| 
      
 34 
     | 
    
         
            +
                # * exe_ executor prefix
         
     | 
| 
      
 35 
     | 
    
         
            +
                # * log_ logger prefix
         
     | 
| 
      
 36 
     | 
    
         
            +
                #
         
     | 
| 
      
 37 
     | 
    
         
            +
                #
         
     | 
| 
      
 38 
     | 
    
         
            +
                # * :sch_heart_rate
         
     | 
| 
      
 39 
     | 
    
         
            +
                #   defaults to 0.3s, checks for exids to run and timers to triggers
         
     | 
| 
      
 40 
     | 
    
         
            +
                #   at least every 0.3s
         
     | 
| 
      
 41 
     | 
    
         
            +
                #
         
     | 
| 
      
 42 
     | 
    
         
            +
                # * :sch_reload_frequency
         
     | 
| 
      
 43 
     | 
    
         
            +
                #   resync (reload) with db after how much time? (defaults to 60 (seconds))
         
     | 
| 
      
 44 
     | 
    
         
            +
                #
         
     | 
| 
      
 45 
     | 
    
         
            +
                # * :sch_max_executors
         
     | 
| 
      
 46 
     | 
    
         
            +
                #   how many executor thread at most? (defaults to 7, 1 is OK in certain
         
     | 
| 
      
 47 
     | 
    
         
            +
                #   environments)
         
     | 
| 
      
 48 
     | 
    
         
            +
                #
         
     | 
| 
      
 49 
     | 
    
         
            +
                # * :exe_max_messages
         
     | 
| 
      
 50 
     | 
    
         
            +
                #   how many messages will an executor run in a single session
         
     | 
| 
      
 51 
     | 
    
         
            +
                #   (before quitting and passing the hand)
         
     | 
| 
      
 52 
     | 
    
         
            +
                #
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                def self.read(s)
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                  Flor::ConfExecutor.interpret(s)
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                LOG_DBG_KEYS = %w[ dbg msg err src tree tree_rw run ]
         
     | 
| 
      
 60 
     | 
    
         
            +
                LOG_ALL_KEYS = %w[ all log sto ] + LOG_DBG_KEYS
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                def self.read_env
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                  h =
         
     | 
| 
      
 65 
     | 
    
         
            +
                    (ENV['FLOR_DEBUG'] || '').split(',').inject({}) { |h, kv|
         
     | 
| 
      
 66 
     | 
    
         
            +
                      k, v = kv.split(':')
         
     | 
| 
      
 67 
     | 
    
         
            +
                      k = 'sto' if k == 'db'
         
     | 
| 
      
 68 
     | 
    
         
            +
                      k = "log_#{k}" if LOG_ALL_KEYS.include?(k)
         
     | 
| 
      
 69 
     | 
    
         
            +
                      h[k] = v ? JSON.parse(v) : true
         
     | 
| 
      
 70 
     | 
    
         
            +
                      h
         
     | 
| 
      
 71 
     | 
    
         
            +
                    }
         
     | 
| 
      
 72 
     | 
    
         
            +
                  LOG_ALL_KEYS.each { |k| h["log_#{k}"] = 1 } if h['log_all']
         
     | 
| 
      
 73 
     | 
    
         
            +
                  LOG_DBG_KEYS.each { |k| h["log_#{k}"] = 1 } if h['log_dbg']
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                  h
         
     | 
| 
      
 76 
     | 
    
         
            +
                end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                def self.get_class(conf, key)
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                  if v = conf[key]
         
     | 
| 
      
 81 
     | 
    
         
            +
                    Kernel.const_get(v)
         
     | 
| 
      
 82 
     | 
    
         
            +
                  else
         
     | 
| 
      
 83 
     | 
    
         
            +
                    nil
         
     | 
| 
      
 84 
     | 
    
         
            +
                  end
         
     | 
| 
      
 85 
     | 
    
         
            +
                end
         
     | 
| 
      
 86 
     | 
    
         
            +
              end
         
     | 
| 
      
 87 
     | 
    
         
            +
            end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     |