hikki 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +3 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +98 -0
  8. data/Rakefile +6 -0
  9. data/adapters/hikki-memcache/.rspec +2 -0
  10. data/adapters/hikki-memcache/.travis.yml +3 -0
  11. data/adapters/hikki-memcache/Gemfile +7 -0
  12. data/adapters/hikki-memcache/LICENSE.txt +22 -0
  13. data/adapters/hikki-memcache/README.md +50 -0
  14. data/adapters/hikki-memcache/Rakefile +6 -0
  15. data/adapters/hikki-memcache/hikki-memcache.gemspec +27 -0
  16. data/adapters/hikki-memcache/lib/hikki/adapters/memcache_adapter.rb +22 -0
  17. data/adapters/hikki-memcache/lib/hikki/adapters/memcache_collection.rb +54 -0
  18. data/adapters/hikki-memcache/spec/hikki/adapters/memcache_adapter_integration_spec.rb +39 -0
  19. data/adapters/hikki-memcache/spec/hikki/adapters/memcache_adapter_spec.rb +115 -0
  20. data/adapters/hikki-memcache/spec/spec_helper.rb +8 -0
  21. data/adapters/hikki-mongo/.rspec +2 -0
  22. data/adapters/hikki-mongo/.travis.yml +3 -0
  23. data/adapters/hikki-mongo/Gemfile +7 -0
  24. data/adapters/hikki-mongo/LICENSE.txt +22 -0
  25. data/adapters/hikki-mongo/README.md +44 -0
  26. data/adapters/hikki-mongo/Rakefile +6 -0
  27. data/adapters/hikki-mongo/hikki-mongo.gemspec +28 -0
  28. data/adapters/hikki-mongo/lib/hikki/adapters/mongo_adapter.rb +22 -0
  29. data/adapters/hikki-mongo/lib/hikki/adapters/mongo_collection.rb +86 -0
  30. data/adapters/hikki-mongo/spec/hikki/adapters/mongo_adapter_integration_spec.rb +39 -0
  31. data/adapters/hikki-mongo/spec/hikki/adapters/mongo_adapter_spec.rb +231 -0
  32. data/adapters/hikki-mongo/spec/spec_helper.rb +8 -0
  33. data/adapters/hikki-redis/.rspec +2 -0
  34. data/adapters/hikki-redis/.travis.yml +3 -0
  35. data/adapters/hikki-redis/Gemfile +7 -0
  36. data/adapters/hikki-redis/LICENSE.txt +22 -0
  37. data/adapters/hikki-redis/README.md +44 -0
  38. data/adapters/hikki-redis/Rakefile +6 -0
  39. data/adapters/hikki-redis/hikki-redis.gemspec +27 -0
  40. data/adapters/hikki-redis/lib/hikki/adapters/redis_adapter.rb +21 -0
  41. data/adapters/hikki-redis/lib/hikki/adapters/redis_collection.rb +105 -0
  42. data/adapters/hikki-redis/spec/hikki/adapters/redis_adapter_integration_spec.rb +39 -0
  43. data/adapters/hikki-redis/spec/hikki/adapters/redis_adapter_spec.rb +258 -0
  44. data/adapters/hikki-redis/spec/spec_helper.rb +8 -0
  45. data/all_specs +13 -0
  46. data/hikki.gemspec +24 -0
  47. data/lib/hikki.rb +9 -0
  48. data/lib/hikki/adapters/adapter.rb +43 -0
  49. data/lib/hikki/adapters/memory_adapter.rb +18 -0
  50. data/lib/hikki/adapters/memory_collection.rb +87 -0
  51. data/lib/hikki/collection.rb +62 -0
  52. data/lib/hikki/repository.rb +54 -0
  53. data/lib/hikki/version.rb +3 -0
  54. data/spec/hikki/adapters/memory_adapter_spec.rb +242 -0
  55. data/spec/hikki/repository_spec.rb +260 -0
  56. data/spec/hikki_spec.rb +5 -0
  57. data/spec/spec_helper.rb +2 -0
  58. 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
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hikki do
4
+
5
+ end
@@ -0,0 +1,2 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'hikki'
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