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 CHANGED
@@ -3,5 +3,9 @@ source 'https://rubygems.org'
3
3
  group :development do
4
4
  gem 'license_finder'
5
5
  end
6
+
7
+ group :test do
8
+ gem 'pry'
9
+ end
6
10
  # Specify your gem's dependencies in shutl_resource.gemspec
7
11
  gemspec
@@ -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
- private
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[:from]) if params[:from]
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)|
@@ -1,5 +1,5 @@
1
1
  module Shutl
2
2
  module Resource
3
- VERSION = '1.5.3'
3
+ VERSION = '1.5.4'
4
4
  end
5
5
  end
@@ -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
@@ -2,5 +2,4 @@ class TestRest
2
2
  include Shutl::Resource::Rest
3
3
  base_uri 'http://host'
4
4
  resource_id :a
5
- end
6
-
5
+ end
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.3
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-13 00:00:00.000000000 Z
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: 2.1.10
224
+ rubygems_version: 1.8.23
205
225
  signing_key:
206
- specification_version: 4
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=