rack-redic 0.7.0 → 0.8.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 +4 -4
- data/README.md +39 -0
- data/rack-redic.gemspec +3 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/storage_msgpack_spec.rb +28 -0
- data/spec/storage_oj_spec.rb +14 -0
- data/spec/storage_spec.rb +6 -29
- data/spec/support/shared_examples/storage_marshaller.rb +31 -0
- metadata +35 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 31b7b5e5ddf6c0f5af1dc51b50b983c568428064
|
|
4
|
+
data.tar.gz: 944984d8fae344465740ff0094f6eef441d003f9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b647e0e9e43738c92a7d9cfe79939ed966e8edbe5d223b1ab0af7014bc08b55c215c0d295000d4331c5ce3c23049894353f498f69dea919e746749e77fc91ad5
|
|
7
|
+
data.tar.gz: 72e4feb916be67b959ceff0c7fd5472b0717e2c99b9c60f6dab508d4855abebf9db916d74fe7939bc11a315a7d9029d75876e7409ffd9c34475b4789a32e99e8
|
data/README.md
CHANGED
|
@@ -46,6 +46,45 @@ use Rack::Session::Redic, marshaller: Oj, url: 'redis://host:port'
|
|
|
46
46
|
use Rack::Session::Redic, marshaller: Oj, url: 'redis://host:port', expire_after: 1_800
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
+
### Custom Marshallers
|
|
50
|
+
|
|
51
|
+
Since the class/module passed as `:marshaller` only needs to respond to the methods `load` and `dump` you can create any kind of marshaller you would like. I've included examples for MessagePack and Oj here as reference.
|
|
52
|
+
|
|
53
|
+
#### [MessagePack](https://github.com/msgpack/msgpack-ruby)
|
|
54
|
+
|
|
55
|
+
```ruby
|
|
56
|
+
require 'msgpack'
|
|
57
|
+
|
|
58
|
+
MessagePack::DefaultFactory.register_type(0x00, Symbol)
|
|
59
|
+
|
|
60
|
+
module MessagePackMarshaller
|
|
61
|
+
def dump(object)
|
|
62
|
+
MessagePack.pack(object)
|
|
63
|
+
end
|
|
64
|
+
module_function :dump
|
|
65
|
+
|
|
66
|
+
def load(string)
|
|
67
|
+
MessagePack.unpack(string)
|
|
68
|
+
end
|
|
69
|
+
module_function :load
|
|
70
|
+
end
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Then, while adding it your Rack application.
|
|
74
|
+
|
|
75
|
+
```ruby
|
|
76
|
+
use Rack::Session::Redic, marshaller: MessagePackMarshaller
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**NOTE:** MessagePack [serializes symbols as strings by default](https://github.com/msgpack/msgpack-ruby#serializing-and-deserializing-symbols) so I suggest customizing that behavior per their instructions. You can [read more about MessagePack's extension formats here](https://github.com/msgpack/msgpack/blob/master/spec.md#types-extension-type).
|
|
80
|
+
|
|
81
|
+
#### [Oj](https://github.com/ohler55/oj)
|
|
82
|
+
|
|
83
|
+
Oj responds to `load` and `dump` by default so there's no adapter method needed.
|
|
84
|
+
|
|
85
|
+
```ruby
|
|
86
|
+
use Rack::Session::Redic, marshaller: Oj
|
|
87
|
+
```
|
|
49
88
|
|
|
50
89
|
## Contributing
|
|
51
90
|
|
data/rack-redic.gemspec
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
Gem::Specification.new do |spec|
|
|
4
4
|
spec.name = 'rack-redic'
|
|
5
|
-
spec.version = '0.
|
|
5
|
+
spec.version = '0.8.0'
|
|
6
6
|
spec.authors = ['Evan Lecklider']
|
|
7
7
|
spec.email = ['evan@lecklider.com']
|
|
8
8
|
|
|
@@ -16,5 +16,7 @@ Gem::Specification.new do |spec|
|
|
|
16
16
|
spec.add_dependency 'rack'
|
|
17
17
|
spec.add_dependency 'redic'
|
|
18
18
|
|
|
19
|
+
spec.add_development_dependency 'msgpack'
|
|
20
|
+
spec.add_development_dependency 'oj'
|
|
19
21
|
spec.add_development_dependency 'rspec'
|
|
20
22
|
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
require 'support/shared_examples/storage_marshaller'
|
|
4
|
+
require 'msgpack'
|
|
5
|
+
|
|
6
|
+
MessagePack::DefaultFactory.register_type(0x00, Symbol)
|
|
7
|
+
|
|
8
|
+
module MessagePackMarshaller
|
|
9
|
+
def dump(object)
|
|
10
|
+
MessagePack.pack(object)
|
|
11
|
+
end
|
|
12
|
+
module_function :dump
|
|
13
|
+
|
|
14
|
+
def load(string)
|
|
15
|
+
MessagePack.unpack(string)
|
|
16
|
+
end
|
|
17
|
+
module_function :load
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe Rack::Session::Redic::Storage do
|
|
21
|
+
context 'using the MessagePack as the marshaller' do
|
|
22
|
+
it_behaves_like 'a storage marshaller'
|
|
23
|
+
|
|
24
|
+
subject do
|
|
25
|
+
Rack::Session::Redic::Storage.new(nil, MessagePackMarshaller, ENV['REDIS_URL'])
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
require 'support/shared_examples/storage_marshaller'
|
|
4
|
+
require 'oj'
|
|
5
|
+
|
|
6
|
+
describe Rack::Session::Redic::Storage do
|
|
7
|
+
context 'using the Oj as the marshaller' do
|
|
8
|
+
it_behaves_like 'a storage marshaller'
|
|
9
|
+
|
|
10
|
+
subject do
|
|
11
|
+
Rack::Session::Redic::Storage.new(nil, Oj, ENV['REDIS_URL'])
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
data/spec/storage_spec.rb
CHANGED
|
@@ -1,36 +1,13 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
# frozen_string_literal: true
|
|
3
|
+
require 'support/shared_examples/storage_marshaller'
|
|
3
4
|
|
|
4
5
|
describe Rack::Session::Redic::Storage do
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it 'returns nil for empty keys' do
|
|
10
|
-
expect(subject.get('not-here')).to eq(nil)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it 'saves objects' do
|
|
14
|
-
object = { saved: true }
|
|
15
|
-
subject.set('saving', object)
|
|
16
|
-
|
|
17
|
-
expect(subject.get('saving')).to eq(object)
|
|
18
|
-
subject.delete('saving') # Cleanup.
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it 'checks the existence of keys' do
|
|
22
|
-
subject.set('exists', false)
|
|
23
|
-
|
|
24
|
-
expect(subject.exists?('exists')).to eq(true)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it 'deletes objects' do
|
|
28
|
-
object = { deleted: true }
|
|
29
|
-
subject.set('deleted', object)
|
|
30
|
-
|
|
31
|
-
expect(subject.get('deleted')).to eq(object)
|
|
32
|
-
subject.delete('deleted')
|
|
6
|
+
context 'using the default marshaller' do
|
|
7
|
+
it_behaves_like 'a storage marshaller'
|
|
33
8
|
|
|
34
|
-
|
|
9
|
+
subject do
|
|
10
|
+
Rack::Session::Redic::Storage.new(nil, Marshal, ENV['REDIS_URL'])
|
|
11
|
+
end
|
|
35
12
|
end
|
|
36
13
|
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
RSpec.shared_examples 'a storage marshaller' do
|
|
4
|
+
it 'returns nil for empty keys' do
|
|
5
|
+
expect(subject.get('not-here')).to eq(nil)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it 'saves objects' do
|
|
9
|
+
object = { saved: true }
|
|
10
|
+
subject.set('saving', object)
|
|
11
|
+
|
|
12
|
+
expect(subject.get('saving')).to eq(object)
|
|
13
|
+
subject.delete('saving') # Cleanup.
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'checks the existence of keys' do
|
|
17
|
+
subject.set('exists', false)
|
|
18
|
+
|
|
19
|
+
expect(subject.exists?('exists')).to eq(true)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'deletes objects' do
|
|
23
|
+
object = { deleted: true }
|
|
24
|
+
subject.set('deleted', object)
|
|
25
|
+
|
|
26
|
+
expect(subject.get('deleted')).to eq(object)
|
|
27
|
+
subject.delete('deleted')
|
|
28
|
+
|
|
29
|
+
expect(subject.get('deleted')).to eq(nil)
|
|
30
|
+
end
|
|
31
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rack-redic
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.8.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Evan Lecklider
|
|
@@ -38,6 +38,34 @@ dependencies:
|
|
|
38
38
|
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: msgpack
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: oj
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ">="
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
41
69
|
- !ruby/object:Gem::Dependency
|
|
42
70
|
name: rspec
|
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -70,7 +98,10 @@ files:
|
|
|
70
98
|
- rack-redic.gemspec
|
|
71
99
|
- spec/session_redic_spec.rb
|
|
72
100
|
- spec/spec_helper.rb
|
|
101
|
+
- spec/storage_msgpack_spec.rb
|
|
102
|
+
- spec/storage_oj_spec.rb
|
|
73
103
|
- spec/storage_spec.rb
|
|
104
|
+
- spec/support/shared_examples/storage_marshaller.rb
|
|
74
105
|
homepage: https://github.com/evanleck/rack-redic
|
|
75
106
|
licenses:
|
|
76
107
|
- MIT
|
|
@@ -98,4 +129,7 @@ summary: Rack::Session in Redis via Redic
|
|
|
98
129
|
test_files:
|
|
99
130
|
- spec/session_redic_spec.rb
|
|
100
131
|
- spec/spec_helper.rb
|
|
132
|
+
- spec/storage_msgpack_spec.rb
|
|
133
|
+
- spec/storage_oj_spec.rb
|
|
101
134
|
- spec/storage_spec.rb
|
|
135
|
+
- spec/support/shared_examples/storage_marshaller.rb
|