sorcery 0.7.6 → 0.7.7
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of sorcery might be problematic. Click here for more details.
- data/.travis.yml +2 -0
- data/Gemfile +2 -21
- data/Gemfile.lock +86 -52
- data/README.rdoc +4 -3
- data/VERSION +1 -1
- data/lib/generators/sorcery/install_generator.rb +6 -4
- data/lib/generators/sorcery/templates/initializer.rb +293 -127
- data/lib/sorcery/controller.rb +1 -0
- data/lib/sorcery/controller/submodules/external.rb +1 -1
- data/lib/sorcery/controller/submodules/external/protocols/oauth2.rb +2 -2
- data/lib/sorcery/controller/submodules/external/providers/facebook.rb +7 -2
- data/lib/sorcery/controller/submodules/external/providers/github.rb +4 -4
- data/lib/sorcery/controller/submodules/external/providers/google.rb +4 -4
- data/lib/sorcery/controller/submodules/external/providers/liveid.rb +1 -1
- data/lib/sorcery/model/adapters/mongo_mapper.rb +1 -1
- data/lib/sorcery/model/adapters/mongoid.rb +2 -2
- data/lib/sorcery/model/submodules/brute_force_protection.rb +2 -2
- data/lib/sorcery/model/submodules/reset_password.rb +10 -3
- data/lib/sorcery/model/submodules/user_activation.rb +14 -6
- data/sorcery.gemspec +15 -8
- data/spec/Gemfile.lock +15 -18
- data/spec/rails3/Gemfile +1 -0
- data/spec/rails3/Gemfile.lock +21 -23
- data/spec/rails3/spec/controller_oauth2_spec.rb +6 -4
- data/spec/rails3_mongo_mapper/Gemfile +1 -0
- data/spec/rails3_mongo_mapper/Gemfile.lock +31 -37
- data/spec/rails3_mongoid/Gemfile +1 -0
- data/spec/rails3_mongoid/Gemfile.lock +23 -24
- data/spec/shared_examples/user_activation_shared_examples.rb +71 -41
- data/spec/shared_examples/user_reset_password_shared_examples.rb +76 -31
- metadata +63 -40
data/lib/sorcery/controller.rb
CHANGED
@@ -71,6 +71,7 @@ module Sorcery
|
|
71
71
|
# and we want to return him back to the page he originally wanted.
|
72
72
|
def redirect_back_or_to(url, flash_hash = {})
|
73
73
|
redirect_to(session[:return_to_url] || url, :flash => flash_hash)
|
74
|
+
session[:return_to_url] = nil
|
74
75
|
end
|
75
76
|
|
76
77
|
# The default action for denying non-authenticated users.
|
@@ -45,7 +45,7 @@ module Sorcery
|
|
45
45
|
@provider = Config.send(provider)
|
46
46
|
@provider.process_callback(params,session)
|
47
47
|
@user_hash = @provider.get_user_hash
|
48
|
-
if user = user_class.load_from_provider(provider,@user_hash[:uid])
|
48
|
+
if user = user_class.load_from_provider(provider,@user_hash[:uid].to_s)
|
49
49
|
reset_session
|
50
50
|
auto_login(user)
|
51
51
|
user
|
@@ -20,9 +20,9 @@ module Sorcery
|
|
20
20
|
|
21
21
|
def get_access_token(args, options = {})
|
22
22
|
client = build_client(options)
|
23
|
-
client.auth_code.
|
23
|
+
client.auth_code.get_token(
|
24
24
|
args[:code],
|
25
|
-
:redirect_uri => @callback_url
|
25
|
+
{ :redirect_uri => @callback_url, :parse => options.delete(:parse) }, options
|
26
26
|
)
|
27
27
|
end
|
28
28
|
|
@@ -46,12 +46,16 @@ module Sorcery
|
|
46
46
|
@scope = "email,offline_access"
|
47
47
|
@user_info_mapping = {}
|
48
48
|
@display = "page"
|
49
|
+
@token_url = "oauth/access_token"
|
50
|
+
@mode = :query
|
51
|
+
@parse = :query
|
52
|
+
@param_name = "access_token"
|
49
53
|
end
|
50
54
|
|
51
55
|
def get_user_hash
|
52
56
|
user_hash = {}
|
53
57
|
response = @access_token.get(@user_info_path)
|
54
|
-
user_hash[:user_info] = JSON.parse(response)
|
58
|
+
user_hash[:user_info] = JSON.parse(response.body)
|
55
59
|
user_hash[:uid] = user_hash[:user_info]['id']
|
56
60
|
user_hash
|
57
61
|
end
|
@@ -69,8 +73,9 @@ module Sorcery
|
|
69
73
|
# tries to login the user from access token
|
70
74
|
def process_callback(params,session)
|
71
75
|
args = {}
|
76
|
+
options = { :token_url => @token_url, :mode => @mode, :param_name => @param_name, :parse => @parse }
|
72
77
|
args.merge!({:code => params[:code]}) if params[:code]
|
73
|
-
@access_token = self.get_access_token(args)
|
78
|
+
@access_token = self.get_access_token(args, options)
|
74
79
|
end
|
75
80
|
|
76
81
|
end
|
@@ -51,7 +51,7 @@ module Sorcery
|
|
51
51
|
def get_user_hash
|
52
52
|
user_hash = {}
|
53
53
|
response = @access_token.get(@user_info_path)
|
54
|
-
user_hash[:user_info] = JSON.parse(response)
|
54
|
+
user_hash[:user_info] = JSON.parse(response.body)
|
55
55
|
user_hash[:uid] = user_hash[:user_info]['id']
|
56
56
|
user_hash
|
57
57
|
end
|
@@ -63,7 +63,7 @@ module Sorcery
|
|
63
63
|
# calculates and returns the url to which the user should be redirected,
|
64
64
|
# to get authenticated at the external provider's site.
|
65
65
|
def login_url(params,session)
|
66
|
-
self.authorize_url({:
|
66
|
+
self.authorize_url({:authorize_url => @auth_path})
|
67
67
|
end
|
68
68
|
|
69
69
|
# tries to login the user from access token
|
@@ -71,8 +71,8 @@ module Sorcery
|
|
71
71
|
args = {}
|
72
72
|
args.merge!({:code => params[:code]}) if params[:code]
|
73
73
|
options = {
|
74
|
-
:
|
75
|
-
:
|
74
|
+
:token_url => @token_path,
|
75
|
+
:token_method => :post
|
76
76
|
}
|
77
77
|
@access_token = self.get_access_token(args, options)
|
78
78
|
end
|
@@ -44,7 +44,7 @@ module Sorcery
|
|
44
44
|
def init
|
45
45
|
@site = "https://accounts.google.com"
|
46
46
|
@auth_url = "/o/oauth2/auth"
|
47
|
-
@
|
47
|
+
@token_url = "/o/oauth2/token"
|
48
48
|
@user_info_url = "https://www.googleapis.com/oauth2/v1/userinfo"
|
49
49
|
@scope = "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"
|
50
50
|
@user_info_mapping = {}
|
@@ -53,7 +53,7 @@ module Sorcery
|
|
53
53
|
def get_user_hash
|
54
54
|
user_hash = {}
|
55
55
|
response = @access_token.get(@user_info_url)
|
56
|
-
user_hash[:user_info] = JSON.parse(response)
|
56
|
+
user_hash[:user_info] = JSON.parse(response.body)
|
57
57
|
user_hash[:uid] = user_hash[:user_info]['id']
|
58
58
|
user_hash
|
59
59
|
end
|
@@ -73,8 +73,8 @@ module Sorcery
|
|
73
73
|
args = {}
|
74
74
|
args.merge!({:code => params[:code]}) if params[:code]
|
75
75
|
options = {
|
76
|
-
:
|
77
|
-
:
|
76
|
+
:token_url => @token_url,
|
77
|
+
:token_method => :post
|
78
78
|
}
|
79
79
|
@access_token = self.get_access_token(args, options)
|
80
80
|
end
|
@@ -54,7 +54,7 @@ module Sorcery
|
|
54
54
|
user_hash = {}
|
55
55
|
@access_token.token_param = "access_token"
|
56
56
|
response = @access_token.get(@user_info_url)
|
57
|
-
user_hash[:user_info] = JSON.parse(response)
|
57
|
+
user_hash[:user_info] = JSON.parse(response.body)
|
58
58
|
user_hash[:uid] = user_hash[:user_info]['id']
|
59
59
|
user_hash
|
60
60
|
end
|
@@ -72,8 +72,8 @@ module Sorcery
|
|
72
72
|
def get_current_users
|
73
73
|
config = sorcery_config
|
74
74
|
where(config.last_activity_at_attribute_name.ne => nil) \
|
75
|
-
.
|
76
|
-
.and(config.last_activity_at_attribute_name.gt => config.activity_timeout.seconds.ago.utc
|
75
|
+
.and("this.#{config.last_logout_at_attribute_name} == null || this.#{config.last_activity_at_attribute_name} > this.#{config.last_logout_at_attribute_name}") \
|
76
|
+
.and(config.last_activity_at_attribute_name.gt => config.activity_timeout.seconds.ago.utc).order_by([:_id,:asc])
|
77
77
|
end
|
78
78
|
end
|
79
79
|
end
|
@@ -37,12 +37,12 @@ module Sorcery
|
|
37
37
|
protected
|
38
38
|
|
39
39
|
def define_brute_force_protection_mongoid_fields
|
40
|
-
field sorcery_config.failed_logins_count_attribute_name, :type => Integer
|
40
|
+
field sorcery_config.failed_logins_count_attribute_name, :type => Integer, :default => 0
|
41
41
|
field sorcery_config.lock_expires_at_attribute_name, :type => Time
|
42
42
|
end
|
43
43
|
|
44
44
|
def define_brute_force_protection_mongo_mapper_fields
|
45
|
-
key sorcery_config.failed_logins_count_attribute_name, Integer
|
45
|
+
key sorcery_config.failed_logins_count_attribute_name, Integer, :default => 0
|
46
46
|
key sorcery_config.lock_expires_at_attribute_name, Time
|
47
47
|
end
|
48
48
|
end
|
@@ -18,6 +18,11 @@ module Sorcery
|
|
18
18
|
# protection.
|
19
19
|
|
20
20
|
:reset_password_mailer, # mailer class. Needed.
|
21
|
+
|
22
|
+
:reset_password_mailer_disabled, # when true sorcery will not automatically
|
23
|
+
# email password reset details and allow you to
|
24
|
+
# manually handle how and when email is sent
|
25
|
+
|
21
26
|
:reset_password_email_method_name, # reset password email method on your
|
22
27
|
# mailer class.
|
23
28
|
|
@@ -34,6 +39,7 @@ module Sorcery
|
|
34
39
|
:@reset_password_token_expires_at_attribute_name => :reset_password_token_expires_at,
|
35
40
|
:@reset_password_email_sent_at_attribute_name => :reset_password_email_sent_at,
|
36
41
|
:@reset_password_mailer => nil,
|
42
|
+
:@reset_password_mailer_disabled => false,
|
37
43
|
:@reset_password_email_method_name => :reset_password_email,
|
38
44
|
:@reset_password_expiration_period => nil,
|
39
45
|
:@reset_password_time_between_emails => 5 * 60 )
|
@@ -64,10 +70,11 @@ module Sorcery
|
|
64
70
|
|
65
71
|
protected
|
66
72
|
|
67
|
-
# This submodule requires the developer to define his own mailer class to be used by it
|
73
|
+
# This submodule requires the developer to define his own mailer class to be used by it
|
74
|
+
# when reset_password_mailer_disabled is false
|
68
75
|
def validate_mailer_defined
|
69
76
|
msg = "To use reset_password submodule, you must define a mailer (config.reset_password_mailer = YourMailerClass)."
|
70
|
-
raise ArgumentError, msg if @sorcery_config.reset_password_mailer == nil
|
77
|
+
raise ArgumentError, msg if @sorcery_config.reset_password_mailer == nil and @sorcery_config.reset_password_mailer_disabled == false
|
71
78
|
end
|
72
79
|
|
73
80
|
def define_reset_password_mongoid_fields
|
@@ -94,7 +101,7 @@ module Sorcery
|
|
94
101
|
self.send(:"#{config.reset_password_email_sent_at_attribute_name}=", Time.now.in_time_zone)
|
95
102
|
self.class.transaction do
|
96
103
|
self.save!(:validate => false)
|
97
|
-
generic_send_email(:reset_password_email_method_name, :reset_password_mailer)
|
104
|
+
generic_send_email(:reset_password_email_method_name, :reset_password_mailer) unless config.reset_password_mailer_disabled
|
98
105
|
end
|
99
106
|
end
|
100
107
|
|
@@ -20,7 +20,13 @@ module Sorcery
|
|
20
20
|
:activation_token_expiration_period, # how many seconds before the activation code
|
21
21
|
# expires. nil for never expires.
|
22
22
|
|
23
|
-
:user_activation_mailer, # your mailer class. Required
|
23
|
+
:user_activation_mailer, # your mailer class. Required when
|
24
|
+
# activation_mailer_disabled == false.
|
25
|
+
|
26
|
+
:activation_mailer_disabled, # when true sorcery will not automatically
|
27
|
+
# email activation details and allow you to
|
28
|
+
# manually handle how and when email is sent
|
29
|
+
|
24
30
|
:activation_needed_email_method_name, # activation needed email method on your
|
25
31
|
# mailer class.
|
26
32
|
|
@@ -37,6 +43,7 @@ module Sorcery
|
|
37
43
|
:@activation_token_expires_at_attribute_name => :activation_token_expires_at,
|
38
44
|
:@activation_token_expiration_period => nil,
|
39
45
|
:@user_activation_mailer => nil,
|
46
|
+
:@activation_mailer_disabled => false,
|
40
47
|
:@activation_needed_email_method_name => :activation_needed_email,
|
41
48
|
:@activation_success_email_method_name => :activation_success_email,
|
42
49
|
:@prevent_non_active_users_to_login => true)
|
@@ -47,7 +54,7 @@ module Sorcery
|
|
47
54
|
# don't setup activation if no password supplied - this user is created automatically
|
48
55
|
before_create :setup_activation, :if => Proc.new { |user| user.send(sorcery_config.password_attribute_name).present? }
|
49
56
|
# don't send activation needed email if no crypted password created - this user is external (OAuth etc.)
|
50
|
-
after_create :send_activation_needed_email!, :if => Proc.new { |user| !user.external?}
|
57
|
+
after_create :send_activation_needed_email!, :if => Proc.new { |user| !user.external? }
|
51
58
|
end
|
52
59
|
|
53
60
|
base.sorcery_config.after_config << :validate_mailer_defined
|
@@ -74,10 +81,11 @@ module Sorcery
|
|
74
81
|
|
75
82
|
protected
|
76
83
|
|
77
|
-
# This submodule requires the developer to define his own mailer class to be used by it
|
84
|
+
# This submodule requires the developer to define his own mailer class to be used by it
|
85
|
+
# when activation_mailer_disabled is false
|
78
86
|
def validate_mailer_defined
|
79
87
|
msg = "To use user_activation submodule, you must define a mailer (config.user_activation_mailer = YourMailerClass)."
|
80
|
-
raise ArgumentError, msg if @sorcery_config.user_activation_mailer == nil
|
88
|
+
raise ArgumentError, msg if @sorcery_config.user_activation_mailer == nil and @sorcery_config.activation_mailer_disabled == false
|
81
89
|
end
|
82
90
|
|
83
91
|
def define_user_activation_mongoid_fields
|
@@ -119,11 +127,11 @@ module Sorcery
|
|
119
127
|
|
120
128
|
# called automatically after user initial creation.
|
121
129
|
def send_activation_needed_email!
|
122
|
-
generic_send_email(:activation_needed_email_method_name, :user_activation_mailer) unless sorcery_config.activation_needed_email_method_name.nil?
|
130
|
+
generic_send_email(:activation_needed_email_method_name, :user_activation_mailer) unless sorcery_config.activation_needed_email_method_name.nil? or sorcery_config.activation_mailer_disabled == true
|
123
131
|
end
|
124
132
|
|
125
133
|
def send_activation_success_email!
|
126
|
-
generic_send_email(:activation_success_email_method_name, :user_activation_mailer) unless sorcery_config.activation_success_email_method_name.nil?
|
134
|
+
generic_send_email(:activation_success_email_method_name, :user_activation_mailer) unless sorcery_config.activation_success_email_method_name.nil? or sorcery_config.activation_mailer_disabled == true
|
127
135
|
end
|
128
136
|
|
129
137
|
def prevent_non_active_login
|
data/sorcery.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "sorcery"
|
8
|
-
s.version = "0.7.
|
8
|
+
s.version = "0.7.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Noam Ben Ari"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-03-03"
|
13
13
|
s.description = "Provides common authentication needs such as signing in/out, activating by email and resetting password."
|
14
14
|
s.email = "nbenari@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.files = [
|
20
20
|
".document",
|
21
21
|
".rspec",
|
22
|
+
".travis.yml",
|
22
23
|
"Gemfile",
|
23
24
|
"Gemfile.lock",
|
24
25
|
"LICENSE.txt",
|
@@ -427,8 +428,8 @@ Gem::Specification.new do |s|
|
|
427
428
|
s.specification_version = 3
|
428
429
|
|
429
430
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
430
|
-
s.add_runtime_dependency(%q<
|
431
|
-
s.
|
431
|
+
s.add_runtime_dependency(%q<sorcery>, [">= 0"])
|
432
|
+
s.add_development_dependency(%q<bcrypt-ruby>, ["~> 3.0.0"])
|
432
433
|
s.add_development_dependency(%q<rails>, [">= 3.0.0"])
|
433
434
|
s.add_development_dependency(%q<json>, [">= 1.5.1"])
|
434
435
|
s.add_development_dependency(%q<rspec>, ["~> 2.5.0"])
|
@@ -439,13 +440,15 @@ Gem::Specification.new do |s|
|
|
439
440
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
440
441
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
441
442
|
s.add_development_dependency(%q<simplecov>, [">= 0.3.8"])
|
443
|
+
s.add_development_dependency(%q<capybara>, [">= 1.1.2"])
|
444
|
+
s.add_development_dependency(%q<mongoid>, ["~> 2.4.4"])
|
442
445
|
s.add_development_dependency(%q<timecop>, [">= 0"])
|
443
446
|
s.add_runtime_dependency(%q<bcrypt-ruby>, ["~> 3.0.0"])
|
444
447
|
s.add_runtime_dependency(%q<oauth>, ["~> 0.4.4"])
|
445
448
|
s.add_runtime_dependency(%q<oauth2>, ["~> 0.5.1"])
|
446
449
|
else
|
447
|
-
s.add_dependency(%q<
|
448
|
-
s.add_dependency(%q<
|
450
|
+
s.add_dependency(%q<sorcery>, [">= 0"])
|
451
|
+
s.add_dependency(%q<bcrypt-ruby>, ["~> 3.0.0"])
|
449
452
|
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
450
453
|
s.add_dependency(%q<json>, [">= 1.5.1"])
|
451
454
|
s.add_dependency(%q<rspec>, ["~> 2.5.0"])
|
@@ -456,14 +459,16 @@ Gem::Specification.new do |s|
|
|
456
459
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
457
460
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
458
461
|
s.add_dependency(%q<simplecov>, [">= 0.3.8"])
|
462
|
+
s.add_dependency(%q<capybara>, [">= 1.1.2"])
|
463
|
+
s.add_dependency(%q<mongoid>, ["~> 2.4.4"])
|
459
464
|
s.add_dependency(%q<timecop>, [">= 0"])
|
460
465
|
s.add_dependency(%q<bcrypt-ruby>, ["~> 3.0.0"])
|
461
466
|
s.add_dependency(%q<oauth>, ["~> 0.4.4"])
|
462
467
|
s.add_dependency(%q<oauth2>, ["~> 0.5.1"])
|
463
468
|
end
|
464
469
|
else
|
465
|
-
s.add_dependency(%q<
|
466
|
-
s.add_dependency(%q<
|
470
|
+
s.add_dependency(%q<sorcery>, [">= 0"])
|
471
|
+
s.add_dependency(%q<bcrypt-ruby>, ["~> 3.0.0"])
|
467
472
|
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
468
473
|
s.add_dependency(%q<json>, [">= 1.5.1"])
|
469
474
|
s.add_dependency(%q<rspec>, ["~> 2.5.0"])
|
@@ -474,6 +479,8 @@ Gem::Specification.new do |s|
|
|
474
479
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
475
480
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
476
481
|
s.add_dependency(%q<simplecov>, [">= 0.3.8"])
|
482
|
+
s.add_dependency(%q<capybara>, [">= 1.1.2"])
|
483
|
+
s.add_dependency(%q<mongoid>, ["~> 2.4.4"])
|
477
484
|
s.add_dependency(%q<timecop>, [">= 0"])
|
478
485
|
s.add_dependency(%q<bcrypt-ruby>, ["~> 3.0.0"])
|
479
486
|
s.add_dependency(%q<oauth>, ["~> 0.4.4"])
|
data/spec/Gemfile.lock
CHANGED
@@ -1,11 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../
|
3
3
|
specs:
|
4
|
-
sorcery (0.7.
|
5
|
-
bcrypt-ruby (~> 3.0.0)
|
4
|
+
sorcery (0.7.6)
|
6
5
|
oauth (~> 0.4.4)
|
7
|
-
oauth (~> 0.4.4)
|
8
|
-
oauth2 (~> 0.5.1)
|
9
6
|
oauth2 (~> 0.5.1)
|
10
7
|
|
11
8
|
GEM
|
@@ -38,19 +35,19 @@ GEM
|
|
38
35
|
activemodel (= 3.0.3)
|
39
36
|
activesupport (= 3.0.3)
|
40
37
|
activesupport (3.0.3)
|
41
|
-
addressable (2.2.
|
38
|
+
addressable (2.2.7)
|
42
39
|
archive-tar-minitar (0.5.2)
|
43
40
|
arel (2.0.10)
|
44
41
|
bcrypt-ruby (3.0.1)
|
45
42
|
builder (2.1.2)
|
46
|
-
columnize (0.3.
|
43
|
+
columnize (0.3.6)
|
47
44
|
diff-lcs (1.1.3)
|
48
45
|
erubis (2.6.6)
|
49
46
|
abstract (>= 1.0.0)
|
50
|
-
faraday (0.7.
|
51
|
-
addressable (~> 2.2
|
52
|
-
multipart-post (~> 1.1
|
53
|
-
rack (
|
47
|
+
faraday (0.7.6)
|
48
|
+
addressable (~> 2.2)
|
49
|
+
multipart-post (~> 1.1)
|
50
|
+
rack (~> 1.1)
|
54
51
|
i18n (0.6.0)
|
55
52
|
linecache19 (0.5.12)
|
56
53
|
ruby_core_source (>= 0.1.4)
|
@@ -60,14 +57,14 @@ GEM
|
|
60
57
|
mime-types (~> 1.16)
|
61
58
|
treetop (~> 1.4.8)
|
62
59
|
mime-types (1.17.2)
|
63
|
-
multi_json (1.0
|
64
|
-
multipart-post (1.1.
|
60
|
+
multi_json (1.1.0)
|
61
|
+
multipart-post (1.1.5)
|
65
62
|
oauth (0.4.5)
|
66
|
-
oauth2 (0.5.
|
67
|
-
faraday (~> 0.7
|
68
|
-
multi_json (~> 1.0
|
63
|
+
oauth2 (0.5.2)
|
64
|
+
faraday (~> 0.7)
|
65
|
+
multi_json (~> 1.0)
|
69
66
|
polyglot (0.3.3)
|
70
|
-
rack (1.2.
|
67
|
+
rack (1.2.5)
|
71
68
|
rack-mount (0.6.14)
|
72
69
|
rack (>= 1.0.0)
|
73
70
|
rack-test (0.5.7)
|
@@ -104,8 +101,8 @@ GEM
|
|
104
101
|
ruby-debug-base19 (>= 0.11.19)
|
105
102
|
ruby_core_source (0.1.5)
|
106
103
|
archive-tar-minitar (>= 0.5.2)
|
107
|
-
simplecov (0.
|
108
|
-
multi_json (~> 1.0
|
104
|
+
simplecov (0.6.1)
|
105
|
+
multi_json (~> 1.0)
|
109
106
|
simplecov-html (~> 0.5.3)
|
110
107
|
simplecov-html (0.5.3)
|
111
108
|
thor (0.14.6)
|
data/spec/rails3/Gemfile
CHANGED
data/spec/rails3/Gemfile.lock
CHANGED
@@ -1,11 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../../
|
3
3
|
specs:
|
4
|
-
sorcery (0.7.
|
5
|
-
bcrypt-ruby (~> 3.0.0)
|
4
|
+
sorcery (0.7.6)
|
6
5
|
oauth (~> 0.4.4)
|
7
|
-
oauth (~> 0.4.4)
|
8
|
-
oauth2 (~> 0.5.1)
|
9
6
|
oauth2 (~> 0.5.1)
|
10
7
|
|
11
8
|
GEM
|
@@ -38,7 +35,7 @@ GEM
|
|
38
35
|
activemodel (= 3.0.3)
|
39
36
|
activesupport (= 3.0.3)
|
40
37
|
activesupport (3.0.3)
|
41
|
-
addressable (2.2.
|
38
|
+
addressable (2.2.7)
|
42
39
|
archive-tar-minitar (0.5.2)
|
43
40
|
arel (2.0.10)
|
44
41
|
bcrypt-ruby (3.0.1)
|
@@ -50,16 +47,16 @@ GEM
|
|
50
47
|
rack-test (>= 0.5.4)
|
51
48
|
selenium-webdriver (~> 2.0)
|
52
49
|
xpath (~> 0.1.4)
|
53
|
-
childprocess (0.
|
50
|
+
childprocess (0.3.1)
|
54
51
|
ffi (~> 1.0.6)
|
55
52
|
columnize (0.3.6)
|
56
53
|
diff-lcs (1.1.3)
|
57
54
|
erubis (2.6.6)
|
58
55
|
abstract (>= 1.0.0)
|
59
|
-
faraday (0.7.
|
60
|
-
addressable (~> 2.2
|
61
|
-
multipart-post (~> 1.1
|
62
|
-
rack (
|
56
|
+
faraday (0.7.6)
|
57
|
+
addressable (~> 2.2)
|
58
|
+
multipart-post (~> 1.1)
|
59
|
+
rack (~> 1.1)
|
63
60
|
ffi (1.0.11)
|
64
61
|
i18n (0.6.0)
|
65
62
|
launchy (2.0.5)
|
@@ -72,15 +69,15 @@ GEM
|
|
72
69
|
mime-types (~> 1.16)
|
73
70
|
treetop (~> 1.4.8)
|
74
71
|
mime-types (1.17.2)
|
75
|
-
multi_json (1.0
|
76
|
-
multipart-post (1.1.
|
72
|
+
multi_json (1.1.0)
|
73
|
+
multipart-post (1.1.5)
|
77
74
|
nokogiri (1.5.0)
|
78
75
|
oauth (0.4.5)
|
79
|
-
oauth2 (0.5.
|
80
|
-
faraday (~> 0.7
|
81
|
-
multi_json (~> 1.0
|
76
|
+
oauth2 (0.5.2)
|
77
|
+
faraday (~> 0.7)
|
78
|
+
multi_json (~> 1.0)
|
82
79
|
polyglot (0.3.3)
|
83
|
-
rack (1.2.
|
80
|
+
rack (1.2.5)
|
84
81
|
rack-mount (0.6.14)
|
85
82
|
rack (>= 1.0.0)
|
86
83
|
rack-test (0.5.7)
|
@@ -122,14 +119,14 @@ GEM
|
|
122
119
|
ruby-debug-base19 (>= 0.11.19)
|
123
120
|
ruby_core_source (0.1.5)
|
124
121
|
archive-tar-minitar (>= 0.5.2)
|
125
|
-
rubyzip (0.9.
|
126
|
-
selenium-webdriver (2.
|
127
|
-
childprocess (>= 0.2.
|
128
|
-
ffi (~> 1.0
|
129
|
-
multi_json (~> 1.0
|
122
|
+
rubyzip (0.9.6.1)
|
123
|
+
selenium-webdriver (2.20.0)
|
124
|
+
childprocess (>= 0.2.5)
|
125
|
+
ffi (~> 1.0)
|
126
|
+
multi_json (~> 1.0)
|
130
127
|
rubyzip
|
131
|
-
simplecov (0.
|
132
|
-
multi_json (~> 1.0
|
128
|
+
simplecov (0.6.1)
|
129
|
+
multi_json (~> 1.0)
|
133
130
|
simplecov-html (~> 0.5.3)
|
134
131
|
simplecov-html (0.5.3)
|
135
132
|
sqlite3 (1.3.5)
|
@@ -148,6 +145,7 @@ PLATFORMS
|
|
148
145
|
ruby
|
149
146
|
|
150
147
|
DEPENDENCIES
|
148
|
+
bcrypt-ruby (~> 3.0.0)
|
151
149
|
capybara (~> 1.1.1)
|
152
150
|
launchy (~> 2.0.5)
|
153
151
|
rails (= 3.0.3)
|