flor 0.17.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +48 -0
- data/CREDITS.md +1 -0
- data/LICENSE.txt +1 -1
- data/Makefile +1 -1
- data/README.md +34 -2
- data/flor.gemspec +8 -9
- data/lib/flor.rb +3 -2
- data/lib/flor/colours.rb +5 -3
- data/lib/flor/conf.rb +1 -0
- data/lib/flor/core.rb +9 -8
- data/lib/flor/core/executor.rb +25 -22
- data/lib/flor/core/node.rb +1 -13
- data/lib/flor/core/procedure.rb +57 -12
- data/lib/flor/core/texecutor.rb +35 -3
- data/lib/flor/djan.rb +1 -0
- data/lib/flor/errors.rb +1 -0
- data/lib/flor/flor.rb +173 -29
- data/lib/flor/id.rb +5 -1
- data/lib/flor/log.rb +20 -8
- data/lib/flor/migrations/0001_tables.rb +1 -0
- data/lib/flor/migrations/0002_cunit_and_munit.rb +1 -0
- data/lib/flor/migrations/0003_timer_onid_bnid.rb +1 -0
- data/lib/flor/migrations/0004_trap_bnid.rb +1 -0
- data/lib/flor/migrations/0005_pointer_content.rb +1 -0
- data/lib/flor/parser.rb +19 -11
- data/lib/flor/pcore/_apply.rb +1 -0
- data/lib/flor/pcore/_arr.rb +1 -0
- data/lib/flor/pcore/_atom.rb +1 -0
- data/lib/flor/pcore/_att.rb +1 -0
- data/lib/flor/pcore/_coll.rb +1 -0
- data/lib/flor/pcore/_dmute.rb +5 -1
- data/lib/flor/pcore/_dol.rb +1 -0
- data/lib/flor/pcore/_dqs.rb +1 -0
- data/lib/flor/pcore/_dump.rb +1 -0
- data/lib/flor/pcore/_err.rb +1 -0
- data/lib/flor/pcore/_head.rb +1 -0
- data/lib/flor/pcore/_obj.rb +1 -0
- data/lib/flor/pcore/_pat_.rb +1 -0
- data/lib/flor/pcore/_pat_arr.rb +1 -0
- data/lib/flor/pcore/_pat_guard.rb +1 -0
- data/lib/flor/pcore/_pat_obj.rb +1 -0
- data/lib/flor/pcore/_pat_or.rb +1 -0
- data/lib/flor/pcore/_pat_regex.rb +1 -0
- data/lib/flor/pcore/_ref.rb +1 -0
- data/lib/flor/pcore/_rxs.rb +1 -0
- data/lib/flor/pcore/_skip.rb +1 -0
- data/lib/flor/pcore/_val.rb +1 -0
- data/lib/flor/pcore/all.rb +1 -0
- data/lib/flor/pcore/andor.rb +1 -0
- data/lib/flor/pcore/any.rb +1 -0
- data/lib/flor/pcore/apply.rb +1 -0
- data/lib/flor/pcore/arith.rb +1 -0
- data/lib/flor/pcore/array_qmark.rb +1 -0
- data/lib/flor/pcore/break.rb +13 -1
- data/lib/flor/pcore/case.rb +1 -0
- data/lib/flor/pcore/cmp.rb +1 -0
- data/lib/flor/pcore/collect.rb +2 -1
- data/lib/flor/pcore/cond.rb +1 -0
- data/lib/flor/pcore/cursor.rb +45 -3
- data/lib/flor/pcore/define.rb +1 -0
- data/lib/flor/pcore/detect.rb +1 -0
- data/lib/flor/pcore/do_return.rb +1 -0
- data/lib/flor/pcore/each.rb +1 -0
- data/lib/flor/pcore/echo.rb +1 -0
- data/lib/flor/pcore/empty.rb +1 -0
- data/lib/flor/pcore/fail.rb +1 -0
- data/lib/flor/pcore/filter.rb +1 -0
- data/lib/flor/pcore/find.rb +1 -0
- data/lib/flor/pcore/flatten.rb +1 -0
- data/lib/flor/pcore/for_each.rb +1 -0
- data/lib/flor/pcore/if.rb +1 -0
- data/lib/flor/pcore/includes.rb +1 -0
- data/lib/flor/pcore/inject.rb +1 -0
- data/lib/flor/pcore/iterator.rb +1 -0
- data/lib/flor/pcore/keys.rb +1 -0
- data/lib/flor/pcore/length.rb +1 -0
- data/lib/flor/pcore/loop.rb +1 -0
- data/lib/flor/pcore/map.rb +1 -0
- data/lib/flor/pcore/match.rb +1 -0
- data/lib/flor/pcore/matchr.rb +1 -0
- data/lib/flor/pcore/max.rb +1 -0
- data/lib/flor/pcore/merge.rb +1 -0
- data/lib/flor/pcore/move.rb +1 -0
- data/lib/flor/pcore/noeval.rb +1 -0
- data/lib/flor/pcore/noret.rb +1 -0
- data/lib/flor/pcore/not.rb +1 -0
- data/lib/flor/pcore/on.rb +34 -9
- data/lib/flor/pcore/on_cancel.rb +1 -0
- data/lib/flor/pcore/on_error.rb +1 -0
- data/lib/flor/pcore/push.rb +1 -0
- data/lib/flor/pcore/rand.rb +1 -0
- data/lib/flor/pcore/range.rb +1 -0
- data/lib/flor/pcore/reduce.rb +1 -0
- data/lib/flor/pcore/return.rb +1 -0
- data/lib/flor/pcore/reverse.rb +1 -0
- data/lib/flor/pcore/select.rb +1 -0
- data/lib/flor/pcore/sequence.rb +49 -0
- data/lib/flor/pcore/set.rb +1 -0
- data/lib/flor/pcore/shuffle.rb +1 -0
- data/lib/flor/pcore/slice.rb +1 -0
- data/lib/flor/pcore/sort.rb +1 -0
- data/lib/flor/pcore/sort_by.rb +1 -0
- data/lib/flor/pcore/split.rb +1 -0
- data/lib/flor/pcore/stall.rb +1 -0
- data/lib/flor/pcore/strings.rb +1 -0
- data/lib/flor/pcore/timestamp.rb +1 -0
- data/lib/flor/pcore/to_array.rb +1 -0
- data/lib/flor/pcore/twig.rb +1 -0
- data/lib/flor/pcore/type_of.rb +1 -0
- data/lib/flor/pcore/until.rb +1 -0
- data/lib/flor/punit/abort.rb +50 -0
- data/lib/flor/punit/c_collect.rb +1 -0
- data/lib/flor/punit/c_each.rb +19 -0
- data/lib/flor/punit/c_for_each.rb +2 -1
- data/lib/flor/punit/c_iterator.rb +2 -1
- data/lib/flor/punit/c_map.rb +1 -0
- data/lib/flor/punit/cancel.rb +10 -1
- data/lib/flor/punit/concurrence.rb +7 -5
- data/lib/flor/punit/cron.rb +1 -0
- data/lib/flor/punit/do_trap.rb +1 -0
- data/lib/flor/punit/every.rb +1 -0
- data/lib/flor/punit/graft.rb +1 -0
- data/lib/flor/punit/{m_ram.rb → m_receive_and_merge.rb} +5 -4
- data/lib/flor/punit/on_timeout.rb +1 -0
- data/lib/flor/punit/part.rb +1 -0
- data/lib/flor/punit/schedule.rb +1 -0
- data/lib/flor/punit/signal.rb +30 -5
- data/lib/flor/punit/sleep.rb +1 -0
- data/lib/flor/punit/task.rb +9 -2
- data/lib/flor/punit/trace.rb +1 -0
- data/lib/flor/punit/trap.rb +41 -1
- data/lib/flor/to_string.rb +1 -0
- data/lib/flor/tools/env.rb +1 -0
- data/lib/flor/tools/firb.rb +33 -0
- data/lib/flor/tools/shell.rb +13 -3
- data/lib/flor/tools/shell_out.rb +1 -0
- data/lib/flor/tt.rb +98 -0
- data/lib/flor/unit.rb +3 -0
- data/lib/flor/unit/caller.rb +158 -23
- data/lib/flor/unit/caller_jruby.rb +133 -0
- data/lib/flor/unit/dump.rb +36 -0
- data/lib/flor/unit/executor.rb +28 -18
- data/lib/flor/unit/ganger.rb +30 -18
- data/lib/flor/unit/gangers.rb +125 -0
- data/lib/flor/unit/hloader.rb +34 -7
- data/lib/flor/unit/hook.rb +3 -0
- data/lib/flor/unit/hooker.rb +32 -15
- data/lib/flor/unit/journal.rb +23 -0
- data/lib/flor/unit/loader.rb +142 -15
- data/lib/flor/unit/logger.rb +35 -7
- data/lib/flor/unit/models.rb +48 -10
- data/lib/flor/unit/models/execution.rb +51 -0
- data/lib/flor/unit/models/message.rb +6 -0
- data/lib/flor/unit/models/pointer.rb +1 -0
- data/lib/flor/unit/models/timer.rb +1 -0
- data/lib/flor/unit/models/trace.rb +1 -0
- data/lib/flor/unit/models/trap.rb +15 -6
- data/lib/flor/unit/scheduler.rb +211 -61
- data/lib/flor/unit/spooler.rb +1 -0
- data/lib/flor/unit/storage.rb +117 -73
- data/lib/flor/unit/taskers.rb +115 -1
- data/lib/flor/unit/waiter.rb +22 -17
- data/lib/flor/unit/wlist.rb +19 -8
- metadata +26 -45
data/lib/flor/pcore/type_of.rb
CHANGED
data/lib/flor/pcore/until.rb
CHANGED
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Flor::Pro::Abort < Flor::Procedure
|
4
|
+
#
|
5
|
+
# Cancels the current execution.
|
6
|
+
#
|
7
|
+
# Cancels all the root nodes at once. Is usually the equivalent of
|
8
|
+
# `cancel '0'` but sometimes the root nodes are gone...
|
9
|
+
#
|
10
|
+
# "kabort" is like "abort" but the cancel flavour is 'kill', so that
|
11
|
+
# cancel handlers are ignored.
|
12
|
+
#
|
13
|
+
# ```
|
14
|
+
# # ...
|
15
|
+
# cursor
|
16
|
+
# task 'prepare mandate'
|
17
|
+
# abort _ if f.outcome == 'reject'
|
18
|
+
# task 'sign mandate'
|
19
|
+
# # ...
|
20
|
+
# ```
|
21
|
+
#
|
22
|
+
# ## see also
|
23
|
+
#
|
24
|
+
# Cancel, kill
|
25
|
+
|
26
|
+
name 'abort', 'kabort'
|
27
|
+
|
28
|
+
def receive_last
|
29
|
+
|
30
|
+
fla = heap == 'kabort' ? 'kill' : 'cancel'
|
31
|
+
|
32
|
+
nodes = @execution['nodes']
|
33
|
+
nids = nodes.keys.dup
|
34
|
+
|
35
|
+
@execution['nodes'].values.each do |n|
|
36
|
+
|
37
|
+
#p n.select { |k, v| %w[ nid can parent cnodes ].include?(k) }
|
38
|
+
nid = n['nid']
|
39
|
+
pa = nodes[n['parent']]
|
40
|
+
|
41
|
+
nids.delete(nid) if pa && pa['cnodes'].include?(nid)
|
42
|
+
end
|
43
|
+
#p nids
|
44
|
+
|
45
|
+
wrap_cancel_nodes(nids, { 'flavour' => fla })
|
46
|
+
.each { |m| m['from'] = '9' }
|
47
|
+
# since '9' isn't the parent of any node
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
data/lib/flor/punit/c_collect.rb
CHANGED
data/lib/flor/punit/c_each.rb
CHANGED
@@ -1,5 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
class Flor::Pro::Ceach < Flor::Macro::Iterator
|
4
|
+
#
|
5
|
+
# Concurrent "each".
|
6
|
+
#
|
7
|
+
# ```
|
8
|
+
# ceach [ alice bob charly ]
|
9
|
+
# task elt "prepare monthly report"
|
10
|
+
# ```
|
11
|
+
# which is equivalent to
|
12
|
+
# ```
|
13
|
+
# concurrence
|
14
|
+
# task 'alice' "prepare monthly report"
|
15
|
+
# task 'bob' "prepare monthly report"
|
16
|
+
# task 'charly' "prepare monthly report"
|
17
|
+
# ```
|
18
|
+
#
|
19
|
+
# ## see also
|
20
|
+
#
|
21
|
+
# For-each, c-map, and c-for-each.
|
3
22
|
|
4
23
|
names %w[ ceach c-each ]
|
5
24
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
require 'flor/punit/c_iterator'
|
3
4
|
|
@@ -27,7 +28,7 @@ class Flor::Pro::CforEach < Flor::Pro::ConcurrentIterator
|
|
27
28
|
#
|
28
29
|
# ## see also
|
29
30
|
#
|
30
|
-
# For-each,
|
31
|
+
# For-each, c-map, and c-each.
|
31
32
|
|
32
33
|
name 'c-for-each'
|
33
34
|
|
data/lib/flor/punit/c_map.rb
CHANGED
data/lib/flor/punit/cancel.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
class Flor::Pro::Cancel < Flor::Procedure
|
3
4
|
#
|
@@ -29,7 +30,15 @@ class Flor::Pro::Cancel < Flor::Procedure
|
|
29
30
|
# ```
|
30
31
|
# But it's kind of brittle compared to using tags.
|
31
32
|
#
|
32
|
-
#
|
33
|
+
# ## kill
|
34
|
+
#
|
35
|
+
# "kill" is equivalent to "cancel", but once called, cancel handlers are
|
36
|
+
# ignored, it cancels through.
|
37
|
+
#
|
38
|
+
#
|
39
|
+
# ## see also
|
40
|
+
#
|
41
|
+
# On_cancel, on
|
33
42
|
|
34
43
|
name 'cancel', 'kill'
|
35
44
|
# ruote had "undo" as well...
|
@@ -1,5 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
|
-
require 'flor/punit/
|
3
|
+
require 'flor/punit/m_receive_and_merge'
|
3
4
|
|
4
5
|
|
5
6
|
class Flor::Pro::Concurrence < Flor::Procedure
|
@@ -386,10 +387,11 @@ class Flor::Pro::Concurrence < Flor::Procedure
|
|
386
387
|
|
387
388
|
REWRITE_AS_ATTS = %w[
|
388
389
|
on_receive on_merge
|
389
|
-
child_on_error children_on_error
|
390
|
-
|
391
|
-
|
392
|
-
|
390
|
+
child_on_error children_on_error
|
391
|
+
].freeze
|
392
|
+
#
|
393
|
+
# heads of the child nodes that should get rewritten as attributes
|
394
|
+
# of the concurrence ...
|
393
395
|
|
394
396
|
def pre_execute_rewrite
|
395
397
|
|
data/lib/flor/punit/cron.rb
CHANGED
data/lib/flor/punit/do_trap.rb
CHANGED
data/lib/flor/punit/every.rb
CHANGED
data/lib/flor/punit/graft.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
# Module extracted out of "concurrence", deals with receivers and mergers.
|
3
4
|
#
|
@@ -178,15 +179,15 @@ module Flor::Pro::ReceiveAndMerge
|
|
178
179
|
# * ignore
|
179
180
|
# * stack
|
180
181
|
|
181
|
-
STACK_REX = /\Astack(?::([-_a-zA-Z0-9]+))?\z
|
182
|
+
STACK_REX = /\Astack(?::([-_a-zA-Z0-9]+))?\z/.freeze
|
182
183
|
|
183
|
-
TRANSLATORS = { STACK_REX => 'k', /\Atail\z/ => 'a' }
|
184
|
+
TRANSLATORS = { STACK_REX => 'k', /\Atail\z/ => 'a' }.freeze
|
184
185
|
|
185
186
|
MORDERS = {
|
186
|
-
'f' => :first, 'l' => :last, /[tnh]/ => :north, /[bsa]/ => :south }
|
187
|
+
'f' => :first, 'l' => :last, /[tnh]/ => :north, /[bsa]/ => :south }.freeze
|
187
188
|
MMERGERS = {
|
188
189
|
'd' => :deep, /[mp]/ => :mix, 'o' => :override, 'i' => :ignore,
|
189
|
-
'k' => :stack }
|
190
|
+
'k' => :stack }.freeze
|
190
191
|
|
191
192
|
def default_merger
|
192
193
|
|
data/lib/flor/punit/part.rb
CHANGED
data/lib/flor/punit/schedule.rb
CHANGED
data/lib/flor/punit/signal.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
class Flor::Pro::Signal < Flor::Procedure
|
3
4
|
#
|
@@ -51,6 +52,26 @@ class Flor::Pro::Signal < Flor::Procedure
|
|
51
52
|
# flor_unit.signal('close', exid: execution_id, payload: { 'f0' => 'zero' })
|
52
53
|
# ```
|
53
54
|
#
|
55
|
+
# ## signalling another execution
|
56
|
+
#
|
57
|
+
# If the exid of execution A is known in execution B, execution B can
|
58
|
+
# send a signal to A.
|
59
|
+
#
|
60
|
+
# ```ruby
|
61
|
+
# exid0 = @unit.launch(
|
62
|
+
# %q{
|
63
|
+
# trap signal: 'green' # block until receiving the 'green' signal
|
64
|
+
# set f.done true
|
65
|
+
# })
|
66
|
+
# @unit.launch(
|
67
|
+
# %q{
|
68
|
+
# set f.a 'a'
|
69
|
+
# signal exid: f.exid0 'green' # send 'green' signal to exid0
|
70
|
+
# set f.b 'b'
|
71
|
+
# },
|
72
|
+
# payload: { 'exid0' => exid0 })
|
73
|
+
# ```
|
74
|
+
#
|
54
75
|
# ## see also
|
55
76
|
#
|
56
77
|
# On and trap.
|
@@ -64,14 +85,18 @@ class Flor::Pro::Signal < Flor::Procedure
|
|
64
85
|
|
65
86
|
def receive_last
|
66
87
|
|
67
|
-
|
88
|
+
na = att('name', nil)
|
89
|
+
ei = att('exid') || exid
|
90
|
+
pl = att('payload') || payload.copy_current
|
68
91
|
|
69
|
-
return super unless
|
92
|
+
return super unless na
|
70
93
|
|
71
94
|
wrap(
|
72
|
-
'point' => 'signal',
|
73
|
-
'
|
74
|
-
|
95
|
+
'point' => 'signal',
|
96
|
+
'exid' => ei, 'nid' => nid,
|
97
|
+
'name' => na, 'payload' => pl
|
98
|
+
) +
|
99
|
+
super
|
75
100
|
end
|
76
101
|
end
|
77
102
|
|
data/lib/flor/punit/sleep.rb
CHANGED
data/lib/flor/punit/task.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
class Flor::Pro::Task < Flor::Procedure
|
3
4
|
#
|
@@ -68,6 +69,9 @@ class Flor::Pro::Task < Flor::Procedure
|
|
68
69
|
# clean_up assign: 'alan'
|
69
70
|
# "clean up" assign: 'alan'
|
70
71
|
|
72
|
+
@node['message'] = message
|
73
|
+
# keep copy for Executor#return integrity enforcement
|
74
|
+
|
71
75
|
nis = atts(nil)
|
72
76
|
ta = att('by', 'for', 'assign')
|
73
77
|
tn = att('with', 'task')
|
@@ -79,8 +83,7 @@ class Flor::Pro::Task < Flor::Procedure
|
|
79
83
|
|
80
84
|
attl, attd = determine_atts
|
81
85
|
|
82
|
-
@node['task'] =
|
83
|
-
{ 'tasker' => tasker, 'name' => taskname }
|
86
|
+
@node['task'] = { 'tasker' => tasker, 'name' => taskname }
|
84
87
|
|
85
88
|
wrap(
|
86
89
|
'point' => 'task',
|
@@ -96,6 +99,9 @@ class Flor::Pro::Task < Flor::Procedure
|
|
96
99
|
|
97
100
|
close_node
|
98
101
|
|
102
|
+
@node['message'] = message
|
103
|
+
# keep copy for Executor#return integrity enforcement
|
104
|
+
|
99
105
|
attl, attd = determine_atts
|
100
106
|
|
101
107
|
wrap(
|
@@ -103,6 +109,7 @@ class Flor::Pro::Task < Flor::Procedure
|
|
103
109
|
'exid' => exid, 'nid' => nid,
|
104
110
|
'tags' => list_tags,
|
105
111
|
'tasker' => att(nil),
|
112
|
+
'taskname' => @node['task']['name'],
|
106
113
|
'attl' => attl, 'attd' => attd,
|
107
114
|
'payload' => determine_payload)
|
108
115
|
end
|
data/lib/flor/punit/trace.rb
CHANGED
data/lib/flor/punit/trap.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
# Would it be worth the pain implementing bind:?
|
3
4
|
|
@@ -168,6 +169,12 @@ class Flor::Pro::Trap < Flor::Procedure
|
|
168
169
|
# (org.acme.accounting, org.acme.engineering, org.acme.whatever.x.y.z, ...)
|
169
170
|
#
|
170
171
|
#
|
172
|
+
# ## the bnid: directive
|
173
|
+
#
|
174
|
+
# "bound nid" by default is the nid of the parent expression to the "trap".
|
175
|
+
# With `bnid:`, one can bind a trap to another expression.
|
176
|
+
#
|
177
|
+
#
|
171
178
|
# ## the count: limit
|
172
179
|
#
|
173
180
|
# ```
|
@@ -178,6 +185,37 @@ class Flor::Pro::Trap < Flor::Procedure
|
|
178
185
|
# twice.
|
179
186
|
#
|
180
187
|
#
|
188
|
+
# ## the payload: directive
|
189
|
+
#
|
190
|
+
# The `payload:` attribute tells the trap what payload to hand to the
|
191
|
+
# trap handler.
|
192
|
+
#
|
193
|
+
# When `payload: 'event'`, the handler is given a copy of the fields as
|
194
|
+
# seen in the event that triggered the trap.
|
195
|
+
#
|
196
|
+
# When `payload: 'trap'`, the handler is given a copy of the fields as
|
197
|
+
# they were when and where the trap was set.
|
198
|
+
#
|
199
|
+
# When `payload: { a: 'A' }`, the given payload is used (here
|
200
|
+
# `{ 'a' => 'A' }`).
|
201
|
+
#
|
202
|
+
#
|
203
|
+
# ## blocking trap
|
204
|
+
#
|
205
|
+
# One can use a trap without a function. It will block the execution branch
|
206
|
+
# until the expect event, signal, etc occurs
|
207
|
+
# ```
|
208
|
+
# sequence
|
209
|
+
# technical_writer 'prepare documentation'
|
210
|
+
# team_manager 'submit documentation to review team'
|
211
|
+
# trap signal: 'green' # go on after the 'green' signal...
|
212
|
+
# team_manager 'deploy documentation'
|
213
|
+
# ```
|
214
|
+
# Here the execution will block after the team manager submits the doc
|
215
|
+
# for review. When the 'green' signal comes, the flow resumes to 'deploy
|
216
|
+
# documentation'.
|
217
|
+
#
|
218
|
+
#
|
181
219
|
# ## see also
|
182
220
|
#
|
183
221
|
# On and signal.
|
@@ -213,6 +251,8 @@ class Flor::Pro::Trap < Flor::Procedure
|
|
213
251
|
points = points.uniq if points
|
214
252
|
names = names.uniq if names
|
215
253
|
|
254
|
+
bnid = att('bnid', 'bind') || parent || '0'
|
255
|
+
|
216
256
|
msg =
|
217
257
|
if fun
|
218
258
|
apply(fun, [], tree[2], anid: false).first
|
@@ -222,7 +262,7 @@ class Flor::Pro::Trap < Flor::Procedure
|
|
222
262
|
|
223
263
|
tra = {}
|
224
264
|
tra['nid'] = nid
|
225
|
-
tra['bnid'] =
|
265
|
+
tra['bnid'] = bnid
|
226
266
|
tra['points'] = points
|
227
267
|
tra['tags'] = tags
|
228
268
|
tra['heaps'] = heaps
|
data/lib/flor/to_string.rb
CHANGED
data/lib/flor/tools/env.rb
CHANGED
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'irb'
|
4
|
+
|
5
|
+
#require 'sequel'
|
6
|
+
require 'flor'
|
7
|
+
require 'flor/unit'
|
8
|
+
|
9
|
+
|
10
|
+
p [ RUBY_VERSION, RUBY_PLATFORM ]
|
11
|
+
|
12
|
+
puts
|
13
|
+
|
14
|
+
ENV.each do |k, v|
|
15
|
+
next unless k.match?(/RUBY|GEM/)
|
16
|
+
puts "* #{k}: #{v}"
|
17
|
+
end
|
18
|
+
|
19
|
+
ARGV.each do |arg|
|
20
|
+
if arg.match(/:/)
|
21
|
+
DB = Sequel.connect(arg)
|
22
|
+
p DB
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
#MODELS = [ :executions, :timers, :traces, :traps, :pointers, :messages ]
|
27
|
+
if defined?(DB)
|
28
|
+
Flor::Message.dataset = DB[:flor_messages]
|
29
|
+
end
|
30
|
+
|
31
|
+
ARGV.clear
|
32
|
+
IRB.start
|
33
|
+
|