hoodoo 2.12.3 → 2.12.8.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/hoodoo/communicators/pool.rb +12 -4
- data/lib/hoodoo/presenters/base.rb +15 -3
- data/lib/hoodoo/presenters/base_dsl.rb +1 -1
- data/lib/hoodoo/presenters/common_resource_fields.rb +1 -0
- data/lib/hoodoo/services/discovery/discoverers/by_drb/drb_server.rb +4 -9
- data/lib/hoodoo/services/middleware/middleware.rb +4 -2
- data/lib/hoodoo/version.rb +2 -2
- data/spec/presenters/base_spec.rb +8 -3
- data/spec/presenters/common_resource_fields_spec.rb +3 -1
- data/spec/presenters/types/array_spec.rb +5 -5
- data/spec/presenters/types/hash_spec.rb +4 -4
- data/spec/services/services/response_spec.rb +9 -9
- metadata +83 -83
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5314ed63ab3c81f3fe92a32cd73d7daceab70dc64675a3e54c8a8d2ac7e0fc73
|
4
|
+
data.tar.gz: eb3f2f21e7d8e42ec2790e0a24a06db17e4e92e08fa690ca0bfed6133d2a484c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a27bed801be8c350c7b5cbdb72322a810ed52a3ca494fe1efdf18065cb4c07460ee9ba26613dbd32eab1add5aa90585a1331f4303dac816d9ff85975faef58ea
|
7
|
+
data.tar.gz: 24a8fc2c87586633390ea2bdfe85ba3e6bff0e465ae6aee43a5a8e8fd004bdcd9e52452ff97ac79bdb0f1744c11ab2e8f08864aecef74940a1683bb7cb721173
|
@@ -9,6 +9,8 @@
|
|
9
9
|
# 15-Dec-2014 (ADH): Created.
|
10
10
|
########################################################################
|
11
11
|
|
12
|
+
require 'pp'
|
13
|
+
|
12
14
|
module Hoodoo
|
13
15
|
module Communicators
|
14
16
|
|
@@ -151,7 +153,7 @@ module Hoodoo
|
|
151
153
|
begin
|
152
154
|
communicator.communicate( object )
|
153
155
|
rescue => exception
|
154
|
-
handle_exception( exception, communicator )
|
156
|
+
handle_exception( exception, communicator, object )
|
155
157
|
end
|
156
158
|
|
157
159
|
else
|
@@ -333,6 +335,7 @@ module Hoodoo
|
|
333
335
|
#
|
334
336
|
loop do
|
335
337
|
|
338
|
+
obj = nil
|
336
339
|
# Exception handler block.
|
337
340
|
#
|
338
341
|
begin
|
@@ -342,20 +345,23 @@ module Hoodoo
|
|
342
345
|
#
|
343
346
|
loop do
|
344
347
|
entry = work_queue.shift() # ".shift" => FIFO, ".pop" would be LIFO
|
348
|
+
obj = nil
|
345
349
|
|
346
350
|
if entry.terminate?
|
347
351
|
::Thread.exit
|
348
352
|
elsif entry.sync?
|
353
|
+
|
349
354
|
sync_queue << :sync
|
350
355
|
elsif entry.dropped?
|
351
356
|
communicator.dropped( entry.dropped )
|
352
357
|
else
|
358
|
+
obj = entry.payload
|
353
359
|
communicator.communicate( entry.payload )
|
354
360
|
end
|
355
361
|
end
|
356
362
|
|
357
363
|
rescue => exception
|
358
|
-
handle_exception( exception, communicator )
|
364
|
+
handle_exception( exception, communicator, obj )
|
359
365
|
|
360
366
|
end
|
361
367
|
end
|
@@ -453,12 +459,14 @@ module Hoodoo
|
|
453
459
|
#
|
454
460
|
# +exception+:: Exception (or Exception subclass) instance to print.
|
455
461
|
# +communicator+:: Communicator instance that raised the exception.
|
462
|
+
# +obj+:: Parameter passed to the communicator subclass instance
|
463
|
+
# #communicate methods
|
456
464
|
#
|
457
|
-
def handle_exception( exception, communicator )
|
465
|
+
def handle_exception( exception, communicator, obj )
|
458
466
|
begin
|
459
467
|
report = "Communicator class #{ communicator.class.name } raised exception '#{ exception }': #{ exception.backtrace }"
|
460
468
|
$stderr.puts( report )
|
461
|
-
|
469
|
+
pp( obj, $stderr )
|
462
470
|
rescue
|
463
471
|
# If the above fails then everything else is probably about to
|
464
472
|
# collapse, but optimistically try to ignore the error and keep
|
@@ -90,12 +90,16 @@ module Hoodoo
|
|
90
90
|
# were used to create the Session under which the
|
91
91
|
# resource instance was created. Absent if omitted.
|
92
92
|
#
|
93
|
+
# +updated_at+:: Optional Date/Time of instance update. This is a Ruby
|
94
|
+
# DateTime instance or similar, _NOT_ a string!
|
95
|
+
#
|
93
96
|
def self.render( data,
|
94
97
|
uuid = nil,
|
95
98
|
created_at = nil,
|
96
99
|
language = 'en-nz',
|
97
|
-
created_by = nil
|
98
|
-
|
100
|
+
created_by = nil,
|
101
|
+
updated_at = nil
|
102
|
+
)
|
99
103
|
target = {}
|
100
104
|
data = data || {}
|
101
105
|
|
@@ -126,6 +130,7 @@ module Hoodoo
|
|
126
130
|
'created_at' => Hoodoo::Utilities.standard_datetime( created_at.to_datetime )
|
127
131
|
} )
|
128
132
|
|
133
|
+
target[ 'updated_at' ] = Hoodoo::Utilities.standard_datetime( updated_at.to_datetime ) unless updated_at.nil?
|
129
134
|
target[ 'created_by' ] = created_by unless created_by.nil?
|
130
135
|
target[ 'language' ] = language if self.is_internationalised?()
|
131
136
|
|
@@ -167,6 +172,9 @@ module Hoodoo
|
|
167
172
|
# +created_at+:: Same as the +created_at+ parameter to ::render, except
|
168
173
|
# mandatory.
|
169
174
|
#
|
175
|
+
# +updated_at+:: Optional value expressing the time the resource was last
|
176
|
+
# updated.
|
177
|
+
#
|
170
178
|
# +created_by+:: Optional fingerprint of the Caller whose credentials
|
171
179
|
# were used to create the Session under which the
|
172
180
|
# resource instance was created.
|
@@ -194,13 +202,14 @@ module Hoodoo
|
|
194
202
|
def self.render_in( context, data, options = {} )
|
195
203
|
uuid = options[ :uuid ]
|
196
204
|
created_at = options[ :created_at ]
|
205
|
+
updated_at = options[ :updated_at ]
|
197
206
|
created_by = options[ :created_by ]
|
198
207
|
language = options[ :language ] || context.request.locale
|
199
208
|
secured_with = options[ :secured_with ]
|
200
209
|
embeds = options[ :embeds ]
|
201
210
|
references = options[ :references ]
|
202
211
|
|
203
|
-
target = self.render( data, uuid, created_at, language, created_by )
|
212
|
+
target = self.render( data, uuid, created_at, language, created_by, updated_at )
|
204
213
|
|
205
214
|
if defined?( ::ActiveRecord ) && secured_with.is_a?( ::ActiveRecord::Base )
|
206
215
|
result_hash = {}
|
@@ -251,6 +260,9 @@ module Hoodoo
|
|
251
260
|
created_by = data[ :created_by ]
|
252
261
|
common_fields[ 'created_by' ] = created_by unless created_by.nil?
|
253
262
|
|
263
|
+
updated_at = data[ :updated_at ]
|
264
|
+
common_fields[ 'updated_at' ] = updated_at unless updated_at.nil?
|
265
|
+
|
254
266
|
if self.is_internationalised?
|
255
267
|
common_fields[ 'internationalised' ] = data[ 'internationalised' ]
|
256
268
|
Hoodoo::Presenters::CommonResourceFields.get_schema.properties[ 'language' ].required = true
|
@@ -58,21 +58,16 @@ module Hoodoo; module Services; class Discovery # Just used as a namespace here
|
|
58
58
|
# server is already running, expect an "address in use" connection
|
59
59
|
# exception from DRb.
|
60
60
|
#
|
61
|
-
# $SAFE will be set to 1 (unless it is already higher) in this thread.
|
62
|
-
#
|
63
61
|
# +port+:: Passed to ::uri method.
|
64
62
|
#
|
65
63
|
def self.start( port = nil )
|
66
64
|
|
67
65
|
uri = self.uri( port )
|
68
66
|
|
69
|
-
#
|
70
|
-
#
|
71
|
-
#
|
72
|
-
|
73
|
-
# http://blog.recurity-labs.com/archives/2011/05/12/druby_for_penetration_testers/
|
74
|
-
|
75
|
-
$SAFE = 1
|
67
|
+
# $SAFE and taint tracking is being removed from ruby 2.7+
|
68
|
+
# https://bugs.ruby-lang.org/issues/16131
|
69
|
+
# Set to 0 to disable taint tracking in earlier versions
|
70
|
+
$SAFE = 0
|
76
71
|
|
77
72
|
# Have to allow a tained port string from "outside" just to be able
|
78
73
|
# to start the service on a given port; so untaint that deliberately.
|
@@ -132,12 +132,14 @@ module Hoodoo; module Services
|
|
132
132
|
MAXIMUM_PAYLOAD_SIZE = 1048576 # 1MB Should Be Enough For Anyone
|
133
133
|
|
134
134
|
# Maximum *logged* payload (inbound data) size.
|
135
|
+
# Keep consistent with max payload size so data is not lost from the logs.
|
135
136
|
#
|
136
|
-
MAXIMUM_LOGGED_PAYLOAD_SIZE =
|
137
|
+
MAXIMUM_LOGGED_PAYLOAD_SIZE = MAXIMUM_PAYLOAD_SIZE
|
137
138
|
|
138
139
|
# Maximum *logged* response (outbound data) size.
|
140
|
+
# Keep consistent with max payload size so data is not lost from the logs.
|
139
141
|
#
|
140
|
-
MAXIMUM_LOGGED_RESPONSE_SIZE =
|
142
|
+
MAXIMUM_LOGGED_RESPONSE_SIZE = MAXIMUM_PAYLOAD_SIZE
|
141
143
|
|
142
144
|
# The default test session; a Hoodoo::Services::Session instance with the
|
143
145
|
# following characteristics:
|
data/lib/hoodoo/version.rb
CHANGED
@@ -12,11 +12,11 @@ module Hoodoo
|
|
12
12
|
# The Hoodoo gem version. If this changes, be sure to re-run
|
13
13
|
# <tt>bundle install</tt> or <tt>bundle update</tt>.
|
14
14
|
#
|
15
|
-
VERSION = '2.12.
|
15
|
+
VERSION = '2.12.8.pre'
|
16
16
|
|
17
17
|
# The Hoodoo gem date. If this changes, be sure to re-run
|
18
18
|
# <tt>bundle install</tt> or <tt>bundle update</tt>.
|
19
19
|
#
|
20
|
-
DATE = '
|
20
|
+
DATE = '2021-05-31'
|
21
21
|
|
22
22
|
end
|
@@ -362,7 +362,8 @@ describe '#schema' do
|
|
362
362
|
Hoodoo::UUID.generate,
|
363
363
|
Time.now,
|
364
364
|
'en-gb',
|
365
|
-
Hoodoo::UUID.generate
|
365
|
+
Hoodoo::UUID.generate,
|
366
|
+
Time.now
|
366
367
|
)
|
367
368
|
|
368
369
|
expect(Hoodoo::Data::Resources::World.validate(rendered, true).errors).to eq([])
|
@@ -707,6 +708,7 @@ describe '#schema' do
|
|
707
708
|
'id' => @uuid,
|
708
709
|
'kind' => 'World',
|
709
710
|
'created_at' => Hoodoo::Utilities.standard_datetime( @time ),
|
711
|
+
'updated_at' => Hoodoo::Utilities.standard_datetime( @time ),
|
710
712
|
'language' => 'en-gb',
|
711
713
|
'errors_id' => @input['errors_id'],
|
712
714
|
'test_tags' => 'foo,bar,baz',
|
@@ -729,7 +731,9 @@ describe '#schema' do
|
|
729
731
|
@input,
|
730
732
|
@uuid,
|
731
733
|
@time,
|
732
|
-
'en-gb'
|
734
|
+
'en-gb',
|
735
|
+
nil,
|
736
|
+
@time
|
733
737
|
)
|
734
738
|
).to( eq( @output ) )
|
735
739
|
end
|
@@ -744,7 +748,8 @@ describe '#schema' do
|
|
744
748
|
@uuid,
|
745
749
|
@time,
|
746
750
|
'en-gb',
|
747
|
-
fingerprint
|
751
|
+
fingerprint,
|
752
|
+
@time
|
748
753
|
)
|
749
754
|
).to( eq( @output ) )
|
750
755
|
end
|
@@ -6,13 +6,15 @@ describe Hoodoo::Presenters::CommonResourceFields do
|
|
6
6
|
|
7
7
|
expect(schema.is_internationalised?()).to eq(false)
|
8
8
|
|
9
|
-
expect(schema.properties.count).to eq(
|
9
|
+
expect(schema.properties.count).to eq(8)
|
10
10
|
|
11
11
|
expect(schema.properties['id']).to be_a(Hoodoo::Presenters::UUID)
|
12
12
|
expect(schema.properties['id'].required).to eq(true)
|
13
13
|
expect(schema.properties['id'].resource).to be_nil
|
14
14
|
expect(schema.properties['created_at']).to be_a(Hoodoo::Presenters::DateTime)
|
15
15
|
expect(schema.properties['created_at'].required).to eq(true)
|
16
|
+
expect(schema.properties['updated_at']).to be_a(Hoodoo::Presenters::DateTime)
|
17
|
+
expect(schema.properties['updated_at'].required).to eq(false)
|
16
18
|
expect(schema.properties['kind']).to be_a(Hoodoo::Presenters::Text)
|
17
19
|
expect(schema.properties['kind'].required).to eq(true)
|
18
20
|
expect(schema.properties['language']).to be_a(Hoodoo::Presenters::Text)
|
@@ -274,9 +274,9 @@ describe Hoodoo::Presenters::Array do
|
|
274
274
|
'boolean' => { :valid => [ true ], :invalid => [ 4.51, 'false' ] },
|
275
275
|
'date' => { :valid => [ Date.today.iso8601 ], :invalid => [ Date.today, '23rd January 2041' ] },
|
276
276
|
'date_time' => { :valid => [ DateTime.now.iso8601 ], :invalid => [ DateTime.now, '2017-01-27 12:00' ] },
|
277
|
-
'decimal' => { :valid => [ '4.51' ], :invalid => [ 4.51, BigDecimal
|
277
|
+
'decimal' => { :valid => [ '4.51' ], :invalid => [ 4.51, BigDecimal( '4.51' ) ] },
|
278
278
|
'enum' => { :valid => [ 'one' ], :invalid => [ 'One', 1 ] },
|
279
|
-
'float' => { :valid => [ 4.51 ], :invalid => [ BigDecimal
|
279
|
+
'float' => { :valid => [ 4.51 ], :invalid => [ BigDecimal(4.51, 2), '4.51' ] },
|
280
280
|
'integer' => { :valid => [ 4 ], :invalid => [ '4' ] },
|
281
281
|
'string' => { :valid => [ 'four' ], :invalid => [ 'toolong', 4, true ] },
|
282
282
|
'tags' => { :valid => [ 'tag_a,tag_b,tag_c' ], :invalid => [ 4, true ] },
|
@@ -446,9 +446,9 @@ describe Hoodoo::Presenters::Array do
|
|
446
446
|
let( :valid_data ) do
|
447
447
|
{
|
448
448
|
'numbers' => [
|
449
|
-
BigDecimal
|
450
|
-
BigDecimal
|
451
|
-
BigDecimal
|
449
|
+
BigDecimal( '42.55111' ), # Precision is FYI data generators, not the renderer :-/
|
450
|
+
BigDecimal( '42.4' ),
|
451
|
+
BigDecimal( '42' )
|
452
452
|
]
|
453
453
|
}
|
454
454
|
end
|
@@ -598,9 +598,9 @@ describe Hoodoo::Presenters::Hash do
|
|
598
598
|
'boolean' => { :valid => [ true ], :invalid => [ 4.51, 'false' ] },
|
599
599
|
'date' => { :valid => [ Date.today.iso8601 ], :invalid => [ Date.today, '23rd January 2041' ] },
|
600
600
|
'date_time' => { :valid => [ DateTime.now.iso8601 ], :invalid => [ DateTime.now, '2017-01-27 12:00' ] },
|
601
|
-
'decimal' => { :valid => [ '4.51' ], :invalid => [ 4.51, BigDecimal
|
601
|
+
'decimal' => { :valid => [ '4.51' ], :invalid => [ 4.51, BigDecimal( '4.51' ) ] },
|
602
602
|
'enum' => { :valid => [ 'one' ], :invalid => [ 'One', 1 ] },
|
603
|
-
'float' => { :valid => [ 4.51 ], :invalid => [ BigDecimal
|
603
|
+
'float' => { :valid => [ 4.51 ], :invalid => [ BigDecimal(4.51, 2), '4.51' ] },
|
604
604
|
'integer' => { :valid => [ 4 ], :invalid => [ '4' ] },
|
605
605
|
'string' => { :valid => [ 'four' ], :invalid => [ 'toolong', 4, true ] },
|
606
606
|
'tags' => { :valid => [ 'tag_a,tag_b,tag_c' ], :invalid => [ 4, true ] },
|
@@ -1254,9 +1254,9 @@ describe Hoodoo::Presenters::Hash do
|
|
1254
1254
|
'boolean' => { :definition => { :length => 9, :type => :boolean }, :valid => [ true ], :invalid => [ 4.51, 'false' ] },
|
1255
1255
|
'date' => { :definition => { :length => 9, :type => :date }, :valid => [ Date.today.iso8601 ], :invalid => [ Date.today, '23rd January 2041' ] },
|
1256
1256
|
'date_time' => { :definition => { :length => 9, :type => :date_time }, :valid => [ DateTime.now.iso8601 ], :invalid => [ DateTime.now, '2017-01-27 12:00' ] },
|
1257
|
-
'decimal' => { :definition => { :length => 9, :type => :decimal, :field_precision => 2 }, :valid => [ '4.51' ], :invalid => [ 4.51, BigDecimal
|
1257
|
+
'decimal' => { :definition => { :length => 9, :type => :decimal, :field_precision => 2 }, :valid => [ '4.51' ], :invalid => [ 4.51, BigDecimal( '4.51' ) ] },
|
1258
1258
|
'enum' => { :definition => { :length => 9, :type => :enum, :field_from => [ :one, :two, :three ] }, :valid => [ 'one' ], :invalid => [ 'One', 1 ] },
|
1259
|
-
'float' => { :definition => { :length => 9, :type => :float }, :valid => [ 4.51 ], :invalid => [ BigDecimal
|
1259
|
+
'float' => { :definition => { :length => 9, :type => :float }, :valid => [ 4.51 ], :invalid => [ BigDecimal(4.51, 2), '4.51' ] },
|
1260
1260
|
'integer' => { :definition => { :length => 9, :type => :integer }, :valid => [ 4 ], :invalid => [ '4' ] },
|
1261
1261
|
'string' => { :definition => { :length => 9, :type => :string, :field_length => 4 }, :valid => [ 'four' ], :invalid => [ 'toolong', 4, true ] },
|
1262
1262
|
'tags' => { :definition => { :length => 9, :type => :tags }, :valid => [ 'tag_a,tag_b,tag_c' ], :invalid => [ 4, true ] },
|
@@ -160,7 +160,7 @@ describe Hoodoo::Services::Response do
|
|
160
160
|
expected = JSON.generate({})
|
161
161
|
expect(status).to eq(200)
|
162
162
|
expect(headers).to eq({'Content-Length' => expected.length.to_s})
|
163
|
-
expect(body
|
163
|
+
expect(body).to eq([expected])
|
164
164
|
end
|
165
165
|
|
166
166
|
it 'should return header data correctly' do
|
@@ -172,7 +172,7 @@ describe Hoodoo::Services::Response do
|
|
172
172
|
expected = JSON.generate({})
|
173
173
|
expect(status).to eq(200)
|
174
174
|
expect(headers).to eq({'X-Foo' => 'baz', 'X-Bar' => 'boo', 'Content-Length' => expected.length.to_s})
|
175
|
-
expect(body
|
175
|
+
expect(body).to eq([expected])
|
176
176
|
end
|
177
177
|
|
178
178
|
it 'should return error condition Rack data correctly' do
|
@@ -187,7 +187,7 @@ describe Hoodoo::Services::Response do
|
|
187
187
|
expected = JSON.generate(errors_hash)
|
188
188
|
expect(status).to eq(422) # From the first error we stored, not the second
|
189
189
|
expect(headers).to eq({'Content-Length' => expected.length.to_s})
|
190
|
-
expect(body
|
190
|
+
expect(body).to eq([expected])
|
191
191
|
end
|
192
192
|
|
193
193
|
it 'should return non-error condition Rack data correctly with a Hash body' do
|
@@ -199,7 +199,7 @@ describe Hoodoo::Services::Response do
|
|
199
199
|
expected = JSON.generate(response_hash)
|
200
200
|
expect(status).to eq(200) # From the first error we stored, not the second
|
201
201
|
expect(headers).to eq({'Content-Length' => expected.length.to_s})
|
202
|
-
expect(body
|
202
|
+
expect(body).to eq([expected])
|
203
203
|
end
|
204
204
|
|
205
205
|
it 'returns non-error condition Rack data correctly with an Array body' do
|
@@ -211,7 +211,7 @@ describe Hoodoo::Services::Response do
|
|
211
211
|
expected = JSON.generate({'_data' => response_array})
|
212
212
|
expect(status).to eq(200) # From the first error we stored, not the second
|
213
213
|
expect(headers).to eq({'Content-Length' => expected.length.to_s})
|
214
|
-
expect(body
|
214
|
+
expect(body).to eq([expected])
|
215
215
|
end
|
216
216
|
|
217
217
|
it 'returns non-error condition Rack data correctly with a dataset size' do
|
@@ -223,7 +223,7 @@ describe Hoodoo::Services::Response do
|
|
223
223
|
expected = JSON.generate( { '_data' => response_array, '_dataset_size' => response_array.count } )
|
224
224
|
expect( status ).to eq( 200 )
|
225
225
|
expect( headers ).to eq( { 'Content-Length' => expected.length.to_s } )
|
226
|
-
expect( body
|
226
|
+
expect( body ).to eq( [ expected ] )
|
227
227
|
end
|
228
228
|
|
229
229
|
it 'returns non-error condition Rack data correctly with an estimated dataset size' do
|
@@ -235,7 +235,7 @@ describe Hoodoo::Services::Response do
|
|
235
235
|
expected = JSON.generate( { '_data' => response_array, '_estimated_dataset_size' => response_array.count } )
|
236
236
|
expect( status ).to eq( 200 )
|
237
237
|
expect( headers ).to eq( { 'Content-Length' => expected.length.to_s } )
|
238
|
-
expect( body
|
238
|
+
expect( body ).to eq( [ expected ] )
|
239
239
|
end
|
240
240
|
|
241
241
|
it 'returns non-error condition Rack data correctly with both an accurate and an estimated dataset size' do
|
@@ -252,7 +252,7 @@ describe Hoodoo::Services::Response do
|
|
252
252
|
|
253
253
|
expect( status ).to eq( 200 )
|
254
254
|
expect( headers ).to eq( { 'Content-Length' => expected.length.to_s } )
|
255
|
-
expect( body
|
255
|
+
expect( body ).to eq( [ expected ] )
|
256
256
|
end
|
257
257
|
|
258
258
|
it 'should allow pre-encoded strings in the body' do
|
@@ -261,7 +261,7 @@ describe Hoodoo::Services::Response do
|
|
261
261
|
status, headers, body = @r.for_rack
|
262
262
|
|
263
263
|
expect(status).to eq(200)
|
264
|
-
expect(body
|
264
|
+
expect(body).to eq(['Hello World!'])
|
265
265
|
end
|
266
266
|
|
267
267
|
it 'should raise an exception when the body is in an unsupported format' do
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hoodoo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.12.
|
4
|
+
version: 2.12.8.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Loyalty New Zealand
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: rack
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: dalli
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,13 +25,13 @@ dependencies:
|
|
39
25
|
- !ruby/object:Gem::Version
|
40
26
|
version: '2.7'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
28
|
+
name: rack
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
31
|
- - ">="
|
46
32
|
- !ruby/object:Gem::Version
|
47
33
|
version: '0'
|
48
|
-
type: :
|
34
|
+
type: :runtime
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
@@ -53,271 +39,285 @@ dependencies:
|
|
53
39
|
- !ruby/object:Gem::Version
|
54
40
|
version: '0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
42
|
+
name: activerecord
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
45
|
- - "~>"
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
47
|
+
version: 5.2.4.3
|
62
48
|
type: :development
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
52
|
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
54
|
+
version: 5.2.4.3
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
56
|
+
name: activesupport
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
59
|
- - "~>"
|
74
60
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
61
|
+
version: 5.2.4.3
|
76
62
|
type: :development
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
66
|
- - "~>"
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
68
|
+
version: 5.2.4.3
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
70
|
+
name: airbrake
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
73
|
- - "~>"
|
88
74
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
75
|
+
version: '7.3'
|
90
76
|
type: :development
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
80
|
- - "~>"
|
95
81
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
82
|
+
version: '7.3'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
84
|
+
name: airbrake-ruby
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
87
|
- - "~>"
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
89
|
+
version: '2.11'
|
104
90
|
type: :development
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
94
|
- - "~>"
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
96
|
+
version: '2.11'
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
98
|
+
name: alchemy-flux
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - '='
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
103
|
+
version: 1.2.1
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
107
|
requirements:
|
122
|
-
- -
|
108
|
+
- - '='
|
123
109
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
110
|
+
version: 1.2.1
|
125
111
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
112
|
+
name: bundle-audit
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|
128
114
|
requirements:
|
129
|
-
- -
|
115
|
+
- - ">="
|
130
116
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
117
|
+
version: '0'
|
132
118
|
type: :development
|
133
119
|
prerelease: false
|
134
120
|
version_requirements: !ruby/object:Gem::Requirement
|
135
121
|
requirements:
|
136
|
-
- -
|
122
|
+
- - ">="
|
137
123
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
124
|
+
version: '0'
|
139
125
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
126
|
+
name: byebug
|
141
127
|
requirement: !ruby/object:Gem::Requirement
|
142
128
|
requirements:
|
143
129
|
- - "~>"
|
144
130
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
131
|
+
version: '10.0'
|
146
132
|
type: :development
|
147
133
|
prerelease: false
|
148
134
|
version_requirements: !ruby/object:Gem::Requirement
|
149
135
|
requirements:
|
150
136
|
- - "~>"
|
151
137
|
- !ruby/object:Gem::Version
|
152
|
-
version: '
|
138
|
+
version: '10.0'
|
153
139
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
140
|
+
name: database_cleaner
|
155
141
|
requirement: !ruby/object:Gem::Requirement
|
156
142
|
requirements:
|
157
143
|
- - "~>"
|
158
144
|
- !ruby/object:Gem::Version
|
159
|
-
version: '
|
145
|
+
version: '1.7'
|
160
146
|
type: :development
|
161
147
|
prerelease: false
|
162
148
|
version_requirements: !ruby/object:Gem::Requirement
|
163
149
|
requirements:
|
164
150
|
- - "~>"
|
165
151
|
- !ruby/object:Gem::Version
|
166
|
-
version: '
|
152
|
+
version: '1.7'
|
167
153
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
154
|
+
name: le
|
169
155
|
requirement: !ruby/object:Gem::Requirement
|
170
156
|
requirements:
|
171
157
|
- - "~>"
|
172
158
|
- !ruby/object:Gem::Version
|
173
|
-
version: '
|
159
|
+
version: '2.7'
|
174
160
|
type: :development
|
175
161
|
prerelease: false
|
176
162
|
version_requirements: !ruby/object:Gem::Requirement
|
177
163
|
requirements:
|
178
164
|
- - "~>"
|
179
165
|
- !ruby/object:Gem::Version
|
180
|
-
version: '
|
166
|
+
version: '2.7'
|
181
167
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
168
|
+
name: pg
|
183
169
|
requirement: !ruby/object:Gem::Requirement
|
184
170
|
requirements:
|
185
171
|
- - "~>"
|
186
172
|
- !ruby/object:Gem::Version
|
187
|
-
version: '
|
173
|
+
version: '1.0'
|
188
174
|
type: :development
|
189
175
|
prerelease: false
|
190
176
|
version_requirements: !ruby/object:Gem::Requirement
|
191
177
|
requirements:
|
192
178
|
- - "~>"
|
193
179
|
- !ruby/object:Gem::Version
|
194
|
-
version: '
|
180
|
+
version: '1.0'
|
195
181
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
182
|
+
name: rack-test
|
197
183
|
requirement: !ruby/object:Gem::Requirement
|
198
184
|
requirements:
|
199
185
|
- - "~>"
|
200
186
|
- !ruby/object:Gem::Version
|
201
|
-
version: '
|
187
|
+
version: '1.1'
|
202
188
|
type: :development
|
203
189
|
prerelease: false
|
204
190
|
version_requirements: !ruby/object:Gem::Requirement
|
205
191
|
requirements:
|
206
192
|
- - "~>"
|
207
193
|
- !ruby/object:Gem::Version
|
208
|
-
version: '
|
194
|
+
version: '1.1'
|
209
195
|
- !ruby/object:Gem::Dependency
|
210
|
-
name:
|
196
|
+
name: rake
|
211
197
|
requirement: !ruby/object:Gem::Requirement
|
212
198
|
requirements:
|
213
199
|
- - "~>"
|
214
200
|
- !ruby/object:Gem::Version
|
215
|
-
version: '
|
201
|
+
version: '12.0'
|
216
202
|
type: :development
|
217
203
|
prerelease: false
|
218
204
|
version_requirements: !ruby/object:Gem::Requirement
|
219
205
|
requirements:
|
220
206
|
- - "~>"
|
221
207
|
- !ruby/object:Gem::Version
|
222
|
-
version: '
|
208
|
+
version: '12.0'
|
223
209
|
- !ruby/object:Gem::Dependency
|
224
|
-
name:
|
210
|
+
name: raygun4ruby
|
225
211
|
requirement: !ruby/object:Gem::Requirement
|
226
212
|
requirements:
|
227
213
|
- - "~>"
|
228
214
|
- !ruby/object:Gem::Version
|
229
|
-
version: '
|
215
|
+
version: '2.7'
|
230
216
|
type: :development
|
231
217
|
prerelease: false
|
232
218
|
version_requirements: !ruby/object:Gem::Requirement
|
233
219
|
requirements:
|
234
220
|
- - "~>"
|
235
221
|
- !ruby/object:Gem::Version
|
236
|
-
version: '
|
222
|
+
version: '2.7'
|
237
223
|
- !ruby/object:Gem::Dependency
|
238
|
-
name:
|
224
|
+
name: redis
|
239
225
|
requirement: !ruby/object:Gem::Requirement
|
240
226
|
requirements:
|
241
227
|
- - "~>"
|
242
228
|
- !ruby/object:Gem::Version
|
243
|
-
version: '
|
229
|
+
version: '4.0'
|
244
230
|
type: :development
|
245
231
|
prerelease: false
|
246
232
|
version_requirements: !ruby/object:Gem::Requirement
|
247
233
|
requirements:
|
248
234
|
- - "~>"
|
249
235
|
- !ruby/object:Gem::Version
|
250
|
-
version: '
|
236
|
+
version: '4.0'
|
251
237
|
- !ruby/object:Gem::Dependency
|
252
|
-
name:
|
238
|
+
name: rspec
|
253
239
|
requirement: !ruby/object:Gem::Requirement
|
254
240
|
requirements:
|
255
241
|
- - "~>"
|
256
242
|
- !ruby/object:Gem::Version
|
257
|
-
version: '
|
243
|
+
version: '3.8'
|
258
244
|
type: :development
|
259
245
|
prerelease: false
|
260
246
|
version_requirements: !ruby/object:Gem::Requirement
|
261
247
|
requirements:
|
262
248
|
- - "~>"
|
263
249
|
- !ruby/object:Gem::Version
|
264
|
-
version: '
|
250
|
+
version: '3.8'
|
265
251
|
- !ruby/object:Gem::Dependency
|
266
|
-
name:
|
252
|
+
name: rspec-mocks
|
267
253
|
requirement: !ruby/object:Gem::Requirement
|
268
254
|
requirements:
|
269
255
|
- - "~>"
|
270
256
|
- !ruby/object:Gem::Version
|
271
|
-
version: '
|
257
|
+
version: '3.8'
|
272
258
|
type: :development
|
273
259
|
prerelease: false
|
274
260
|
version_requirements: !ruby/object:Gem::Requirement
|
275
261
|
requirements:
|
276
262
|
- - "~>"
|
277
263
|
- !ruby/object:Gem::Version
|
278
|
-
version: '
|
264
|
+
version: '3.8'
|
279
265
|
- !ruby/object:Gem::Dependency
|
280
|
-
name:
|
266
|
+
name: sdoc
|
281
267
|
requirement: !ruby/object:Gem::Requirement
|
282
268
|
requirements:
|
283
269
|
- - "~>"
|
284
270
|
- !ruby/object:Gem::Version
|
285
|
-
version: '2.
|
271
|
+
version: '2.2'
|
286
272
|
type: :development
|
287
273
|
prerelease: false
|
288
274
|
version_requirements: !ruby/object:Gem::Requirement
|
289
275
|
requirements:
|
290
276
|
- - "~>"
|
291
277
|
- !ruby/object:Gem::Version
|
292
|
-
version: '2.
|
278
|
+
version: '2.2'
|
293
279
|
- !ruby/object:Gem::Dependency
|
294
|
-
name:
|
280
|
+
name: simplecov-rcov
|
295
281
|
requirement: !ruby/object:Gem::Requirement
|
296
282
|
requirements:
|
297
283
|
- - "~>"
|
298
284
|
- !ruby/object:Gem::Version
|
299
|
-
version: '
|
285
|
+
version: '0.2'
|
300
286
|
type: :development
|
301
287
|
prerelease: false
|
302
288
|
version_requirements: !ruby/object:Gem::Requirement
|
303
289
|
requirements:
|
304
290
|
- - "~>"
|
305
291
|
- !ruby/object:Gem::Version
|
306
|
-
version: '
|
292
|
+
version: '0.2'
|
307
293
|
- !ruby/object:Gem::Dependency
|
308
|
-
name:
|
294
|
+
name: timecop
|
309
295
|
requirement: !ruby/object:Gem::Requirement
|
310
296
|
requirements:
|
311
297
|
- - "~>"
|
312
298
|
- !ruby/object:Gem::Version
|
313
|
-
version: '
|
299
|
+
version: '0.9'
|
314
300
|
type: :development
|
315
301
|
prerelease: false
|
316
302
|
version_requirements: !ruby/object:Gem::Requirement
|
317
303
|
requirements:
|
318
304
|
- - "~>"
|
319
305
|
- !ruby/object:Gem::Version
|
320
|
-
version: '
|
306
|
+
version: '0.9'
|
307
|
+
- !ruby/object:Gem::Dependency
|
308
|
+
name: webmock
|
309
|
+
requirement: !ruby/object:Gem::Requirement
|
310
|
+
requirements:
|
311
|
+
- - "~>"
|
312
|
+
- !ruby/object:Gem::Version
|
313
|
+
version: '3.4'
|
314
|
+
type: :development
|
315
|
+
prerelease: false
|
316
|
+
version_requirements: !ruby/object:Gem::Requirement
|
317
|
+
requirements:
|
318
|
+
- - "~>"
|
319
|
+
- !ruby/object:Gem::Version
|
320
|
+
version: '3.4'
|
321
321
|
description: Simplify the implementation of consistent services within an API-based
|
322
322
|
software platform.
|
323
323
|
email:
|
@@ -591,14 +591,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
591
591
|
requirements:
|
592
592
|
- - ">="
|
593
593
|
- !ruby/object:Gem::Version
|
594
|
-
version: 2.
|
594
|
+
version: 2.5.5
|
595
595
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
596
596
|
requirements:
|
597
|
-
- - "
|
597
|
+
- - ">"
|
598
598
|
- !ruby/object:Gem::Version
|
599
|
-
version:
|
599
|
+
version: 1.3.1
|
600
600
|
requirements: []
|
601
|
-
rubygems_version: 3.
|
601
|
+
rubygems_version: 3.2.21
|
602
602
|
signing_key:
|
603
603
|
specification_version: 4
|
604
604
|
summary: Opinionated APIs
|