kvom 6.8.3.174.51542603 → 6.9.0.3.197272233
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.
- data/lib/kvom/model/base.rb +73 -25
- data/spec/adapter/dynamodb_adapter_spec.rb +1 -1
- data/spec/model/all_ids_spec.rb +70 -55
- data/spec/model/base_spec.rb +95 -37
- data/spec/spec_helper.rb +1 -1
- data/spec/support/model.rb +20 -8
- data/spec/support/test_ids.rb +8 -1
- metadata +3 -5
- data/lib/kvom/model/feature.rb +0 -5
- data/lib/kvom/model/feature/all_ids.rb +0 -30
data/lib/kvom/model/base.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'kvom/model'
|
2
|
+
|
2
3
|
require 'active_support/core_ext/hash/keys'
|
3
4
|
require 'active_support/core_ext/object/blank'
|
4
5
|
require 'active_support/core_ext/class/attribute'
|
@@ -17,8 +18,15 @@ class Base
|
|
17
18
|
|
18
19
|
class << self
|
19
20
|
|
20
|
-
def
|
21
|
-
|
21
|
+
def key_prefix
|
22
|
+
to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
# options:
|
26
|
+
# - hotspot: true # does not save an additional index document, but creates a hotspot
|
27
|
+
def has_all_ids(options = {})
|
28
|
+
self.kvom_uses_key_prefix_as_hash_value = options[:hotspot]
|
29
|
+
self.kvom_uses_all_index_document = !kvom_uses_key_prefix_as_hash_value?
|
22
30
|
end
|
23
31
|
|
24
32
|
def create(attributes = {})
|
@@ -47,27 +55,19 @@ class Base
|
|
47
55
|
end
|
48
56
|
end
|
49
57
|
|
50
|
-
# default implementation for the class_attribute
|
51
|
-
def key_prefix
|
52
|
-
to_s
|
53
|
-
end
|
54
|
-
|
55
58
|
def adapter
|
56
59
|
raise "must be overwritten in subclasses"
|
57
60
|
end
|
58
61
|
|
59
|
-
def
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
def key_for(hash, range)
|
70
|
-
["#{key_prefix}/#{hash}", range]
|
62
|
+
def all_ids
|
63
|
+
case
|
64
|
+
when kvom_uses_key_prefix_as_hash_value?
|
65
|
+
adapter.range_values_of_hash_value(key_prefix)
|
66
|
+
when kvom_uses_all_index_document?
|
67
|
+
adapter.range_values_of_hash_value("#{key_prefix}/all")
|
68
|
+
else
|
69
|
+
raise "#{name}.all_ids needs to be enabled via has_all_ids"
|
70
|
+
end
|
71
71
|
end
|
72
72
|
|
73
73
|
end
|
@@ -84,8 +84,7 @@ class Base
|
|
84
84
|
else
|
85
85
|
@new = true
|
86
86
|
attrs = doc_or_attrs.stringify_keys
|
87
|
-
|
88
|
-
self.class.adapter.new_document(key, attrs)
|
87
|
+
self.class.new_document(attrs)
|
89
88
|
end
|
90
89
|
end
|
91
90
|
|
@@ -94,8 +93,7 @@ class Base
|
|
94
93
|
end
|
95
94
|
|
96
95
|
def save
|
97
|
-
self.class.
|
98
|
-
self.class.adapter.save_index(all_key) if @new && is_a?(Feature::AllIds)
|
96
|
+
self.class.save_document(@document, @new)
|
99
97
|
@new = false
|
100
98
|
end
|
101
99
|
|
@@ -108,8 +106,7 @@ class Base
|
|
108
106
|
end
|
109
107
|
|
110
108
|
def destroy
|
111
|
-
self.class.
|
112
|
-
self.class.adapter.destroy(@document)
|
109
|
+
self.class.destroy_document(@document)
|
113
110
|
end
|
114
111
|
|
115
112
|
private
|
@@ -122,6 +119,57 @@ class Base
|
|
122
119
|
@document[name] = value
|
123
120
|
end
|
124
121
|
|
122
|
+
class_attribute :kvom_uses_key_prefix_as_hash_value
|
123
|
+
class_attribute :kvom_uses_all_index_document
|
124
|
+
|
125
|
+
class << self
|
126
|
+
|
127
|
+
# :nodoc:
|
128
|
+
def new_document(attrs)
|
129
|
+
id = attrs["id"] ||= SecureRandom.hex(8)
|
130
|
+
adapter.new_document(id_key_for(id), attrs)
|
131
|
+
end
|
132
|
+
|
133
|
+
# :nodoc:
|
134
|
+
def save_document(document, is_new)
|
135
|
+
adapter.save(document)
|
136
|
+
if is_new
|
137
|
+
if kvom_uses_all_index_document?
|
138
|
+
adapter.save_index(all_key_for(document))
|
139
|
+
end
|
140
|
+
end
|
141
|
+
true
|
142
|
+
end
|
143
|
+
|
144
|
+
# :nodoc:
|
145
|
+
def destroy_document(document)
|
146
|
+
if kvom_uses_all_index_document?
|
147
|
+
adapter.destroy_index(all_key_for(document))
|
148
|
+
end
|
149
|
+
adapter.destroy(document)
|
150
|
+
end
|
151
|
+
|
152
|
+
private
|
153
|
+
|
154
|
+
def find_document(id)
|
155
|
+
adapter.get(id_key_for(id))
|
156
|
+
end
|
157
|
+
|
158
|
+
def id_key_for(id)
|
159
|
+
case
|
160
|
+
when kvom_uses_key_prefix_as_hash_value?
|
161
|
+
[key_prefix, id]
|
162
|
+
else
|
163
|
+
["#{key_prefix}/id/#{id}", nil]
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def all_key_for(document)
|
168
|
+
["#{key_prefix}/all", document["id"]]
|
169
|
+
end
|
170
|
+
|
171
|
+
end
|
172
|
+
|
125
173
|
end
|
126
174
|
|
127
175
|
end; end # module Kvom::Model
|
@@ -4,7 +4,7 @@ describe Kvom::Adapter::DynamodbAdapter, "endpoint configuration", :adapter => "
|
|
4
4
|
|
5
5
|
context "when no endpoint is specified" do
|
6
6
|
|
7
|
-
let(:adapter) {
|
7
|
+
let(:adapter) {AdapterForSpec.adapter}
|
8
8
|
|
9
9
|
it "is configured to use Ireland" do
|
10
10
|
adapter.__send__(:table).config.dynamo_db_endpoint.should == "dynamodb.eu-west-1.amazonaws.com"
|
data/spec/model/all_ids_spec.rb
CHANGED
@@ -1,76 +1,91 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Kvom::Model::Base, "with all-index enabled" do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
shared_examples_for "an all_ids supporting model" do |model_class, other_class|
|
5
|
+
describe ".all_ids" do
|
6
|
+
before(:all) do
|
7
|
+
model_class.create(:id => volatile_id("0815-list"))
|
8
|
+
model_class.create(:id => volatile_id("007"))
|
9
|
+
other_class.create(:id => volatile_id("other"))
|
10
|
+
end
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
expected_ids = [volatile_id("0815-list"), volatile_id("007")]
|
14
|
-
(expected_ids & all_ids).should eq(expected_ids)
|
15
|
-
end
|
12
|
+
let(:all_ids) {model_class.all_ids}
|
13
|
+
let(:other_ids) {other_class.all_ids}
|
16
14
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
it "returns the ids of all persisted models" do
|
16
|
+
expected_ids = [volatile_id("0815-list"), volatile_id("007")]
|
17
|
+
(expected_ids & all_ids).should eq(expected_ids)
|
18
|
+
end
|
21
19
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
20
|
+
it "returns only ids of the model" do
|
21
|
+
other_ids.should_not be_empty
|
22
|
+
(all_ids & other_ids).should be_empty
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns ids for which a model can be fetched" do
|
26
|
+
all_ids.each do |model_id|
|
27
|
+
model_class.find(model_id).tap do |model|
|
28
|
+
model.should be
|
29
|
+
model.should be_instance_of(model_class)
|
30
|
+
end
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
32
|
-
end
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
35
|
+
describe ".create" do
|
36
|
+
it "adds the instance's id to the ids returned by .all_ids" do
|
37
|
+
new_id = volatile_id("neu")
|
38
|
+
expect {
|
39
|
+
model_class.create(:id => new_id)
|
40
|
+
}.to change {
|
41
|
+
model_class.all_ids.include?(new_id)
|
42
|
+
}.to(true)
|
43
|
+
end
|
42
44
|
end
|
43
|
-
end
|
44
45
|
|
45
|
-
|
46
|
-
|
46
|
+
describe "#destroy" do
|
47
|
+
let(:model_id) {volatile_id("weg")}
|
48
|
+
let(:model) {model_class.create(:id => model_id)}
|
47
49
|
|
48
|
-
|
49
|
-
|
50
|
-
|
50
|
+
before do
|
51
|
+
model
|
52
|
+
end
|
51
53
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
54
|
+
it "removes the instance's id from the ids returned by .all_ids" do
|
55
|
+
expect {
|
56
|
+
model.destroy
|
57
|
+
}.to change {
|
58
|
+
model_class.all_ids.include?(model_id)
|
59
|
+
}.to(false)
|
60
|
+
end
|
58
61
|
end
|
59
62
|
end
|
60
63
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
new_model.something = "changed"
|
69
|
-
new_model.save
|
70
|
-
counter_existing_saved = TestModelWithIndex.adapter.request_counter
|
71
|
-
requests_for_existing_model = counter_existing_saved - counter_new_saved
|
64
|
+
context "for a hotspot kvom model" do
|
65
|
+
it_should_behave_like "an all_ids supporting model",
|
66
|
+
ExampleModelWithHotspotIndexForAllIds, ExampleModelWithHotspotIndex
|
67
|
+
end
|
68
|
+
|
69
|
+
context "for a standard kvom model with all_ids enabled" do
|
70
|
+
it_should_behave_like "an all_ids supporting model", ExampleModelWithIndex, OtherModelWithIndex
|
72
71
|
|
73
|
-
|
72
|
+
describe ".save" do
|
73
|
+
let(:adapter) {ExampleModelWithIndex.adapter}
|
74
|
+
|
75
|
+
def count_requests
|
76
|
+
counter_before = adapter.request_counter
|
77
|
+
yield
|
78
|
+
adapter.request_counter - counter_before
|
79
|
+
end
|
80
|
+
|
81
|
+
it "does not write the index doc for an existing model" do
|
82
|
+
model = ExampleModelWithIndex.new(:id => volatile_id("counting"))
|
83
|
+
request_count_for_model_create = count_requests {model.save}
|
84
|
+
request_count_for_model_update = count_requests {model.something = "changed"; model.save}
|
85
|
+
|
86
|
+
request_count_for_model_update.should be < request_count_for_model_create
|
87
|
+
request_count_for_model_update.should eq(request_count_for_model_create - 1)
|
88
|
+
end
|
74
89
|
end
|
75
90
|
end
|
76
91
|
end
|
data/spec/model/base_spec.rb
CHANGED
@@ -235,13 +235,36 @@ describe Kvom::Model::Base do
|
|
235
235
|
ExampleModel.find(second_id)
|
236
236
|
end
|
237
237
|
|
238
|
-
describe "model's
|
239
|
-
|
240
|
-
|
241
|
-
|
238
|
+
describe "model's database key" do
|
239
|
+
let(:model_class) {ExampleModel}
|
240
|
+
let(:instance) {model_class.new}
|
241
|
+
let(:database_key) {instance.document.key}
|
242
242
|
|
243
243
|
it "should use a default prefix" do
|
244
|
-
|
244
|
+
database_key.should == ["ExampleModel/id/#{instance.id}", nil]
|
245
|
+
end
|
246
|
+
|
247
|
+
context "when a custom prefix is provided" do
|
248
|
+
let(:model_class) {CustomKeyPrefixModel}
|
249
|
+
|
250
|
+
it "should use the configured prefix" do
|
251
|
+
database_key.should == ["spam_prefix/id/#{instance.id}", nil]
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
context "when the model class is configured as hotspot model" do
|
256
|
+
let(:model_class) {ExampleModelWithHotspotIndex}
|
257
|
+
|
258
|
+
it "should use a default prefix" do
|
259
|
+
database_key.should == ["ExampleModelWithHotspotIndex", instance.id]
|
260
|
+
end
|
261
|
+
|
262
|
+
context "when a custom prefix is provided" do
|
263
|
+
let(:model_class) {CustomKeyPrefixWithHotspotIndex}
|
264
|
+
|
265
|
+
it "should use a default prefix" do
|
266
|
+
database_key.should == ["hotspot", instance.id]
|
267
|
+
end
|
245
268
|
end
|
246
269
|
end
|
247
270
|
|
@@ -250,17 +273,44 @@ describe Kvom::Model::Base do
|
|
250
273
|
expect { ExampleModel.find("") }.to raise_error /no id given/
|
251
274
|
end
|
252
275
|
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
276
|
+
shared_examples_for "a kvom model find" do
|
277
|
+
context "when the instance exists in database" do
|
278
|
+
let(:instance) {model_class.create(:spam => "foo")}
|
279
|
+
let(:instance_id) {instance.id}
|
280
|
+
|
281
|
+
before do
|
282
|
+
instance
|
283
|
+
end
|
284
|
+
|
285
|
+
it "should find existing model instances" do
|
286
|
+
model_class.find(instance_id).should be_instance_of(model_class)
|
287
|
+
model_class.find(instance_id).id.should == instance_id
|
288
|
+
model_class.find(instance_id).spam.should == "foo"
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
context "when the instance does not exist in the database"
|
293
|
+
let(:bad_id) {random_id}
|
294
|
+
|
295
|
+
it "should raise #{Kvom::NotFound}" do
|
296
|
+
expect {
|
297
|
+
ExampleModel.find(bad_id)
|
298
|
+
}.to raise_error(Kvom::NotFound, %r(document.* key "#{key_for_bad_id}"))
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
257
302
|
end
|
258
303
|
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
304
|
+
let(:model_class) {ExampleModel}
|
305
|
+
let(:key_for_bad_id) {"ExampleModel/id/#{bad_id}\|"}
|
306
|
+
|
307
|
+
it_should_behave_like "a kvom model find"
|
308
|
+
|
309
|
+
context "when configured as hotspot model" do
|
310
|
+
let(:model_class) {ExampleModelWithHotspotIndex}
|
311
|
+
let(:key_for_bad_id) {"ExampleModel|#{bad_id}"}
|
312
|
+
|
313
|
+
it_should_behave_like "a kvom model find"
|
264
314
|
end
|
265
315
|
end
|
266
316
|
|
@@ -300,23 +350,27 @@ describe Kvom::Model::Base do
|
|
300
350
|
end
|
301
351
|
|
302
352
|
def create_document(hash, range)
|
353
|
+
adapter = AdapterForSpec.adapter
|
303
354
|
document = adapter.new_document([volatile_id(hash), range], {})
|
304
355
|
adapter.save(document)
|
305
356
|
document
|
306
357
|
end
|
307
358
|
|
308
|
-
let(:adapter) {
|
309
|
-
|
310
|
-
let(:one_001) {create_document("one", "001")}
|
311
|
-
let(:one_002) {create_document("one", "002")}
|
312
|
-
let(:one_0021) {create_document("one", "0021")}
|
313
|
-
let(:one_0022) {create_document("one", "0022")}
|
314
|
-
let(:one_3) {create_document("one", "3")}
|
315
|
-
let(:two_two) {create_document("two", "two")}
|
316
|
-
let(:three_empty) {create_document("three", nil)}
|
359
|
+
let(:adapter) {AdapterForSpec.adapter}
|
317
360
|
|
318
361
|
before(:all) do
|
319
|
-
|
362
|
+
@documents = {}
|
363
|
+
@documents[:one_001] = create_document("one", "001")
|
364
|
+
@documents[:one_002] = create_document("one", "002")
|
365
|
+
@documents[:one_0021] = create_document("one", "0021")
|
366
|
+
@documents[:one_0022] = create_document("one", "0022")
|
367
|
+
@documents[:one_3] = create_document("one", "3")
|
368
|
+
@documents[:two_two] = create_document("two", "two")
|
369
|
+
@documents[:three_empty] = create_document("three", nil)
|
370
|
+
end
|
371
|
+
|
372
|
+
[:one_001, :one_002, :one_0021, :one_0022, :one_3, :two_two, :three_empty].each do |key|
|
373
|
+
let(key) {@documents[key]}
|
320
374
|
end
|
321
375
|
|
322
376
|
it 'should be able to limit results' do
|
@@ -447,36 +501,40 @@ describe Kvom::Model::Base do
|
|
447
501
|
|
448
502
|
let(:model_from_attributes) {ExampleModel.new({})}
|
449
503
|
|
450
|
-
|
451
|
-
|
504
|
+
context "without an id" do
|
505
|
+
it "is new" do
|
506
|
+
model_from_attributes.should be_new
|
507
|
+
end
|
452
508
|
end
|
453
509
|
|
454
|
-
|
510
|
+
|
511
|
+
context "including id" do
|
512
|
+
|
513
|
+
let(:model_id) {"not_a_default_#{random_id}"}
|
514
|
+
let(:model_from_attributes_including_id) {ExampleModel.new({"id" => model_id})}
|
455
515
|
|
456
516
|
before do
|
457
|
-
|
517
|
+
model_from_attributes_including_id.id.should == model_id
|
458
518
|
end
|
459
519
|
|
460
|
-
it "is
|
461
|
-
|
520
|
+
it "is new" do
|
521
|
+
model_from_attributes_including_id.should be_new
|
462
522
|
end
|
463
523
|
|
464
524
|
end
|
465
525
|
|
466
|
-
context "
|
467
|
-
|
468
|
-
let(:model_id) {"not_a_default_#{random_id}"}
|
469
|
-
let(:model_from_attributes_including_id) {ExampleModel.new({"id" => model_id})}
|
526
|
+
context "and saved" do
|
470
527
|
|
471
528
|
before do
|
472
|
-
|
529
|
+
model_from_attributes.save
|
473
530
|
end
|
474
531
|
|
475
|
-
it "is new" do
|
476
|
-
model_from_attributes.
|
532
|
+
it "is not new" do
|
533
|
+
model_from_attributes.should_not be_new
|
477
534
|
end
|
478
535
|
|
479
536
|
end
|
537
|
+
|
480
538
|
end
|
481
539
|
|
482
540
|
context "when instantiated from database" do
|
data/spec/spec_helper.rb
CHANGED
@@ -4,7 +4,7 @@ require File.expand_path("../../lib/kvom", __FILE__)
|
|
4
4
|
Dir[File.expand_path("../support/**/*.rb", __FILE__)].each {|f| require f[0..-4]}
|
5
5
|
|
6
6
|
RSpec.configure do |config|
|
7
|
-
adapter =
|
7
|
+
adapter = AdapterForSpec.adapter.class.to_s.demodulize.sub("Adapter", "").sub("db", "").downcase
|
8
8
|
adapter_specified_and_different = lambda {|required_adapter|
|
9
9
|
required_adapter && required_adapter.to_s != adapter
|
10
10
|
}
|
data/spec/support/model.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_ids')
|
2
|
+
|
1
3
|
class TestModel < Kvom::Model::Base
|
2
4
|
def self.adapter
|
3
|
-
|
5
|
+
AdapterForSpec.adapter
|
4
6
|
end
|
5
7
|
end
|
6
8
|
|
@@ -8,26 +10,36 @@ class ExampleModel < TestModel
|
|
8
10
|
property :spam
|
9
11
|
end
|
10
12
|
|
11
|
-
class CustomKeyPrefixModel <
|
13
|
+
class CustomKeyPrefixModel < ExampleModel
|
12
14
|
self.key_prefix = "spam_prefix"
|
13
15
|
end
|
14
16
|
|
15
17
|
class ModelWithoutAdapter < Kvom::Model::Base
|
16
18
|
end
|
17
19
|
|
18
|
-
|
19
|
-
class TestModelWithIndex < TestModel
|
20
|
+
class ExampleModelWithIndex < TestModel
|
20
21
|
has_all_ids
|
21
|
-
|
22
22
|
property :something
|
23
23
|
|
24
24
|
# not required to be set, but keeps cleanup and test separated
|
25
|
-
|
26
|
-
self.key_prefix = $test_model_with_index_key_prefix
|
25
|
+
self.key_prefix = "#{key_prefix}-#{TestIds.discriminator}"
|
27
26
|
end
|
28
27
|
|
29
|
-
class OtherModelWithIndex <
|
28
|
+
class OtherModelWithIndex < ExampleModel
|
30
29
|
has_all_ids
|
31
30
|
|
32
31
|
property :something
|
33
32
|
end
|
33
|
+
|
34
|
+
class ExampleModelWithHotspotIndex < ExampleModel
|
35
|
+
# property is inherited
|
36
|
+
has_all_ids(hotspot: true)
|
37
|
+
end
|
38
|
+
|
39
|
+
class CustomKeyPrefixWithHotspotIndex < ExampleModelWithHotspotIndex
|
40
|
+
self.key_prefix = "hotspot"
|
41
|
+
end
|
42
|
+
|
43
|
+
class ExampleModelWithHotspotIndexForAllIds < ExampleModelWithHotspotIndex
|
44
|
+
self.key_prefix = "#{key_prefix}-#{TestIds.discriminator}"
|
45
|
+
end
|
data/spec/support/test_ids.rb
CHANGED
@@ -1,9 +1,16 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
|
1
3
|
module TestIds
|
2
4
|
# - returns the same id for the whole test run
|
3
5
|
# - returns a different id when running the specs again
|
4
6
|
# => no id collision when running the tests on a reused and not emptied database
|
7
|
+
|
8
|
+
def self.discriminator
|
9
|
+
@discriminator ||= Time.now.strftime("%Y%m%d%H%M%S-") + SecureRandom.hex(8)
|
10
|
+
end
|
11
|
+
|
5
12
|
def self.volatile_id(id)
|
6
|
-
"#{
|
13
|
+
"#{discriminator}#{id}"
|
7
14
|
end
|
8
15
|
|
9
16
|
def volatile_id(id)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kvom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.9.0.3.197272233
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multi_json
|
@@ -148,8 +148,6 @@ files:
|
|
148
148
|
- lib/kvom/lib/json_value.rb
|
149
149
|
- lib/kvom/model.rb
|
150
150
|
- lib/kvom/model/base.rb
|
151
|
-
- lib/kvom/model/feature.rb
|
152
|
-
- lib/kvom/model/feature/all_ids.rb
|
153
151
|
- lib/kvom/model_identity.rb
|
154
152
|
- lib/kvom/storage.rb
|
155
153
|
- lib/kvom/storage/base.rb
|
@@ -187,7 +185,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
187
185
|
version: '0'
|
188
186
|
segments:
|
189
187
|
- 0
|
190
|
-
hash: -
|
188
|
+
hash: -799392035
|
191
189
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
192
190
|
none: false
|
193
191
|
requirements:
|
data/lib/kvom/model/feature.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
require 'kvom/model/feature'
|
2
|
-
|
3
|
-
module Kvom; module Model; module Feature
|
4
|
-
|
5
|
-
module AllIds
|
6
|
-
|
7
|
-
def self.included(base)
|
8
|
-
base.extend(ClassMethods)
|
9
|
-
end
|
10
|
-
|
11
|
-
module ClassMethods
|
12
|
-
def all_ids
|
13
|
-
adapter.range_values_of_hash_value("#{key_prefix}/all")
|
14
|
-
end
|
15
|
-
|
16
|
-
def all_key_for(id)
|
17
|
-
key_for("all", id)
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def all_key
|
25
|
-
self.class.all_key_for(id)
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
end; end; end
|