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