flack 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -1
- data/Makefile +6 -0
- data/README.md +2 -2
- data/flack.gemspec +1 -1
- data/lib/flack.rb +3 -1
- data/lib/flack/app.rb +3 -0
- data/lib/flack/app/executions.rb +48 -1
- data/lib/flack/app/helpers.rb +26 -8
- data/lib/flack/app/index.rb +1 -0
- data/lib/flack/app/message.rb +1 -0
- data/lib/flack/app/messages.rb +1 -0
- data/lib/flack/app/pointers.rb +80 -0
- data/lib/flack/app/static.rb +1 -0
- metadata +3 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83938d22a1da3371d405bc6f6f9ad5458d2e44ac21616b99df1d3f1058ffbc40
|
4
|
+
data.tar.gz: 5c844ae9c4eeca795a70cbcacfd616e40217b120ca75ae6d8368e343bb87746c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43ca7e422779cc153db5c11db80a7048a9f526de6f2382e88b67a1b3fb12418f9a4a3e87e72b948bb685bd22e18ae8bb3d5d549dd24d00d840ce6b3f16ac5a17
|
7
|
+
data.tar.gz: fdca36864febf3ac369363de3fbe1b1687efbeb850f84b5ba3131d7af66d710d4e61d163a33c18c3b4923314c8eb3f7ddad3992e169de085aec80b476ac3d2c2
|
data/CHANGELOG.md
CHANGED
@@ -2,7 +2,15 @@
|
|
2
2
|
# flack CHANGELOG.md
|
3
3
|
|
4
4
|
|
5
|
-
## flack
|
5
|
+
## flack 1.2.0 released 2021-03-29
|
6
|
+
|
7
|
+
- Simplify links
|
8
|
+
- Remove dependency on HttpClient gem
|
9
|
+
- Introduce DELETE /executions/:exid
|
10
|
+
- Ensure METHS order, stabilize across Ruby versions
|
11
|
+
|
12
|
+
|
13
|
+
## flack 1.0.0 released 2020-11-22
|
6
14
|
|
7
15
|
- Leave Sequel dependency to flor
|
8
16
|
|
data/Makefile
CHANGED
@@ -70,3 +70,9 @@ stop:
|
|
70
70
|
restart:
|
71
71
|
@if [ -f $(PID_FILE) ]; then make -s stop; fi; make -s start
|
72
72
|
|
73
|
+
# Calls / and lists the links available
|
74
|
+
#
|
75
|
+
links:
|
76
|
+
bundle exec ruby -Ilib -r 'flack' \
|
77
|
+
-e "app = Flack::App.new('envs/test/', start: false); pp JSON.parse(app.call('REQUEST_METHOD' => 'GET', 'PATH_INFO' => '/', 'REQUEST_PATH' => '/', 'SCRIPT_NAME' => '')[2].first)"
|
78
|
+
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
# flack
|
3
3
|
|
4
|
-
[](https://github.com/floraison/flack/actions)
|
5
5
|
[](http://badge.fury.io/rb/flack)
|
6
6
|
|
7
7
|
Flack is a Rack app for the [flor](https://github.com/floraison/flor) workflow engine.
|
@@ -20,7 +20,7 @@ Warning: this serves an API, not some fancy web interface.
|
|
20
20
|
|
21
21
|
## api
|
22
22
|
|
23
|
-
Based on HAL ([spec](http://stateless.co/hal_specification.html) and [draft](https://tools.ietf.org/html/draft-kelly-json-hal-08)).
|
23
|
+
Based on HAL ([spec](http://stateless.co/hal_specification.html) and [draft](https://tools.ietf.org/html/draft-kelly-json-hal-08)), [URI Template](https://tools.ietf.org/html/rfc6570), and [CURIE](https://www.w3.org/TR/curie/).
|
24
24
|
|
25
25
|
|
26
26
|
## license
|
data/flack.gemspec
CHANGED
@@ -32,7 +32,7 @@ A web front-end to the flor workflow engine
|
|
32
32
|
s.add_runtime_dependency 'flor'
|
33
33
|
|
34
34
|
s.add_runtime_dependency 'rack', '>= 1.6', '< 3.0'
|
35
|
-
s.add_runtime_dependency 'httpclient', '~> 2.8'
|
35
|
+
#s.add_runtime_dependency 'httpclient', '~> 2.8'
|
36
36
|
|
37
37
|
s.add_development_dependency 'rspec', '~> 3'
|
38
38
|
|
data/lib/flack.rb
CHANGED
data/lib/flack/app.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
require 'flack/app/helpers'
|
3
4
|
#
|
@@ -6,6 +7,7 @@ require 'flack/app/static'
|
|
6
7
|
require 'flack/app/message'
|
7
8
|
require 'flack/app/executions'
|
8
9
|
require 'flack/app/messages'
|
10
|
+
require 'flack/app/pointers'
|
9
11
|
|
10
12
|
|
11
13
|
class Flack::App
|
@@ -99,6 +101,7 @@ class Flack::App
|
|
99
101
|
.collect(&:to_s)
|
100
102
|
.select { |m| m.match(/\A(get|head|put|post|delete)_.+\z/) }
|
101
103
|
.select { |m| instance_method(m).arity == 1 }
|
104
|
+
.sort
|
102
105
|
.collect { |m|
|
103
106
|
s = m.split('_')
|
104
107
|
if s.length == 3 && s[2] == 'suffix'
|
data/lib/flack/app/executions.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
# /executions/*
|
3
4
|
#
|
@@ -10,7 +11,14 @@ class Flack::App
|
|
10
11
|
# TODO implement paging
|
11
12
|
env['flack.rel'] = 'flack:executions'
|
12
13
|
|
13
|
-
|
14
|
+
qs = CGI.parse(env['QUERY_STRING'] || '')
|
15
|
+
statuses = qs['status']
|
16
|
+
statuses = nil if statuses == []
|
17
|
+
|
18
|
+
q = @unit.executions
|
19
|
+
q = q.where(status: statuses) if statuses
|
20
|
+
|
21
|
+
respond(env, q.all)
|
14
22
|
end
|
15
23
|
|
16
24
|
# GET /executions/<id>
|
@@ -42,6 +50,39 @@ class Flack::App
|
|
42
50
|
end
|
43
51
|
end
|
44
52
|
|
53
|
+
# DELETE /executions/<exid>
|
54
|
+
#
|
55
|
+
def delete_executions_s(env)
|
56
|
+
|
57
|
+
exid = env['flack.args'][0]
|
58
|
+
|
59
|
+
return respond_not_found(env) \
|
60
|
+
unless @unit.executions.where(exid: exid).count > 0
|
61
|
+
|
62
|
+
r = { exid: exid, counts: {} }
|
63
|
+
cs = r[:counts]
|
64
|
+
|
65
|
+
@unit.storage.db.transaction do
|
66
|
+
|
67
|
+
cs[:messages] = @unit.messages.where(exid: exid).count
|
68
|
+
cs[:executions] = @unit.executions.where(exid: exid).count
|
69
|
+
cs[:pointers] = @unit.pointers.where(exid: exid).count
|
70
|
+
cs[:timers] = @unit.timers.where(exid: exid).count
|
71
|
+
cs[:traps] = @unit.traps.where(exid: exid).count
|
72
|
+
#
|
73
|
+
# not sure if the DB adapter returns the DELETE count,
|
74
|
+
# so counting first
|
75
|
+
|
76
|
+
@unit.messages.where(exid: exid).delete
|
77
|
+
@unit.executions.where(exid: exid).delete
|
78
|
+
@unit.pointers.where(exid: exid).delete
|
79
|
+
@unit.timers.where(exid: exid).delete
|
80
|
+
@unit.traps.where(exid: exid).delete
|
81
|
+
end
|
82
|
+
|
83
|
+
respond(env, r)
|
84
|
+
end
|
85
|
+
|
45
86
|
protected
|
46
87
|
|
47
88
|
def get_executions_by_exid(env, exid)
|
@@ -57,6 +98,10 @@ class Flack::App
|
|
57
98
|
|
58
99
|
def get_executions_by_domain(env, dom)
|
59
100
|
|
101
|
+
qs = CGI.parse(env['QUERY_STRING'] || '')
|
102
|
+
statuses = qs['status']
|
103
|
+
statuses = nil if statuses == []
|
104
|
+
|
60
105
|
q = @unit.executions
|
61
106
|
|
62
107
|
if m = dom.match(/\A([^*]+)\*+\z/)
|
@@ -74,6 +119,8 @@ class Flack::App
|
|
74
119
|
q = q.where(domain: dom)
|
75
120
|
end
|
76
121
|
|
122
|
+
q = q.where(status: statuses) if statuses
|
123
|
+
|
77
124
|
respond(env, q.all)
|
78
125
|
end
|
79
126
|
end
|
data/lib/flack/app/helpers.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
# helpers
|
3
4
|
#
|
@@ -108,6 +109,7 @@ class Flack::App
|
|
108
109
|
l[:templated] = true if type.index('{')
|
109
110
|
|
110
111
|
rel_right_part = type
|
112
|
+
.gsub(/\{\?[^}]*\}/, '')
|
111
113
|
.gsub(/[{}]/, '')
|
112
114
|
.gsub(/\./, '-dot')
|
113
115
|
.gsub(/\*/, '-star')
|
@@ -115,6 +117,11 @@ class Flack::App
|
|
115
117
|
h["flack:#{rel_right_part}"] = l
|
116
118
|
end
|
117
119
|
|
120
|
+
CURIES = [ {
|
121
|
+
name: 'flack',
|
122
|
+
href: 'https://github.com/floraison/flack/blob/master/doc/rels.md#{rel}',
|
123
|
+
templated: true } ].freeze
|
124
|
+
|
118
125
|
def links(env)
|
119
126
|
|
120
127
|
h = {}
|
@@ -124,15 +131,12 @@ class Flack::App
|
|
124
131
|
m = env['REQUEST_METHOD']
|
125
132
|
h['self'][:method] = m unless %w[ GET HEAD ].include?(m)
|
126
133
|
|
127
|
-
h['curies'] =
|
128
|
-
name: 'flack',
|
129
|
-
href: 'https://github.com/floraison/flack/blob/master/doc/rels.md#{rel}',
|
130
|
-
templated: true }]
|
134
|
+
h['curies'] = CURIES
|
131
135
|
|
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{?status}')
|
137
|
+
link(env, h, 'executions/{domain}{?status}')
|
138
|
+
link(env, h, 'executions/{domain}*{?status}')
|
139
|
+
link(env, h, 'executions/{domain}.*{?status}')
|
136
140
|
link(env, h, 'executions/{exid}')
|
137
141
|
link(env, h, 'executions/{id}')
|
138
142
|
|
@@ -142,6 +146,12 @@ class Flack::App
|
|
142
146
|
link(env, h, 'messages/{exid}')
|
143
147
|
link(env, h, 'messages/{id}')
|
144
148
|
|
149
|
+
link(env, h, 'pointers{?type}')
|
150
|
+
link(env, h, 'pointers/{exid}{?type}')
|
151
|
+
link(env, h, 'pointers/{domain}{?type}')
|
152
|
+
link(env, h, 'pointers/{domain}*{?type}')
|
153
|
+
link(env, h, 'pointers/{domain}.*{?type}')
|
154
|
+
|
145
155
|
h
|
146
156
|
end
|
147
157
|
|
@@ -149,11 +159,19 @@ class Flack::App
|
|
149
159
|
|
150
160
|
h = {}
|
151
161
|
|
162
|
+
h['curies'] = CURIES
|
163
|
+
|
152
164
|
h['flack:forms/message'] = {
|
153
165
|
action: rel(env, '/message'),
|
154
166
|
method: 'POST',
|
155
167
|
_inputs: { 'flack:forms/message-content' => { type: 'json' } } }
|
156
168
|
|
169
|
+
h['flack:forms/execution-deletion'] = {
|
170
|
+
action: rel(env, '/executions/{exid}'),
|
171
|
+
method: 'DELETE',
|
172
|
+
_inputs: {},
|
173
|
+
templated: true }
|
174
|
+
|
157
175
|
h
|
158
176
|
end
|
159
177
|
|
data/lib/flack/app/index.rb
CHANGED
data/lib/flack/app/message.rb
CHANGED
data/lib/flack/app/messages.rb
CHANGED
@@ -0,0 +1,80 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# /pointers/*
|
4
|
+
#
|
5
|
+
class Flack::App
|
6
|
+
|
7
|
+
# GET /pointers
|
8
|
+
#
|
9
|
+
def get_pointers(env)
|
10
|
+
|
11
|
+
# TODO implement paging
|
12
|
+
env['flack.rel'] = 'flack:pointers'
|
13
|
+
|
14
|
+
qs = CGI.parse(env['QUERY_STRING'] || '')
|
15
|
+
types = qs['types'].collect { |e| e.split(',') }.flatten
|
16
|
+
types = nil if types == []
|
17
|
+
|
18
|
+
q = @unit.pointers
|
19
|
+
q = q.where(type: types) if types
|
20
|
+
|
21
|
+
respond(env, q.all)
|
22
|
+
end
|
23
|
+
|
24
|
+
# GET /pointers/<exid>
|
25
|
+
# GET /pointers/<domain>
|
26
|
+
# GET /pointers/<domain>*
|
27
|
+
# GET /pointers/<domain>.*
|
28
|
+
#
|
29
|
+
def get_pointers_s(env)
|
30
|
+
|
31
|
+
arg = env['flack.args'][0]
|
32
|
+
|
33
|
+
qs = CGI.parse(env['QUERY_STRING'] || '')
|
34
|
+
|
35
|
+
types = qs['types'].collect { |e| e.split(',') }.flatten
|
36
|
+
types = nil if types == []
|
37
|
+
|
38
|
+
if arg.count('-') == 0
|
39
|
+
get_pointers_by_domain(env, arg, types)
|
40
|
+
else
|
41
|
+
get_pointers_by_exid(env, arg, types)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
protected
|
46
|
+
|
47
|
+
def get_pointers_by_exid(env, exid, types)
|
48
|
+
|
49
|
+
env['flack.rel'] = 'flack:pointers/exid'
|
50
|
+
|
51
|
+
q = @unit.pointers.where(exid: exid)
|
52
|
+
q = q.where(type: types) if types
|
53
|
+
|
54
|
+
respond(env, q.all)
|
55
|
+
end
|
56
|
+
|
57
|
+
def get_pointers_by_domain(env, dom, types)
|
58
|
+
|
59
|
+
q = @unit.pointers
|
60
|
+
q = q.where(type: types) if types
|
61
|
+
|
62
|
+
if m = dom.match(/\A([^*]+)\*+\z/)
|
63
|
+
if m[1][-1, 1] == '.'
|
64
|
+
env['flack.rel'] = 'flack:pointers/domain-dot-star'
|
65
|
+
q = q.where(Sequel.like(:domain, "#{m[1]}%"))
|
66
|
+
else
|
67
|
+
env['flack.rel'] = 'flack:pointers/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:pointers/domain'
|
74
|
+
q = q.where(domain: dom)
|
75
|
+
end
|
76
|
+
|
77
|
+
respond(env, q.all)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
data/lib/flack/app/static.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
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: 2021-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: flor
|
@@ -44,20 +44,6 @@ dependencies:
|
|
44
44
|
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '3.0'
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: httpclient
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - "~>"
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '2.8'
|
54
|
-
type: :runtime
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - "~>"
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '2.8'
|
61
47
|
- !ruby/object:Gem::Dependency
|
62
48
|
name: rspec
|
63
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -91,6 +77,7 @@ files:
|
|
91
77
|
- lib/flack/app/index.rb
|
92
78
|
- lib/flack/app/message.rb
|
93
79
|
- lib/flack/app/messages.rb
|
80
|
+
- lib/flack/app/pointers.rb
|
94
81
|
- lib/flack/app/static.rb
|
95
82
|
homepage: https://github.com/floraison/flack
|
96
83
|
licenses:
|