mongo_session_store-rails 7.0.0
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.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/.rspec +1 -0
- data/.rubocop.yml +44 -0
- data/.travis.yml +29 -0
- data/Gemfile +3 -0
- data/README.md +144 -0
- data/Rakefile +87 -0
- data/gemfiles/rails-4.0-mongo.gemfile +9 -0
- data/gemfiles/rails-4.0-mongoid.gemfile +9 -0
- data/gemfiles/rails-4.1-mongo.gemfile +9 -0
- data/gemfiles/rails-4.1-mongoid.gemfile +9 -0
- data/gemfiles/rails-4.2-mongo.gemfile +9 -0
- data/gemfiles/rails-4.2-mongoid.gemfile +9 -0
- data/lib/mongo_session_store-rails.rb +1 -0
- data/lib/mongo_session_store.rb +27 -0
- data/lib/mongo_session_store/mongo_store.rb +102 -0
- data/lib/mongo_session_store/mongo_store_base.rb +69 -0
- data/lib/mongo_session_store/mongoid_store.rb +47 -0
- data/lib/mongo_session_store/version.rb +3 -0
- data/mongo_session_store.gemspec +22 -0
- data/perf/benchmark.rb +99 -0
- data/spec/.rubocop.yml +4 -0
- data/spec/integrations/devise_spec.rb +109 -0
- data/spec/lib/mongo_session_store/mongo_store/session_spec.rb +250 -0
- data/spec/lib/mongo_session_store/mongo_store_base_spec.rb +269 -0
- data/spec/lib/mongo_session_store/mongo_store_spec.rb +13 -0
- data/spec/lib/mongo_session_store/mongoid_store/session_spec.rb +67 -0
- data/spec/lib/mongo_session_store/mongoid_store_spec.rb +13 -0
- data/spec/lib/mongo_session_store_spec.rb +64 -0
- data/spec/rails_helper.rb +19 -0
- data/spec/spec_helper.rb +44 -0
- data/spec/support/apps/rails_4.0_app/Rakefile +6 -0
- data/spec/support/apps/rails_4.0_app/app/controllers/application_controller.rb +5 -0
- data/spec/support/apps/rails_4.0_app/app/controllers/home_controller.rb +4 -0
- data/spec/support/apps/rails_4.0_app/app/models/user.rb +5 -0
- data/spec/support/apps/rails_4.0_app/app/views/home/index.html.erb +10 -0
- data/spec/support/apps/rails_4.0_app/app/views/layouts/application.html.erb +17 -0
- data/spec/support/apps/rails_4.0_app/bin/bundle +3 -0
- data/spec/support/apps/rails_4.0_app/bin/rails +4 -0
- data/spec/support/apps/rails_4.0_app/bin/rake +4 -0
- data/spec/support/apps/rails_4.0_app/config.ru +4 -0
- data/spec/support/apps/rails_4.0_app/config/application.rb +11 -0
- data/spec/support/apps/rails_4.0_app/config/boot.rb +4 -0
- data/spec/support/apps/rails_4.0_app/config/database.yml +11 -0
- data/spec/support/apps/rails_4.0_app/config/environment.rb +5 -0
- data/spec/support/apps/rails_4.0_app/config/environments/development.rb +12 -0
- data/spec/support/apps/rails_4.0_app/config/environments/test.rb +19 -0
- data/spec/support/apps/rails_4.0_app/config/initializers/devise.rb +254 -0
- data/spec/support/apps/rails_4.0_app/config/initializers/secret_token.rb +12 -0
- data/spec/support/apps/rails_4.0_app/config/initializers/session_store.rb +1 -0
- data/spec/support/apps/rails_4.0_app/config/locales/devise.en.yml +59 -0
- data/spec/support/apps/rails_4.0_app/config/locales/en.yml +23 -0
- data/spec/support/apps/rails_4.0_app/config/mongo.yml +11 -0
- data/spec/support/apps/rails_4.0_app/config/mongoid.yml +13 -0
- data/spec/support/apps/rails_4.0_app/config/routes.rb +4 -0
- data/spec/support/apps/rails_4.0_app/db/migrate/20140301171212_add_devise_users.rb +11 -0
- data/spec/support/apps/rails_4.0_app/db/schema.rb +25 -0
- data/spec/support/apps/rails_4.0_app/db/seeds.rb +7 -0
- data/spec/support/apps/rails_4.0_app/lib/assets/.keep +0 -0
- data/spec/support/apps/rails_4.0_app/lib/tasks/.keep +0 -0
- data/spec/support/apps/rails_4.0_app/log/.keep +0 -0
- data/spec/support/apps/rails_4.0_app/public/404.html +58 -0
- data/spec/support/apps/rails_4.0_app/public/422.html +58 -0
- data/spec/support/apps/rails_4.0_app/public/500.html +57 -0
- data/spec/support/apps/rails_4.0_app/public/favicon.ico +0 -0
- data/spec/support/apps/rails_4.0_app/public/robots.txt +5 -0
- data/spec/support/apps/rails_4.1_app/Rakefile +3 -0
- data/spec/support/apps/rails_4.1_app/app/controllers/application_controller.rb +5 -0
- data/spec/support/apps/rails_4.1_app/app/controllers/home_controller.rb +4 -0
- data/spec/support/apps/rails_4.1_app/app/models/user.rb +5 -0
- data/spec/support/apps/rails_4.1_app/app/views/home/index.html.erb +10 -0
- data/spec/support/apps/rails_4.1_app/app/views/layouts/application.html.erb +17 -0
- data/spec/support/apps/rails_4.1_app/bin/bundle +3 -0
- data/spec/support/apps/rails_4.1_app/bin/rails +4 -0
- data/spec/support/apps/rails_4.1_app/bin/rake +4 -0
- data/spec/support/apps/rails_4.1_app/config.ru +2 -0
- data/spec/support/apps/rails_4.1_app/config/application.rb +11 -0
- data/spec/support/apps/rails_4.1_app/config/boot.rb +4 -0
- data/spec/support/apps/rails_4.1_app/config/database.yml +11 -0
- data/spec/support/apps/rails_4.1_app/config/environment.rb +5 -0
- data/spec/support/apps/rails_4.1_app/config/environments/development.rb +12 -0
- data/spec/support/apps/rails_4.1_app/config/environments/test.rb +19 -0
- data/spec/support/apps/rails_4.1_app/config/initializers/devise.rb +254 -0
- data/spec/support/apps/rails_4.1_app/config/initializers/session_store.rb +1 -0
- data/spec/support/apps/rails_4.1_app/config/locales/devise.en.yml +59 -0
- data/spec/support/apps/rails_4.1_app/config/locales/en.yml +23 -0
- data/spec/support/apps/rails_4.1_app/config/mongo.yml +11 -0
- data/spec/support/apps/rails_4.1_app/config/mongoid.yml +13 -0
- data/spec/support/apps/rails_4.1_app/config/routes.rb +4 -0
- data/spec/support/apps/rails_4.1_app/config/secrets.yml +22 -0
- data/spec/support/apps/rails_4.1_app/db/migrate/20140301171212_add_devise_users.rb +11 -0
- data/spec/support/apps/rails_4.1_app/db/schema.rb +25 -0
- data/spec/support/apps/rails_4.1_app/db/seeds.rb +7 -0
- data/spec/support/apps/rails_4.1_app/lib/assets/.keep +0 -0
- data/spec/support/apps/rails_4.1_app/lib/tasks/.keep +0 -0
- data/spec/support/apps/rails_4.1_app/log/.keep +0 -0
- data/spec/support/apps/rails_4.1_app/public/404.html +67 -0
- data/spec/support/apps/rails_4.1_app/public/422.html +67 -0
- data/spec/support/apps/rails_4.1_app/public/500.html +66 -0
- data/spec/support/apps/rails_4.1_app/public/favicon.ico +0 -0
- data/spec/support/apps/rails_4.1_app/public/robots.txt +5 -0
- data/spec/support/apps/rails_4.2_app/Rakefile +2 -0
- data/spec/support/apps/rails_4.2_app/app/controllers/application_controller.rb +5 -0
- data/spec/support/apps/rails_4.2_app/app/controllers/home_controller.rb +4 -0
- data/spec/support/apps/rails_4.2_app/app/models/user.rb +5 -0
- data/spec/support/apps/rails_4.2_app/app/views/home/index.html.erb +10 -0
- data/spec/support/apps/rails_4.2_app/app/views/layouts/application.html.erb +15 -0
- data/spec/support/apps/rails_4.2_app/bin/bundle +3 -0
- data/spec/support/apps/rails_4.2_app/bin/rails +8 -0
- data/spec/support/apps/rails_4.2_app/bin/rake +4 -0
- data/spec/support/apps/rails_4.2_app/config.ru +4 -0
- data/spec/support/apps/rails_4.2_app/config/application.rb +11 -0
- data/spec/support/apps/rails_4.2_app/config/boot.rb +3 -0
- data/spec/support/apps/rails_4.2_app/config/database.yml +11 -0
- data/spec/support/apps/rails_4.2_app/config/environment.rb +5 -0
- data/spec/support/apps/rails_4.2_app/config/environments/development.rb +12 -0
- data/spec/support/apps/rails_4.2_app/config/environments/test.rb +19 -0
- data/spec/support/apps/rails_4.2_app/config/initializers/devise.rb +254 -0
- data/spec/support/apps/rails_4.2_app/config/initializers/session_store.rb +1 -0
- data/spec/support/apps/rails_4.2_app/config/locales/en.yml +23 -0
- data/spec/support/apps/rails_4.2_app/config/mongo.yml +11 -0
- data/spec/support/apps/rails_4.2_app/config/mongoid.yml +13 -0
- data/spec/support/apps/rails_4.2_app/config/routes.rb +4 -0
- data/spec/support/apps/rails_4.2_app/config/secrets.yml +22 -0
- data/spec/support/apps/rails_4.2_app/db/migrate/20140301171212_add_devise_users.rb +11 -0
- data/spec/support/apps/rails_4.2_app/db/schema.rb +25 -0
- data/spec/support/apps/rails_4.2_app/db/seeds.rb +7 -0
- data/spec/support/helpers/test_database_helper.rb +22 -0
- metadata +367 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: fae6c0b168c889f3ddc4cdde51ba533c186a3cc6
|
|
4
|
+
data.tar.gz: 6a7734c7e98396f397ca7e365a46639536bf056a
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 88a8e26cc229350d17101cdc2d9e7ca2b43b6b0ff37d076b7e14fadfe4b165da6a70724a32baccec3d36eea25195c31a2b5a5e28c259335d01b8554809915eab
|
|
7
|
+
data.tar.gz: 54ebfe5d1f4a1db26444f7d5748740d960a4e3828d79504e1b313ec08ffa79c2889c8a23ecdc2b88f07920e488a6ef5cbf58e4601a50310dbf2dd5dd70b87016
|
data/.gitignore
ADDED
data/.rspec
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
--color
|
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
AllCops:
|
|
2
|
+
TargetRubyVersion: 2.0
|
|
3
|
+
Include:
|
|
4
|
+
- "Gemfile"
|
|
5
|
+
Exclude:
|
|
6
|
+
- "lib/mongo_session_store-rails.rb"
|
|
7
|
+
- "gemfiles/vendor/**/*"
|
|
8
|
+
- "perf/benchmark.rb"
|
|
9
|
+
- "spec/support/apps/**/*"
|
|
10
|
+
- "tmp/**/*"
|
|
11
|
+
- "vendor/**/*"
|
|
12
|
+
DisplayCopNames: true
|
|
13
|
+
UseCache: true
|
|
14
|
+
CacheRootDirectory: ./tmp
|
|
15
|
+
|
|
16
|
+
Style/Documentation:
|
|
17
|
+
Enabled: false
|
|
18
|
+
|
|
19
|
+
Style/StringLiterals:
|
|
20
|
+
EnforcedStyle: double_quotes
|
|
21
|
+
|
|
22
|
+
Style/StringLiteralsInInterpolation:
|
|
23
|
+
EnforcedStyle: double_quotes
|
|
24
|
+
|
|
25
|
+
Style/AlignParameters:
|
|
26
|
+
EnforcedStyle: with_fixed_indentation
|
|
27
|
+
|
|
28
|
+
Style/MultilineOperationIndentation:
|
|
29
|
+
EnforcedStyle: indented
|
|
30
|
+
|
|
31
|
+
Style/AlignHash:
|
|
32
|
+
EnforcedLastArgumentHashStyle: ignore_implicit
|
|
33
|
+
|
|
34
|
+
Style/HashSyntax:
|
|
35
|
+
EnforcedStyle: hash_rockets
|
|
36
|
+
|
|
37
|
+
Style/IndentArray:
|
|
38
|
+
EnforcedStyle: consistent
|
|
39
|
+
|
|
40
|
+
Style/FormatString:
|
|
41
|
+
EnforcedStyle: sprintf
|
|
42
|
+
|
|
43
|
+
Metrics/MethodLength:
|
|
44
|
+
Max: 15
|
data/.travis.yml
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
language: ruby
|
|
2
|
+
cache: bundler
|
|
3
|
+
rvm:
|
|
4
|
+
- "2.0.0"
|
|
5
|
+
- "2.1.0"
|
|
6
|
+
- "2.2.0"
|
|
7
|
+
- "2.3.0"
|
|
8
|
+
gemfile:
|
|
9
|
+
- "gemfiles/rails-4.0-mongo.gemfile"
|
|
10
|
+
- "gemfiles/rails-4.0-mongoid.gemfile"
|
|
11
|
+
- "gemfiles/rails-4.1-mongo.gemfile"
|
|
12
|
+
- "gemfiles/rails-4.1-mongoid.gemfile"
|
|
13
|
+
- "gemfiles/rails-4.2-mongo.gemfile"
|
|
14
|
+
- "gemfiles/rails-4.2-mongoid.gemfile"
|
|
15
|
+
matrix:
|
|
16
|
+
fast_finish: true
|
|
17
|
+
include:
|
|
18
|
+
- rvm: "2.3.0"
|
|
19
|
+
gemfile: "gemfiles/rails-4.2-mongo.gemfile"
|
|
20
|
+
script: "bundle exec rubocop"
|
|
21
|
+
|
|
22
|
+
before_script:
|
|
23
|
+
- wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.1.tgz -O /tmp/mongodb.tgz
|
|
24
|
+
- tar -xvf /tmp/mongodb.tgz
|
|
25
|
+
- mkdir /tmp/data
|
|
26
|
+
- ${PWD}/mongodb-linux-x86_64-3.0.1/bin/mongod --dbpath /tmp/data --bind_ip 127.0.0.1 &> /dev/null &
|
|
27
|
+
|
|
28
|
+
script:
|
|
29
|
+
- "bundle exec rake test"
|
data/Gemfile
ADDED
data/README.md
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# MongoSessionStore
|
|
2
|
+
|
|
3
|
+
[](https://travis-ci.org/appsignal/mongo_session_store) [](http://badge.fury.io/rb/mongo_session_store-rails)
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
MongoSessionStore is a Rails-compatible session store for Mongo using either
|
|
8
|
+
Mongoid or the Ruby MongoDB driver. It also allows for custom Mongo session
|
|
9
|
+
store that works with any (or no!) Mongo ODM.
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
MongoSessionStore is compatible with Rails 4.0 through 4.2.
|
|
14
|
+
|
|
15
|
+
In your Gemfile:
|
|
16
|
+
|
|
17
|
+
```ruby
|
|
18
|
+
gem "mongoid"
|
|
19
|
+
# or gem "mongo"
|
|
20
|
+
gem "mongo_session_store-rails"
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
In the session_store initializer:
|
|
24
|
+
|
|
25
|
+
```ruby
|
|
26
|
+
# config/initializers/session_store.rb
|
|
27
|
+
|
|
28
|
+
# Mongoid
|
|
29
|
+
MyApp::Application.config.session_store :mongoid_store
|
|
30
|
+
|
|
31
|
+
# anything else
|
|
32
|
+
MongoStore::Session.database = Mongo::Client.new(["127.0.0.1:27017"], database: "my_app_development")
|
|
33
|
+
MyApp::Application.config.session_store :mongo_store
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
By default, the sessions will be stored in the "sessions" collection in
|
|
37
|
+
MongoDB. If you want to use a different collection, you can set that in the
|
|
38
|
+
initializer:
|
|
39
|
+
|
|
40
|
+
```ruby
|
|
41
|
+
# config/initializers/session_store.rb
|
|
42
|
+
MongoSessionStore.collection_name = "client_sessions"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
And if you want to query your sessions:
|
|
46
|
+
|
|
47
|
+
```ruby
|
|
48
|
+
# Mongoid
|
|
49
|
+
MongoidStore::Session.where(:updated_at.gt => 2.days.ago)
|
|
50
|
+
|
|
51
|
+
# Plain old Mongo
|
|
52
|
+
MongoStore::Session.where('updated_at' => { '$gt' => 2.days.ago })
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Changelog
|
|
56
|
+
|
|
57
|
+
7.0.0 Drops explicit MongoMapper support, but can be readded manually with a
|
|
58
|
+
custom session class. Drops explicit JRuby support. Moved session data packing
|
|
59
|
+
and unpacking to the session models themselves. Adds more tests to internals.
|
|
60
|
+
|
|
61
|
+
6.0.0 supports the Mongo Ruby Driver 2.0 for the generic MongoStore. The other
|
|
62
|
+
stores are unchanged. Tests added for Rails 4.2. Tests against MongoDB 3.0.1 on
|
|
63
|
+
Travis CI.
|
|
64
|
+
|
|
65
|
+
5.1.0 generates a new session ID when a session is not found. Previously, when
|
|
66
|
+
a session ID is provided in the request but the session was not found (because
|
|
67
|
+
for example, it was removed from Mongo by a sweeper job) a new session with the
|
|
68
|
+
provided ID would be created. This would cause a write error if two
|
|
69
|
+
simultaneous requests both create a session with the same ID and both try to
|
|
70
|
+
insert a new document with that ID.
|
|
71
|
+
|
|
72
|
+
5.0.1 suppresses a warning from Mongoid 4 when setting the _id field type to
|
|
73
|
+
String.
|
|
74
|
+
|
|
75
|
+
5.0.0 introduces Rails 4.0 and 4.1 support and Mongoid 4 support alongside the
|
|
76
|
+
existing Rails 3.1, 3.2, and Mongoid 3 support. Ruby 1.8.7 support is dropped.
|
|
77
|
+
The database is no longer set automatically for the MongoStore when MongoMapper
|
|
78
|
+
or Mongoid is present. You have to set the database manually whenever you
|
|
79
|
+
choose to use the vanilla MongoStore.
|
|
80
|
+
|
|
81
|
+
The last version to support Ruby 1.8.7 is [version
|
|
82
|
+
4.1.1](https://rubygems.org/gems/mongo_session_store-rails3/versions/4.1.1).
|
|
83
|
+
|
|
84
|
+
The last version to support Rails 3.0 or Mongoid 2 is [version
|
|
85
|
+
3.0.6](https://rubygems.org/gems/mongo_session_store-rails3/versions/3.0.6).
|
|
86
|
+
|
|
87
|
+
## Development
|
|
88
|
+
|
|
89
|
+
To run all the tests:
|
|
90
|
+
|
|
91
|
+
```sh
|
|
92
|
+
rake
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
To run the tests for a specific store:
|
|
96
|
+
|
|
97
|
+
```sh
|
|
98
|
+
BUNDLE_GEMFILE=gemfiles/rails-4.0-mongo.gemfile bundle exec rake
|
|
99
|
+
BUNDLE_GEMFILE=gemfiles/rails-4.0-mongoid.gemfile bundle exec rake
|
|
100
|
+
BUNDLE_GEMFILE=gemfiles/rails-4.1-mongo.gemfile bundle exec rake
|
|
101
|
+
BUNDLE_GEMFILE=gemfiles/rails-4.1-mongoid.gemfile bundle exec rake
|
|
102
|
+
BUNDLE_GEMFILE=gemfiles/rails-4.2-mongo.gemfile bundle exec rake
|
|
103
|
+
BUNDLE_GEMFILE=gemfiles/rails-4.2-mongoid.gemfile bundle exec rake
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Previous contributors
|
|
107
|
+
|
|
108
|
+
MongoSessionStore started as a fork of the DataMapper session store, modified
|
|
109
|
+
to work with MongoMapper and Mongoid. Much thanks to all the previous
|
|
110
|
+
contributors:
|
|
111
|
+
|
|
112
|
+
* Nicolas Mérouze
|
|
113
|
+
* Chris Brickley
|
|
114
|
+
* Tony Pitale
|
|
115
|
+
* Nicola Racco
|
|
116
|
+
* Matt Powell
|
|
117
|
+
* Ryan Fitzgerald
|
|
118
|
+
* Brian Hempel
|
|
119
|
+
|
|
120
|
+
## License
|
|
121
|
+
|
|
122
|
+
Copyright (c) 2016 Tom de Bruijn
|
|
123
|
+
Copyright (c) 2011-2015 Brian Hempel
|
|
124
|
+
Copyright (c) 2010 Nicolas Mérouze
|
|
125
|
+
Copyright (c) 2009 Chris Brickley
|
|
126
|
+
Copyright (c) 2009 Tony Pitale
|
|
127
|
+
|
|
128
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
129
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
130
|
+
the Software without restriction, including without limitation the rights to
|
|
131
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
132
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
|
133
|
+
so, subject to the following conditions:
|
|
134
|
+
|
|
135
|
+
The above copyright notice and this permission notice shall be included in all
|
|
136
|
+
copies or substantial portions of the Software.
|
|
137
|
+
|
|
138
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
139
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
140
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
141
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
142
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
143
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
144
|
+
SOFTWARE.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
require "rspec/core/rake_task"
|
|
2
|
+
|
|
3
|
+
task :mongo_prepare do
|
|
4
|
+
# Wait for mongod to start on Travis.
|
|
5
|
+
# From the Mongo Ruby Driver gem.
|
|
6
|
+
if ENV["TRAVIS"]
|
|
7
|
+
require "mongo"
|
|
8
|
+
client = Mongo::Client.new(["127.0.0.1:27017"])
|
|
9
|
+
begin
|
|
10
|
+
puts "Waiting for MongoDB..."
|
|
11
|
+
client.command("ismaster" => 1)
|
|
12
|
+
rescue Mongo::Error::NoServerAvailable => e
|
|
13
|
+
sleep(2)
|
|
14
|
+
# 1 Retry
|
|
15
|
+
puts "Waiting for MongoDB..."
|
|
16
|
+
client.cluster.scan!
|
|
17
|
+
client.command(Mongo::Error::NoServerAvailable)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
desc "Run the mongo_session_store gem test suite."
|
|
23
|
+
RSpec::Core::RakeTask.new :test => :mongo_prepare
|
|
24
|
+
|
|
25
|
+
task :release do
|
|
26
|
+
GEMSPEC_NAME = "mongo_session_store"
|
|
27
|
+
GEM_NAME = "mongo_session_store-rails"
|
|
28
|
+
VERSION_FILE = "lib/mongo_session_store/version.rb"
|
|
29
|
+
|
|
30
|
+
def reload_version
|
|
31
|
+
if defined?(MongoSessionStore::VERSION)
|
|
32
|
+
MongoSessionStore.send(:remove_const, :VERSION)
|
|
33
|
+
end
|
|
34
|
+
load File.expand_path(VERSION_FILE)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
raise "$EDITOR should be set" unless ENV["EDITOR"]
|
|
38
|
+
|
|
39
|
+
def build_and_push_gem
|
|
40
|
+
puts '# Building gem'
|
|
41
|
+
puts `gem build #{GEMSPEC_NAME}.gemspec`
|
|
42
|
+
puts '# Publishing Gem'
|
|
43
|
+
puts `gem push #{GEM_NAME}-#{gem_version}.gem`
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def update_repo
|
|
47
|
+
puts `git commit -am "Bump to #{version} [ci skip]"`
|
|
48
|
+
begin
|
|
49
|
+
puts `git tag #{version}`
|
|
50
|
+
puts `git push origin #{version}`
|
|
51
|
+
puts `git push origin master`
|
|
52
|
+
rescue
|
|
53
|
+
raise %(Tag: "#{version}" already exists)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def changes
|
|
58
|
+
git_status_to_array(`git status -s -u`)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def gem_version
|
|
62
|
+
MongoSessionStore::VERSION
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def version
|
|
66
|
+
@version ||= "v" << gem_version
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def git_status_to_array(changes)
|
|
70
|
+
changes.split("\n").map { |change| change.gsub(/^.. /, "") }
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
raise "Branch should hold no uncommitted file change)" unless changes.empty?
|
|
74
|
+
|
|
75
|
+
reload_version
|
|
76
|
+
|
|
77
|
+
system("$EDITOR #{VERSION_FILE}")
|
|
78
|
+
if changes.include?(VERSION_FILE)
|
|
79
|
+
reload_version
|
|
80
|
+
build_and_push_gem
|
|
81
|
+
update_repo
|
|
82
|
+
else
|
|
83
|
+
raise "Actually change the version in: #{VERSION_FILE}"
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
task :default => :test
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "mongo_session_store"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module MongoSessionStore
|
|
2
|
+
def self.collection_name
|
|
3
|
+
@collection_name
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def self.collection_name=(name)
|
|
7
|
+
@collection_name = name
|
|
8
|
+
|
|
9
|
+
if defined?(MongoStore::Session)
|
|
10
|
+
MongoStore::Session.reset_collection
|
|
11
|
+
elsif defined?(MongoidStore::Session)
|
|
12
|
+
MongoidStore::Session.store_in \
|
|
13
|
+
:collection => MongoSessionStore.collection_name
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
@collection_name
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# default collection name for all the stores
|
|
20
|
+
self.collection_name = "sessions"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
if defined?(Mongoid)
|
|
24
|
+
require "mongo_session_store/mongoid_store"
|
|
25
|
+
elsif defined?(Mongo)
|
|
26
|
+
require "mongo_session_store/mongo_store"
|
|
27
|
+
end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
require "mongo_session_store/mongo_store_base"
|
|
2
|
+
|
|
3
|
+
module ActionDispatch
|
|
4
|
+
module Session
|
|
5
|
+
class MongoStore < MongoStoreBase
|
|
6
|
+
class Session
|
|
7
|
+
class << self
|
|
8
|
+
attr_writer :database
|
|
9
|
+
|
|
10
|
+
def load(options = {})
|
|
11
|
+
options[:data] = options["data"] if options["data"]
|
|
12
|
+
options[:data] =
|
|
13
|
+
if options[:data]
|
|
14
|
+
unpack(options[:data])
|
|
15
|
+
else
|
|
16
|
+
{}
|
|
17
|
+
end
|
|
18
|
+
new(options)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def where(query = {})
|
|
22
|
+
collection.find(query).map { |doc| load(doc) }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def database
|
|
26
|
+
return @database if @database
|
|
27
|
+
|
|
28
|
+
raise NoMongoClientError, "MongoStore needs a database, e.g. "\
|
|
29
|
+
"MongoStore::Session.database = Mongo::Client.new("\
|
|
30
|
+
"[\"127.0.0.1:27017\"], database: \"my_app_development\")"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def collection
|
|
34
|
+
@collection ||= database[MongoSessionStore.collection_name]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def reset_collection
|
|
38
|
+
@collection = nil
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
def unpack(packed)
|
|
44
|
+
return unless packed
|
|
45
|
+
data = packed.respond_to?(:data) ? packed.data : packed.to_s
|
|
46
|
+
Marshal.load(StringIO.new(data))
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
class NoMongoClientError < StandardError; end
|
|
51
|
+
|
|
52
|
+
attr_accessor :_id, :data, :created_at, :updated_at
|
|
53
|
+
|
|
54
|
+
def initialize(options = {})
|
|
55
|
+
@_id = options[:_id]
|
|
56
|
+
@data = options[:data]
|
|
57
|
+
@created_at = options[:created_at]
|
|
58
|
+
@updated_at = options[:updated_at]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def save
|
|
62
|
+
@created_at ||= Time.now.utc
|
|
63
|
+
@updated_at = Time.now.utc
|
|
64
|
+
|
|
65
|
+
scope.replace_one(attributes_for_save, :upsert => true)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def destroy
|
|
69
|
+
scope.delete_one
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
private
|
|
73
|
+
|
|
74
|
+
def collection
|
|
75
|
+
self.class.collection
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def attributes_for_save
|
|
79
|
+
{
|
|
80
|
+
:data => pack(data),
|
|
81
|
+
:created_at => created_at,
|
|
82
|
+
:updated_at => updated_at
|
|
83
|
+
}
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def scope
|
|
87
|
+
collection.find(:_id => _id)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def pack(data)
|
|
91
|
+
BSON::Binary.new(Marshal.dump(data || {}), :generic)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def unpack(packed)
|
|
95
|
+
self.class.unpack(packed)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
MongoStore = ActionDispatch::Session::MongoStore
|