shutl_resource 1.5.3 → 1.5.4
Sign up to get free protection for your applications and to get access to all the features.
- 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=
|