etna 0.1.29 → 0.1.30
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/lib/etna/application.rb +4 -0
- data/lib/etna/client.rb +30 -2
- data/lib/etna/clients/magma/workflows/update_attributes_from_csv_workflow.rb +13 -6
- data/lib/etna/directed_graph.rb +29 -0
- data/lib/etna/hmac.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9118a99396cf2b041083ff982fb680a5d60096802699789962d19bcf3fecf41d
|
|
4
|
+
data.tar.gz: 3145994427f0fa57bf796e68dfe4e69156eb407f144a6afe048bd17454201949
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ec59fd21bcf8bb88848e0c8c628a0185226d7dd7ee1af79525a790ac2117fe2b7d44b9d3e514717e9c23233bd531c9d3c8404981892174adbeee221e62118c33
|
|
7
|
+
data.tar.gz: bf0cc8cea804bb218e7f487ea014c84e394738760dc400de1c716b780da6a668ca5f853a72acfff7a77cd979f4a90004a866cdd16cb26a008a3498c83161fd71
|
data/lib/etna/application.rb
CHANGED
|
@@ -91,6 +91,10 @@ module Etna::Application
|
|
|
91
91
|
(ENV["#{self.class.name.upcase}_ENV"] || :development).to_sym
|
|
92
92
|
end
|
|
93
93
|
|
|
94
|
+
def id
|
|
95
|
+
ENV["APP_NAME"] || self.class.name.snake_case.split(/::/).last
|
|
96
|
+
end
|
|
97
|
+
|
|
94
98
|
def find_descendents(klass)
|
|
95
99
|
ObjectSpace.each_object(Class).select do |k|
|
|
96
100
|
k < klass
|
data/lib/etna/client.rb
CHANGED
|
@@ -17,6 +17,29 @@ module Etna
|
|
|
17
17
|
|
|
18
18
|
attr_reader :routes
|
|
19
19
|
|
|
20
|
+
def signed_route_path(route, params)
|
|
21
|
+
path = route_path(route,params)
|
|
22
|
+
|
|
23
|
+
signatory = params.delete(:signatory)
|
|
24
|
+
|
|
25
|
+
return path unless signatory
|
|
26
|
+
|
|
27
|
+
hmac = Etna::Hmac.new(
|
|
28
|
+
signatory,
|
|
29
|
+
method: route[:method],
|
|
30
|
+
host: URI(@host).host,
|
|
31
|
+
path: path,
|
|
32
|
+
expiration: (DateTime.now + 10).iso8601,
|
|
33
|
+
id: signatory.id,
|
|
34
|
+
nonce: SecureRandom.hex,
|
|
35
|
+
headers: params.except(*route[:params].map(&:to_sym))
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
url_params = hmac.url_params(route[:method] == 'GET')
|
|
39
|
+
|
|
40
|
+
return url_params[:path] + '?' + url_params[:query]
|
|
41
|
+
end
|
|
42
|
+
|
|
20
43
|
def route_path(route, params)
|
|
21
44
|
Etna::Route.path(route[:route], params)
|
|
22
45
|
end
|
|
@@ -60,14 +83,19 @@ module Etna
|
|
|
60
83
|
@routes.each do |route|
|
|
61
84
|
next unless route[:name]
|
|
62
85
|
self.define_singleton_method(route[:name]) do |params = {}|
|
|
63
|
-
|
|
64
86
|
missing_params = (route[:params] - params.keys.map(&:to_s))
|
|
87
|
+
|
|
65
88
|
unless missing_params.empty?
|
|
66
89
|
raise ArgumentError, "Missing required #{missing_params.size > 1 ?
|
|
67
90
|
'params' : 'param'} #{missing_params.join(', ')}"
|
|
68
91
|
end
|
|
69
92
|
|
|
70
|
-
response = send(
|
|
93
|
+
response = send(
|
|
94
|
+
route[:method].downcase,
|
|
95
|
+
signed_route_path(route, params),
|
|
96
|
+
params
|
|
97
|
+
)
|
|
98
|
+
|
|
71
99
|
if block_given?
|
|
72
100
|
yield response
|
|
73
101
|
else
|
|
@@ -37,8 +37,7 @@ module Etna
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def update_attributes
|
|
40
|
-
method
|
|
41
|
-
magma_crud.update_records(method: method) do |update_request|
|
|
40
|
+
magma_crud.update_records(method: :update_json) do |update_request|
|
|
42
41
|
each_revision do |model_name, record_name, revision|
|
|
43
42
|
update_request.update_revision(model_name, record_name, revision)
|
|
44
43
|
end
|
|
@@ -53,10 +52,18 @@ module Etna
|
|
|
53
52
|
end
|
|
54
53
|
|
|
55
54
|
class RowBase
|
|
56
|
-
def
|
|
55
|
+
def attribute_is_json?(attribute)
|
|
56
|
+
[Etna::Clients::Magma::AttributeType::FILE,
|
|
57
|
+
Etna::Clients::Magma::AttributeType::FILE_COLLECTION,
|
|
58
|
+
Etna::Clients::Magma::AttributeType::IMAGE].include?(attribute.attribute_type)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def stripped_value(attribute, attribute_value)
|
|
57
62
|
attribute_value = attribute_value&.strip
|
|
58
63
|
|
|
59
|
-
if attribute_value &&
|
|
64
|
+
if attribute_value &&
|
|
65
|
+
( @workflow.json_values || attribute_is_json?(attribute) ) &&
|
|
66
|
+
attribute_value != @workflow.hole_value
|
|
60
67
|
attribute_value = JSON.parse(attribute_value)
|
|
61
68
|
end
|
|
62
69
|
attribute_value
|
|
@@ -123,7 +130,7 @@ module Etna
|
|
|
123
130
|
raise "Invalid attribute #{attribute_name} for model #{model_name}."
|
|
124
131
|
end
|
|
125
132
|
|
|
126
|
-
stripped = stripped_value(@raw[index + 1])
|
|
133
|
+
stripped = stripped_value(attribute, @raw[index + 1])
|
|
127
134
|
unless @workflow.hole_value.nil?
|
|
128
135
|
next if stripped == @workflow.hole_value
|
|
129
136
|
end
|
|
@@ -234,7 +241,7 @@ module Etna
|
|
|
234
241
|
attribute_name_clean = attribute_name.strip
|
|
235
242
|
raise "Invalid attribute \"#{attribute_name_clean}\" for model #{@model_name}." unless attribute = @workflow.find_attribute(@model_name, attribute_name_clean)
|
|
236
243
|
|
|
237
|
-
attributes[attribute_name_clean] = stripped_value(@raw[attribute_name])
|
|
244
|
+
attributes[attribute_name_clean] = stripped_value(attribute, @raw[attribute_name])
|
|
238
245
|
end
|
|
239
246
|
end
|
|
240
247
|
end
|
data/lib/etna/directed_graph.rb
CHANGED
|
@@ -18,6 +18,35 @@ class DirectedGraph
|
|
|
18
18
|
parents[parent] = parent_parents
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
+
def serialized_path_from(root)
|
|
22
|
+
seen = Set.new
|
|
23
|
+
[].tap do |result|
|
|
24
|
+
result << root
|
|
25
|
+
seen.add(root)
|
|
26
|
+
path_q = paths_from(root)
|
|
27
|
+
|
|
28
|
+
until path_q.empty?
|
|
29
|
+
next_path = path_q.shift
|
|
30
|
+
next if next_path.nil?
|
|
31
|
+
|
|
32
|
+
until next_path.empty?
|
|
33
|
+
next_n = next_path.shift
|
|
34
|
+
next if next_n.nil?
|
|
35
|
+
next if seen.include?(next_n)
|
|
36
|
+
|
|
37
|
+
if @parents[next_n].keys.any? { |p| !seen.include?(p) }
|
|
38
|
+
next_path.unshift(next_n)
|
|
39
|
+
path_q.push(next_path)
|
|
40
|
+
break
|
|
41
|
+
else
|
|
42
|
+
result << next_n
|
|
43
|
+
seen.add(next_n)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
21
50
|
def paths_from(root)
|
|
22
51
|
[].tap do |result|
|
|
23
52
|
parents_of_map = descendants(root)
|
data/lib/etna/hmac.rb
CHANGED
|
@@ -20,14 +20,14 @@ module Etna
|
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
# this returns arguments for URI::HTTP.build
|
|
23
|
-
def url_params
|
|
23
|
+
def url_params(with_headers=true)
|
|
24
24
|
params = {
|
|
25
25
|
signature: signature,
|
|
26
26
|
expiration: @expiration,
|
|
27
27
|
nonce: @nonce,
|
|
28
28
|
id: @id.to_s,
|
|
29
29
|
headers: @headers.keys.join(','),
|
|
30
|
-
}.merge(@headers).map do |name, value|
|
|
30
|
+
}.merge(with_headers ? @headers : {}).map do |name, value|
|
|
31
31
|
[
|
|
32
32
|
"X-Etna-#{ name.to_s.split(/_/).map(&:capitalize).join('-') }",
|
|
33
33
|
value
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: etna
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.30
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Saurabh Asthana
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-
|
|
11
|
+
date: 2021-03-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rack
|