riak-sessions 0.9.0.beta → 0.9.0.beta2
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/Gemfile +8 -7
- data/Rakefile +2 -2
- data/lib/riak/session_store.rb +40 -15
- data/lib/ripple/session_store.rb +1 -1
- data/riak-sessions.gemspec +12 -13
- data/spec/riak_session_store_spec.rb +14 -14
- data/spec/support/ripple_session_support.rb +2 -0
- data/spec/support/rspec-rails-neuter.rb +2 -1
- metadata +7 -52
data/Gemfile
CHANGED
@@ -1,17 +1,18 @@
|
|
1
|
-
source
|
1
|
+
source :rubygems
|
2
2
|
|
3
3
|
gem 'bundler'
|
4
4
|
gem 'riak-client', :path => "../riak-client"
|
5
5
|
gem 'rack'
|
6
6
|
gem 'rails', '~>3.0.0'
|
7
|
-
gem 'rspec', '~>2.
|
8
|
-
gem 'rspec-rails', '~>2.
|
7
|
+
gem 'rspec', '~>2.4.0'
|
8
|
+
gem 'rspec-rails', '~>2.4.0'
|
9
9
|
gem 'rake'
|
10
10
|
|
11
|
-
|
11
|
+
platforms :mri do
|
12
|
+
gem 'yajl-ruby'
|
13
|
+
end
|
14
|
+
|
15
|
+
platforms :jruby do
|
12
16
|
gem 'json'
|
13
17
|
gem 'jruby-openssl'
|
14
|
-
else
|
15
|
-
gem 'curb', '>0.6'
|
16
|
-
gem 'yajl-ruby'
|
17
18
|
end
|
data/Rakefile
CHANGED
@@ -11,8 +11,8 @@ gemspec = Gem::Specification.new do |gem|
|
|
11
11
|
gem.email = "sean@basho.com"
|
12
12
|
gem.homepage = "http://seancribbs.github.com/ripple"
|
13
13
|
gem.authors = ["Sean Cribbs"]
|
14
|
-
gem.add_development_dependency "rspec", "~>2.
|
15
|
-
gem.add_development_dependency "rspec-rails", "~>2.
|
14
|
+
gem.add_development_dependency "rspec", "~>2.4.0"
|
15
|
+
gem.add_development_dependency "rspec-rails", "~>2.4.0"
|
16
16
|
gem.add_development_dependency "yajl-ruby"
|
17
17
|
gem.add_development_dependency "rails", "~>3.0.0"
|
18
18
|
gem.add_development_dependency "rake"
|
data/lib/riak/session_store.rb
CHANGED
@@ -28,15 +28,15 @@ module Riak
|
|
28
28
|
# For configuration options, see #initialize.
|
29
29
|
class SessionStore < Rack::Session::Abstract::ID
|
30
30
|
DEFAULT_OPTIONS = Rack::Session::Abstract::ID::DEFAULT_OPTIONS.merge \
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
31
|
+
:host => "127.0.0.1",
|
32
|
+
:port => 8098,
|
33
|
+
:bucket => "_sessions",
|
34
|
+
:r => 1,
|
35
|
+
:w => 1,
|
36
|
+
:dw => 0,
|
37
|
+
:rw => 1,
|
38
|
+
:n_val => 2,
|
39
|
+
:last_write_wins => false
|
40
40
|
|
41
41
|
|
42
42
|
attr_reader :bucket
|
@@ -68,13 +68,16 @@ module Riak
|
|
68
68
|
|
69
69
|
private
|
70
70
|
def get_session(env, session_id)
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
71
|
+
if session_id && robject = (bucket.get(session_id) rescue nil)
|
72
|
+
if stale?(robject)
|
73
|
+
bucket.delete(session_id)
|
74
|
+
fresh_session
|
75
|
+
else
|
76
|
+
[session_id, robject.data]
|
77
|
+
end
|
78
|
+
else
|
79
|
+
fresh_session
|
76
80
|
end
|
77
|
-
[session_id, robject.data]
|
78
81
|
end
|
79
82
|
|
80
83
|
def set_session(env, session_id, session, options)
|
@@ -84,6 +87,7 @@ module Riak
|
|
84
87
|
session_id = generate_sid
|
85
88
|
end
|
86
89
|
robject = bucket.get_or_new(session_id)
|
90
|
+
robject.meta['expire-after'] = (Time.now + options[:expire_after]).httpdate if options[:expire_after]
|
87
91
|
robject.data = session
|
88
92
|
robject.store
|
89
93
|
session_id
|
@@ -91,5 +95,26 @@ module Riak
|
|
91
95
|
env['rack.errors'].puts $!.inspect
|
92
96
|
false
|
93
97
|
end
|
98
|
+
|
99
|
+
def destroy_session(env, sid, options)
|
100
|
+
bucket.delete(sid)
|
101
|
+
generate_sid unless options[:drop]
|
102
|
+
end
|
103
|
+
|
104
|
+
def stale?(robject)
|
105
|
+
if robject.meta['expire-after'] && threshold = (Time.httpdate(robject.meta['expire-after'].first) rescue nil)
|
106
|
+
threshold < Time.now
|
107
|
+
else
|
108
|
+
false
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def fresh_session
|
113
|
+
session_id, robject = generate_sid, bucket.new
|
114
|
+
robject.key = session_id
|
115
|
+
robject.data = {}
|
116
|
+
robject.store
|
117
|
+
[session_id, robject.data]
|
118
|
+
end
|
94
119
|
end
|
95
120
|
end
|
data/lib/ripple/session_store.rb
CHANGED
data/riak-sessions.gemspec
CHANGED
@@ -2,48 +2,47 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{riak-sessions}
|
5
|
-
s.version = "0.9.0.
|
5
|
+
s.version = "0.9.0.beta2"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Sean Cribbs"]
|
9
|
-
s.date = %q{
|
9
|
+
s.date = %q{2011-03-28}
|
10
10
|
s.description = %q{riak-sessions is a session store backed by Riak, the distributed database by Basho. It includes session implementations for both Rack and Rails 3.}
|
11
11
|
s.email = %q{sean@basho.com}
|
12
12
|
s.files = ["Gemfile", "lib/riak/session_store.rb", "lib/riak-sessions.rb", "lib/ripple/session_store.rb", "Rakefile", "riak-sessions.gemspec", "spec/fixtures/session_autoload_test/session_autoload_test/foo.rb", "spec/riak_session_store_spec.rb", "spec/ripple_session_store_spec.rb", "spec/spec_helper.rb", "spec/support/ripple_session_support.rb", "spec/support/rspec-rails-neuter.rb", "spec/support/test_server.rb", "spec/support/test_server.yml.example"]
|
13
13
|
s.homepage = %q{http://seancribbs.github.com/ripple}
|
14
14
|
s.require_paths = ["lib"]
|
15
|
-
s.rubygems_version = %q{1.
|
15
|
+
s.rubygems_version = %q{1.6.1}
|
16
16
|
s.summary = %q{riak-sessions is a session store backed by Riak, the distributed database by Basho.}
|
17
17
|
s.test_files = ["spec/riak_session_store_spec.rb", "spec/ripple_session_store_spec.rb"]
|
18
18
|
|
19
19
|
if s.respond_to? :specification_version then
|
20
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
21
20
|
s.specification_version = 3
|
22
21
|
|
23
22
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
24
|
-
s.add_development_dependency(%q<rspec>, ["~> 2.
|
25
|
-
s.add_development_dependency(%q<rspec-rails>, ["~> 2.
|
23
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.4.0"])
|
24
|
+
s.add_development_dependency(%q<rspec-rails>, ["~> 2.4.0"])
|
26
25
|
s.add_development_dependency(%q<yajl-ruby>, [">= 0"])
|
27
26
|
s.add_development_dependency(%q<rails>, ["~> 3.0.0"])
|
28
27
|
s.add_development_dependency(%q<rake>, [">= 0"])
|
29
|
-
s.add_runtime_dependency(%q<riak-client>, ["~> 0.9.0.
|
28
|
+
s.add_runtime_dependency(%q<riak-client>, ["~> 0.9.0.beta2"])
|
30
29
|
s.add_runtime_dependency(%q<rack>, [">= 1.0"])
|
31
30
|
else
|
32
|
-
s.add_dependency(%q<rspec>, ["~> 2.
|
33
|
-
s.add_dependency(%q<rspec-rails>, ["~> 2.
|
31
|
+
s.add_dependency(%q<rspec>, ["~> 2.4.0"])
|
32
|
+
s.add_dependency(%q<rspec-rails>, ["~> 2.4.0"])
|
34
33
|
s.add_dependency(%q<yajl-ruby>, [">= 0"])
|
35
34
|
s.add_dependency(%q<rails>, ["~> 3.0.0"])
|
36
35
|
s.add_dependency(%q<rake>, [">= 0"])
|
37
|
-
s.add_dependency(%q<riak-client>, ["~> 0.9.0.
|
36
|
+
s.add_dependency(%q<riak-client>, ["~> 0.9.0.beta2"])
|
38
37
|
s.add_dependency(%q<rack>, [">= 1.0"])
|
39
38
|
end
|
40
39
|
else
|
41
|
-
s.add_dependency(%q<rspec>, ["~> 2.
|
42
|
-
s.add_dependency(%q<rspec-rails>, ["~> 2.
|
40
|
+
s.add_dependency(%q<rspec>, ["~> 2.4.0"])
|
41
|
+
s.add_dependency(%q<rspec-rails>, ["~> 2.4.0"])
|
43
42
|
s.add_dependency(%q<yajl-ruby>, [">= 0"])
|
44
43
|
s.add_dependency(%q<rails>, ["~> 3.0.0"])
|
45
44
|
s.add_dependency(%q<rake>, [">= 0"])
|
46
|
-
s.add_dependency(%q<riak-client>, ["~> 0.9.0.
|
45
|
+
s.add_dependency(%q<riak-client>, ["~> 0.9.0.beta2"])
|
47
46
|
s.add_dependency(%q<rack>, [">= 1.0"])
|
48
47
|
end
|
49
48
|
end
|
@@ -65,20 +65,20 @@ describe Riak::SessionStore do
|
|
65
65
|
cookie.should_not match(/#{bad_cookie}/)
|
66
66
|
end
|
67
67
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
68
|
+
it "maintains freshness" do
|
69
|
+
pool = Riak::SessionStore.new(incrementor, :expire_after => 3)
|
70
|
+
res = Rack::MockRequest.new(pool).get('/')
|
71
|
+
res.body.should include '"counter"=>1'
|
72
|
+
cookie = res["Set-Cookie"]
|
73
|
+
res = Rack::MockRequest.new(pool).get('/', "HTTP_COOKIE" => cookie)
|
74
|
+
res["Set-Cookie"].should == cookie
|
75
|
+
res.body.should include '"counter"=>2'
|
76
|
+
puts 'Sleeping to expire session' if $DEBUG
|
77
|
+
sleep 4
|
78
|
+
res = Rack::MockRequest.new(pool).get('/', "HTTP_COOKIE" => cookie)
|
79
|
+
res["Set-Cookie"].should_not == cookie
|
80
|
+
res.body.should include '"counter"=>1'
|
81
|
+
end
|
82
82
|
|
83
83
|
it "deletes cookies with :drop option" do
|
84
84
|
pool = Riak::SessionStore.new(incrementor)
|
@@ -12,7 +12,9 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
require 'action_mailer' # Bah, fails on MailerExampleGroup
|
15
16
|
require 'support/rspec-rails-neuter'
|
17
|
+
require 'rspec/rails/example/rails_example_group'
|
16
18
|
require 'rspec/rails/example/request_example_group'
|
17
19
|
|
18
20
|
class RoutedRackApp
|
@@ -12,12 +12,13 @@ module RSpec
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
+
require 'rspec/core'
|
16
|
+
|
15
17
|
RSpec::configure do |c|
|
16
18
|
c.backtrace_clean_patterns << /vendor\//
|
17
19
|
c.backtrace_clean_patterns << /lib\/rspec\/rails/
|
18
20
|
end
|
19
21
|
|
20
|
-
require 'rspec/core'
|
21
22
|
require 'rspec/rails/extensions'
|
22
23
|
require 'rspec/rails/view_rendering'
|
23
24
|
require 'rspec/rails/adapters'
|
metadata
CHANGED
@@ -1,14 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riak-sessions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 9
|
9
|
-
- 0
|
10
|
-
- beta
|
11
|
-
version: 0.9.0.beta
|
4
|
+
prerelease: 6
|
5
|
+
version: 0.9.0.beta2
|
12
6
|
platform: ruby
|
13
7
|
authors:
|
14
8
|
- Sean Cribbs
|
@@ -16,7 +10,7 @@ autorequire:
|
|
16
10
|
bindir: bin
|
17
11
|
cert_chain: []
|
18
12
|
|
19
|
-
date:
|
13
|
+
date: 2011-03-28 00:00:00 -04:00
|
20
14
|
default_executable:
|
21
15
|
dependencies:
|
22
16
|
- !ruby/object:Gem::Dependency
|
@@ -27,12 +21,7 @@ dependencies:
|
|
27
21
|
requirements:
|
28
22
|
- - ~>
|
29
23
|
- !ruby/object:Gem::Version
|
30
|
-
|
31
|
-
segments:
|
32
|
-
- 2
|
33
|
-
- 0
|
34
|
-
- 0
|
35
|
-
version: 2.0.0
|
24
|
+
version: 2.4.0
|
36
25
|
type: :development
|
37
26
|
version_requirements: *id001
|
38
27
|
- !ruby/object:Gem::Dependency
|
@@ -43,12 +32,7 @@ dependencies:
|
|
43
32
|
requirements:
|
44
33
|
- - ~>
|
45
34
|
- !ruby/object:Gem::Version
|
46
|
-
|
47
|
-
segments:
|
48
|
-
- 2
|
49
|
-
- 0
|
50
|
-
- 0
|
51
|
-
version: 2.0.0
|
35
|
+
version: 2.4.0
|
52
36
|
type: :development
|
53
37
|
version_requirements: *id002
|
54
38
|
- !ruby/object:Gem::Dependency
|
@@ -59,9 +43,6 @@ dependencies:
|
|
59
43
|
requirements:
|
60
44
|
- - ">="
|
61
45
|
- !ruby/object:Gem::Version
|
62
|
-
hash: 3
|
63
|
-
segments:
|
64
|
-
- 0
|
65
46
|
version: "0"
|
66
47
|
type: :development
|
67
48
|
version_requirements: *id003
|
@@ -73,11 +54,6 @@ dependencies:
|
|
73
54
|
requirements:
|
74
55
|
- - ~>
|
75
56
|
- !ruby/object:Gem::Version
|
76
|
-
hash: 7
|
77
|
-
segments:
|
78
|
-
- 3
|
79
|
-
- 0
|
80
|
-
- 0
|
81
57
|
version: 3.0.0
|
82
58
|
type: :development
|
83
59
|
version_requirements: *id004
|
@@ -89,9 +65,6 @@ dependencies:
|
|
89
65
|
requirements:
|
90
66
|
- - ">="
|
91
67
|
- !ruby/object:Gem::Version
|
92
|
-
hash: 3
|
93
|
-
segments:
|
94
|
-
- 0
|
95
68
|
version: "0"
|
96
69
|
type: :development
|
97
70
|
version_requirements: *id005
|
@@ -103,13 +76,7 @@ dependencies:
|
|
103
76
|
requirements:
|
104
77
|
- - ~>
|
105
78
|
- !ruby/object:Gem::Version
|
106
|
-
|
107
|
-
segments:
|
108
|
-
- 0
|
109
|
-
- 9
|
110
|
-
- 0
|
111
|
-
- beta
|
112
|
-
version: 0.9.0.beta
|
79
|
+
version: 0.9.0.beta2
|
113
80
|
type: :runtime
|
114
81
|
version_requirements: *id006
|
115
82
|
- !ruby/object:Gem::Dependency
|
@@ -120,10 +87,6 @@ dependencies:
|
|
120
87
|
requirements:
|
121
88
|
- - ">="
|
122
89
|
- !ruby/object:Gem::Version
|
123
|
-
hash: 15
|
124
|
-
segments:
|
125
|
-
- 1
|
126
|
-
- 0
|
127
90
|
version: "1.0"
|
128
91
|
type: :runtime
|
129
92
|
version_requirements: *id007
|
@@ -164,25 +127,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
164
127
|
requirements:
|
165
128
|
- - ">="
|
166
129
|
- !ruby/object:Gem::Version
|
167
|
-
hash: 3
|
168
|
-
segments:
|
169
|
-
- 0
|
170
130
|
version: "0"
|
171
131
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
132
|
none: false
|
173
133
|
requirements:
|
174
134
|
- - ">"
|
175
135
|
- !ruby/object:Gem::Version
|
176
|
-
hash: 25
|
177
|
-
segments:
|
178
|
-
- 1
|
179
|
-
- 3
|
180
|
-
- 1
|
181
136
|
version: 1.3.1
|
182
137
|
requirements: []
|
183
138
|
|
184
139
|
rubyforge_project:
|
185
|
-
rubygems_version: 1.
|
140
|
+
rubygems_version: 1.6.1
|
186
141
|
signing_key:
|
187
142
|
specification_version: 3
|
188
143
|
summary: riak-sessions is a session store backed by Riak, the distributed database by Basho.
|