devise_sociable 0.0.1

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/.bundle/config ADDED
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_DISABLE_SHARED_GEMS: '1'
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "rails", "~> 3.2.8"
4
+ gem 'warden', "~> 1.2.1"
5
+ gem 'devise', "~> 2.2.2"
6
+
7
+ group :development, :test do
8
+ gem "sqlite3"
9
+ gem "mocha"
10
+ gem "shoulda"
11
+ gem "bundler"
12
+ gem "jeweler"
13
+ gem "simplecov"
14
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,126 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ actionmailer (3.2.11)
5
+ actionpack (= 3.2.11)
6
+ mail (~> 2.4.4)
7
+ actionpack (3.2.11)
8
+ activemodel (= 3.2.11)
9
+ activesupport (= 3.2.11)
10
+ builder (~> 3.0.0)
11
+ erubis (~> 2.7.0)
12
+ journey (~> 1.0.4)
13
+ rack (~> 1.4.0)
14
+ rack-cache (~> 1.2)
15
+ rack-test (~> 0.6.1)
16
+ sprockets (~> 2.2.1)
17
+ activemodel (3.2.11)
18
+ activesupport (= 3.2.11)
19
+ builder (~> 3.0.0)
20
+ activerecord (3.2.11)
21
+ activemodel (= 3.2.11)
22
+ activesupport (= 3.2.11)
23
+ arel (~> 3.0.2)
24
+ tzinfo (~> 0.3.29)
25
+ activeresource (3.2.11)
26
+ activemodel (= 3.2.11)
27
+ activesupport (= 3.2.11)
28
+ activesupport (3.2.11)
29
+ i18n (~> 0.6)
30
+ multi_json (~> 1.0)
31
+ arel (3.0.2)
32
+ bcrypt-ruby (3.0.1)
33
+ bourne (1.1.2)
34
+ mocha (= 0.10.5)
35
+ builder (3.0.4)
36
+ devise (2.2.3)
37
+ bcrypt-ruby (~> 3.0)
38
+ orm_adapter (~> 0.1)
39
+ railties (~> 3.1)
40
+ warden (~> 1.2.1)
41
+ erubis (2.7.0)
42
+ git (1.2.5)
43
+ hike (1.2.1)
44
+ i18n (0.6.1)
45
+ jeweler (1.8.4)
46
+ bundler (~> 1.0)
47
+ git (>= 1.2.5)
48
+ rake
49
+ rdoc
50
+ journey (1.0.4)
51
+ json (1.7.6)
52
+ mail (2.4.4)
53
+ i18n (>= 0.4.0)
54
+ mime-types (~> 1.16)
55
+ treetop (~> 1.4.8)
56
+ metaclass (0.0.1)
57
+ mime-types (1.19)
58
+ mocha (0.10.5)
59
+ metaclass (~> 0.0.1)
60
+ multi_json (1.5.0)
61
+ orm_adapter (0.4.0)
62
+ polyglot (0.3.3)
63
+ rack (1.4.4)
64
+ rack-cache (1.2)
65
+ rack (>= 0.4)
66
+ rack-ssl (1.3.3)
67
+ rack
68
+ rack-test (0.6.2)
69
+ rack (>= 1.0)
70
+ rails (3.2.11)
71
+ actionmailer (= 3.2.11)
72
+ actionpack (= 3.2.11)
73
+ activerecord (= 3.2.11)
74
+ activeresource (= 3.2.11)
75
+ activesupport (= 3.2.11)
76
+ bundler (~> 1.0)
77
+ railties (= 3.2.11)
78
+ railties (3.2.11)
79
+ actionpack (= 3.2.11)
80
+ activesupport (= 3.2.11)
81
+ rack-ssl (~> 1.3.2)
82
+ rake (>= 0.8.7)
83
+ rdoc (~> 3.4)
84
+ thor (>= 0.14.6, < 2.0)
85
+ rake (10.0.3)
86
+ rdoc (3.12)
87
+ json (~> 1.4)
88
+ shoulda (3.3.2)
89
+ shoulda-context (~> 1.0.1)
90
+ shoulda-matchers (~> 1.4.1)
91
+ shoulda-context (1.0.2)
92
+ shoulda-matchers (1.4.2)
93
+ activesupport (>= 3.0.0)
94
+ bourne (~> 1.1.2)
95
+ simplecov (0.7.1)
96
+ multi_json (~> 1.0)
97
+ simplecov-html (~> 0.7.1)
98
+ simplecov-html (0.7.1)
99
+ sprockets (2.2.2)
100
+ hike (~> 1.2)
101
+ multi_json (~> 1.0)
102
+ rack (~> 1.0)
103
+ tilt (~> 1.1, != 1.3.0)
104
+ sqlite3 (1.3.7)
105
+ thor (0.17.0)
106
+ tilt (1.3.3)
107
+ treetop (1.4.12)
108
+ polyglot
109
+ polyglot (>= 0.3.1)
110
+ tzinfo (0.3.35)
111
+ warden (1.2.1)
112
+ rack (>= 1.0)
113
+
114
+ PLATFORMS
115
+ ruby
116
+
117
+ DEPENDENCIES
118
+ bundler
119
+ devise (~> 2.2.2)
120
+ jeweler
121
+ mocha
122
+ rails (~> 3.2.8)
123
+ shoulda
124
+ simplecov
125
+ sqlite3
126
+ warden (~> 1.2.1)
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 ctide
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,29 @@
1
+ = devise_sociable
2
+
3
+ This gem adds the ability to see who's currently online to devise[http://github.com/plataformatec/devise]. You can use it with server side or cookie based sessions.
4
+
5
+ == Usage
6
+
7
+ If you use server side sessions and have that setup, there is no migration needed.
8
+
9
+ If you use cookie sessions (this is the Rails default):
10
+
11
+ rails g devise_sociable
12
+ rake db:migrate
13
+
14
+
15
+ In your model, add :sociable:
16
+
17
+ class User < ActiveRecord::Base
18
+ devise ..., :sociable
19
+ end
20
+
21
+ == Thanks to
22
+
23
+ Thanks to devise_lastseenable[https://github.com/ctide/devise_lastseenable] which led me down the path of creating this gem.
24
+
25
+ == Copyright
26
+
27
+ Copyright (c) 2011 beno. See LICENSE.txt for
28
+ further details.
29
+
data/Rakefile ADDED
@@ -0,0 +1,36 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'rake'
11
+
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gem|
14
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
+ gem.name = "devise_sociable"
16
+ gem.homepage = "http://github.com/beno/devise_sociable"
17
+ gem.license = "MIT"
18
+ gem.summary = "This ensures that devise will update a last_seen flag on the model whenever you check if a user is authed."
19
+ gem.description = "This ensures that devise will update a last_seen flag on the model whenever you check if a user is authed."
20
+ gem.email = "michelbenevento@yahoo.com"
21
+ gem.authors = ["beno"]
22
+ gem.add_runtime_dependency 'warden'
23
+ gem.add_runtime_dependency 'devise'
24
+ gem.add_runtime_dependency 'rails', '>= 3.0.4'
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+
36
+ task :default => :test
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,79 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "devise_sociable"
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["beno"]
12
+ s.date = "2013-02-01"
13
+ s.description = "This ensures that devise will update a last_seen flag on the model whenever you check if a user is authed."
14
+ s.email = "michelbenevento@yahoo.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".bundle/config",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE.txt",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "devise_sociable.gemspec",
28
+ "lib/devise_sociable.rb",
29
+ "lib/devise_sociable/hooks/sociable.rb",
30
+ "lib/devise_sociable/model.rb",
31
+ "lib/devise_sociable/rails.rb",
32
+ "lib/devise_sociable/version.rb",
33
+ "lib/generators/devise_sociable/devise_sociable_generator.rb",
34
+ "lib/generators/devise_sociable/templates/migration.rb",
35
+ "test/support/helpers.rb",
36
+ "test/test_devise_sociable_cookie.rb",
37
+ "test/test_devise_sociable_server.rb",
38
+ "test/test_helper.rb"
39
+ ]
40
+ s.homepage = "http://github.com/beno/devise_sociable"
41
+ s.licenses = ["MIT"]
42
+ s.require_paths = ["lib"]
43
+ s.rubygems_version = "1.8.23"
44
+ s.summary = "This ensures that devise will update a last_seen flag on the model whenever you check if a user is authed."
45
+
46
+ if s.respond_to? :specification_version then
47
+ s.specification_version = 3
48
+
49
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
50
+ s.add_runtime_dependency(%q<rails>, ["~> 3.2.8"])
51
+ s.add_runtime_dependency(%q<warden>, ["~> 1.2.1"])
52
+ s.add_runtime_dependency(%q<devise>, ["~> 2.2.2"])
53
+ s.add_development_dependency(%q<sqlite3>, [">= 0"])
54
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
55
+ s.add_development_dependency(%q<bundler>, [">= 0"])
56
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
57
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
58
+ else
59
+ s.add_dependency(%q<rails>, ["~> 3.2.8"])
60
+ s.add_dependency(%q<warden>, ["~> 1.2.1"])
61
+ s.add_dependency(%q<devise>, ["~> 2.2.2"])
62
+ s.add_dependency(%q<sqlite3>, [">= 0"])
63
+ s.add_dependency(%q<shoulda>, [">= 0"])
64
+ s.add_dependency(%q<bundler>, [">= 0"])
65
+ s.add_dependency(%q<jeweler>, [">= 0"])
66
+ s.add_dependency(%q<simplecov>, [">= 0"])
67
+ end
68
+ else
69
+ s.add_dependency(%q<rails>, ["~> 3.2.8"])
70
+ s.add_dependency(%q<warden>, ["~> 1.2.1"])
71
+ s.add_dependency(%q<devise>, ["~> 2.2.2"])
72
+ s.add_dependency(%q<sqlite3>, [">= 0"])
73
+ s.add_dependency(%q<shoulda>, [">= 0"])
74
+ s.add_dependency(%q<bundler>, [">= 0"])
75
+ s.add_dependency(%q<jeweler>, [">= 0"])
76
+ s.add_dependency(%q<simplecov>, [">= 0"])
77
+ end
78
+ end
79
+
@@ -0,0 +1,15 @@
1
+ Warden::Manager.after_set_user do |record, warden, opts|
2
+ if record.class.uses_cookies?
3
+ record.update_attribute('last_request_at', Time.zone.now)
4
+ else
5
+ scope = opts[:scope]
6
+ warden.session(scope)['last_request_at'] = Time.zone.now
7
+ end
8
+ end
9
+
10
+ Warden::Manager.before_logout do |record, warden, opts|
11
+ record.deactivate!
12
+ if record.class.uses_cookies?
13
+ record.update_attribute('last_sign_out_at', Time.zone.now)
14
+ end
15
+ end
@@ -0,0 +1,76 @@
1
+ require 'devise_sociable/hooks/sociable'
2
+
3
+ module Devise
4
+ module Models
5
+ module Sociable
6
+
7
+ def self.included(base)
8
+ base.extend(ClassMethods)
9
+ end
10
+
11
+ def active?(last_access)
12
+ self.class.cached?(self) || self.class.actives(last_access).include?(self)
13
+ end
14
+
15
+ def deactivate!
16
+ self.class.remove_from_cache(self)
17
+ end
18
+
19
+ module ClassMethods
20
+
21
+ @@actives_cache = {}
22
+
23
+ def actives(last_access)
24
+ uses_cookies? ? actives_cookies(last_access) : actives_server(last_access)
25
+ end
26
+
27
+ def cached?(user)
28
+ @@actives_cache[user.id].present?
29
+ end
30
+
31
+ def cache_actives(last_access)
32
+ actives = {}
33
+ self.actives(last_access).each do |user|
34
+ actives[user.id] = user
35
+ end
36
+ @@actives_cache = actives
37
+ end
38
+
39
+ def remove_from_cache(user)
40
+ @@actives_cache.delete(user.id)
41
+ end
42
+
43
+ def uses_cookies?
44
+ session_store == ActionDispatch::Session::CookieStore
45
+ end
46
+
47
+ def actives_cache
48
+ @@actives_cache
49
+ end
50
+
51
+ private
52
+
53
+ def session_store
54
+ Rails.application.config.session_store
55
+ end
56
+
57
+ def actives_server(last_access)
58
+ session_class = session_store::Session
59
+ ids = session_class.where("updated_at >= ?", last_access).map do |session|
60
+ data = session.data['warden.user.user.session']
61
+ key = session.data['warden.user.user.key']
62
+ last = data && data['last_request_at']
63
+ key && (last >= last_access) ? key[1][0] : nil
64
+ end.compact
65
+ where(id: ids)
66
+ end
67
+
68
+ def actives_cookies(last_access)
69
+ User.where("last_request_at >= ? AND (last_sign_out_at IS NULL OR last_sign_out_at < last_request_at)", last_access)
70
+ end
71
+ end
72
+
73
+
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,6 @@
1
+ require 'devise_sociable'
2
+
3
+ module DeviseSociable
4
+ class Engine < ::Rails::Engine
5
+ end
6
+ end
@@ -0,0 +1,3 @@
1
+ module DeviseSociable
2
+ VERSION = "0.0.1".freeze
3
+ end
@@ -0,0 +1,12 @@
1
+ unless defined?(Devise)
2
+ require 'devise'
3
+ end
4
+ require 'devise_sociable'
5
+
6
+ Devise.add_module :sociable, :model => 'devise_sociable/model'
7
+
8
+ module DeviseSociable
9
+
10
+ end
11
+
12
+ require 'devise_sociable/rails'
@@ -0,0 +1,31 @@
1
+ require 'rails/generators/migration'
2
+
3
+ class DeviseSociableGenerator < Rails::Generators::NamedBase
4
+ include Rails::Generators::Migration
5
+
6
+ def self.source_root
7
+ @_devise_source_root ||= File.expand_path("../templates", __FILE__)
8
+ end
9
+
10
+ def self.orm_has_migration?
11
+ Rails::Generators.options[:rails][:orm] == :active_record
12
+ end
13
+
14
+ def self.next_migration_number(dirname)
15
+ if ActiveRecord::Base.timestamped_migrations
16
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
17
+ else
18
+ "%.3d" % (current_migration_number(dirname) + 1)
19
+ end
20
+ end
21
+
22
+ class_option :orm
23
+ class_option :migration, :type => :boolean, :default => orm_has_migration?
24
+
25
+
26
+ def create_migration_file
27
+ migration_template 'migration.rb', "db/migrate/devise_add_sociable_#{name.downcase}.rb"
28
+ end
29
+
30
+ protected
31
+ end
@@ -0,0 +1,11 @@
1
+ class DeviseSociable<%= table_name.camelize.singularize %> < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :<%= table_name %>, :last_request_at, :datetime
4
+ add_column :<%= table_name %>, :last_sign_out_at, :datetime
5
+ end
6
+
7
+ def self.down
8
+ remove_column :<%= table_name %>, :last_request_at
9
+ remove_column :<%= table_name %>, :last_sign_out_at
10
+ end
11
+ end
@@ -0,0 +1,37 @@
1
+ class ActiveSupport::TestCase
2
+
3
+ def setup_rails(store)
4
+ config = Struct.new(:session_store).new(store)
5
+ app = Struct.new(:config).new(config)
6
+ Rails.stubs(:application).returns(app)
7
+ end
8
+
9
+ def session_data(user, last_access)
10
+ {
11
+ "warden.user.user.session"=>{"last_request_at"=>last_access},
12
+ "warden.user.user.key"=>["User", [user.id], ""],
13
+ }
14
+ end
15
+
16
+ def valid_attributes(attributes={})
17
+ {session_id:(1000*rand).to_i, data:''}.update(attributes)
18
+ end
19
+
20
+ def create_session(user, last_access)
21
+ session = session_store::Session.create!(valid_attributes(data: session_data(user, last_access)))
22
+ session.update_attribute(:updated_at, last_access)
23
+ end
24
+
25
+ def create_anonymous_session
26
+ session_store::Session.create!(valid_attributes)
27
+ end
28
+
29
+ def create_user(atts = {})
30
+ User.create!({email: "user#{(rand*100).to_i}@example.com"}.update(atts))
31
+ end
32
+
33
+ def session_store
34
+ Rails.application.config.session_store
35
+ end
36
+
37
+ end
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+
4
+ class TestDeviseSociableCookies < ActiveSupport::TestCase
5
+
6
+
7
+ setup do
8
+ setup_rails(ActionDispatch::Session::CookieStore)
9
+ @user1 = create_user(last_request_at:8.minutes.ago)
10
+ @user2 = create_user(last_request_at:12.minutes.ago)
11
+ @user3 = create_user(last_request_at:8.minutes.ago, last_sign_out_at:5.minutes.ago)
12
+ end
13
+
14
+ teardown do
15
+ User.delete_all
16
+ end
17
+
18
+ test "should have active users" do
19
+ assert User.actives(10.minutes.ago) == [@user1], 'actives'
20
+ end
21
+
22
+ test "user can be (in)active" do
23
+ assert @user1.active?(10.minutes.ago) == true, 'user 1'
24
+ assert @user2.active?(10.minutes.ago) == false, 'user 2'
25
+ assert @user3.active?(10.minutes.ago) == false, 'user 3'
26
+ end
27
+
28
+ end
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+ class TestDeviseSociableServer < ActiveSupport::TestCase
4
+
5
+ setup do
6
+ setup_rails(ActiveRecord::SessionStore)
7
+ @user1 = create_user
8
+ @user2 = create_user
9
+ create_session(@user1, 12.minutes.ago)
10
+ create_session(@user2, 8.minutes.ago)
11
+ create_anonymous_session
12
+ end
13
+
14
+ teardown do
15
+ ActiveRecord::SessionStore::Session.delete_all
16
+ User.delete_all
17
+ end
18
+
19
+ test "server: should have active users" do
20
+ assert User.actives(10.minutes.ago) == [@user2]
21
+ end
22
+
23
+ test "server: user can be (in)active" do
24
+ assert @user1.active?(10.minutes.ago) == false
25
+ assert @user2.active?(10.minutes.ago) == true
26
+ end
27
+
28
+ end
@@ -0,0 +1,49 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+
11
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
12
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'support'))
13
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
14
+
15
+ require 'test/unit'
16
+ require 'active_record'
17
+ require 'mocha'
18
+ require 'helpers'
19
+
20
+ ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
21
+
22
+ class Migration < ActiveRecord::Migration
23
+ def up
24
+ create_table :sessions do |t|
25
+ t.string :session_id, :null => false
26
+ t.text :data
27
+ t.timestamps
28
+ end
29
+ create_table :users do |t|
30
+ t.string :email
31
+ t.string :last_request_at
32
+ t.string :last_sign_out_at
33
+ t.timestamps
34
+ end
35
+ end
36
+ end
37
+
38
+ Migration.new.up
39
+
40
+ require 'devise'
41
+ require 'devise/orm/active_record'
42
+
43
+ require 'devise_sociable'
44
+
45
+ class User < ActiveRecord::Base
46
+
47
+ devise :sociable
48
+ end
49
+
metadata ADDED
@@ -0,0 +1,196 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: devise_sociable
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - beno
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.8
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.8
30
+ - !ruby/object:Gem::Dependency
31
+ name: warden
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 1.2.1
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.2.1
46
+ - !ruby/object:Gem::Dependency
47
+ name: devise
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 2.2.2
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.2.2
62
+ - !ruby/object:Gem::Dependency
63
+ name: sqlite3
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: shoulda
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: bundler
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: jeweler
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: simplecov
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ description: This ensures that devise will update a last_seen flag on the model whenever
143
+ you check if a user is authed.
144
+ email: michelbenevento@yahoo.com
145
+ executables: []
146
+ extensions: []
147
+ extra_rdoc_files:
148
+ - LICENSE.txt
149
+ - README.rdoc
150
+ files:
151
+ - .bundle/config
152
+ - Gemfile
153
+ - Gemfile.lock
154
+ - LICENSE.txt
155
+ - README.rdoc
156
+ - Rakefile
157
+ - VERSION
158
+ - devise_sociable.gemspec
159
+ - lib/devise_sociable.rb
160
+ - lib/devise_sociable/hooks/sociable.rb
161
+ - lib/devise_sociable/model.rb
162
+ - lib/devise_sociable/rails.rb
163
+ - lib/devise_sociable/version.rb
164
+ - lib/generators/devise_sociable/devise_sociable_generator.rb
165
+ - lib/generators/devise_sociable/templates/migration.rb
166
+ - test/support/helpers.rb
167
+ - test/test_devise_sociable_cookie.rb
168
+ - test/test_devise_sociable_server.rb
169
+ - test/test_helper.rb
170
+ homepage: http://github.com/beno/devise_sociable
171
+ licenses:
172
+ - MIT
173
+ post_install_message:
174
+ rdoc_options: []
175
+ require_paths:
176
+ - lib
177
+ required_ruby_version: !ruby/object:Gem::Requirement
178
+ none: false
179
+ requirements:
180
+ - - ! '>='
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ required_rubygems_version: !ruby/object:Gem::Requirement
184
+ none: false
185
+ requirements:
186
+ - - ! '>='
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ requirements: []
190
+ rubyforge_project:
191
+ rubygems_version: 1.8.23
192
+ signing_key:
193
+ specification_version: 3
194
+ summary: This ensures that devise will update a last_seen flag on the model whenever
195
+ you check if a user is authed.
196
+ test_files: []