shutl_resource 1.5.3 → 1.5.4
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.
- data/Gemfile +4 -0
- data/lib/shutl/resource/rest_class_methods.rb +10 -2
- data/lib/shutl/resource/version.rb +1 -1
- data/spec/rest_resource_spec.rb +76 -0
- data/spec/support/test_resource.rb +1 -2
- metadata +25 -5
- checksums.yaml +0 -15
data/Gemfile
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'open-uri'
|
2
2
|
module Shutl::Resource
|
3
3
|
module RestClassMethods
|
4
|
+
|
4
5
|
def base_uri uri
|
5
6
|
@base_uri = uri
|
6
7
|
end
|
@@ -216,8 +217,11 @@ module Shutl::Resource
|
|
216
217
|
end
|
217
218
|
|
218
219
|
|
219
|
-
|
220
|
+
def self.from_user= email
|
221
|
+
Thread.current[:user_email] = email
|
222
|
+
end
|
220
223
|
|
224
|
+
private
|
221
225
|
|
222
226
|
def headers
|
223
227
|
{
|
@@ -230,10 +234,14 @@ module Shutl::Resource
|
|
230
234
|
def header_options params
|
231
235
|
header_opts = params[:headers] || {}
|
232
236
|
header_opts.merge!(authorization: "Bearer #{params[:auth]}") if params[:auth]
|
233
|
-
header_opts.merge!(from: params
|
237
|
+
header_opts.merge!(from: current_user_email(params)) if current_user_email(params)
|
234
238
|
header_opts
|
235
239
|
end
|
236
240
|
|
241
|
+
def current_user_email params
|
242
|
+
params[:from] || Thread.current[:user_email]
|
243
|
+
end
|
244
|
+
|
237
245
|
|
238
246
|
def generate_request_header header_options = {}
|
239
247
|
header_options.inject(headers) do |h, (k,v)|
|
data/spec/rest_resource_spec.rb
CHANGED
@@ -376,6 +376,41 @@ describe Shutl::Resource::Rest do
|
|
376
376
|
request.should have_been_requested
|
377
377
|
end
|
378
378
|
|
379
|
+
context "send user email address for Audit" do
|
380
|
+
let(:user_email) { 'user@example.com' }
|
381
|
+
|
382
|
+
before do
|
383
|
+
Shutl::Resource::RestClassMethods.from_user = user_email
|
384
|
+
end
|
385
|
+
|
386
|
+
it "should override the email with 'from' option" do
|
387
|
+
request = stub_request(:post, 'http://host/test_rests').with(headers: headers.merge(from: 'new@example.com')).to_return(:status => 200)
|
388
|
+
TestRest.create({}, from: 'new@example.com')
|
389
|
+
|
390
|
+
request.should have_been_requested
|
391
|
+
end
|
392
|
+
|
393
|
+
it "should be thread-safe" do
|
394
|
+
t1 = Thread.new do
|
395
|
+
sleep 0.5
|
396
|
+
Shutl::Resource::RestClassMethods.from_user = 'thread1 user'
|
397
|
+
stub_request(:post, 'http://host/test_rests').with(headers: headers.merge(from: 'thread1 user')).to_return(:status => 200)
|
398
|
+
TestRest.create
|
399
|
+
end
|
400
|
+
|
401
|
+
t2 = Thread.new do
|
402
|
+
Shutl::Resource::RestClassMethods.from_user = 'thread2 user'
|
403
|
+
sleep 1
|
404
|
+
stub_request(:post, 'http://host/test_rests').with(headers: headers.merge(from: 'thread2 user')).to_return(:status => 200)
|
405
|
+
TestRest.create
|
406
|
+
end
|
407
|
+
|
408
|
+
t1.join; t2.join
|
409
|
+
|
410
|
+
Thread.current[:user_email].should be user_email
|
411
|
+
end
|
412
|
+
end
|
413
|
+
|
379
414
|
end
|
380
415
|
|
381
416
|
describe '#destroy' do
|
@@ -472,6 +507,47 @@ describe Shutl::Resource::Rest do
|
|
472
507
|
|
473
508
|
request.should have_been_requested
|
474
509
|
end
|
510
|
+
|
511
|
+
context "send user email address for Audit" do
|
512
|
+
let(:user_email) { 'user@example.com' }
|
513
|
+
|
514
|
+
before do
|
515
|
+
Shutl::Resource::RestClassMethods.from_user = user_email
|
516
|
+
end
|
517
|
+
|
518
|
+
it "should override the email with 'from' option" do
|
519
|
+
request = stub_request(:put, 'http://host/test_rests/a').with(body: anything, headers: headers.merge(from: 'new@example.com')).to_return(:status => 200)
|
520
|
+
|
521
|
+
test_resource = TestRest.new
|
522
|
+
test_resource.update!({a: 'a', b: 'b'}, {from: 'new@example.com'})
|
523
|
+
|
524
|
+
request.should have_been_requested
|
525
|
+
end
|
526
|
+
|
527
|
+
it "should be thread-safe" do
|
528
|
+
t1 = Thread.new do
|
529
|
+
sleep 0.5
|
530
|
+
Shutl::Resource::RestClassMethods.from_user = 'thread1 user'
|
531
|
+
stub_request(:put, 'http://host/test_rests/a').with(body: anything, headers: headers.merge(from: 'thread1 user')).to_return(:status => 200)
|
532
|
+
|
533
|
+
test_resource = TestRest.new
|
534
|
+
test_resource.update!(a: 'a', b: 'b')
|
535
|
+
end
|
536
|
+
|
537
|
+
t2 = Thread.new do
|
538
|
+
Shutl::Resource::RestClassMethods.from_user = 'thread2 user'
|
539
|
+
sleep 1
|
540
|
+
stub_request(:put, 'http://host/test_rests/a').with(body: anything, headers: headers.merge(from: 'thread2 user')).to_return(:status => 200)
|
541
|
+
|
542
|
+
test_resource = TestRest.new
|
543
|
+
test_resource.update!(a: 'a', b: 'b')
|
544
|
+
end
|
545
|
+
|
546
|
+
t1.join; t2.join
|
547
|
+
|
548
|
+
Thread.current[:user_email].should be user_email
|
549
|
+
end
|
550
|
+
end
|
475
551
|
end
|
476
552
|
|
477
553
|
describe '#respond_to?' do
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shutl_resource
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.4
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- David Rouchy
|
@@ -11,11 +12,12 @@ authors:
|
|
11
12
|
autorequire:
|
12
13
|
bindir: bin
|
13
14
|
cert_chain: []
|
14
|
-
date: 2013-11-
|
15
|
+
date: 2013-11-18 00:00:00.000000000 Z
|
15
16
|
dependencies:
|
16
17
|
- !ruby/object:Gem::Dependency
|
17
18
|
name: shutl_auth
|
18
19
|
requirement: !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
19
21
|
requirements:
|
20
22
|
- - ~>
|
21
23
|
- !ruby/object:Gem::Version
|
@@ -23,6 +25,7 @@ dependencies:
|
|
23
25
|
type: :runtime
|
24
26
|
prerelease: false
|
25
27
|
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
26
29
|
requirements:
|
27
30
|
- - ~>
|
28
31
|
- !ruby/object:Gem::Version
|
@@ -30,6 +33,7 @@ dependencies:
|
|
30
33
|
- !ruby/object:Gem::Dependency
|
31
34
|
name: activemodel
|
32
35
|
requirement: !ruby/object:Gem::Requirement
|
36
|
+
none: false
|
33
37
|
requirements:
|
34
38
|
- - ! '>='
|
35
39
|
- !ruby/object:Gem::Version
|
@@ -37,6 +41,7 @@ dependencies:
|
|
37
41
|
type: :runtime
|
38
42
|
prerelease: false
|
39
43
|
version_requirements: !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
40
45
|
requirements:
|
41
46
|
- - ! '>='
|
42
47
|
- !ruby/object:Gem::Version
|
@@ -44,6 +49,7 @@ dependencies:
|
|
44
49
|
- !ruby/object:Gem::Dependency
|
45
50
|
name: faraday
|
46
51
|
requirement: !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
47
53
|
requirements:
|
48
54
|
- - ! '>='
|
49
55
|
- !ruby/object:Gem::Version
|
@@ -51,6 +57,7 @@ dependencies:
|
|
51
57
|
type: :runtime
|
52
58
|
prerelease: false
|
53
59
|
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
54
61
|
requirements:
|
55
62
|
- - ! '>='
|
56
63
|
- !ruby/object:Gem::Version
|
@@ -58,6 +65,7 @@ dependencies:
|
|
58
65
|
- !ruby/object:Gem::Dependency
|
59
66
|
name: faraday_middleware
|
60
67
|
requirement: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
61
69
|
requirements:
|
62
70
|
- - ! '>='
|
63
71
|
- !ruby/object:Gem::Version
|
@@ -65,6 +73,7 @@ dependencies:
|
|
65
73
|
type: :runtime
|
66
74
|
prerelease: false
|
67
75
|
version_requirements: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
68
77
|
requirements:
|
69
78
|
- - ! '>='
|
70
79
|
- !ruby/object:Gem::Version
|
@@ -72,6 +81,7 @@ dependencies:
|
|
72
81
|
- !ruby/object:Gem::Dependency
|
73
82
|
name: faraday-conductivity
|
74
83
|
requirement: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
75
85
|
requirements:
|
76
86
|
- - ! '>='
|
77
87
|
- !ruby/object:Gem::Version
|
@@ -79,6 +89,7 @@ dependencies:
|
|
79
89
|
type: :runtime
|
80
90
|
prerelease: false
|
81
91
|
version_requirements: !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
82
93
|
requirements:
|
83
94
|
- - ! '>='
|
84
95
|
- !ruby/object:Gem::Version
|
@@ -86,6 +97,7 @@ dependencies:
|
|
86
97
|
- !ruby/object:Gem::Dependency
|
87
98
|
name: rake
|
88
99
|
requirement: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
89
101
|
requirements:
|
90
102
|
- - ! '>='
|
91
103
|
- !ruby/object:Gem::Version
|
@@ -93,6 +105,7 @@ dependencies:
|
|
93
105
|
type: :development
|
94
106
|
prerelease: false
|
95
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
96
109
|
requirements:
|
97
110
|
- - ! '>='
|
98
111
|
- !ruby/object:Gem::Version
|
@@ -100,6 +113,7 @@ dependencies:
|
|
100
113
|
- !ruby/object:Gem::Dependency
|
101
114
|
name: rspec
|
102
115
|
requirement: !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
103
117
|
requirements:
|
104
118
|
- - ~>
|
105
119
|
- !ruby/object:Gem::Version
|
@@ -107,6 +121,7 @@ dependencies:
|
|
107
121
|
type: :development
|
108
122
|
prerelease: false
|
109
123
|
version_requirements: !ruby/object:Gem::Requirement
|
124
|
+
none: false
|
110
125
|
requirements:
|
111
126
|
- - ~>
|
112
127
|
- !ruby/object:Gem::Version
|
@@ -114,6 +129,7 @@ dependencies:
|
|
114
129
|
- !ruby/object:Gem::Dependency
|
115
130
|
name: debugger
|
116
131
|
requirement: !ruby/object:Gem::Requirement
|
132
|
+
none: false
|
117
133
|
requirements:
|
118
134
|
- - ! '>='
|
119
135
|
- !ruby/object:Gem::Version
|
@@ -121,6 +137,7 @@ dependencies:
|
|
121
137
|
type: :development
|
122
138
|
prerelease: false
|
123
139
|
version_requirements: !ruby/object:Gem::Requirement
|
140
|
+
none: false
|
124
141
|
requirements:
|
125
142
|
- - ! '>='
|
126
143
|
- !ruby/object:Gem::Version
|
@@ -128,6 +145,7 @@ dependencies:
|
|
128
145
|
- !ruby/object:Gem::Dependency
|
129
146
|
name: webmock
|
130
147
|
requirement: !ruby/object:Gem::Requirement
|
148
|
+
none: false
|
131
149
|
requirements:
|
132
150
|
- - ~>
|
133
151
|
- !ruby/object:Gem::Version
|
@@ -135,6 +153,7 @@ dependencies:
|
|
135
153
|
type: :development
|
136
154
|
prerelease: false
|
137
155
|
version_requirements: !ruby/object:Gem::Requirement
|
156
|
+
none: false
|
138
157
|
requirements:
|
139
158
|
- - ~>
|
140
159
|
- !ruby/object:Gem::Version
|
@@ -184,26 +203,27 @@ files:
|
|
184
203
|
- spec/support/test_singular_resource.rb
|
185
204
|
homepage: ''
|
186
205
|
licenses: []
|
187
|
-
metadata: {}
|
188
206
|
post_install_message:
|
189
207
|
rdoc_options: []
|
190
208
|
require_paths:
|
191
209
|
- lib
|
192
210
|
required_ruby_version: !ruby/object:Gem::Requirement
|
211
|
+
none: false
|
193
212
|
requirements:
|
194
213
|
- - ! '>='
|
195
214
|
- !ruby/object:Gem::Version
|
196
215
|
version: '0'
|
197
216
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
198
218
|
requirements:
|
199
219
|
- - ! '>='
|
200
220
|
- !ruby/object:Gem::Version
|
201
221
|
version: '0'
|
202
222
|
requirements: []
|
203
223
|
rubyforge_project:
|
204
|
-
rubygems_version:
|
224
|
+
rubygems_version: 1.8.23
|
205
225
|
signing_key:
|
206
|
-
specification_version:
|
226
|
+
specification_version: 3
|
207
227
|
summary: Manage Shutl Rest resource. Parse/Serialize JSON
|
208
228
|
test_files:
|
209
229
|
- spec/configuration_spec.rb
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
MGEwZDkwNmM0YzExYmFjYTc1ZGFmMmE3Y2JhOWQzYzFkODk2MmYyMQ==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
Zjg2NzY5YjU0NTYyMWRmZjM5YTg5MDQ1NTIxZWU5ZjVkNmNlNDljOQ==
|
7
|
-
SHA512:
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
MjY2ZTk3ZmY4NWJhYzk2YjE0NThiNzFiYTkyOTBmMTQ3ODk4YjBhYzcxYWFl
|
10
|
-
Yzk2MTJkNWVjYWE2YTM0N2FlMTkwYmUyZjMyODkwOWM2NzI5MWY2ZGY0N2Ri
|
11
|
-
ZjcxZGQ1ODFmNjU4Y2I5MDk5YzI5OTgwZjNhOGY3MTFiNGQ4MDM=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ZDNiYjg1YzM0ZTM5NDBjZTI0ODE5ZjIyZTU5NTFmZjgxMjFlMmJhYjM3MTY0
|
14
|
-
N2U2MjAwNTg4NjVkZTlkNzM0YzhkODg5MmFjMTVjZjg0YWIxOGIwZDNiMmJl
|
15
|
-
ZmFkMDNmZTQyNzBjMDllMDhiMjYzMDllZDdmNmNjZmEwODVjODQ=
|