doorkeeper 0.6.2 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of doorkeeper might be problematic. Click here for more details.

@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.6.3
4
+
5
+ - bugfixes
6
+ - [#163] Error response content-type header should be application/json [@ggayan](https://github.com/ggayan)
7
+ - [#175] Make token.expires_in_seconds return nil when expires_in is nil [@miyagawa](https://github.com/miyagawa)
8
+ - enhancements
9
+ - [#166, #172, #174] Behavior to automatically authorize based on a configured proc
10
+ - internals
11
+ - [#168] Using expectation syntax for controller specs [@rdsoze](https://github.com/rdsoze)
12
+
3
13
  ## 0.6.2
4
14
 
5
15
  - bugfixes
data/README.md CHANGED
@@ -32,7 +32,7 @@ For more information about the supported features, check out the related [page i
32
32
  Put this in your Gemfile:
33
33
 
34
34
  ``` ruby
35
- gem 'doorkeeper', '~> 0.6.2'
35
+ gem 'doorkeeper', '~> 0.6.3'
36
36
  ```
37
37
 
38
38
  Run the installation generator with:
@@ -4,8 +4,7 @@ module Doorkeeper
4
4
 
5
5
  def new
6
6
  if pre_auth.authorizable?
7
- # TODO: use configuration (like config.skip_authorization?)
8
- if Doorkeeper::AccessToken.matching_token_for pre_auth.client, current_resource_owner.id, pre_auth.scopes
7
+ if Doorkeeper::AccessToken.matching_token_for(pre_auth.client, current_resource_owner.id, pre_auth.scopes) || skip_authorization?
9
8
  auth = authorization.authorize
10
9
  redirect_to auth.redirect_uri
11
10
  else
@@ -142,11 +142,13 @@ module Doorkeeper
142
142
  warn(I18n.translate('doorkeeper.errors.messages.credential_flow_not_configured'))
143
143
  nil
144
144
  }
145
+ option :skip_authorization, :default => lambda{|routes|}
145
146
  option :access_token_expires_in, :default => 7200
146
147
  option :authorization_code_expires_in,:default => 600
147
148
  option :orm, :default => :active_record
148
149
  option :test_redirect_uri, :default => 'urn:ietf:wg:oauth:2.0:oob'
149
150
 
151
+
150
152
  def refresh_token_enabled?
151
153
  !!@refresh_token_enabled
152
154
  end
@@ -6,7 +6,8 @@ module Doorkeeper
6
6
  :authenticate_resource_owner!,
7
7
  :authenticate_admin!,
8
8
  :current_resource_owner,
9
- :resource_owner_from_credentials
9
+ :resource_owner_from_credentials,
10
+ :skip_authorization?
10
11
  end
11
12
 
12
13
  def authenticate_resource_owner!
@@ -48,6 +49,10 @@ module Doorkeeper
48
49
  self.response_body = error.body.to_json
49
50
  self.status = error.status
50
51
  end
52
+
53
+ def skip_authorization?
54
+ !!instance_exec([@server.current_resource_owner, @pre_auth.client], &Doorkeeper.configuration.skip_authorization)
55
+ end
51
56
  end
52
57
  end
53
58
  end
@@ -10,6 +10,7 @@ module Doorkeeper
10
10
  end
11
11
 
12
12
  def expires_in_seconds
13
+ return nil if expires_in.nil?
13
14
  expires = (created_at + expires_in.seconds) - Time.now
14
15
  expires_sec = expires.seconds.round(0)
15
16
  expires_sec > 0 ? expires_sec : 0
@@ -22,6 +22,8 @@ module Doorkeeper
22
22
  def initialize(application)
23
23
  @application = application
24
24
  end
25
+
26
+ attr_accessor :application
25
27
  end
26
28
  end
27
29
  end
@@ -37,7 +37,7 @@ module Doorkeeper
37
37
  end
38
38
 
39
39
  def headers
40
- { 'Cache-Control' => 'no-store', 'Pragma' => 'no-cache' }
40
+ { 'Cache-Control' => 'no-store', 'Pragma' => 'no-cache', 'Content-Type' => 'application/json; charset=utf-8' }
41
41
  end
42
42
  end
43
43
  end
@@ -1,3 +1,3 @@
1
1
  module Doorkeeper
2
- VERSION = "0.6.2"
2
+ VERSION = "0.6.3"
3
3
  end
@@ -57,4 +57,11 @@ Doorkeeper.configure do
57
57
  # (Similar behaviour: https://developers.google.com/accounts/docs/OAuth2InstalledApp#choosingredirecturi)
58
58
  #
59
59
  # test_redirect_uri 'urn:ietf:wg:oauth:2.0:oob'
60
+
61
+ # Under some circumstances you might want to have applications auto-approved,
62
+ # so that the user skips the authorization step.
63
+ # For example if dealing with trusted a application.
64
+ # skip_authorization do |resource_owner, client|
65
+ # client.superapp? or resource_owner.admin?
66
+ # end
60
67
  end
@@ -11,7 +11,7 @@ module Doorkeeper
11
11
 
12
12
  it "redirects as set in Doorkeeper.authenticate_admin" do
13
13
  get :index
14
- response.should redirect_to(controller.main_app.root_url)
14
+ expect(response).to redirect_to(controller.main_app.root_url)
15
15
  end
16
16
  end
17
17
  end
@@ -25,31 +25,31 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
25
25
  end
26
26
 
27
27
  it "redirects after authorization" do
28
- response.should be_redirect
28
+ expect(response).to be_redirect
29
29
  end
30
30
 
31
31
  it "redirects to client redirect uri" do
32
- response.location.should =~ %r[^#{client.redirect_uri}]
32
+ expect(response.location).to match(%r[^#{client.redirect_uri}])
33
33
  end
34
34
 
35
35
  it "includes access token in fragment" do
36
- fragments("access_token").should == Doorkeeper::AccessToken.first.token
36
+ expect(fragments("access_token")).to eq(Doorkeeper::AccessToken.first.token)
37
37
  end
38
38
 
39
39
  it "includes token type in fragment" do
40
- fragments("token_type").should == "bearer"
40
+ expect(fragments("token_type")).to eq('bearer')
41
41
  end
42
42
 
43
43
  it "includes token expiration in fragment" do
44
- fragments("expires_in").to_i.should == 2.hours.to_i
44
+ expect(fragments("expires_in").to_i).to eq(2.hours.to_i)
45
45
  end
46
46
 
47
47
  it "issues the token for the current client" do
48
- Doorkeeper::AccessToken.first.application_id.should == client.id
48
+ expect(Doorkeeper::AccessToken.first.application_id).to eq(client.id)
49
49
  end
50
50
 
51
51
  it "issues the token for the current resource owner" do
52
- Doorkeeper::AccessToken.first.resource_owner_id.should == user.id
52
+ expect(Doorkeeper::AccessToken.first.resource_owner_id).to eq(user.id)
53
53
  end
54
54
  end
55
55
 
@@ -60,27 +60,27 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
60
60
  end
61
61
 
62
62
  it "redirects after authorization" do
63
- response.should be_redirect
63
+ expect(response).to be_redirect
64
64
  end
65
65
 
66
66
  it "redirects to client redirect uri" do
67
- response.location.should =~ %r[^#{client.redirect_uri}]
67
+ expect(response.location).to match(%r[^#{client.redirect_uri}])
68
68
  end
69
69
 
70
70
  it "does not include access token in fragment" do
71
- fragments("access_token").should be_nil
71
+ expect(fragments("access_token")).to be_nil
72
72
  end
73
73
 
74
74
  it "includes error in fragment" do
75
- fragments("error").should == "invalid_scope"
75
+ expect(fragments("error")).to eq('invalid_scope')
76
76
  end
77
77
 
78
78
  it "includes error description in fragment" do
79
- fragments("error_description").should == translated_error_message(:invalid_scope)
79
+ expect(fragments("error_description")).to eq(translated_error_message(:invalid_scope))
80
80
  end
81
81
 
82
82
  it "does not issue any access token" do
83
- Doorkeeper::AccessToken.all.should be_empty
83
+ expect(Doorkeeper::AccessToken.all).to be_empty
84
84
  end
85
85
  end
86
86
 
@@ -94,7 +94,41 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
94
94
  end
95
95
 
96
96
  it 'renders new template' do
97
- response.should render_template(:new)
97
+ expect(response).to render_template(:new)
98
+ end
99
+ end
100
+
101
+ describe "GET #new with skip_authorization true" do
102
+ before do
103
+ Doorkeeper.configuration.stub(:skip_authorization => proc do
104
+ true
105
+ end)
106
+ get :new, :client_id => client.uid, :response_type => "token", :redirect_uri => client.redirect_uri
107
+ end
108
+
109
+ it "should redirect immediately" do
110
+ response.should be_redirect
111
+ response.location.should =~ %r[^#{client.redirect_uri}]
112
+ end
113
+
114
+ it "should issue a token" do
115
+ Doorkeeper::AccessToken.count.should be 1
116
+ end
117
+
118
+ it "includes token type in fragment" do
119
+ fragments("token_type").should == "bearer"
120
+ end
121
+
122
+ it "includes token expiration in fragment" do
123
+ fragments("expires_in").to_i.should == 2.hours.to_i
124
+ end
125
+
126
+ it "issues the token for the current client" do
127
+ Doorkeeper::AccessToken.first.application_id.should == client.id
128
+ end
129
+
130
+ it "issues the token for the current resource owner" do
131
+ Doorkeeper::AccessToken.first.resource_owner_id.should == user.id
98
132
  end
99
133
  end
100
134
 
@@ -105,16 +139,16 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
105
139
  end
106
140
 
107
141
  it "does not redirect" do
108
- response.should_not be_redirect
142
+ expect(response).to_not be_redirect
109
143
  end
110
144
 
111
145
  it 'renders error template' do
112
- response.should render_template(:error)
146
+ expect(response).to render_template(:error)
113
147
  end
114
148
 
115
149
  it 'does not issue any token' do
116
- Doorkeeper::AccessGrant.count.should be 0
117
- Doorkeeper::AccessToken.count.should be 0
150
+ expect(Doorkeeper::AccessGrant.count).to eq 0
151
+ expect(Doorkeeper::AccessToken.count).to eq 0
118
152
  end
119
153
  end
120
154
  end
@@ -14,12 +14,12 @@ shared_examples "specified for particular actions" do
14
14
  context "with valid token", :token => :valid do
15
15
  it "allows into index action" do
16
16
  get :index, :access_token => token_string
17
- response.should be_success
17
+ expect(response).to be_success
18
18
  end
19
19
 
20
20
  it "allows into show action" do
21
21
  get :show, :id => "3", :access_token => token_string
22
- response.should be_success
22
+ expect(response).to be_success
23
23
  end
24
24
  end
25
25
 
@@ -28,12 +28,12 @@ shared_examples "specified for particular actions" do
28
28
 
29
29
  it "does not allow into index action" do
30
30
  get :index, :access_token => token_string
31
- response.status.should == 401
31
+ expect(response.status).to eq 401
32
32
  end
33
33
 
34
34
  it "allows into show action" do
35
35
  get :show, :id => "5", :access_token => token_string
36
- response.should be_success
36
+ expect(response).to be_success
37
37
  end
38
38
  end
39
39
  end
@@ -42,24 +42,24 @@ shared_examples "specified with except" do
42
42
  context "with valid token", :token => :valid do
43
43
  it "allows into index action" do
44
44
  get :index, :access_token => token_string
45
- response.should be_success
45
+ expect(response).to be_success
46
46
  end
47
47
 
48
48
  it "allows into show action" do
49
49
  get :show, :id => "4", :access_token => token_string
50
- response.should be_success
50
+ expect(response).to be_success
51
51
  end
52
52
  end
53
53
 
54
54
  context "with invalid token", :token => :invalid do
55
55
  it "allows into index action" do
56
56
  get :index, :access_token => token_string
57
- response.should be_success
57
+ expect(response).to be_success
58
58
  end
59
59
 
60
60
  it "does not allow into show action" do
61
61
  get :show, :id => "14", :access_token => token_string
62
- response.status.should == 401
62
+ expect(response.status).to eq 401
63
63
  end
64
64
  end
65
65
  end
@@ -74,9 +74,7 @@ describe "Doorkeeper_for helper" do
74
74
  end
75
75
  end
76
76
 
77
- let :token_string do
78
- "1A2BC3"
79
- end
77
+ let(:token_string) { "1A2BC3" }
80
78
 
81
79
  it "access_token param" do
82
80
  Doorkeeper::AccessToken.should_receive(:authenticate).with(token_string)
@@ -118,24 +116,24 @@ describe "Doorkeeper_for helper" do
118
116
  context "with valid token", :token => :valid do
119
117
  it "allows into index action" do
120
118
  get :index, :access_token => token_string
121
- response.should be_success
119
+ expect(response).to be_success
122
120
  end
123
121
 
124
122
  it "allows into show action" do
125
123
  get :show, :id => "4", :access_token => token_string
126
- response.should be_success
124
+ expect(response).to be_success
127
125
  end
128
126
  end
129
127
 
130
128
  context "with invalid token", :token => :invalid do
131
129
  it "does not allow into index action" do
132
130
  get :index, :access_token => token_string
133
- response.status.should == 401
131
+ expect(response.status).to eq 401
134
132
  end
135
133
 
136
134
  it "does not allow into show action" do
137
135
  get :show, :id => "4", :access_token => token_string
138
- response.status.should == 401
136
+ expect(response.status).to eq 401
139
137
  end
140
138
  end
141
139
  end
@@ -166,22 +164,20 @@ describe "Doorkeeper_for helper" do
166
164
  include ControllerActions
167
165
  end
168
166
 
169
- let :token_string do
170
- "1A2DUWE"
171
- end
167
+ let(:token_string) { "1A2DUWE" }
172
168
 
173
169
  it "allows if the token has particular scopes" do
174
170
  token = double(Doorkeeper::AccessToken, :accessible? => true, :scopes => [:write, :public])
175
171
  Doorkeeper::AccessToken.should_receive(:authenticate).with(token_string).and_return(token)
176
172
  get :index, :access_token => token_string
177
- response.should be_success
173
+ expect(response).to be_success
178
174
  end
179
175
 
180
176
  it "does not allow if the token does not include given scope" do
181
177
  token = double(Doorkeeper::AccessToken, :accessible? => true, :scopes => [:public])
182
178
  Doorkeeper::AccessToken.should_receive(:authenticate).with(token_string).and_return(token)
183
179
  get :index, :access_token => token_string
184
- response.status.should == 401
180
+ expect(response.status).to eq 401
185
181
  end
186
182
  end
187
183
 
@@ -199,11 +195,11 @@ describe "Doorkeeper_for helper" do
199
195
 
200
196
  it "it renders a custom JSON response", :token => :invalid do
201
197
  get :index, :access_token => token_string
202
- response.status.should == 401
203
- response.content_type.should == 'application/json'
198
+ expect(response.status).to eq 401
199
+ expect(response.content_type).to eq('application/json')
204
200
  parsed_body = JSON.parse(response.body)
205
- parsed_body.should_not be_nil
206
- parsed_body['error'].should == 'Unauthorized'
201
+ expect(parsed_body).not_to be_nil
202
+ expect(parsed_body['error']).to eq('Unauthorized')
207
203
  end
208
204
 
209
205
  end
@@ -215,9 +211,9 @@ describe "Doorkeeper_for helper" do
215
211
 
216
212
  it "it renders a custom JSON response", :token => :invalid do
217
213
  get :index, :access_token => token_string
218
- response.status.should == 401
219
- response.content_type.should == 'text/html'
220
- response.body.should == 'Unauthorized'
214
+ expect(response.status).to eq 401
215
+ expect(response.content_type).to eq('text/html')
216
+ expect(response.body.should).to eq('Unauthorized')
221
217
  end
222
218
  end
223
219
  end
@@ -242,24 +238,24 @@ describe "Doorkeeper_for helper" do
242
238
  context "with valid token", :token => :valid do
243
239
  it "enables access if passed block evaluates to false" do
244
240
  get :index, :access_token => token_string
245
- response.should be_success
241
+ expect(response).to be_success
246
242
  end
247
243
 
248
244
  it "enables access if passed block evaluates to true" do
249
245
  get :show, :id => 1, :access_token => token_string
250
- response.should be_success
246
+ expect(response).to be_success
251
247
  end
252
248
  end
253
249
 
254
250
  context "with invalid token", :token => :invalid do
255
251
  it "enables access if passed block evaluates to false" do
256
252
  get :index, :access_token => token_string
257
- response.should be_success
253
+ expect(response).to be_success
258
254
  end
259
255
 
260
256
  it "does not enable access if passed block evaluates to true" do
261
257
  get :show, :id => 3, :access_token => token_string
262
- response.status.should == 401
258
+ expect(response.status).to eq 401
263
259
  end
264
260
  end
265
261
  end
@@ -285,12 +281,12 @@ describe "Doorkeeper_for helper" do
285
281
  context "with valid token", :token => :valid do
286
282
  it "allows access if passed block evaluates to false" do
287
283
  get :index, :access_token => token_string
288
- response.should be_success
284
+ expect(response).to be_success
289
285
  end
290
286
 
291
287
  it "allows access if passed block evaluates to true" do
292
288
  get :show, :id => 1, :access_token => token_string
293
- response.should be_success
289
+ expect(response).to be_success
294
290
  end
295
291
  end
296
292
 
@@ -301,7 +297,7 @@ describe "Doorkeeper_for helper" do
301
297
 
302
298
  it "allows access if passed block evaluates to true" do
303
299
  get :show, :id => 3, :access_token => token_string
304
- response.should be_success
300
+ expect(response).to be_success
305
301
  end
306
302
  end
307
303
  end
@@ -18,12 +18,12 @@ describe Doorkeeper::TokenInfoController do
18
18
 
19
19
  it "responds with tokeninfo" do
20
20
  do_get
21
- response.body.should eq doorkeeper_token.to_json
21
+ expect(response.body).to eq(doorkeeper_token.to_json)
22
22
  end
23
23
 
24
24
  it "responds with a 200 status" do
25
25
  do_get
26
- response.status.should eq 200
26
+ expect(response.status).to eq 200
27
27
  end
28
28
  end
29
29
 
@@ -33,19 +33,19 @@ describe Doorkeeper::TokenInfoController do
33
33
  end
34
34
  it "responds with 401 when doorkeeper_token is not valid" do
35
35
  do_get
36
- response.status.should eq 401
36
+ expect(response.status).to eq 401
37
37
  end
38
38
 
39
39
  it "responds with 401 when doorkeeper_token is invalid, expired or revoked" do
40
40
  controller.stub(:doorkeeper_token => doorkeeper_token)
41
41
  doorkeeper_token.stub(:accessible? => false)
42
42
  do_get
43
- response.status.should eq 401
43
+ expect(response.status).to eq 401
44
44
  end
45
45
 
46
46
  it "responds body message for error" do
47
47
  do_get
48
- response.body.should eq Doorkeeper::OAuth::ErrorResponse.new(:name => :invalid_request, :status => :unauthorized).body.to_json
48
+ expect(response.body).to eq(Doorkeeper::OAuth::ErrorResponse.new(:name => :invalid_request, :status => :unauthorized).body.to_json)
49
49
  end
50
50
  end
51
51
 
@@ -30,7 +30,7 @@ describe Doorkeeper::TokensController do
30
30
  pending 'verify need of these specs'
31
31
  token.stub(:error_response => stub(:to_json => [], :status => :unauthorized))
32
32
  post :create
33
- response.status.should == 401
33
+ expect(response.status).to eq 401
34
34
  end
35
35
  end
36
36
  end
@@ -41,6 +41,11 @@ describe 'Expirable' do
41
41
  subject.stub :expires_in => 30.seconds
42
42
  subject.expires_in_seconds.should == 0
43
43
  end
44
+
45
+ it "should return nil when expires_in is nil" do
46
+ subject.stub :expires_in => nil
47
+ subject.expires_in_seconds.should be_nil
48
+ end
44
49
 
45
50
  end
46
51
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doorkeeper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.6.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-11-10 00:00:00.000000000 Z
13
+ date: 2012-12-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: railties
17
- requirement: &70248653033380 !ruby/object:Gem::Requirement
17
+ requirement: &70130193498340 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '3.1'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70248653033380
25
+ version_requirements: *70130193498340
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: sqlite3
28
- requirement: &70248653052440 !ruby/object:Gem::Requirement
28
+ requirement: &70130193497080 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 1.3.5
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *70248653052440
36
+ version_requirements: *70130193497080
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rspec-rails
39
- requirement: &70248653066860 !ruby/object:Gem::Requirement
39
+ requirement: &70130193496300 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 2.11.4
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *70248653066860
47
+ version_requirements: *70130193496300
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: capybara
50
- requirement: &70248653063820 !ruby/object:Gem::Requirement
50
+ requirement: &70130193495160 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 1.1.2
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *70248653063820
58
+ version_requirements: *70130193495160
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: generator_spec
61
- requirement: &70248653085640 !ruby/object:Gem::Requirement
61
+ requirement: &70130193493840 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ~>
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: 0.8.5
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *70248653085640
69
+ version_requirements: *70130193493840
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: factory_girl
72
- requirement: &70248653084480 !ruby/object:Gem::Requirement
72
+ requirement: &70130193493100 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ~>
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: 2.6.4
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *70248653084480
80
+ version_requirements: *70130193493100
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: timecop
83
- requirement: &70248653083120 !ruby/object:Gem::Requirement
83
+ requirement: &70130193492640 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ~>
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: 0.5.2
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *70248653083120
91
+ version_requirements: *70130193492640
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: database_cleaner
94
- requirement: &70248653082380 !ruby/object:Gem::Requirement
94
+ requirement: &70130193492100 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ~>
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: 0.9.1
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *70248653082380
102
+ version_requirements: *70130193492100
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: bcrypt-ruby
105
- requirement: &70248653081300 !ruby/object:Gem::Requirement
105
+ requirement: &70130193491140 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ~>
@@ -110,7 +110,7 @@ dependencies:
110
110
  version: 3.0.1
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *70248653081300
113
+ version_requirements: *70130193491140
114
114
  description: Doorkeeper is an OAuth 2 provider for Rails.
115
115
  email:
116
116
  - felipe@applicake.com
@@ -360,7 +360,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
360
360
  version: '0'
361
361
  segments:
362
362
  - 0
363
- hash: 2088953197718339440
363
+ hash: -3038258782107133512
364
364
  required_rubygems_version: !ruby/object:Gem::Requirement
365
365
  none: false
366
366
  requirements:
@@ -369,7 +369,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
369
369
  version: '0'
370
370
  segments:
371
371
  - 0
372
- hash: 2088953197718339440
372
+ hash: -3038258782107133512
373
373
  requirements: []
374
374
  rubyforge_project:
375
375
  rubygems_version: 1.8.12