flor 0.9.5 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +10 -0
- data/Makefile +13 -5
- data/README.md +0 -35
- data/flor.gemspec +1 -0
- data/lib/flor.rb +6 -24
- data/lib/flor/changes.rb +26 -0
- data/lib/flor/colours.rb +65 -31
- data/lib/flor/conf.rb +84 -54
- data/lib/flor/core.rb +0 -23
- data/lib/flor/core/executor.rb +12 -42
- data/lib/flor/core/node.rb +19 -24
- data/lib/flor/core/procedure.rb +13 -24
- data/lib/flor/core/texecutor.rb +10 -28
- data/lib/flor/deep.rb +152 -0
- data/lib/flor/djan.rb +200 -0
- data/lib/flor/dollar.rb +0 -24
- data/lib/flor/errors.rb +0 -24
- data/lib/flor/flor.rb +43 -296
- data/lib/flor/id.rb +90 -0
- data/lib/flor/log.rb +12 -35
- data/lib/flor/migrations/0002_cunit_and_munit.rb +86 -0
- data/lib/flor/parser.rb +40 -46
- data/lib/flor/pcore/_arr.rb +0 -24
- data/lib/flor/pcore/_atom.rb +0 -24
- data/lib/flor/pcore/_att.rb +3 -25
- data/lib/flor/pcore/_dump.rb +0 -24
- data/lib/flor/pcore/_err.rb +0 -24
- data/lib/flor/pcore/_happly.rb +0 -24
- data/lib/flor/pcore/_obj.rb +0 -24
- data/lib/flor/pcore/_skip.rb +0 -24
- data/lib/flor/pcore/arith.rb +0 -24
- data/lib/flor/pcore/break.rb +0 -24
- data/lib/flor/pcore/case.rb +127 -0
- data/lib/flor/pcore/cmp.rb +0 -24
- data/lib/flor/pcore/cond.rb +24 -24
- data/lib/flor/pcore/cursor.rb +0 -24
- data/lib/flor/pcore/define.rb +0 -24
- data/lib/flor/pcore/fail.rb +0 -24
- data/lib/flor/pcore/if.rb +39 -0
- data/lib/flor/pcore/loop.rb +0 -24
- data/lib/flor/pcore/map.rb +0 -24
- data/lib/flor/pcore/match.rb +0 -24
- data/lib/flor/pcore/move.rb +0 -24
- data/lib/flor/pcore/noeval.rb +0 -24
- data/lib/flor/pcore/noret.rb +0 -24
- data/lib/flor/pcore/push.rb +1 -25
- data/lib/flor/pcore/rand.rb +59 -0
- data/lib/flor/pcore/sequence.rb +0 -24
- data/lib/flor/pcore/set.rb +0 -24
- data/lib/flor/pcore/stall.rb +0 -24
- data/lib/flor/pcore/until.rb +0 -24
- data/lib/flor/pcore/val.rb +0 -24
- data/lib/flor/punit/cancel.rb +0 -24
- data/lib/flor/punit/cmap.rb +0 -24
- data/lib/flor/punit/concurrence.rb +54 -24
- data/lib/flor/punit/every.rb +0 -24
- data/lib/flor/punit/graft.rb +41 -0
- data/lib/flor/punit/on.rb +0 -24
- data/lib/flor/punit/schedule.rb +0 -24
- data/lib/flor/punit/signal.rb +0 -24
- data/lib/flor/punit/sleep.rb +0 -24
- data/lib/flor/punit/task.rb +0 -26
- data/lib/flor/punit/trace.rb +0 -24
- data/lib/flor/punit/trap.rb +0 -24
- data/lib/flor/to_string.rb +4 -25
- data/lib/flor/tools/env.rb +0 -23
- data/lib/flor/tools/shell.rb +810 -0
- data/lib/flor/unit.rb +0 -23
- data/lib/flor/unit/executor.rb +35 -31
- data/lib/flor/unit/ganger.rb +9 -34
- data/lib/flor/unit/hooker.rb +5 -25
- data/lib/flor/unit/journal.rb +0 -23
- data/lib/flor/unit/loader.rb +63 -94
- data/lib/flor/unit/logger.rb +8 -27
- data/lib/flor/unit/models.rb +0 -24
- data/lib/flor/unit/models/execution.rb +13 -24
- data/lib/flor/unit/models/pointer.rb +0 -24
- data/lib/flor/unit/models/timer.rb +0 -24
- data/lib/flor/unit/models/trace.rb +0 -24
- data/lib/flor/unit/models/trap.rb +0 -24
- data/lib/flor/unit/scheduler.rb +157 -128
- data/lib/flor/unit/storage.rb +224 -167
- data/lib/flor/unit/taskers.rb +38 -25
- data/lib/flor/unit/waiter.rb +7 -26
- data/lib/flor/unit/wlist.rb +8 -24
- metadata +28 -7
- data/fail.txt +0 -16
- data/intercepted.txt +0 -123
- data/lib/flor/pcore/ife.rb +0 -56
- data/lib/flor/tools/repl.rb +0 -231
- data/out.txt +0 -206
data/lib/flor/unit.rb
CHANGED
@@ -1,26 +1,3 @@
|
|
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
1
|
|
25
2
|
require 'sequel'
|
26
3
|
require 'sequel/extensions/migration'
|
data/lib/flor/unit/executor.rb
CHANGED
@@ -1,27 +1,3 @@
|
|
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
1
|
|
26
2
|
module Flor
|
27
3
|
|
@@ -30,15 +6,21 @@ module Flor
|
|
30
6
|
attr_reader :exid
|
31
7
|
attr_reader :consumed
|
32
8
|
|
33
|
-
def initialize(unit,
|
9
|
+
def initialize(unit, messages)
|
10
|
+
|
11
|
+
@exid = messages.first[:exid]
|
34
12
|
|
35
13
|
super(
|
36
14
|
unit,
|
37
|
-
unit.storage.fetch_traps(exid),
|
38
|
-
unit.storage.load_execution(exid))
|
39
|
-
|
40
|
-
@
|
41
|
-
|
15
|
+
unit.storage.fetch_traps(@exid),
|
16
|
+
unit.storage.load_execution(@exid))
|
17
|
+
|
18
|
+
@messages =
|
19
|
+
messages.collect { |m|
|
20
|
+
Flor::Storage
|
21
|
+
.from_blob(m[:content])
|
22
|
+
.tap { |mm| mm['mid'] = m[:id].to_i }
|
23
|
+
}
|
42
24
|
@consumed = []
|
43
25
|
|
44
26
|
@alive = true
|
@@ -110,7 +92,11 @@ module Flor
|
|
110
92
|
@unit.storage.put_execution(@execution)
|
111
93
|
@unit.storage.put_messages(@messages)
|
112
94
|
|
113
|
-
|
95
|
+
du = Time.now - t0
|
96
|
+
t0 = Flor.tstamp(t0)
|
97
|
+
|
98
|
+
@unit.logger.log_run_end(self, t0, du)
|
99
|
+
@unit.hooker.notify(self, make_end_message(t0, du))
|
114
100
|
|
115
101
|
@consumed.clear
|
116
102
|
|
@@ -199,6 +185,24 @@ module Flor
|
|
199
185
|
|
200
186
|
io.string
|
201
187
|
end
|
188
|
+
|
189
|
+
def make_end_message(start, duration)
|
190
|
+
|
191
|
+
m = {}
|
192
|
+
m['point'] = 'end'
|
193
|
+
m['exid'] = @exid
|
194
|
+
m['start'] = start
|
195
|
+
m['duration'] = "#{duration}s"
|
196
|
+
m['consumed'] = @consumed.size
|
197
|
+
m['counters'] = Flor.dup(@execution['counters'])
|
198
|
+
m['nodes'] = @execution['nodes'].size
|
199
|
+
m['size'] = @execution['size']
|
200
|
+
m['archive_size'] = @unit.archive[@exid].size if @unit.archive
|
201
|
+
m['er'] = @execution['counters']['runs'] # "emitting run"
|
202
|
+
m['pr'] = m['er'] # "processing run"
|
203
|
+
|
204
|
+
m
|
205
|
+
end
|
202
206
|
end
|
203
207
|
end
|
204
208
|
|
data/lib/flor/unit/ganger.rb
CHANGED
@@ -1,26 +1,3 @@
|
|
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
1
|
|
25
2
|
module Flor
|
26
3
|
|
@@ -28,6 +5,8 @@ module Flor
|
|
28
5
|
|
29
6
|
# NB: tasker configuration entries start with "gan_"
|
30
7
|
|
8
|
+
#RESERVED_NAMES = %w[ tag ]
|
9
|
+
|
31
10
|
attr_reader :unit
|
32
11
|
|
33
12
|
def initialize(unit)
|
@@ -40,9 +19,12 @@ module Flor
|
|
40
19
|
|
41
20
|
def has_tasker?(exid, name)
|
42
21
|
|
43
|
-
|
22
|
+
#return false if RESERVED_NAMES.include?(name)
|
23
|
+
|
24
|
+
d = Flor.domain(exid)
|
44
25
|
|
45
|
-
|
26
|
+
#!! @unit.loader.tasker(d, name)
|
27
|
+
!! (@unit.loader.tasker(d, 'tasker') || @unit.loader.tasker(d, name))
|
46
28
|
end
|
47
29
|
|
48
30
|
def task(executor, message)
|
@@ -82,16 +64,9 @@ module Flor
|
|
82
64
|
fail NotImplementedError
|
83
65
|
end
|
84
66
|
|
85
|
-
def
|
86
|
-
|
87
|
-
@unit.queue({
|
88
|
-
'point' => 'return',
|
89
|
-
'exid' => message['exid'],
|
90
|
-
'nid' => message['nid'],
|
91
|
-
'payload' => message['payload'],
|
92
|
-
'tasker' => message['tasker'] })
|
67
|
+
def return(message)
|
93
68
|
|
94
|
-
|
69
|
+
@unit.return(message)
|
95
70
|
end
|
96
71
|
|
97
72
|
protected
|
data/lib/flor/unit/hooker.rb
CHANGED
@@ -1,26 +1,3 @@
|
|
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
1
|
|
25
2
|
module Flor
|
26
3
|
|
@@ -50,6 +27,11 @@ module Flor
|
|
50
27
|
h ? h[2] || h[3] : nil
|
51
28
|
end
|
52
29
|
|
30
|
+
def wlist
|
31
|
+
|
32
|
+
@wlist ||= self['wlist']
|
33
|
+
end
|
34
|
+
|
53
35
|
def add(*args, &block)
|
54
36
|
|
55
37
|
name = nil
|
@@ -113,7 +95,6 @@ module Flor
|
|
113
95
|
|
114
96
|
def match?(executor, hook, opts, message)
|
115
97
|
|
116
|
-
#p opts if hook.is_a?(Flor::Trap)
|
117
98
|
opts = hook.opts if hook.respond_to?(:opts) && opts.empty?
|
118
99
|
|
119
100
|
c = o(opts, :consumed, :c)
|
@@ -125,7 +106,6 @@ module Flor
|
|
125
106
|
return false if hook.within_itself?(executor, message)
|
126
107
|
end
|
127
108
|
|
128
|
-
#p :xxx if hook.is_a?(Flor::Trap)
|
129
109
|
ps = o(opts, :point, :p, [])
|
130
110
|
return false if ps && ! ps.include?(message['point'])
|
131
111
|
|
data/lib/flor/unit/journal.rb
CHANGED
@@ -1,26 +1,3 @@
|
|
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
1
|
|
25
2
|
module Flor
|
26
3
|
|
data/lib/flor/unit/loader.rb
CHANGED
@@ -1,26 +1,3 @@
|
|
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
1
|
|
25
2
|
module Flor
|
26
3
|
|
@@ -43,10 +20,10 @@ module Flor
|
|
43
20
|
|
44
21
|
Dir[File.join(root, '**/*.json')]
|
45
22
|
.select { |f| f.index('/etc/variables/') }
|
46
|
-
.
|
47
|
-
.
|
48
|
-
.
|
49
|
-
.inject({}) { |vars,
|
23
|
+
.collect { |pa| [ pa, expose_d(pa, {}) ] }
|
24
|
+
.select { |pa, d| is_subdomain?(domain, d) }
|
25
|
+
.sort_by { |pa, d| d.count('.') }
|
26
|
+
.inject({}) { |vars, (pa, d)| vars.merge!(interpret(pa)) }
|
50
27
|
end
|
51
28
|
|
52
29
|
#def procedures(path)
|
@@ -57,69 +34,58 @@ module Flor
|
|
57
34
|
|
58
35
|
# If found, returns [ source_path, path ]
|
59
36
|
#
|
60
|
-
def library(domain, name=nil)
|
37
|
+
def library(domain, name=nil, opts={})
|
61
38
|
|
39
|
+
domain, name, opts = [ domain, nil, name ] if name.is_a?(Hash)
|
62
40
|
domain, name = split_dn(domain, name)
|
63
41
|
|
64
|
-
path =
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
.first
|
42
|
+
path, d, n = (Dir[File.join(root, '**/*.{flo,flor}')])
|
43
|
+
.select { |f| f.index('/lib/') }
|
44
|
+
.collect { |pa| [ pa, *expose_dn(pa, opts) ] }
|
45
|
+
.select { |pa, d, n| n == name && is_subdomain?(domain, d) }
|
46
|
+
.sort_by { |pa, d, n| d.count('.') }
|
47
|
+
.last
|
71
48
|
|
72
49
|
path ? [ Flor.relativize_path(path), File.read(path) ] : nil
|
73
50
|
end
|
74
51
|
|
75
|
-
# class FlowEnv
|
76
|
-
#
|
77
|
-
# attr_accessor :path, :domain, :flow_name, :source, :variables, :payload
|
78
|
-
# alias :flow :flow_name
|
79
|
-
#
|
80
|
-
# def initialize(loader, path)
|
81
|
-
#
|
82
|
-
# @path = path
|
83
|
-
#
|
84
|
-
# es = path.split('.')
|
85
|
-
# @domain, @flow_name = [ es[0..-2].join('.'), es[-1] ]
|
86
|
-
#
|
87
|
-
# @source = loader.library(@domain, @flow_name)
|
88
|
-
# @variables = loader.variables(@domain)
|
89
|
-
# #@payload = ... # TODO at some point, if necessary...
|
90
|
-
#
|
91
|
-
# fail ArgumentError.new(
|
92
|
-
# "could not find flow at #{@path.inspect}"
|
93
|
-
# ) unless @source
|
94
|
-
# end
|
95
|
-
#
|
96
|
-
# def to_a
|
97
|
-
#
|
98
|
-
# [ path, domain, flow, source, variables, payload ]
|
99
|
-
# end
|
100
|
-
# end
|
101
|
-
#
|
102
|
-
# def flow_environment(path)
|
103
|
-
#
|
104
|
-
# FlowEnv.new(self, path)
|
105
|
-
# end
|
106
|
-
|
107
52
|
def tasker(domain, name=nil)
|
108
53
|
|
109
54
|
domain, name = split_dn(domain, name)
|
110
|
-
#p [ domain, name ]
|
111
55
|
|
112
|
-
path = Dir[File.join(root, '**/*.json')]
|
113
|
-
.select { |
|
114
|
-
.
|
115
|
-
.select { |
|
56
|
+
path, d, n = Dir[File.join(root, '**/*.json')]
|
57
|
+
.select { |pa| pa.index('/lib/taskers/') }
|
58
|
+
.collect { |pa| [ pa, *expose_dn(pa, {}) ] }
|
59
|
+
.select { |pa, d, n|
|
60
|
+
is_subdomain?(domain, [ d, n ].join('.')) ||
|
61
|
+
(n == name && is_subdomain?(domain, d)) }
|
62
|
+
.sort_by { |pa, d, n| d.count('.') }
|
116
63
|
.last
|
117
64
|
|
118
|
-
|
65
|
+
return nil unless path
|
66
|
+
|
67
|
+
conf = interpret(path)
|
68
|
+
|
69
|
+
return conf if n == name
|
70
|
+
|
71
|
+
con = conf[name]
|
72
|
+
|
73
|
+
return nil unless con
|
74
|
+
|
75
|
+
con.merge!('_path' => conf['_path'])
|
119
76
|
end
|
120
77
|
|
121
78
|
protected
|
122
79
|
|
80
|
+
# is da a subdomain of db?
|
81
|
+
#
|
82
|
+
def is_subdomain?(da, db)
|
83
|
+
|
84
|
+
da == db ||
|
85
|
+
db == '' ||
|
86
|
+
da[0, db.length + 1] == db + '.'
|
87
|
+
end
|
88
|
+
|
123
89
|
def split_dn(domain, name)
|
124
90
|
|
125
91
|
if name
|
@@ -130,41 +96,44 @@ module Flor
|
|
130
96
|
end
|
131
97
|
end
|
132
98
|
|
133
|
-
def
|
134
|
-
|
135
|
-
if lp = @unit.conf['lod_path']
|
136
|
-
File.absolute_path(lp)
|
137
|
-
else
|
138
|
-
File.dirname(File.absolute_path(@unit.conf['_path'] + '/..'))
|
139
|
-
end
|
140
|
-
end
|
99
|
+
def expose_d(path, opts)
|
141
100
|
|
142
|
-
|
101
|
+
pa = path[root.length..-1]
|
102
|
+
pa = pa[5..-1] if pa[0, 5] == '/usr/'
|
143
103
|
|
144
|
-
|
145
|
-
|
104
|
+
libregex =
|
105
|
+
opts[:subflows] ?
|
106
|
+
/\/lib\/(subflows|flows|taskers)\// :
|
107
|
+
/\/lib\/(flows|taskers)\//
|
146
108
|
|
147
|
-
|
109
|
+
pa
|
148
110
|
.sub(/\/etc\/variables\//, '/')
|
149
|
-
.sub(
|
111
|
+
.sub(libregex, '/')
|
150
112
|
.sub(/\/\z/, '')
|
151
113
|
.sub(/\/(flo|flor|dot)\.json\z/, '')
|
152
114
|
.sub(/\.(flo|flor|json)\z/, '')
|
153
115
|
.sub(/\A\//, '')
|
154
116
|
.gsub(/\//, '.')
|
155
|
-
|
156
|
-
#p [ :pm, domain[0, f.length], f, '=>', domain[0, f.length] == f ]
|
157
|
-
domain[0, f.length] == f
|
158
117
|
end
|
159
118
|
|
160
|
-
def
|
119
|
+
def expose_dn(path, opts)
|
161
120
|
|
162
|
-
|
121
|
+
pa = expose_d(path, opts)
|
163
122
|
|
164
|
-
|
165
|
-
|
123
|
+
if ri = pa.rindex('.')
|
124
|
+
[ pa[0..ri - 1], pa[ri + 1..-1] ]
|
125
|
+
else
|
126
|
+
[ '', pa ]
|
127
|
+
end
|
128
|
+
end
|
166
129
|
|
167
|
-
|
130
|
+
def root
|
131
|
+
|
132
|
+
if lp = @unit.conf['lod_path']
|
133
|
+
File.absolute_path(lp)
|
134
|
+
else
|
135
|
+
File.dirname(File.absolute_path(@unit.conf['_path'] + '/..'))
|
136
|
+
end
|
168
137
|
end
|
169
138
|
|
170
139
|
def interpret(path)
|