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.
- data/CHANGELOG.md +10 -0
- data/README.md +1 -1
- data/app/controllers/doorkeeper/authorizations_controller.rb +1 -2
- data/lib/doorkeeper/config.rb +2 -0
- data/lib/doorkeeper/helpers/controller.rb +6 -1
- data/lib/doorkeeper/models/expirable.rb +1 -0
- data/lib/doorkeeper/oauth/client.rb +2 -0
- data/lib/doorkeeper/oauth/error_response.rb +1 -1
- data/lib/doorkeeper/version.rb +1 -1
- data/lib/generators/doorkeeper/templates/initializer.rb +7 -0
- data/spec/controllers/applications_controller_spec.rb +1 -1
- data/spec/controllers/authorizations_controller_spec.rb +52 -18
- data/spec/controllers/protected_resources_controller_spec.rb +30 -34
- data/spec/controllers/token_info_controller_spec.rb +5 -5
- data/spec/controllers/tokens_controller_spec.rb +1 -1
- data/spec/lib/models/expirable_spec.rb +5 -0
- metadata +22 -22
data/CHANGELOG.md
CHANGED
@@ -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
@@ -4,8 +4,7 @@ module Doorkeeper
|
|
4
4
|
|
5
5
|
def new
|
6
6
|
if pre_auth.authorizable?
|
7
|
-
|
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
|
data/lib/doorkeeper/config.rb
CHANGED
@@ -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
|
data/lib/doorkeeper/version.rb
CHANGED
@@ -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
|
@@ -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.
|
28
|
+
expect(response).to be_redirect
|
29
29
|
end
|
30
30
|
|
31
31
|
it "redirects to client redirect uri" do
|
32
|
-
response.location.
|
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").
|
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").
|
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.
|
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.
|
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.
|
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.
|
63
|
+
expect(response).to be_redirect
|
64
64
|
end
|
65
65
|
|
66
66
|
it "redirects to client redirect uri" do
|
67
|
-
response.location.
|
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").
|
71
|
+
expect(fragments("access_token")).to be_nil
|
72
72
|
end
|
73
73
|
|
74
74
|
it "includes error in fragment" do
|
75
|
-
fragments("error").
|
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").
|
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.
|
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.
|
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.
|
142
|
+
expect(response).to_not be_redirect
|
109
143
|
end
|
110
144
|
|
111
145
|
it 'renders error template' do
|
112
|
-
response.
|
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.
|
117
|
-
Doorkeeper::AccessToken.count.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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
|
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.
|
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.
|
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.
|
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.
|
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
|
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.
|
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.
|
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.
|
203
|
-
response.content_type.
|
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.
|
206
|
-
parsed_body['error'].
|
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.
|
219
|
-
response.content_type.
|
220
|
-
response.body.should
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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-
|
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: &
|
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: *
|
25
|
+
version_requirements: *70130193498340
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: sqlite3
|
28
|
-
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: *
|
36
|
+
version_requirements: *70130193497080
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: rspec-rails
|
39
|
-
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: *
|
47
|
+
version_requirements: *70130193496300
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: capybara
|
50
|
-
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: *
|
58
|
+
version_requirements: *70130193495160
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: generator_spec
|
61
|
-
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: *
|
69
|
+
version_requirements: *70130193493840
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: factory_girl
|
72
|
-
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: *
|
80
|
+
version_requirements: *70130193493100
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: timecop
|
83
|
-
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: *
|
91
|
+
version_requirements: *70130193492640
|
92
92
|
- !ruby/object:Gem::Dependency
|
93
93
|
name: database_cleaner
|
94
|
-
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: *
|
102
|
+
version_requirements: *70130193492100
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: bcrypt-ruby
|
105
|
-
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: *
|
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:
|
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:
|
372
|
+
hash: -3038258782107133512
|
373
373
|
requirements: []
|
374
374
|
rubyforge_project:
|
375
375
|
rubygems_version: 1.8.12
|