rack-redic 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e7388b15ad5d8202290edcce2053f32936fdf40b
4
- data.tar.gz: 9ac2661f1aa0a23d9095da3aaaee5cbe50b466c0
3
+ metadata.gz: 31b7b5e5ddf6c0f5af1dc51b50b983c568428064
4
+ data.tar.gz: 944984d8fae344465740ff0094f6eef441d003f9
5
5
  SHA512:
6
- metadata.gz: 6615da5238d30709de9ac9a9f8638f904b944897055035b886a55754c73846f146b9f7f0ae63334254008568f5bd1efb7a97379a2fd0b0730b01f34c5034fe03
7
- data.tar.gz: 69abbdd2fd1251dd90bd2cf9c88ba1b4af383c4b7d36d91f6268cfd4622bda423bcb8db1db0b40e0aac429e414143502d513fa25bc01c5214d928c08c9a06ef9
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.7.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
@@ -4,4 +4,5 @@
4
4
  # Ensure we have this set before trying to initialize anything.
5
5
  ENV['REDIS_URL'] ||= 'redis://localhost:6379'
6
6
 
7
+ # Require our core library.
7
8
  require 'rack/session/redic'
@@ -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
- subject do
6
- Rack::Session::Redic::Storage.new(nil, Marshal, ENV['REDIS_URL'])
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
- expect(subject.get('deleted')).to eq(nil)
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.7.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