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 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