flack 0.10.0 → 0.16.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -0
- data/Makefile +23 -2
- data/README.md +13 -0
- data/flack.gemspec +8 -4
- data/lib/flack.rb +1 -24
- data/lib/flack/app.rb +12 -26
- data/lib/flack/app/executions.rb +64 -26
- data/lib/flack/app/helpers.rb +29 -28
- data/lib/flack/app/index.rb +0 -24
- data/lib/flack/app/message.rb +35 -30
- data/lib/flack/app/messages.rb +68 -0
- data/lib/flack/app/static.rb +11 -29
- metadata +24 -12
- data/env.txt +0 -38
- data/env2.txt +0 -33
- data/t.txt +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f2ca07e71c90fdd19c0875131c9cda08d3ae33d
|
4
|
+
data.tar.gz: 72c65daabff31d1bdbce5d57ef811f821b13ac1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d0e6ec432387fd794524a69b056913512666db33f3b0faa2ab8e6ff3ffca5b058769314f8029d3ed9da6a6b2c71f5f698dba54935f99bbd90925b5fe8bad5a5
|
7
|
+
data.tar.gz: 907862b56c9841faac7e617373d3324a9cbc0d9743d2c6d68435912ec7816769ac50930c6d5272d0f4dfd273aa70c36e5d79d2e2e39a288e622468d0a3aa157f
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,22 @@
|
|
2
2
|
# flack CHANGELOG.md
|
3
3
|
|
4
4
|
|
5
|
+
## flack 0.16.1 released 2019-02-05
|
6
|
+
|
7
|
+
- Depend on Sequel 5 (Sequel 4 and 5 seem OK)
|
8
|
+
- GET /executions/:domain
|
9
|
+
- GET /executions/:domain*
|
10
|
+
- GET /executions/:domain.*
|
11
|
+
- GET /messages/:point
|
12
|
+
- GET /messages/:exid/:point
|
13
|
+
- GET /messages/:exid
|
14
|
+
- GET /messages/:id
|
15
|
+
- GET /executions/:exid
|
16
|
+
- GET /executions/:id
|
17
|
+
|
18
|
+
|
19
|
+
## flack 0.10.0 released 2017-03-03
|
20
|
+
|
5
21
|
## flack 0.10.0 released 2017-03-03
|
6
22
|
|
7
23
|
- Flack::App#shutdown (@unit.shutdown)
|
data/Makefile
CHANGED
@@ -6,6 +6,9 @@ NAME = \
|
|
6
6
|
VERSION = \
|
7
7
|
$(shell ruby -e "s = eval(File.read(Dir['*.gemspec'][0])); puts s.version")
|
8
8
|
|
9
|
+
PORT = 7007
|
10
|
+
PID_FILE = tmp/$(NAME).pid
|
11
|
+
|
9
12
|
count_lines:
|
10
13
|
find lib -name "*.rb" | xargs cat | ruby -e "p STDIN.readlines.count { |l| l = l.strip; l[0, 1] != '#' && l != '' }"
|
11
14
|
cl: count_lines
|
@@ -41,11 +44,29 @@ migrate:
|
|
41
44
|
## flack tasks
|
42
45
|
|
43
46
|
serve:
|
44
|
-
bundle exec rackup -p
|
47
|
+
bundle exec rackup -p $(PORT)
|
45
48
|
s: serve
|
46
49
|
|
47
50
|
curl:
|
48
|
-
curl -s http://127.0.0.1
|
51
|
+
curl -s http://127.0.0.1:$(PORT)/ | \
|
49
52
|
$(RUBY) -e "require 'json'; puts JSON.pretty_generate(JSON.load(STDIN.read))"
|
50
53
|
c: curl
|
51
54
|
|
55
|
+
start:
|
56
|
+
@if [ ! -f $(PID_FILE) ]; then \
|
57
|
+
bundle exec rackup -p $(PORT) -P $(PID_FILE) -D; \
|
58
|
+
sleep 1; \
|
59
|
+
echo "listening on $(PORT), pid `cat $(PID_FILE)`"; \
|
60
|
+
else \
|
61
|
+
echo "already running at `cat $(PID_FILE)`"; \
|
62
|
+
fi
|
63
|
+
|
64
|
+
stop:
|
65
|
+
@if [ -f $(PID_FILE) ]; then \
|
66
|
+
echo "stopping flack pid `cat $(PID_FILE)`"; \
|
67
|
+
kill `cat $(PID_FILE)`; \
|
68
|
+
fi
|
69
|
+
|
70
|
+
restart:
|
71
|
+
@if [ -f $(PID_FILE) ]; then make -s stop; fi; make -s start
|
72
|
+
|
data/README.md
CHANGED
@@ -6,10 +6,23 @@
|
|
6
6
|
|
7
7
|
Flack is a Rack app for the [flor](https://github.com/floraison/flor) workflow engine.
|
8
8
|
|
9
|
+
|
10
|
+
## test ride
|
11
|
+
|
12
|
+
```sh
|
13
|
+
make migrate
|
14
|
+
make start
|
15
|
+
open http://localhost:7007/
|
16
|
+
```
|
17
|
+
|
18
|
+
Warning: this serves an API, not some fancy web interface.
|
19
|
+
|
20
|
+
|
9
21
|
## api
|
10
22
|
|
11
23
|
Based on HAL ([spec](http://stateless.co/hal_specification.html) and [draft](https://tools.ietf.org/html/draft-kelly-json-hal-08)).
|
12
24
|
|
25
|
+
|
13
26
|
## license
|
14
27
|
|
15
28
|
MIT, see [LICENSE.txt](LICENSE.txt)
|
data/flack.gemspec
CHANGED
@@ -21,16 +21,20 @@ A web front-end to the flor workflow engine
|
|
21
21
|
|
22
22
|
#s.files = `git ls-files`.split("\n")
|
23
23
|
s.files = Dir[
|
24
|
+
'README.{md,txt}',
|
25
|
+
'CHANGELOG.{md,txt}', 'CREDITS.{md,txt}', 'LICENSE.{md,txt}',
|
24
26
|
'Makefile',
|
25
27
|
'lib/**/*.rb', #'spec/**/*.rb', 'test/**/*.rb',
|
26
|
-
|
28
|
+
"#{s.name}.gemspec",
|
27
29
|
]
|
28
30
|
|
29
|
-
flor_version = s.version.to_s.split('.').take(2).join('.')
|
30
|
-
s.add_runtime_dependency 'flor', "~> #{flor_version}"
|
31
|
+
#flor_version = s.version.to_s.split('.').take(2).join('.')
|
32
|
+
#s.add_runtime_dependency 'flor', "~> #{flor_version}"
|
33
|
+
s.add_runtime_dependency 'flor'
|
31
34
|
|
32
35
|
s.add_runtime_dependency 'rack', '~> 1.6'
|
33
|
-
s.add_runtime_dependency 'sequel', '~>
|
36
|
+
s.add_runtime_dependency 'sequel', '~> 5'
|
37
|
+
s.add_runtime_dependency 'httpclient', '~> 2.8'
|
34
38
|
|
35
39
|
s.add_development_dependency 'rspec', '~> 3'
|
36
40
|
|
data/lib/flack.rb
CHANGED
@@ -1,26 +1,3 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright (c) 2016-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 'rack'
|
26
3
|
|
@@ -29,7 +6,7 @@ require 'flor/unit'
|
|
29
6
|
|
30
7
|
module Flack
|
31
8
|
|
32
|
-
VERSION = '0.
|
9
|
+
VERSION = '0.16.1'
|
33
10
|
end
|
34
11
|
|
35
12
|
require 'flack/app'
|
data/lib/flack/app.rb
CHANGED
@@ -1,26 +1,3 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright (c) 2016-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 'flack/app/helpers'
|
26
3
|
#
|
@@ -28,6 +5,7 @@ require 'flack/app/index'
|
|
28
5
|
require 'flack/app/static'
|
29
6
|
require 'flack/app/message'
|
30
7
|
require 'flack/app/executions'
|
8
|
+
require 'flack/app/messages'
|
31
9
|
|
32
10
|
|
33
11
|
class Flack::App
|
@@ -81,7 +59,7 @@ class Flack::App
|
|
81
59
|
match = true
|
82
60
|
args = []
|
83
61
|
|
84
|
-
for i in 0..flack_path_info.length - 1
|
62
|
+
for i in 0..(flack_path_info.length - 1)
|
85
63
|
|
86
64
|
break unless match
|
87
65
|
|
@@ -95,8 +73,10 @@ class Flack::App
|
|
95
73
|
args << pi.to_i
|
96
74
|
elsif mi == 's'
|
97
75
|
args << pi
|
76
|
+
elsif mi.is_a?(Regexp)
|
77
|
+
match = pi.match(mi)
|
98
78
|
else
|
99
|
-
match = pi == mi
|
79
|
+
match = (pi == mi)
|
100
80
|
end
|
101
81
|
end
|
102
82
|
|
@@ -119,7 +99,13 @@ class Flack::App
|
|
119
99
|
.collect(&:to_s)
|
120
100
|
.select { |m| m.match(/\A(get|head|put|post|delete)_.+\z/) }
|
121
101
|
.select { |m| instance_method(m).arity == 1 }
|
122
|
-
.collect { |m|
|
102
|
+
.collect { |m|
|
103
|
+
s = m.split('_')
|
104
|
+
if s.length == 3 && s[2] == 'suffix'
|
105
|
+
[ m, s.shift.upcase, [ /\.#{s[0]}\z/ ] ]
|
106
|
+
else
|
107
|
+
[ m, s.shift.upcase, s ]
|
108
|
+
end }
|
123
109
|
.collect(&:freeze).freeze
|
124
110
|
end
|
125
111
|
|
data/lib/flack/app/executions.rb
CHANGED
@@ -1,42 +1,80 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright (c) 2016-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
|
# /executions/*
|
27
3
|
#
|
28
4
|
class Flack::App
|
29
5
|
|
6
|
+
# GET /executions
|
7
|
+
#
|
30
8
|
def get_executions(env)
|
31
9
|
|
32
10
|
# TODO implement paging
|
11
|
+
env['flack.rel'] = 'flack:executions'
|
12
|
+
|
33
13
|
respond(env, @unit.executions.all)
|
34
14
|
end
|
35
15
|
|
16
|
+
# GET /executions/<id>
|
17
|
+
#
|
36
18
|
def get_executions_i(env)
|
37
19
|
|
38
|
-
|
39
|
-
|
20
|
+
env['flack.rel'] = 'flack:executions/id'
|
21
|
+
|
22
|
+
if exe = @unit.executions[env['flack.args'][0]]
|
23
|
+
respond(env, exe)
|
24
|
+
else
|
25
|
+
respond_not_found(env)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# GET /executions/<exid>
|
30
|
+
# GET /executions/<domain>
|
31
|
+
# GET /executions/<domain>*
|
32
|
+
# GET /executions/<domain>.*
|
33
|
+
#
|
34
|
+
def get_executions_s(env)
|
35
|
+
|
36
|
+
arg = env['flack.args'][0]
|
37
|
+
|
38
|
+
if arg.count('-') == 0
|
39
|
+
get_executions_by_domain(env, arg)
|
40
|
+
else
|
41
|
+
get_executions_by_exid(env, arg)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
protected
|
46
|
+
|
47
|
+
def get_executions_by_exid(env, exid)
|
48
|
+
|
49
|
+
env['flack.rel'] = 'flack:executions/exid'
|
50
|
+
|
51
|
+
if exe = @unit.executions[exid: exid]
|
52
|
+
respond(env, exe)
|
53
|
+
else
|
54
|
+
respond_not_found(env)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def get_executions_by_domain(env, dom)
|
59
|
+
|
60
|
+
q = @unit.executions
|
61
|
+
|
62
|
+
if m = dom.match(/\A([^*]+)\*+\z/)
|
63
|
+
if m[1][-1, 1] == '.'
|
64
|
+
env['flack.rel'] = 'flack:executions/domain-dot-star'
|
65
|
+
q = q.where(Sequel.like(:domain, "#{m[1]}%"))
|
66
|
+
else
|
67
|
+
env['flack.rel'] = 'flack:executions/domain-star'
|
68
|
+
q = q.where(
|
69
|
+
Sequel[{ domain: m[1] }] |
|
70
|
+
Sequel.like(:domain, "#{m[1]}.%"))
|
71
|
+
end
|
72
|
+
else
|
73
|
+
env['flack.rel'] = 'flack:executions/domain'
|
74
|
+
q = q.where(domain: dom)
|
75
|
+
end
|
76
|
+
|
77
|
+
respond(env, q.all)
|
40
78
|
end
|
41
79
|
end
|
42
80
|
|
data/lib/flack/app/helpers.rb
CHANGED
@@ -1,27 +1,3 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright (c) 2016-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
|
# helpers
|
27
3
|
#
|
@@ -38,7 +14,7 @@ class Flack::App
|
|
38
14
|
|
39
15
|
o.is_a?(Array) &&
|
40
16
|
o.length == 3 &&
|
41
|
-
o[0].is_a?(
|
17
|
+
o[0].is_a?(Integer) &&
|
42
18
|
o[1].is_a?(Hash) &&
|
43
19
|
o[2].is_a?(Array)
|
44
20
|
end
|
@@ -98,7 +74,13 @@ class Flack::App
|
|
98
74
|
def serialize_array(env, data, opts)
|
99
75
|
|
100
76
|
{ '_links' => links(env),
|
101
|
-
'_embedded' =>
|
77
|
+
'_embedded' => {
|
78
|
+
key(env) => data.collect { |e| serialize(env, e, opts) } } }
|
79
|
+
end
|
80
|
+
|
81
|
+
def key(env)
|
82
|
+
|
83
|
+
env['flack.rel'] || 'flack:unspecified-rel'
|
102
84
|
end
|
103
85
|
|
104
86
|
def determine_root_uri(env)
|
@@ -122,7 +104,15 @@ class Flack::App
|
|
122
104
|
|
123
105
|
def link(env, h, type)
|
124
106
|
|
125
|
-
|
107
|
+
l = { href: rel(env, "/#{type}") }
|
108
|
+
l[:templated] = true if type.index('{')
|
109
|
+
|
110
|
+
rel_right_part = type
|
111
|
+
.gsub(/[{}]/, '')
|
112
|
+
.gsub(/\./, '-dot')
|
113
|
+
.gsub(/\*/, '-star')
|
114
|
+
|
115
|
+
h["flack:#{rel_right_part}"] = l
|
126
116
|
end
|
127
117
|
|
128
118
|
def links(env)
|
@@ -139,7 +129,18 @@ class Flack::App
|
|
139
129
|
href: 'https://github.com/floraison/flack/blob/master/doc/rels.md#{rel}',
|
140
130
|
templated: true }]
|
141
131
|
|
142
|
-
link(env, h,
|
132
|
+
link(env, h, 'executions')
|
133
|
+
link(env, h, 'executions/{domain}')
|
134
|
+
link(env, h, 'executions/{domain}*')
|
135
|
+
link(env, h, 'executions/{domain}.*')
|
136
|
+
link(env, h, 'executions/{exid}')
|
137
|
+
link(env, h, 'executions/{id}')
|
138
|
+
|
139
|
+
link(env, h, 'messages')
|
140
|
+
link(env, h, 'messages/{point}')
|
141
|
+
link(env, h, 'messages/{exid}/{point}')
|
142
|
+
link(env, h, 'messages/{exid}')
|
143
|
+
link(env, h, 'messages/{id}')
|
143
144
|
|
144
145
|
h
|
145
146
|
end
|
data/lib/flack/app/index.rb
CHANGED
@@ -1,27 +1,3 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright (c) 2016-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
|
# /
|
27
3
|
#
|
data/lib/flack/app/message.rb
CHANGED
@@ -1,27 +1,3 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright (c) 2016-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
|
# /message
|
27
3
|
#
|
@@ -30,14 +6,13 @@ class Flack::App
|
|
30
6
|
def post_message(env)
|
31
7
|
|
32
8
|
msg = JSON.load(env['rack.input'].read)
|
33
|
-
#pp msg
|
34
9
|
|
35
10
|
pt = msg['point']
|
36
11
|
|
37
12
|
return respond_bad_request(env, 'missing msg point') \
|
38
13
|
unless pt
|
39
14
|
return respond_bad_request(env, "bad msg point #{pt.inspect}") \
|
40
|
-
unless %w[ launch cancel ].include?(pt)
|
15
|
+
unless %w[ launch cancel reply ].include?(pt)
|
41
16
|
|
42
17
|
r = self.send("queue_#{pt}", env, msg, { point: pt })
|
43
18
|
|
@@ -48,16 +23,18 @@ class Flack::App
|
|
48
23
|
|
49
24
|
def queue_launch(env, msg, ret)
|
50
25
|
|
51
|
-
dom = msg['domain']
|
26
|
+
dom = msg['domain'] || 'domain0'
|
52
27
|
src = msg['tree'] || msg['name']
|
28
|
+
vars = msg['vars'] || {}
|
29
|
+
fields = msg['fields'] || {}
|
53
30
|
|
54
|
-
return respond_bad_request(env, 'missing domain') \
|
55
|
-
unless dom
|
56
31
|
return respond_bad_request(env, 'missing "tree" or "name" in launch msg') \
|
57
32
|
unless src
|
58
33
|
|
59
34
|
opts = {}
|
60
35
|
opts[:domain] = dom
|
36
|
+
opts[:vars] = vars
|
37
|
+
opts[:fields] = fields
|
61
38
|
|
62
39
|
r = @unit.launch(src, opts)
|
63
40
|
|
@@ -86,7 +63,35 @@ class Flack::App
|
|
86
63
|
return respond_not_found(env, 'missing execution node') \
|
87
64
|
unless exe.nodes[nid]
|
88
65
|
|
89
|
-
ret['xxx'] = @unit.queue({ 'point' => 'cancel', 'exid' => exid, 'nid' => nid })
|
66
|
+
ret['xxx'] = @unit.queue({ 'point' => 'cancel', 'exid' => exid, 'nid' => nid }) # FIXME change me
|
67
|
+
|
68
|
+
ret['_status'] = 202
|
69
|
+
ret['_location'] = rel(env, '/executions/' + exid)
|
70
|
+
ret['_links'] = { 'flack:execution' => { 'href' => ret['_location'] } }
|
71
|
+
|
72
|
+
ret
|
73
|
+
end
|
74
|
+
|
75
|
+
def queue_reply(env, msg, ret)
|
76
|
+
|
77
|
+
exid = msg['exid']
|
78
|
+
nid = msg['nid']
|
79
|
+
payload = msg['payload'] || {}
|
80
|
+
|
81
|
+
return respond_bad_request(env, 'missing exid') \
|
82
|
+
unless exid
|
83
|
+
|
84
|
+
return respond_bad_request(env, 'missing nid') \
|
85
|
+
unless nid
|
86
|
+
|
87
|
+
exe = @unit.executions[exid: exid]
|
88
|
+
|
89
|
+
return respond_not_found(env, 'missing execution') \
|
90
|
+
unless exe
|
91
|
+
return respond_not_found(env, 'missing execution node') \
|
92
|
+
unless exe.nodes[nid]
|
93
|
+
|
94
|
+
ret['xxx'] = @unit.queue({ 'point' => 'return', 'exid' => exid, 'nid' => nid, 'payload' => payload}) # FIXME change me
|
90
95
|
|
91
96
|
ret['_status'] = 202
|
92
97
|
ret['_location'] = rel(env, '/executions/' + exid)
|
@@ -0,0 +1,68 @@
|
|
1
|
+
|
2
|
+
# /messages/*
|
3
|
+
#
|
4
|
+
class Flack::App
|
5
|
+
|
6
|
+
# GET /messages
|
7
|
+
def get_messages(env)
|
8
|
+
|
9
|
+
# TODO implement paging
|
10
|
+
env['flack.rel'] = 'flack:messages'
|
11
|
+
|
12
|
+
respond(env, @unit.messages.all)
|
13
|
+
end
|
14
|
+
|
15
|
+
# GET /messages/<id>
|
16
|
+
def get_messages_i(env)
|
17
|
+
|
18
|
+
env['flack.rel'] = 'flack:messages'
|
19
|
+
|
20
|
+
if exe = @unit.messages[env['flack.args'][0]]
|
21
|
+
respond(env, exe)
|
22
|
+
else
|
23
|
+
respond_not_found(env)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# GET /messages/<exid>
|
28
|
+
def get_messages_s(env)
|
29
|
+
|
30
|
+
# TODO implement paging
|
31
|
+
arg = env['flack.args'][0]
|
32
|
+
|
33
|
+
if Flor.point?(arg)
|
34
|
+
get_messages_by_point(env, arg)
|
35
|
+
else
|
36
|
+
get_messages_by_exid(env, arg)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# GET /messages/<exid>/<point>
|
41
|
+
def get_messages_s_s(env)
|
42
|
+
|
43
|
+
env['flack.rel'] = 'flack:messages/exid/point'
|
44
|
+
|
45
|
+
exid, point = env['flack.args']
|
46
|
+
|
47
|
+
respond(
|
48
|
+
env,
|
49
|
+
@unit.messages.where(exid: exid, point: point).all)
|
50
|
+
end
|
51
|
+
|
52
|
+
protected
|
53
|
+
|
54
|
+
def get_messages_by_exid(env, exid)
|
55
|
+
|
56
|
+
env['flack.rel'] = 'flack:messages/exid'
|
57
|
+
|
58
|
+
respond(env, @unit.messages.where(exid: exid).all)
|
59
|
+
end
|
60
|
+
|
61
|
+
def get_messages_by_point(env, point)
|
62
|
+
|
63
|
+
env['flack.rel'] = 'flack:messages/point'
|
64
|
+
|
65
|
+
respond(env, @unit.messages.where(point: point).all)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
data/lib/flack/app/static.rb
CHANGED
@@ -1,40 +1,22 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright (c) 2016-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
|
+
# /*.html
|
3
|
+
# /*.css
|
4
|
+
# /*.js
|
27
5
|
#
|
28
6
|
class Flack::App
|
29
7
|
|
30
|
-
|
8
|
+
STATIC_FILE = Rack::File.new(
|
31
9
|
File.absolute_path(
|
32
10
|
File.join(
|
33
|
-
File.dirname(__FILE__), '..')))
|
11
|
+
File.dirname(__FILE__), '..', 'static')))
|
34
12
|
|
35
|
-
def
|
13
|
+
def serve_file(env)
|
36
14
|
|
37
|
-
|
15
|
+
STATIC_FILE.call(env)
|
38
16
|
end
|
17
|
+
|
18
|
+
alias get_html_suffix serve_file
|
19
|
+
alias get_css_suffix serve_file
|
20
|
+
alias get_js_suffix serve_file
|
39
21
|
end
|
40
22
|
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.16.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mettraux
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: flor
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0
|
19
|
+
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rack
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,14 +44,28 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '5'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: httpclient
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.8'
|
48
62
|
type: :runtime
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
68
|
+
version: '2.8'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rspec
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -77,8 +91,6 @@ files:
|
|
77
91
|
- LICENSE.txt
|
78
92
|
- Makefile
|
79
93
|
- README.md
|
80
|
-
- env.txt
|
81
|
-
- env2.txt
|
82
94
|
- flack.gemspec
|
83
95
|
- lib/flack.rb
|
84
96
|
- lib/flack/app.rb
|
@@ -86,8 +98,8 @@ files:
|
|
86
98
|
- lib/flack/app/helpers.rb
|
87
99
|
- lib/flack/app/index.rb
|
88
100
|
- lib/flack/app/message.rb
|
101
|
+
- lib/flack/app/messages.rb
|
89
102
|
- lib/flack/app/static.rb
|
90
|
-
- t.txt
|
91
103
|
homepage: http://github.com/floraison
|
92
104
|
licenses:
|
93
105
|
- MIT
|
@@ -108,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
120
|
version: '0'
|
109
121
|
requirements: []
|
110
122
|
rubyforge_project:
|
111
|
-
rubygems_version: 2.
|
123
|
+
rubygems_version: 2.6.14.1
|
112
124
|
signing_key:
|
113
125
|
specification_version: 4
|
114
126
|
summary: a web front-end to the flor workflow engine
|
data/env.txt
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
|
2
|
-
GATEWAY_INTERFACE: "CGI/1.1"
|
3
|
-
PATH_INFO: "/debug/77"
|
4
|
-
QUERY_STRING: "a=b&c=d"
|
5
|
-
REMOTE_ADDR: "::1"
|
6
|
-
REMOTE_HOST: "localhost"
|
7
|
-
REQUEST_METHOD: "GET"
|
8
|
-
REQUEST_URI: "http://localhost:7007/debug/77?a=b&c=d"
|
9
|
-
SCRIPT_NAME: ""
|
10
|
-
SERVER_NAME: "localhost"
|
11
|
-
SERVER_PORT: "7007"
|
12
|
-
SERVER_PROTOCOL: "HTTP/1.1"
|
13
|
-
SERVER_SOFTWARE: "WEBrick/1.3.1 (Ruby/1.9.3/2014-05-14)"
|
14
|
-
HTTP_HOST: "localhost:7007"
|
15
|
-
HTTP_CONNECTION: "keep-alive"
|
16
|
-
HTTP_UPGRADE_INSECURE_REQUESTS: "1"
|
17
|
-
HTTP_USER_AGENT: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"
|
18
|
-
HTTP_ACCEPT: "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
|
19
|
-
HTTP_ACCEPT_ENCODING: "gzip, deflate, sdch"
|
20
|
-
HTTP_ACCEPT_LANGUAGE: "ja,en-US;q=0.8,en;q=0.6,fr;q=0.4,de;q=0.2,it;q=0.2,zh-TW;q=0.2,zh;q=0.2"
|
21
|
-
HTTP_COOKIE: "sg_dev=2ebdd63d694602c96834d5a261fc471732a2a44c37f40d6446c5cab1b724a263"
|
22
|
-
rack.version: [1, 3]
|
23
|
-
rack.input: #<Rack::Lint::InputWrapper:0x007fb27b230048 @input=#<StringIO:0x007fb27b238b30>>
|
24
|
-
rack.errors: #<Rack::Lint::ErrorWrapper:0x007fb27b22fee0 @error=#<IO:<STDERR>>>
|
25
|
-
rack.multithread: true
|
26
|
-
rack.multiprocess: false
|
27
|
-
rack.run_once: false
|
28
|
-
rack.url_scheme: "http"
|
29
|
-
rack.hijack?: true
|
30
|
-
rack.hijack: #<Proc:0x007fb27b230ae8@/Users/jmettraux/.gem/ruby/1.9.3/gems/rack-1.6.4/lib/rack/lint.rb:525>
|
31
|
-
rack.hijack_io: nil
|
32
|
-
HTTP_VERSION: "HTTP/1.1"
|
33
|
-
REQUEST_PATH: "/debug/77"
|
34
|
-
rack.tempfiles: []
|
35
|
-
flack.path_info: ["debug", "77"]
|
36
|
-
flack.args: [77]
|
37
|
-
flack.query_string: {"a"=>"b", "c"=>"d"}
|
38
|
-
|
data/env2.txt
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
GATEWAY_INTERFACE:CGI/1.1
|
2
|
-
PATH_INFO:/debug
|
3
|
-
QUERY_STRING:
|
4
|
-
REMOTE_ADDR:127.0.0.1
|
5
|
-
REMOTE_HOST:localhost
|
6
|
-
REQUEST_METHOD:GET
|
7
|
-
REQUEST_URI:http://127.0.0.1:7007/flack/debug
|
8
|
-
SCRIPT_NAME:/flack
|
9
|
-
SERVER_NAME:127.0.0.1
|
10
|
-
SERVER_PORT:7007
|
11
|
-
SERVER_PROTOCOL:HTTP/1.1
|
12
|
-
SERVER_SOFTWARE:WEBrick/1.3.1 (Ruby/1.9.3/2014-05-14)
|
13
|
-
HTTP_HOST:127.0.0.1:7007
|
14
|
-
HTTP_USER_AGENT:curl/7.43.0
|
15
|
-
HTTP_ACCEPT:*/*
|
16
|
-
rack.version:[1
|
17
|
-
3]
|
18
|
-
rack.input:#<Rack::Lint::InputWrapper:0x007ff6baa373a8>
|
19
|
-
rack.errors:#<Rack::Lint::ErrorWrapper:0x007ff6baa37290>
|
20
|
-
rack.multithread:true
|
21
|
-
rack.multiprocess:false
|
22
|
-
rack.run_once:false
|
23
|
-
rack.url_scheme:http
|
24
|
-
rack.hijack?:true
|
25
|
-
rack.hijack:#<Proc:0x007ff6baa38208@/Users/jmettraux/.gem/ruby/1.9.3/gems/rack-1.6.4/lib/rack/lint.rb:525>
|
26
|
-
rack.hijack_io:null
|
27
|
-
HTTP_VERSION:HTTP/1.1
|
28
|
-
REQUEST_PATH:/flack/debug
|
29
|
-
rack.tempfiles:[]
|
30
|
-
flack.path_info:[debug]
|
31
|
-
flack.args:[]
|
32
|
-
flack.query_string:{}
|
33
|
-
flack.root_uri:http://127.0.0.1:7007
|