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 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=