flor 0.0.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build Status](https://secure.travis-ci.org/floraison/flor.svg)](http://travis-ci.org/floraison/flor)
|
5
|
+
[![Gem Version](https://badge.fury.io/rb/flor.svg)](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
|
+
|