pushmi_pullyu 2.0.6 → 2.1.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/.rubocop.yml +0 -10
- data/CHANGELOG.md +10 -2
- data/Gemfile +14 -0
- data/Gemfile.lock +110 -101
- data/examples/pushmi_pullyu.yml +4 -1
- data/lib/pushmi_pullyu/cli.rb +18 -8
- data/lib/pushmi_pullyu/logging.rb +68 -15
- data/lib/pushmi_pullyu/preservation_queue.rb +7 -0
- data/lib/pushmi_pullyu/swift_depositer.rb +13 -5
- data/lib/pushmi_pullyu/version.rb +1 -1
- data/lib/pushmi_pullyu.rb +4 -3
- data/pushmi_pullyu.gemspec +1 -12
- metadata +5 -165
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: da4560ad8303a06ea455d4da2915bd9be6a98edb70a8ee91bc12cb25d977f3b5
|
|
4
|
+
data.tar.gz: db98dc991f3149b0d217f6ae61f9c07c34ecc8ab7c878d4e60ecdbc08aed95bd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5d565b6ecf4fcd0cab2690f04aaf619dc70d83848a8fc48960de393fac94b83ff18f9751528dbbb184c4f411d270113ec90c807146c8c14e35010c8a40434734
|
|
7
|
+
data.tar.gz: 478f4047534baaf2931733f0f48d199dd51088262e0076f5b52ad1f63f74fb5fee6dc5265ec8c8b5064f8b87d1ecaebf94513a5d9ecf299c3455df4526fbc9cb
|
data/.rubocop.yml
CHANGED
|
@@ -20,7 +20,6 @@ Layout/EmptyLinesAroundClassBody:
|
|
|
20
20
|
EnforcedStyle: empty_lines_except_namespace
|
|
21
21
|
|
|
22
22
|
Layout/IndentationConsistency:
|
|
23
|
-
Enabled: true
|
|
24
23
|
EnforcedStyle: normal
|
|
25
24
|
|
|
26
25
|
# A calculated magnitude based on number of assignments,
|
|
@@ -61,15 +60,6 @@ Style/ClassAndModuleChildren:
|
|
|
61
60
|
Style/Documentation:
|
|
62
61
|
Enabled: false
|
|
63
62
|
|
|
64
|
-
Style/HashEachMethods:
|
|
65
|
-
Enabled: true
|
|
66
|
-
|
|
67
|
-
Style/HashTransformKeys:
|
|
68
|
-
Enabled: true
|
|
69
|
-
|
|
70
|
-
Style/HashTransformValues:
|
|
71
|
-
Enabled: true
|
|
72
|
-
|
|
73
63
|
Naming/FileName:
|
|
74
64
|
Exclude:
|
|
75
65
|
- Dangerfile
|
data/CHANGELOG.md
CHANGED
|
@@ -6,8 +6,17 @@ PushmiPullyu is a Ruby application, whose primary job is to manage the flow of c
|
|
|
6
6
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
7
7
|
and releases in PushmiPullyu adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
8
8
|
|
|
9
|
-
## [
|
|
9
|
+
## [2.1.0]
|
|
10
|
+
- Add more logging information [#433](https://github.com/ualbertalib/pushmi_pullyu/issues/433)
|
|
11
|
+
- Add V3 authentication [#349](https://github.com/ualbertalib/pushmi_pullyu/issues/349)
|
|
10
12
|
|
|
13
|
+
- Add logic to perform authentication against the V3 Auth protocol
|
|
14
|
+
|
|
15
|
+
## [2.0.7] - 2023-09-13
|
|
16
|
+
|
|
17
|
+
- Fix nil exception [#314](https://github.com/ualbertalib/pushmi_pullyu/issues/314)
|
|
18
|
+
- Bump rubocop from 1.28.1 to 1.54.1 [PR#348](https://github.com/ualbertalib/pushmi_pullyu/pull/348)
|
|
19
|
+
- Add missing logging for standard exception [#314](https://github.com/ualbertalib/pushmi_pullyu/issues/314)
|
|
11
20
|
## [2.0.6] - 2023-03-17
|
|
12
21
|
|
|
13
22
|
- Fix URI concatenation for jupiter's base url. [#309](https://github.com/ualbertalib/pushmi_pullyu/issues/309)
|
|
@@ -51,5 +60,4 @@ and releases in PushmiPullyu adheres to [Semantic Versioning](https://semver.org
|
|
|
51
60
|
### Removed
|
|
52
61
|
- Data output for original_file information
|
|
53
62
|
|
|
54
|
-
-
|
|
55
63
|
## [1.0.6] - 2018-11-29
|
data/Gemfile
CHANGED
|
@@ -2,3 +2,17 @@ source 'https://rubygems.org'
|
|
|
2
2
|
|
|
3
3
|
# Specify your gem's dependencies in pushmi_pullyu.gemspec
|
|
4
4
|
gemspec
|
|
5
|
+
|
|
6
|
+
group :development, :test do
|
|
7
|
+
gem 'bundler', '~> 2.0'
|
|
8
|
+
gem 'danger', '~> 9.3'
|
|
9
|
+
gem 'pry', '~> 0.10', '>= 0.10.4'
|
|
10
|
+
gem 'pry-byebug', '~> 3.6'
|
|
11
|
+
gem 'rake', '~> 13.0'
|
|
12
|
+
gem 'rspec', '~> 3.13'
|
|
13
|
+
gem 'rubocop', '~> 1.64'
|
|
14
|
+
gem 'rubocop-rspec', '~> 2.24'
|
|
15
|
+
gem 'timecop', '~> 0.9'
|
|
16
|
+
gem 'vcr', '~> 5.0'
|
|
17
|
+
gem 'webmock', '~> 3.19'
|
|
18
|
+
end
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
pushmi_pullyu (2.0
|
|
4
|
+
pushmi_pullyu (2.1.0)
|
|
5
5
|
activesupport (>= 5, < 8)
|
|
6
6
|
bagit (~> 0.4)
|
|
7
7
|
connection_pool (~> 2.2)
|
|
@@ -10,7 +10,7 @@ PATH
|
|
|
10
10
|
openstack (~> 3.3, >= 3.3.10)
|
|
11
11
|
rdf (>= 1.99, < 4.0)
|
|
12
12
|
rdf-n3 (>= 1.99, < 4.0)
|
|
13
|
-
redis (>= 3.3, <
|
|
13
|
+
redis (>= 3.3, < 6.0)
|
|
14
14
|
rest-client (>= 1.8, < 3.0)
|
|
15
15
|
rollbar (>= 2.18, < 4.0)
|
|
16
16
|
uuid (~> 2.3.9)
|
|
@@ -18,80 +18,73 @@ PATH
|
|
|
18
18
|
GEM
|
|
19
19
|
remote: https://rubygems.org/
|
|
20
20
|
specs:
|
|
21
|
-
activesupport (7.
|
|
21
|
+
activesupport (7.1.1)
|
|
22
|
+
base64
|
|
23
|
+
bigdecimal
|
|
22
24
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
25
|
+
connection_pool (>= 2.2.5)
|
|
26
|
+
drb
|
|
23
27
|
i18n (>= 1.6, < 2)
|
|
24
28
|
minitest (>= 5.1)
|
|
29
|
+
mutex_m
|
|
25
30
|
tzinfo (~> 2.0)
|
|
26
|
-
addressable (2.8.
|
|
31
|
+
addressable (2.8.5)
|
|
27
32
|
public_suffix (>= 2.0.2, < 6.0)
|
|
28
|
-
amazing_print (1.4.0)
|
|
29
33
|
ast (2.4.2)
|
|
30
|
-
bagit (0.4.
|
|
34
|
+
bagit (0.4.6)
|
|
31
35
|
docopt (~> 0.5.0)
|
|
32
36
|
validatable (~> 1.6)
|
|
37
|
+
base64 (0.2.0)
|
|
38
|
+
bigdecimal (3.1.4)
|
|
33
39
|
builder (3.2.4)
|
|
34
40
|
byebug (11.1.3)
|
|
35
|
-
claide (1.0
|
|
41
|
+
claide (1.1.0)
|
|
36
42
|
claide-plugins (0.9.2)
|
|
37
43
|
cork
|
|
38
44
|
nap
|
|
39
45
|
open4 (~> 1.3)
|
|
40
46
|
coderay (1.1.3)
|
|
41
47
|
colored2 (3.1.2)
|
|
42
|
-
concurrent-ruby (1.2.
|
|
43
|
-
connection_pool (2.
|
|
48
|
+
concurrent-ruby (1.2.2)
|
|
49
|
+
connection_pool (2.4.1)
|
|
44
50
|
cork (0.3.0)
|
|
45
51
|
colored2 (~> 3.1)
|
|
46
52
|
crack (0.4.5)
|
|
47
53
|
rexml
|
|
48
54
|
daemons (1.4.1)
|
|
49
|
-
danger (
|
|
55
|
+
danger (9.3.2)
|
|
50
56
|
claide (~> 1.0)
|
|
51
57
|
claide-plugins (>= 0.9.2)
|
|
52
58
|
colored2 (~> 3.1)
|
|
53
59
|
cork (~> 0.1)
|
|
54
|
-
faraday (>= 0.9.0, <
|
|
60
|
+
faraday (>= 0.9.0, < 3.0)
|
|
55
61
|
faraday-http-cache (~> 2.0)
|
|
56
|
-
git (~> 1.
|
|
62
|
+
git (~> 1.13)
|
|
57
63
|
kramdown (~> 2.3)
|
|
58
64
|
kramdown-parser-gfm (~> 1.0)
|
|
59
65
|
no_proxy_fix
|
|
60
|
-
octokit (~>
|
|
66
|
+
octokit (~> 6.0)
|
|
61
67
|
terminal-table (>= 1, < 4)
|
|
62
|
-
diff-lcs (1.5.
|
|
68
|
+
diff-lcs (1.5.1)
|
|
63
69
|
docopt (0.5.0)
|
|
64
70
|
domain_name (0.5.20190701)
|
|
65
71
|
unf (>= 0.0.5, < 1.0.0)
|
|
66
|
-
|
|
67
|
-
|
|
72
|
+
drb (2.1.1)
|
|
73
|
+
ruby2_keywords
|
|
74
|
+
ebnf (2.3.5)
|
|
68
75
|
htmlentities (~> 4.3)
|
|
69
76
|
rdf (~> 3.2)
|
|
70
77
|
scanf (~> 1.0)
|
|
71
78
|
sxp (~> 1.2)
|
|
72
|
-
unicode-types (~> 1.
|
|
73
|
-
faraday (
|
|
74
|
-
|
|
75
|
-
faraday-
|
|
76
|
-
faraday-excon (~> 1.1)
|
|
77
|
-
faraday-httpclient (~> 1.0.1)
|
|
78
|
-
faraday-net_http (~> 1.0)
|
|
79
|
-
faraday-net_http_persistent (~> 1.1)
|
|
80
|
-
faraday-patron (~> 1.0)
|
|
81
|
-
faraday-rack (~> 1.0)
|
|
82
|
-
multipart-post (>= 1.2, < 3)
|
|
79
|
+
unicode-types (~> 1.8)
|
|
80
|
+
faraday (2.7.11)
|
|
81
|
+
base64
|
|
82
|
+
faraday-net_http (>= 2.0, < 3.1)
|
|
83
83
|
ruby2_keywords (>= 0.0.4)
|
|
84
|
-
faraday-
|
|
85
|
-
faraday-em_synchrony (1.0.0)
|
|
86
|
-
faraday-excon (1.1.0)
|
|
87
|
-
faraday-http-cache (2.2.0)
|
|
84
|
+
faraday-http-cache (2.5.0)
|
|
88
85
|
faraday (>= 0.8)
|
|
89
|
-
faraday-
|
|
90
|
-
|
|
91
|
-
faraday-net_http_persistent (1.2.0)
|
|
92
|
-
faraday-patron (1.0.0)
|
|
93
|
-
faraday-rack (1.0.0)
|
|
94
|
-
git (1.13.0)
|
|
86
|
+
faraday-net_http (3.0.2)
|
|
87
|
+
git (1.18.0)
|
|
95
88
|
addressable (~> 2.8)
|
|
96
89
|
rchardet (~> 1.8)
|
|
97
90
|
hashdiff (1.0.1)
|
|
@@ -99,50 +92,53 @@ GEM
|
|
|
99
92
|
http-accept (1.7.0)
|
|
100
93
|
http-cookie (1.0.5)
|
|
101
94
|
domain_name (~> 0.5)
|
|
102
|
-
i18n (1.
|
|
95
|
+
i18n (1.14.1)
|
|
103
96
|
concurrent-ruby (~> 1.0)
|
|
104
|
-
json (2.
|
|
105
|
-
kramdown (2.
|
|
97
|
+
json (2.7.2)
|
|
98
|
+
kramdown (2.4.0)
|
|
106
99
|
rexml
|
|
107
100
|
kramdown-parser-gfm (1.1.0)
|
|
108
101
|
kramdown (~> 2.0)
|
|
102
|
+
language_server-protocol (3.17.0.3)
|
|
109
103
|
link_header (0.0.8)
|
|
110
104
|
logger (1.5.3)
|
|
111
105
|
macaddr (1.7.2)
|
|
112
106
|
systemu (~> 2.6.5)
|
|
113
107
|
matrix (0.4.2)
|
|
114
108
|
method_source (1.0.0)
|
|
115
|
-
mime-types (3.
|
|
109
|
+
mime-types (3.5.1)
|
|
116
110
|
mime-types-data (~> 3.2015)
|
|
117
|
-
mime-types-data (3.
|
|
111
|
+
mime-types-data (3.2023.1003)
|
|
118
112
|
minitar (0.9)
|
|
119
|
-
minitest (5.
|
|
120
|
-
|
|
113
|
+
minitest (5.20.0)
|
|
114
|
+
mutex_m (0.1.2)
|
|
121
115
|
nap (1.1.0)
|
|
122
|
-
net-http-persistent (4.0.
|
|
116
|
+
net-http-persistent (4.0.2)
|
|
123
117
|
connection_pool (~> 2.2)
|
|
124
118
|
netrc (0.11.0)
|
|
125
119
|
no_proxy_fix (0.1.2)
|
|
126
|
-
octokit (
|
|
127
|
-
faraday (>=
|
|
128
|
-
sawyer (~> 0.
|
|
120
|
+
octokit (6.1.1)
|
|
121
|
+
faraday (>= 1, < 3)
|
|
122
|
+
sawyer (~> 0.9)
|
|
129
123
|
open4 (1.3.4)
|
|
130
124
|
openstack (3.3.21)
|
|
131
125
|
json
|
|
132
|
-
parallel (1.
|
|
133
|
-
parser (3.1.
|
|
126
|
+
parallel (1.24.0)
|
|
127
|
+
parser (3.3.1.0)
|
|
134
128
|
ast (~> 2.4.1)
|
|
135
|
-
|
|
129
|
+
racc
|
|
130
|
+
pry (0.14.2)
|
|
136
131
|
coderay (~> 1.1)
|
|
137
132
|
method_source (~> 1.0)
|
|
138
133
|
pry-byebug (3.10.1)
|
|
139
134
|
byebug (~> 11.0)
|
|
140
135
|
pry (>= 0.13, < 0.15)
|
|
141
|
-
public_suffix (5.0.
|
|
136
|
+
public_suffix (5.0.3)
|
|
137
|
+
racc (1.8.0)
|
|
142
138
|
rainbow (3.1.1)
|
|
143
139
|
rake (13.0.6)
|
|
144
140
|
rchardet (1.8.0)
|
|
145
|
-
rdf (3.2.
|
|
141
|
+
rdf (3.2.11)
|
|
146
142
|
link_header (~> 0.0, >= 0.0.8)
|
|
147
143
|
rdf-aggregate-repo (3.2.1)
|
|
148
144
|
rdf (~> 3.2)
|
|
@@ -154,78 +150,91 @@ GEM
|
|
|
154
150
|
rdf-xsd (3.2.1)
|
|
155
151
|
rdf (~> 3.2)
|
|
156
152
|
rexml (~> 3.2)
|
|
157
|
-
redis (
|
|
158
|
-
|
|
153
|
+
redis (5.0.8)
|
|
154
|
+
redis-client (>= 0.17.0)
|
|
155
|
+
redis-client (0.17.1)
|
|
156
|
+
connection_pool
|
|
157
|
+
regexp_parser (2.9.2)
|
|
159
158
|
rest-client (2.1.0)
|
|
160
159
|
http-accept (>= 1.7.0, < 2.0)
|
|
161
160
|
http-cookie (>= 1.0.2, < 2.0)
|
|
162
161
|
mime-types (>= 1.16, < 4.0)
|
|
163
162
|
netrc (~> 0.8)
|
|
164
|
-
rexml (3.2.
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
rspec-
|
|
169
|
-
rspec-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
163
|
+
rexml (3.2.8)
|
|
164
|
+
strscan (>= 3.0.9)
|
|
165
|
+
rollbar (3.4.1)
|
|
166
|
+
rspec (3.13.0)
|
|
167
|
+
rspec-core (~> 3.13.0)
|
|
168
|
+
rspec-expectations (~> 3.13.0)
|
|
169
|
+
rspec-mocks (~> 3.13.0)
|
|
170
|
+
rspec-core (3.13.0)
|
|
171
|
+
rspec-support (~> 3.13.0)
|
|
172
|
+
rspec-expectations (3.13.0)
|
|
173
173
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
174
|
-
rspec-support (~> 3.
|
|
175
|
-
rspec-mocks (3.
|
|
174
|
+
rspec-support (~> 3.13.0)
|
|
175
|
+
rspec-mocks (3.13.0)
|
|
176
176
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
177
|
-
rspec-support (~> 3.
|
|
178
|
-
rspec-support (3.
|
|
179
|
-
rubocop (1.
|
|
177
|
+
rspec-support (~> 3.13.0)
|
|
178
|
+
rspec-support (3.13.0)
|
|
179
|
+
rubocop (1.64.0)
|
|
180
|
+
json (~> 2.3)
|
|
181
|
+
language_server-protocol (>= 3.17.0)
|
|
180
182
|
parallel (~> 1.10)
|
|
181
|
-
parser (>= 3.
|
|
183
|
+
parser (>= 3.3.0.2)
|
|
182
184
|
rainbow (>= 2.2.2, < 4.0)
|
|
183
185
|
regexp_parser (>= 1.8, < 3.0)
|
|
184
|
-
rexml
|
|
185
|
-
rubocop-ast (>= 1.
|
|
186
|
+
rexml (>= 3.2.5, < 4.0)
|
|
187
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
|
186
188
|
ruby-progressbar (~> 1.7)
|
|
187
|
-
unicode-display_width (>=
|
|
188
|
-
rubocop-ast (1.
|
|
189
|
-
parser (>= 3.
|
|
190
|
-
rubocop-
|
|
191
|
-
rubocop (~> 1.
|
|
192
|
-
|
|
189
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
|
190
|
+
rubocop-ast (1.31.3)
|
|
191
|
+
parser (>= 3.3.1.0)
|
|
192
|
+
rubocop-capybara (2.19.0)
|
|
193
|
+
rubocop (~> 1.41)
|
|
194
|
+
rubocop-factory_bot (2.24.0)
|
|
195
|
+
rubocop (~> 1.33)
|
|
196
|
+
rubocop-rspec (2.24.1)
|
|
197
|
+
rubocop (~> 1.33)
|
|
198
|
+
rubocop-capybara (~> 2.17)
|
|
199
|
+
rubocop-factory_bot (~> 2.22)
|
|
200
|
+
ruby-progressbar (1.13.0)
|
|
193
201
|
ruby2_keywords (0.0.5)
|
|
194
|
-
sawyer (0.
|
|
202
|
+
sawyer (0.9.2)
|
|
195
203
|
addressable (>= 2.3.5)
|
|
196
|
-
faraday (
|
|
204
|
+
faraday (>= 0.17.3, < 3)
|
|
197
205
|
scanf (1.0.0)
|
|
198
|
-
sparql (3.2.
|
|
199
|
-
builder (~> 3.2)
|
|
200
|
-
ebnf (~> 2.
|
|
206
|
+
sparql (3.2.6)
|
|
207
|
+
builder (~> 3.2, >= 3.2.4)
|
|
208
|
+
ebnf (~> 2.3, >= 2.3.5)
|
|
201
209
|
logger (~> 1.5)
|
|
202
|
-
rdf (~> 3.2, >= 3.2.
|
|
203
|
-
rdf-aggregate-repo (~> 3.2)
|
|
210
|
+
rdf (~> 3.2, >= 3.2.11)
|
|
211
|
+
rdf-aggregate-repo (~> 3.2, >= 3.2.1)
|
|
204
212
|
rdf-xsd (~> 3.2)
|
|
205
|
-
sparql-client (~> 3.2, >= 3.2.
|
|
206
|
-
sxp (~> 1.2, >= 1.2.
|
|
207
|
-
sparql-client (3.2.
|
|
208
|
-
net-http-persistent (~> 4.0, >= 4.0.
|
|
209
|
-
rdf (~> 3.2, >= 3.2.
|
|
210
|
-
|
|
213
|
+
sparql-client (~> 3.2, >= 3.2.2)
|
|
214
|
+
sxp (~> 1.2, >= 1.2.4)
|
|
215
|
+
sparql-client (3.2.2)
|
|
216
|
+
net-http-persistent (~> 4.0, >= 4.0.2)
|
|
217
|
+
rdf (~> 3.2, >= 3.2.11)
|
|
218
|
+
strscan (3.1.0)
|
|
219
|
+
sxp (1.2.4)
|
|
211
220
|
matrix (~> 0.4)
|
|
212
221
|
rdf (~> 3.2)
|
|
213
222
|
systemu (2.6.5)
|
|
214
223
|
terminal-table (3.0.2)
|
|
215
224
|
unicode-display_width (>= 1.1.1, < 3)
|
|
216
|
-
timecop (0.9.
|
|
225
|
+
timecop (0.9.8)
|
|
217
226
|
tzinfo (2.0.6)
|
|
218
227
|
concurrent-ruby (~> 1.0)
|
|
219
228
|
unf (0.1.4)
|
|
220
229
|
unf_ext
|
|
221
230
|
unf_ext (0.0.8.2)
|
|
222
|
-
unicode-display_width (2.
|
|
223
|
-
unicode-types (1.
|
|
231
|
+
unicode-display_width (2.5.0)
|
|
232
|
+
unicode-types (1.9.0)
|
|
224
233
|
uuid (2.3.9)
|
|
225
234
|
macaddr (~> 1.0)
|
|
226
235
|
validatable (1.6.7)
|
|
227
236
|
vcr (5.1.0)
|
|
228
|
-
webmock (3.
|
|
237
|
+
webmock (3.19.1)
|
|
229
238
|
addressable (>= 2.8.0)
|
|
230
239
|
crack (>= 0.3.2)
|
|
231
240
|
hashdiff (>= 0.4.0, < 2.0.0)
|
|
@@ -235,17 +244,17 @@ PLATFORMS
|
|
|
235
244
|
|
|
236
245
|
DEPENDENCIES
|
|
237
246
|
bundler (~> 2.0)
|
|
238
|
-
danger (~>
|
|
247
|
+
danger (~> 9.3)
|
|
239
248
|
pry (~> 0.10, >= 0.10.4)
|
|
240
249
|
pry-byebug (~> 3.6)
|
|
241
250
|
pushmi_pullyu!
|
|
242
251
|
rake (~> 13.0)
|
|
243
|
-
rspec (~> 3.
|
|
244
|
-
rubocop (~> 1.
|
|
245
|
-
rubocop-rspec (~> 2.
|
|
246
|
-
timecop (~> 0.
|
|
252
|
+
rspec (~> 3.13)
|
|
253
|
+
rubocop (~> 1.64)
|
|
254
|
+
rubocop-rspec (~> 2.24)
|
|
255
|
+
timecop (~> 0.9)
|
|
247
256
|
vcr (~> 5.0)
|
|
248
|
-
webmock (~> 3.
|
|
257
|
+
webmock (~> 3.19)
|
|
249
258
|
|
|
250
259
|
BUNDLED WITH
|
|
251
260
|
2.3.12
|
data/examples/pushmi_pullyu.yml
CHANGED
|
@@ -32,7 +32,10 @@ swift:
|
|
|
32
32
|
auth_url: http://localhost:8080/auth/v1.0
|
|
33
33
|
project_name: demo
|
|
34
34
|
project_domain_name: default
|
|
35
|
-
container:
|
|
35
|
+
container: era
|
|
36
|
+
# These 2 extra parameters are now required for keystone v3 authentication
|
|
37
|
+
auth_version: v3
|
|
38
|
+
user_domain: default
|
|
36
39
|
|
|
37
40
|
rollbar:
|
|
38
41
|
token: 'abc123xyz'
|
data/lib/pushmi_pullyu/cli.rb
CHANGED
|
@@ -199,6 +199,8 @@ class PushmiPullyu::CLI
|
|
|
199
199
|
def run_preservation_cycle
|
|
200
200
|
begin
|
|
201
201
|
entity = queue.wait_next_item
|
|
202
|
+
PushmiPullyu::Logging.log_preservation_attempt(entity,
|
|
203
|
+
queue.get_entity_ingestion_attempt(entity))
|
|
202
204
|
return unless entity && entity[:type].present? && entity[:uuid].present?
|
|
203
205
|
rescue StandardError => e
|
|
204
206
|
log_exception(e)
|
|
@@ -212,27 +214,29 @@ class PushmiPullyu::CLI
|
|
|
212
214
|
# Push tarred AIP to swift API
|
|
213
215
|
deposited_file = swift.deposit_file(aip_filename, options[:swift][:container])
|
|
214
216
|
# Log successful preservation event to the log files
|
|
215
|
-
PushmiPullyu::Logging.
|
|
217
|
+
PushmiPullyu::Logging.log_preservation_success(deposited_file, aip_directory)
|
|
216
218
|
end
|
|
217
219
|
# An EntityInvalid expection means there is a problem with the entity information format so there is no point in
|
|
218
220
|
# readding it to the queue as it will always fail
|
|
219
221
|
rescue PushmiPullyu::AIP::EntityInvalid => e
|
|
220
222
|
rescue StandardError => e
|
|
223
|
+
log_exception(e)
|
|
221
224
|
begin
|
|
222
225
|
queue.add_entity_in_timeframe(entity)
|
|
226
|
+
PushmiPullyu::Logging.log_preservation_fail_and_retry(entity, queue.get_entity_ingestion_attempt(entity), e)
|
|
223
227
|
rescue PushmiPullyu::PreservationQueue::MaxDepositAttemptsReached => e
|
|
228
|
+
PushmiPullyu::Logging.log_preservation_failure(entity, queue.get_entity_ingestion_attempt(entity), e)
|
|
224
229
|
log_exception(e)
|
|
225
230
|
end
|
|
226
231
|
|
|
227
|
-
# rubocop:disable Lint/RescueException
|
|
228
232
|
# Something other than a StandardError exception means something happened which we were not expecting!
|
|
229
233
|
# Make sure we log the problem
|
|
234
|
+
# rubocop:disable Lint/RescueException
|
|
230
235
|
rescue Exception => e
|
|
231
|
-
raise e
|
|
232
|
-
# rubocop:enable Lint/RescueException
|
|
233
|
-
ensure
|
|
234
236
|
log_exception(e)
|
|
237
|
+
raise e
|
|
235
238
|
end
|
|
239
|
+
# rubocop:enable Lint/RescueException
|
|
236
240
|
end
|
|
237
241
|
|
|
238
242
|
def run_tick_loop
|
|
@@ -244,7 +248,11 @@ class PushmiPullyu::CLI
|
|
|
244
248
|
|
|
245
249
|
def setup_log
|
|
246
250
|
if options[:daemonize]
|
|
247
|
-
PushmiPullyu::Logging.
|
|
251
|
+
PushmiPullyu::Logging.initialize_loggers(
|
|
252
|
+
log_target: PushmiPullyu.application_log_file,
|
|
253
|
+
events_target: "#{PushmiPullyu.options[:logdir]}/preservation_events.log",
|
|
254
|
+
json_target: "#{PushmiPullyu.options[:logdir]}/preservation_events.json"
|
|
255
|
+
)
|
|
248
256
|
else
|
|
249
257
|
logger.formatter = PushmiPullyu::Logging::SimpleFormatter.new
|
|
250
258
|
end
|
|
@@ -266,10 +274,12 @@ class PushmiPullyu::CLI
|
|
|
266
274
|
def swift
|
|
267
275
|
@swift ||= PushmiPullyu::SwiftDepositer.new(username: options[:swift][:username],
|
|
268
276
|
password: options[:swift][:password],
|
|
269
|
-
tenant: options[:swift][:tenant],
|
|
270
277
|
project_name: options[:swift][:project_name],
|
|
278
|
+
tenant: options[:swift][:tenant],
|
|
271
279
|
project_domain_name: options[:swift][:project_domain_name],
|
|
272
|
-
|
|
280
|
+
user_domain: options[:swift][:user_domain],
|
|
281
|
+
auth_url: options[:swift][:auth_url],
|
|
282
|
+
auth_version: options[:swift][:auth_version])
|
|
273
283
|
end
|
|
274
284
|
|
|
275
285
|
# On first call of shutdown, this will gracefully close the main run loop
|
|
@@ -21,14 +21,17 @@ module PushmiPullyu::Logging
|
|
|
21
21
|
|
|
22
22
|
attr_writer :logger
|
|
23
23
|
|
|
24
|
-
def
|
|
24
|
+
def initialize_loggers(log_target: $stdout, events_target: $stdout, json_target: $stdout)
|
|
25
|
+
@preservation_logger = Logger.new(events_target)
|
|
26
|
+
@preservation_json_logger = Logger.new(json_target)
|
|
27
|
+
|
|
25
28
|
@logger = Logger.new(log_target)
|
|
26
29
|
@logger.level = Logger::INFO
|
|
27
30
|
@logger
|
|
28
31
|
end
|
|
29
32
|
|
|
30
33
|
def logger
|
|
31
|
-
@logger ||=
|
|
34
|
+
@logger ||= initialize_loggers
|
|
32
35
|
end
|
|
33
36
|
|
|
34
37
|
def log_aip_activity(aip_directory, message)
|
|
@@ -43,10 +46,13 @@ module PushmiPullyu::Logging
|
|
|
43
46
|
aip_logger.close
|
|
44
47
|
end
|
|
45
48
|
|
|
46
|
-
def log_preservation_event(
|
|
47
|
-
|
|
48
|
-
|
|
49
|
+
def log_preservation_event(message, message_json)
|
|
50
|
+
logger.info(message)
|
|
51
|
+
@preservation_logger.info(message)
|
|
52
|
+
@preservation_json_logger.info("#{message_json},")
|
|
53
|
+
end
|
|
49
54
|
|
|
55
|
+
def log_preservation_success(deposited_file, aip_directory)
|
|
50
56
|
message = "#{deposited_file.name} was successfully deposited into Swift Storage!\n" \
|
|
51
57
|
"Here are the details of this preservation event:\n" \
|
|
52
58
|
"\tUUID: '#{deposited_file.name}'\n" \
|
|
@@ -68,15 +74,62 @@ module PushmiPullyu::Logging
|
|
|
68
74
|
end
|
|
69
75
|
end
|
|
70
76
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
preservation_logger.info(message)
|
|
77
|
+
log_preservation_event(message, preservation_success_to_json(deposited_file, aip_directory))
|
|
78
|
+
end
|
|
74
79
|
|
|
75
|
-
|
|
80
|
+
def log_preservation_fail_and_retry(entity, retry_attempt, exception)
|
|
81
|
+
message = "#{entity[:type]} failed to be deposited and will try again.\n" \
|
|
82
|
+
"Here are the details of this preservation event:\n" \
|
|
83
|
+
"\t#{entity[:type]} uuid: #{entity[:uuid]}" \
|
|
84
|
+
"\tReadding to preservation queue with retry attempt: #{retry_attempt}\n" \
|
|
85
|
+
"\tError of type: #{exception.class.name}\n" \
|
|
86
|
+
"\tError message: #{exception.message}\n"
|
|
87
|
+
|
|
88
|
+
message_information = {
|
|
89
|
+
event_type: :fail_and_retry,
|
|
90
|
+
event_time: Time.now.to_s,
|
|
91
|
+
entity_type: entity[:type],
|
|
92
|
+
entity_uuid: entity[:uuid],
|
|
93
|
+
retry_attempt: retry_attempt,
|
|
94
|
+
error_message: exception.message
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
log_preservation_event(message, message_information.to_json)
|
|
98
|
+
end
|
|
76
99
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
100
|
+
def log_preservation_failure(entity, retry_attempt, exception)
|
|
101
|
+
message = "#{entity[:type]} failed to be deposited.\n" \
|
|
102
|
+
"Here are the details of this preservation event:\n" \
|
|
103
|
+
"\t#{entity[:type]} uuid: #{entity[:uuid]}" \
|
|
104
|
+
"\tRetry attempt: #{retry_attempt}\n"
|
|
105
|
+
|
|
106
|
+
message_information = {
|
|
107
|
+
event_type: :fail_and_retry,
|
|
108
|
+
event_time: Time.now.to_s,
|
|
109
|
+
entity_type: entity[:type],
|
|
110
|
+
entity_uuid: entity[:uuid],
|
|
111
|
+
retry_attempt: retry_attempt,
|
|
112
|
+
error_message: exception.message
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
log_preservation_event(message, message_information.to_json)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def log_preservation_attempt(entity, retry_attempt)
|
|
119
|
+
message = "#{entity[:type]} will attempt to be deposited.\n" \
|
|
120
|
+
"Here are the details of this preservation event:\n" \
|
|
121
|
+
"\t#{entity[:type]} uuid: #{entity[:uuid]}" \
|
|
122
|
+
"\tRetry attempt: #{retry_attempt}\n"
|
|
123
|
+
|
|
124
|
+
message_information = {
|
|
125
|
+
event_type: :attempt,
|
|
126
|
+
event_time: Time.now.to_s,
|
|
127
|
+
entity_type: entity[:type],
|
|
128
|
+
entity_uuid: entity[:uuid],
|
|
129
|
+
retry_attempt: retry_attempt
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
log_preservation_event(message, message_information.to_json)
|
|
80
133
|
end
|
|
81
134
|
|
|
82
135
|
###
|
|
@@ -107,14 +160,14 @@ module PushmiPullyu::Logging
|
|
|
107
160
|
# note:
|
|
108
161
|
# to parse, the prefix "I, ... INFO --:" in each line needs to be
|
|
109
162
|
# stripped using a bash command such as "sed"
|
|
110
|
-
def
|
|
163
|
+
def preservation_success_to_json(deposited_file, aip_directory)
|
|
111
164
|
message = {}
|
|
112
165
|
|
|
113
166
|
message['do_uuid'] = deposited_file.name.to_s
|
|
114
167
|
message['aip_deposited_at'] = deposited_file.last_modified.to_s
|
|
115
168
|
message['aip_md5sum'] = deposited_file.etag.to_s
|
|
116
169
|
message['aip_sha256'] = ''
|
|
117
|
-
message['aip_metadata'] = deposited_file.metadata
|
|
170
|
+
message['aip_metadata'] = deposited_file.metadata
|
|
118
171
|
|
|
119
172
|
file_details = file_log_details(aip_directory)
|
|
120
173
|
|
|
@@ -138,7 +191,7 @@ module PushmiPullyu::Logging
|
|
|
138
191
|
if @logger
|
|
139
192
|
@logger.reopen
|
|
140
193
|
else
|
|
141
|
-
@logger =
|
|
194
|
+
@logger = initialize_loggers
|
|
142
195
|
end
|
|
143
196
|
end
|
|
144
197
|
|
|
@@ -70,6 +70,13 @@ class PushmiPullyu::PreservationQueue
|
|
|
70
70
|
end
|
|
71
71
|
end
|
|
72
72
|
|
|
73
|
+
def get_entity_ingestion_attempt(entity)
|
|
74
|
+
entity_attempts_key = "#{PushmiPullyu.options[:ingestion_prefix]}#{entity[:uuid]}"
|
|
75
|
+
@redis.with do |connection|
|
|
76
|
+
return connection.get entity_attempts_key
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
73
80
|
def add_entity_in_timeframe(entity)
|
|
74
81
|
entity_attempts_key = "#{PushmiPullyu.options[:ingestion_prefix]}#{entity[:uuid]}"
|
|
75
82
|
|
|
@@ -6,16 +6,24 @@ class PushmiPullyu::SwiftDepositer
|
|
|
6
6
|
attr_reader :swift_connection
|
|
7
7
|
|
|
8
8
|
def initialize(connection)
|
|
9
|
-
|
|
9
|
+
# Generic authentication parameters
|
|
10
|
+
swift_connection_parameters = {
|
|
10
11
|
username: connection[:username],
|
|
11
12
|
api_key: connection[:password],
|
|
12
|
-
auth_method: 'password',
|
|
13
13
|
auth_url: connection[:auth_url],
|
|
14
14
|
project_name: connection[:project_name],
|
|
15
|
-
|
|
16
|
-
authtenant_name: connection[:tenant],
|
|
15
|
+
auth_method: 'password',
|
|
17
16
|
service_type: 'object-store'
|
|
18
|
-
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if connection[:auth_version] == 'v3'
|
|
20
|
+
swift_connection_parameters[:user_domain] = connection[:user_domain]
|
|
21
|
+
elsif connection[:auth_version] == 'v1'
|
|
22
|
+
swift_connection_parameters[:project_domain_name] = connection[:project_domain_name]
|
|
23
|
+
swift_connection_parameters[:authtenant_name] = connection[:tenant]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
@swift_connection = OpenStack::Connection.create(swift_connection_parameters)
|
|
19
27
|
end
|
|
20
28
|
|
|
21
29
|
def deposit_file(file_name, swift_container)
|
data/lib/pushmi_pullyu.rb
CHANGED
|
@@ -39,10 +39,11 @@ module PushmiPullyu
|
|
|
39
39
|
auth_url: 'http://localhost:8080/auth/v1.0',
|
|
40
40
|
project_name: 'demo',
|
|
41
41
|
project_domain_name: 'default',
|
|
42
|
-
container: '
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
container: 'era',
|
|
43
|
+
auth_version: 'v3',
|
|
44
|
+
user_domain: 'default'
|
|
45
45
|
},
|
|
46
|
+
rollbar: {},
|
|
46
47
|
# rubocop disable: Style/FetchEnvVar
|
|
47
48
|
jupiter: {
|
|
48
49
|
user: ENV.fetch('JUPITER_USER', nil),
|
data/pushmi_pullyu.gemspec
CHANGED
|
@@ -29,22 +29,11 @@ Gem::Specification.new do |spec|
|
|
|
29
29
|
spec.add_runtime_dependency 'openstack', '~> 3.3', '>= 3.3.10'
|
|
30
30
|
spec.add_runtime_dependency 'rdf', '>= 1.99', '< 4.0'
|
|
31
31
|
spec.add_runtime_dependency 'rdf-n3', '>= 1.99', '< 4.0'
|
|
32
|
-
spec.add_runtime_dependency 'redis', '>= 3.3', '<
|
|
32
|
+
spec.add_runtime_dependency 'redis', '>= 3.3', '< 6.0'
|
|
33
33
|
spec.add_runtime_dependency 'rest-client', '>= 1.8', '< 3.0'
|
|
34
34
|
spec.add_runtime_dependency 'rollbar', '>= 2.18', '< 4.0'
|
|
35
35
|
spec.add_runtime_dependency 'uuid', '~> 2.3.9'
|
|
36
36
|
|
|
37
|
-
spec.add_development_dependency 'bundler', '~> 2.0'
|
|
38
|
-
spec.add_development_dependency 'danger', '~> 8.0'
|
|
39
|
-
spec.add_development_dependency 'pry', '~> 0.10', '>= 0.10.4'
|
|
40
|
-
spec.add_development_dependency 'pry-byebug', '~> 3.6'
|
|
41
|
-
spec.add_development_dependency 'rake', '~> 13.0'
|
|
42
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
43
|
-
spec.add_development_dependency 'rubocop', '~> 1.23'
|
|
44
|
-
spec.add_development_dependency 'rubocop-rspec', '~> 2.6'
|
|
45
|
-
spec.add_development_dependency 'timecop', '~> 0.8'
|
|
46
|
-
spec.add_development_dependency 'vcr', '~> 5.0'
|
|
47
|
-
spec.add_development_dependency 'webmock', '~> 3.3'
|
|
48
37
|
spec.metadata = {
|
|
49
38
|
'rubygems_mfa_required' => 'true'
|
|
50
39
|
}
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pushmi_pullyu
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0
|
|
4
|
+
version: 2.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Shane Murnaghan
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: exe
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2024-05-27 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: activesupport
|
|
@@ -162,7 +162,7 @@ dependencies:
|
|
|
162
162
|
version: '3.3'
|
|
163
163
|
- - "<"
|
|
164
164
|
- !ruby/object:Gem::Version
|
|
165
|
-
version: '
|
|
165
|
+
version: '6.0'
|
|
166
166
|
type: :runtime
|
|
167
167
|
prerelease: false
|
|
168
168
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -172,7 +172,7 @@ dependencies:
|
|
|
172
172
|
version: '3.3'
|
|
173
173
|
- - "<"
|
|
174
174
|
- !ruby/object:Gem::Version
|
|
175
|
-
version: '
|
|
175
|
+
version: '6.0'
|
|
176
176
|
- !ruby/object:Gem::Dependency
|
|
177
177
|
name: rest-client
|
|
178
178
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -227,166 +227,6 @@ dependencies:
|
|
|
227
227
|
- - "~>"
|
|
228
228
|
- !ruby/object:Gem::Version
|
|
229
229
|
version: 2.3.9
|
|
230
|
-
- !ruby/object:Gem::Dependency
|
|
231
|
-
name: bundler
|
|
232
|
-
requirement: !ruby/object:Gem::Requirement
|
|
233
|
-
requirements:
|
|
234
|
-
- - "~>"
|
|
235
|
-
- !ruby/object:Gem::Version
|
|
236
|
-
version: '2.0'
|
|
237
|
-
type: :development
|
|
238
|
-
prerelease: false
|
|
239
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
240
|
-
requirements:
|
|
241
|
-
- - "~>"
|
|
242
|
-
- !ruby/object:Gem::Version
|
|
243
|
-
version: '2.0'
|
|
244
|
-
- !ruby/object:Gem::Dependency
|
|
245
|
-
name: danger
|
|
246
|
-
requirement: !ruby/object:Gem::Requirement
|
|
247
|
-
requirements:
|
|
248
|
-
- - "~>"
|
|
249
|
-
- !ruby/object:Gem::Version
|
|
250
|
-
version: '8.0'
|
|
251
|
-
type: :development
|
|
252
|
-
prerelease: false
|
|
253
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
254
|
-
requirements:
|
|
255
|
-
- - "~>"
|
|
256
|
-
- !ruby/object:Gem::Version
|
|
257
|
-
version: '8.0'
|
|
258
|
-
- !ruby/object:Gem::Dependency
|
|
259
|
-
name: pry
|
|
260
|
-
requirement: !ruby/object:Gem::Requirement
|
|
261
|
-
requirements:
|
|
262
|
-
- - "~>"
|
|
263
|
-
- !ruby/object:Gem::Version
|
|
264
|
-
version: '0.10'
|
|
265
|
-
- - ">="
|
|
266
|
-
- !ruby/object:Gem::Version
|
|
267
|
-
version: 0.10.4
|
|
268
|
-
type: :development
|
|
269
|
-
prerelease: false
|
|
270
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
271
|
-
requirements:
|
|
272
|
-
- - "~>"
|
|
273
|
-
- !ruby/object:Gem::Version
|
|
274
|
-
version: '0.10'
|
|
275
|
-
- - ">="
|
|
276
|
-
- !ruby/object:Gem::Version
|
|
277
|
-
version: 0.10.4
|
|
278
|
-
- !ruby/object:Gem::Dependency
|
|
279
|
-
name: pry-byebug
|
|
280
|
-
requirement: !ruby/object:Gem::Requirement
|
|
281
|
-
requirements:
|
|
282
|
-
- - "~>"
|
|
283
|
-
- !ruby/object:Gem::Version
|
|
284
|
-
version: '3.6'
|
|
285
|
-
type: :development
|
|
286
|
-
prerelease: false
|
|
287
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
288
|
-
requirements:
|
|
289
|
-
- - "~>"
|
|
290
|
-
- !ruby/object:Gem::Version
|
|
291
|
-
version: '3.6'
|
|
292
|
-
- !ruby/object:Gem::Dependency
|
|
293
|
-
name: rake
|
|
294
|
-
requirement: !ruby/object:Gem::Requirement
|
|
295
|
-
requirements:
|
|
296
|
-
- - "~>"
|
|
297
|
-
- !ruby/object:Gem::Version
|
|
298
|
-
version: '13.0'
|
|
299
|
-
type: :development
|
|
300
|
-
prerelease: false
|
|
301
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
302
|
-
requirements:
|
|
303
|
-
- - "~>"
|
|
304
|
-
- !ruby/object:Gem::Version
|
|
305
|
-
version: '13.0'
|
|
306
|
-
- !ruby/object:Gem::Dependency
|
|
307
|
-
name: rspec
|
|
308
|
-
requirement: !ruby/object:Gem::Requirement
|
|
309
|
-
requirements:
|
|
310
|
-
- - "~>"
|
|
311
|
-
- !ruby/object:Gem::Version
|
|
312
|
-
version: '3.0'
|
|
313
|
-
type: :development
|
|
314
|
-
prerelease: false
|
|
315
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
316
|
-
requirements:
|
|
317
|
-
- - "~>"
|
|
318
|
-
- !ruby/object:Gem::Version
|
|
319
|
-
version: '3.0'
|
|
320
|
-
- !ruby/object:Gem::Dependency
|
|
321
|
-
name: rubocop
|
|
322
|
-
requirement: !ruby/object:Gem::Requirement
|
|
323
|
-
requirements:
|
|
324
|
-
- - "~>"
|
|
325
|
-
- !ruby/object:Gem::Version
|
|
326
|
-
version: '1.23'
|
|
327
|
-
type: :development
|
|
328
|
-
prerelease: false
|
|
329
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
330
|
-
requirements:
|
|
331
|
-
- - "~>"
|
|
332
|
-
- !ruby/object:Gem::Version
|
|
333
|
-
version: '1.23'
|
|
334
|
-
- !ruby/object:Gem::Dependency
|
|
335
|
-
name: rubocop-rspec
|
|
336
|
-
requirement: !ruby/object:Gem::Requirement
|
|
337
|
-
requirements:
|
|
338
|
-
- - "~>"
|
|
339
|
-
- !ruby/object:Gem::Version
|
|
340
|
-
version: '2.6'
|
|
341
|
-
type: :development
|
|
342
|
-
prerelease: false
|
|
343
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
344
|
-
requirements:
|
|
345
|
-
- - "~>"
|
|
346
|
-
- !ruby/object:Gem::Version
|
|
347
|
-
version: '2.6'
|
|
348
|
-
- !ruby/object:Gem::Dependency
|
|
349
|
-
name: timecop
|
|
350
|
-
requirement: !ruby/object:Gem::Requirement
|
|
351
|
-
requirements:
|
|
352
|
-
- - "~>"
|
|
353
|
-
- !ruby/object:Gem::Version
|
|
354
|
-
version: '0.8'
|
|
355
|
-
type: :development
|
|
356
|
-
prerelease: false
|
|
357
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
358
|
-
requirements:
|
|
359
|
-
- - "~>"
|
|
360
|
-
- !ruby/object:Gem::Version
|
|
361
|
-
version: '0.8'
|
|
362
|
-
- !ruby/object:Gem::Dependency
|
|
363
|
-
name: vcr
|
|
364
|
-
requirement: !ruby/object:Gem::Requirement
|
|
365
|
-
requirements:
|
|
366
|
-
- - "~>"
|
|
367
|
-
- !ruby/object:Gem::Version
|
|
368
|
-
version: '5.0'
|
|
369
|
-
type: :development
|
|
370
|
-
prerelease: false
|
|
371
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
372
|
-
requirements:
|
|
373
|
-
- - "~>"
|
|
374
|
-
- !ruby/object:Gem::Version
|
|
375
|
-
version: '5.0'
|
|
376
|
-
- !ruby/object:Gem::Dependency
|
|
377
|
-
name: webmock
|
|
378
|
-
requirement: !ruby/object:Gem::Requirement
|
|
379
|
-
requirements:
|
|
380
|
-
- - "~>"
|
|
381
|
-
- !ruby/object:Gem::Version
|
|
382
|
-
version: '3.3'
|
|
383
|
-
type: :development
|
|
384
|
-
prerelease: false
|
|
385
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
386
|
-
requirements:
|
|
387
|
-
- - "~>"
|
|
388
|
-
- !ruby/object:Gem::Version
|
|
389
|
-
version: '3.3'
|
|
390
230
|
description:
|
|
391
231
|
email:
|
|
392
232
|
- murnagha@ualberta.ca
|
|
@@ -454,7 +294,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
454
294
|
- !ruby/object:Gem::Version
|
|
455
295
|
version: '0'
|
|
456
296
|
requirements: []
|
|
457
|
-
rubygems_version: 3.
|
|
297
|
+
rubygems_version: 3.3.26
|
|
458
298
|
signing_key:
|
|
459
299
|
specification_version: 4
|
|
460
300
|
summary: Ruby application to manage flow of content from Jupiter into Swift for preservation
|