hikki 0.0.1
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 +19 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +98 -0
- data/Rakefile +6 -0
- data/adapters/hikki-memcache/.rspec +2 -0
- data/adapters/hikki-memcache/.travis.yml +3 -0
- data/adapters/hikki-memcache/Gemfile +7 -0
- data/adapters/hikki-memcache/LICENSE.txt +22 -0
- data/adapters/hikki-memcache/README.md +50 -0
- data/adapters/hikki-memcache/Rakefile +6 -0
- data/adapters/hikki-memcache/hikki-memcache.gemspec +27 -0
- data/adapters/hikki-memcache/lib/hikki/adapters/memcache_adapter.rb +22 -0
- data/adapters/hikki-memcache/lib/hikki/adapters/memcache_collection.rb +54 -0
- data/adapters/hikki-memcache/spec/hikki/adapters/memcache_adapter_integration_spec.rb +39 -0
- data/adapters/hikki-memcache/spec/hikki/adapters/memcache_adapter_spec.rb +115 -0
- data/adapters/hikki-memcache/spec/spec_helper.rb +8 -0
- data/adapters/hikki-mongo/.rspec +2 -0
- data/adapters/hikki-mongo/.travis.yml +3 -0
- data/adapters/hikki-mongo/Gemfile +7 -0
- data/adapters/hikki-mongo/LICENSE.txt +22 -0
- data/adapters/hikki-mongo/README.md +44 -0
- data/adapters/hikki-mongo/Rakefile +6 -0
- data/adapters/hikki-mongo/hikki-mongo.gemspec +28 -0
- data/adapters/hikki-mongo/lib/hikki/adapters/mongo_adapter.rb +22 -0
- data/adapters/hikki-mongo/lib/hikki/adapters/mongo_collection.rb +86 -0
- data/adapters/hikki-mongo/spec/hikki/adapters/mongo_adapter_integration_spec.rb +39 -0
- data/adapters/hikki-mongo/spec/hikki/adapters/mongo_adapter_spec.rb +231 -0
- data/adapters/hikki-mongo/spec/spec_helper.rb +8 -0
- data/adapters/hikki-redis/.rspec +2 -0
- data/adapters/hikki-redis/.travis.yml +3 -0
- data/adapters/hikki-redis/Gemfile +7 -0
- data/adapters/hikki-redis/LICENSE.txt +22 -0
- data/adapters/hikki-redis/README.md +44 -0
- data/adapters/hikki-redis/Rakefile +6 -0
- data/adapters/hikki-redis/hikki-redis.gemspec +27 -0
- data/adapters/hikki-redis/lib/hikki/adapters/redis_adapter.rb +21 -0
- data/adapters/hikki-redis/lib/hikki/adapters/redis_collection.rb +105 -0
- data/adapters/hikki-redis/spec/hikki/adapters/redis_adapter_integration_spec.rb +39 -0
- data/adapters/hikki-redis/spec/hikki/adapters/redis_adapter_spec.rb +258 -0
- data/adapters/hikki-redis/spec/spec_helper.rb +8 -0
- data/all_specs +13 -0
- data/hikki.gemspec +24 -0
- data/lib/hikki.rb +9 -0
- data/lib/hikki/adapters/adapter.rb +43 -0
- data/lib/hikki/adapters/memory_adapter.rb +18 -0
- data/lib/hikki/adapters/memory_collection.rb +87 -0
- data/lib/hikki/collection.rb +62 -0
- data/lib/hikki/repository.rb +54 -0
- data/lib/hikki/version.rb +3 -0
- data/spec/hikki/adapters/memory_adapter_spec.rb +242 -0
- data/spec/hikki/repository_spec.rb +260 -0
- data/spec/hikki_spec.rb +5 -0
- data/spec/spec_helper.rb +2 -0
- metadata +146 -0
@@ -0,0 +1,260 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Hikki
|
4
|
+
describe Repository do
|
5
|
+
subject(:repository) { Repository.new(writers, readers) }
|
6
|
+
let(:writers) { [writer] }
|
7
|
+
let(:readers) { [reader] }
|
8
|
+
let(:writer) { double :writer, save: data, index: true, remove: true, remove_all: true }
|
9
|
+
let(:another_writer) { double :writer, save: data, index: true, remove: true, remove_all: true }
|
10
|
+
let(:reader) { double :reader }
|
11
|
+
let(:collection) { 'collection' }
|
12
|
+
let(:data) { { id: '1' } }
|
13
|
+
|
14
|
+
describe '.new' do
|
15
|
+
context 'with no readers specified' do
|
16
|
+
subject(:repository) { Repository.new(writers) }
|
17
|
+
|
18
|
+
it 'defaults to the first writer for reading' do
|
19
|
+
expect(repository.readers.first).to eq repository.writers.first
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'with no writers specified' do
|
24
|
+
subject(:repository) { Repository.new }
|
25
|
+
|
26
|
+
it 'defaults to the memory adapter for writing' do
|
27
|
+
expect(repository.writers.first.class).to eq Hikki::Adapters::MemoryAdapter
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'defaults to the first writer for reading' do
|
31
|
+
expect(repository.readers.first).to eq repository.writers.first
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#save' do
|
37
|
+
it 'calls save on the writer' do
|
38
|
+
repository.save(collection, data)
|
39
|
+
expect(writer).to have_received(:save).with(collection, data)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'returns the data' do
|
43
|
+
expect(repository.save(collection, data)).to eq data
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'with a second writer' do
|
47
|
+
before { repository.writers << another_writer }
|
48
|
+
|
49
|
+
it 'calls save on both of the writers' do
|
50
|
+
repository.save(collection, data)
|
51
|
+
expect(writer).to have_received(:save).with(collection, data)
|
52
|
+
expect(another_writer).to have_received(:save).with(collection, data)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#index' do
|
58
|
+
it 'calls index on the writer' do
|
59
|
+
repository.index(collection, :field)
|
60
|
+
expect(writer).to have_received(:index).with(collection, :field)
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'with a second writer' do
|
64
|
+
before { repository.writers << another_writer }
|
65
|
+
|
66
|
+
it 'calls index on both of the writers' do
|
67
|
+
repository.index(collection, :field)
|
68
|
+
expect(writer).to have_received(:index).with(collection, :field)
|
69
|
+
expect(another_writer).to have_received(:index).with(collection, :field)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe '#remove' do
|
75
|
+
it 'calls index on the writer' do
|
76
|
+
repository.remove(collection, '1')
|
77
|
+
expect(writer).to have_received(:remove).with(collection, '1')
|
78
|
+
end
|
79
|
+
|
80
|
+
context 'with a second writer' do
|
81
|
+
before { repository.writers << another_writer }
|
82
|
+
|
83
|
+
it 'calls index on both of the writers' do
|
84
|
+
repository.remove(collection, '1')
|
85
|
+
expect(writer).to have_received(:remove).with(collection, '1')
|
86
|
+
expect(another_writer).to have_received(:remove).with(collection, '1')
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe '#remove_all' do
|
92
|
+
it 'calls remove_all on the writer' do
|
93
|
+
repository.remove_all(collection)
|
94
|
+
expect(writer).to have_received(:remove_all).with(collection)
|
95
|
+
end
|
96
|
+
|
97
|
+
context 'with a second writer' do
|
98
|
+
before { repository.writers << another_writer }
|
99
|
+
|
100
|
+
it 'calls remove_all on both of the writers' do
|
101
|
+
repository.remove_all(collection)
|
102
|
+
expect(writer).to have_received(:remove_all).with(collection)
|
103
|
+
expect(another_writer).to have_received(:remove_all).with(collection)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe '#find' do
|
109
|
+
context 'when the adapter returns a result' do
|
110
|
+
before { reader.stub(:find).with(collection, '1').and_return(data) }
|
111
|
+
|
112
|
+
it 'returns the result' do
|
113
|
+
expect(repository.find(collection, '1')).to eq data
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context 'when the adapter does not return a result' do
|
118
|
+
before { reader.stub(:find).with(collection, '1').and_return({}) }
|
119
|
+
|
120
|
+
it 'returns {}' do
|
121
|
+
expect(repository.find(collection, '1')).to eq Hash.new
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
context 'with 2 readers' do
|
126
|
+
let(:another_reader) { double :reader }
|
127
|
+
before { repository.readers << another_reader }
|
128
|
+
|
129
|
+
context 'and the record is found in the first' do
|
130
|
+
before do
|
131
|
+
reader.stub(:find).with(collection, '1').and_return(data)
|
132
|
+
another_reader.stub(:find).with(collection, '1').and_return({})
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'returns the result from the first reader' do
|
136
|
+
expect(repository.find(collection, '1')).to eq data
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
context 'and the record is found only in the second' do
|
141
|
+
before do
|
142
|
+
reader.stub(:find).with(collection, '1').and_return({})
|
143
|
+
another_reader.stub(:find).with(collection, '1').and_return(data)
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'returns the result from the second reader' do
|
147
|
+
expect(repository.find(collection, '1')).to eq data
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
describe '#all' do
|
154
|
+
context 'when the adapter returns the results' do
|
155
|
+
before { reader.stub(:all).with(collection, {}).and_return([data]) }
|
156
|
+
|
157
|
+
it 'returns the results' do
|
158
|
+
expect(repository.all(collection)).to eq [data]
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
context 'when the adapter does not return a result' do
|
163
|
+
before { reader.stub(:all).with(collection, {}).and_return([]) }
|
164
|
+
|
165
|
+
it 'returns {}' do
|
166
|
+
expect(repository.all(collection)).to eq []
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
context 'with 2 readers' do
|
171
|
+
let(:another_reader) { double :reader }
|
172
|
+
before { repository.readers << another_reader }
|
173
|
+
|
174
|
+
context 'and the record is found in the first' do
|
175
|
+
before do
|
176
|
+
reader.stub(:all).with(collection, {}).and_return([data])
|
177
|
+
another_reader.stub(:all).with(collection, {}).and_return([])
|
178
|
+
end
|
179
|
+
|
180
|
+
it 'returns the result from the first reader' do
|
181
|
+
expect(repository.all(collection)).to eq [data]
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
context 'and the record is found only in the second' do
|
186
|
+
before do
|
187
|
+
reader.stub(:all).with(collection, {}).and_return([])
|
188
|
+
another_reader.stub(:all).with(collection, {}).and_return([data])
|
189
|
+
end
|
190
|
+
|
191
|
+
it 'returns the result from the second reader' do
|
192
|
+
expect(repository.all(collection)).to eq [data]
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
context 'with options' do
|
198
|
+
before { reader.stub(:all).with(collection, {limit: 10}).and_return([data]) }
|
199
|
+
|
200
|
+
it 'returns the results' do
|
201
|
+
expect(repository.all(collection, limit: 10)).to eq [data]
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
describe '#find_by' do
|
207
|
+
context 'when the adapter returns the results' do
|
208
|
+
before { reader.stub(:find_by).with(collection, :field, 'abc', {}).and_return([data]) }
|
209
|
+
|
210
|
+
it 'returns the results' do
|
211
|
+
expect(repository.find_by(collection, :field, 'abc')).to eq [data]
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
context 'when the adapter does not return a result' do
|
216
|
+
before { reader.stub(:find_by).with(collection, :field, 'abc', {}).and_return([]) }
|
217
|
+
|
218
|
+
it 'returns {}' do
|
219
|
+
expect(repository.find_by(collection, :field, 'abc')).to eq []
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
context 'with 2 readers' do
|
224
|
+
let(:another_reader) { double :reader }
|
225
|
+
before { repository.readers << another_reader }
|
226
|
+
|
227
|
+
context 'and the record is found in the first' do
|
228
|
+
before do
|
229
|
+
reader.stub(:find_by).with(collection, :field, 'abc', {}).and_return([data])
|
230
|
+
another_reader.stub(:find_by).with(collection, :field, 'abc', {}).and_return([])
|
231
|
+
end
|
232
|
+
|
233
|
+
it 'returns the result from the first reader' do
|
234
|
+
expect(repository.find_by(collection, :field, 'abc')).to eq [data]
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
context 'and the record is found only in the second' do
|
239
|
+
before do
|
240
|
+
reader.stub(:find_by).with(collection, :field, 'abc', {}).and_return([])
|
241
|
+
another_reader.stub(:find_by).with(collection, :field, 'abc', {}).and_return([data])
|
242
|
+
end
|
243
|
+
|
244
|
+
it 'returns the result from the second reader' do
|
245
|
+
expect(repository.find_by(collection, :field, 'abc')).to eq [data]
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
context 'with options' do
|
251
|
+
before { reader.stub(:find_by).with(collection, :field, 'abc', {limit: 10}).and_return([data]) }
|
252
|
+
|
253
|
+
it 'returns the results' do
|
254
|
+
expect(repository.find_by(collection, :field, 'abc', limit: 10)).to eq [data]
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
end
|
260
|
+
end
|
data/spec/hikki_spec.rb
ADDED
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,146 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hikki
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- alexpeachey
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-01-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.5'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
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
|
+
description: A light weight persistence system.
|
56
|
+
email:
|
57
|
+
- alex.peachey@originate.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- .gitignore
|
63
|
+
- .rspec
|
64
|
+
- .travis.yml
|
65
|
+
- Gemfile
|
66
|
+
- LICENSE.txt
|
67
|
+
- README.md
|
68
|
+
- Rakefile
|
69
|
+
- adapters/hikki-memcache/.rspec
|
70
|
+
- adapters/hikki-memcache/.travis.yml
|
71
|
+
- adapters/hikki-memcache/Gemfile
|
72
|
+
- adapters/hikki-memcache/LICENSE.txt
|
73
|
+
- adapters/hikki-memcache/README.md
|
74
|
+
- adapters/hikki-memcache/Rakefile
|
75
|
+
- adapters/hikki-memcache/hikki-memcache.gemspec
|
76
|
+
- adapters/hikki-memcache/lib/hikki/adapters/memcache_adapter.rb
|
77
|
+
- adapters/hikki-memcache/lib/hikki/adapters/memcache_collection.rb
|
78
|
+
- adapters/hikki-memcache/spec/hikki/adapters/memcache_adapter_integration_spec.rb
|
79
|
+
- adapters/hikki-memcache/spec/hikki/adapters/memcache_adapter_spec.rb
|
80
|
+
- adapters/hikki-memcache/spec/spec_helper.rb
|
81
|
+
- adapters/hikki-mongo/.rspec
|
82
|
+
- adapters/hikki-mongo/.travis.yml
|
83
|
+
- adapters/hikki-mongo/Gemfile
|
84
|
+
- adapters/hikki-mongo/LICENSE.txt
|
85
|
+
- adapters/hikki-mongo/README.md
|
86
|
+
- adapters/hikki-mongo/Rakefile
|
87
|
+
- adapters/hikki-mongo/hikki-mongo.gemspec
|
88
|
+
- adapters/hikki-mongo/lib/hikki/adapters/mongo_adapter.rb
|
89
|
+
- adapters/hikki-mongo/lib/hikki/adapters/mongo_collection.rb
|
90
|
+
- adapters/hikki-mongo/spec/hikki/adapters/mongo_adapter_integration_spec.rb
|
91
|
+
- adapters/hikki-mongo/spec/hikki/adapters/mongo_adapter_spec.rb
|
92
|
+
- adapters/hikki-mongo/spec/spec_helper.rb
|
93
|
+
- adapters/hikki-redis/.rspec
|
94
|
+
- adapters/hikki-redis/.travis.yml
|
95
|
+
- adapters/hikki-redis/Gemfile
|
96
|
+
- adapters/hikki-redis/LICENSE.txt
|
97
|
+
- adapters/hikki-redis/README.md
|
98
|
+
- adapters/hikki-redis/Rakefile
|
99
|
+
- adapters/hikki-redis/hikki-redis.gemspec
|
100
|
+
- adapters/hikki-redis/lib/hikki/adapters/redis_adapter.rb
|
101
|
+
- adapters/hikki-redis/lib/hikki/adapters/redis_collection.rb
|
102
|
+
- adapters/hikki-redis/spec/hikki/adapters/redis_adapter_integration_spec.rb
|
103
|
+
- adapters/hikki-redis/spec/hikki/adapters/redis_adapter_spec.rb
|
104
|
+
- adapters/hikki-redis/spec/spec_helper.rb
|
105
|
+
- all_specs
|
106
|
+
- hikki.gemspec
|
107
|
+
- lib/hikki.rb
|
108
|
+
- lib/hikki/adapters/adapter.rb
|
109
|
+
- lib/hikki/adapters/memory_adapter.rb
|
110
|
+
- lib/hikki/adapters/memory_collection.rb
|
111
|
+
- lib/hikki/collection.rb
|
112
|
+
- lib/hikki/repository.rb
|
113
|
+
- lib/hikki/version.rb
|
114
|
+
- spec/hikki/adapters/memory_adapter_spec.rb
|
115
|
+
- spec/hikki/repository_spec.rb
|
116
|
+
- spec/hikki_spec.rb
|
117
|
+
- spec/spec_helper.rb
|
118
|
+
homepage: ''
|
119
|
+
licenses:
|
120
|
+
- MIT
|
121
|
+
metadata: {}
|
122
|
+
post_install_message:
|
123
|
+
rdoc_options: []
|
124
|
+
require_paths:
|
125
|
+
- lib
|
126
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - '>='
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - '>='
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
136
|
+
requirements: []
|
137
|
+
rubyforge_project:
|
138
|
+
rubygems_version: 2.2.1
|
139
|
+
signing_key:
|
140
|
+
specification_version: 4
|
141
|
+
summary: A light weight persistence system.
|
142
|
+
test_files:
|
143
|
+
- spec/hikki/adapters/memory_adapter_spec.rb
|
144
|
+
- spec/hikki/repository_spec.rb
|
145
|
+
- spec/hikki_spec.rb
|
146
|
+
- spec/spec_helper.rb
|