toystore 0.11.0 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +0 -2
- data/Changelog.md +13 -0
- data/README.md +1 -1
- data/lib/toy.rb +3 -2
- data/lib/toy/extensions/uuid.rb +17 -0
- data/lib/toy/identity.rb +2 -0
- data/lib/toy/identity/native_uuid_key_factory.rb +13 -0
- data/lib/toy/querying.rb +8 -0
- data/lib/toy/version.rb +1 -1
- data/spec/toy/extensions/uuid_spec.rb +19 -0
- data/spec/toy/identity/native_uuid_key_factory_spec.rb +60 -0
- data/spec/toy/list_spec.rb +0 -2
- data/spec/toy/querying_spec.rb +45 -17
- metadata +10 -4
data/.travis.yml
CHANGED
data/Changelog.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
I will do my best to keep this up to date with significant changes here, starting in 0.8.3.
|
2
2
|
|
3
|
+
* 0.12.0
|
4
|
+
|
5
|
+
* Ruby 1.9 only. Officially not supporting Ruby 1.8.x.
|
6
|
+
* Added :native_uuid key factory for using when your data store supports them.
|
7
|
+
* Aliased .find and .read to .get.
|
8
|
+
* Aliased .find_multiple and .read_multiple to .get_multiple.
|
9
|
+
|
10
|
+
* 0.10.x => 0.11.0
|
11
|
+
|
12
|
+
* Added get_multiple which returns Hash of id pointed at instance.
|
13
|
+
* Aliased get_multi to get_multiple which means it now returns Hash instead of Array.
|
14
|
+
* Updated to latest version of adapter.
|
15
|
+
|
3
16
|
* 0.10.4
|
4
17
|
* Support for ActiveSupport/ActiveModel 3.2.*
|
5
18
|
|
data/README.md
CHANGED
@@ -229,7 +229,7 @@ As of 0.8.3, I started keeping a [changelog](https://github.com/jnunemaker/toyst
|
|
229
229
|
## Compatibility
|
230
230
|
|
231
231
|
* Rails 3.0.*, 3.1.*, 3.2.*, Sinatra, etc. No Rails 2 (because it uses Active Model).
|
232
|
-
* Ruby 1.
|
232
|
+
* Ruby 1.9.3 only
|
233
233
|
|
234
234
|
## Mailing List
|
235
235
|
|
data/lib/toy.rb
CHANGED
@@ -90,8 +90,9 @@ module Toy
|
|
90
90
|
autoload 'Identity', 'toy/identity'
|
91
91
|
|
92
92
|
module Identity
|
93
|
-
autoload 'AbstractKeyFactory',
|
94
|
-
autoload 'UUIDKeyFactory',
|
93
|
+
autoload 'AbstractKeyFactory', 'toy/identity/abstract_key_factory'
|
94
|
+
autoload 'UUIDKeyFactory', 'toy/identity/uuid_key_factory'
|
95
|
+
autoload 'NativeUUIDKeyFactory', 'toy/identity/native_uuid_key_factory'
|
95
96
|
end
|
96
97
|
end
|
97
98
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Toy
|
2
|
+
module Extensions
|
3
|
+
module UUID
|
4
|
+
def to_store(value, *)
|
5
|
+
SimpleUUID::UUID.new(value)
|
6
|
+
end
|
7
|
+
|
8
|
+
def from_store(value, *)
|
9
|
+
SimpleUUID::UUID.new(value)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class SimpleUUID::UUID
|
16
|
+
extend Toy::Extensions::UUID
|
17
|
+
end
|
data/lib/toy/identity.rb
CHANGED
@@ -10,6 +10,8 @@ module Toy
|
|
10
10
|
def key(name_or_factory = :uuid)
|
11
11
|
@key_factory = if name_or_factory == :uuid
|
12
12
|
UUIDKeyFactory.new
|
13
|
+
elsif name_or_factory == :native_uuid
|
14
|
+
NativeUUIDKeyFactory.new
|
13
15
|
else
|
14
16
|
if name_or_factory.respond_to?(:next_key) && name_or_factory.respond_to?(:key_type)
|
15
17
|
name_or_factory
|
data/lib/toy/querying.rb
CHANGED
@@ -9,10 +9,16 @@ module Toy
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
+
alias_method :read, :get
|
13
|
+
alias_method :find, :get
|
14
|
+
|
12
15
|
def get!(id)
|
13
16
|
get(id) || raise(Toy::NotFound.new(id))
|
14
17
|
end
|
15
18
|
|
19
|
+
alias_method :read!, :get!
|
20
|
+
alias_method :find!, :get!
|
21
|
+
|
16
22
|
def get_multiple(*ids)
|
17
23
|
result = adapter.read_multiple(*ids.flatten)
|
18
24
|
result.each do |id, attrs|
|
@@ -22,6 +28,8 @@ module Toy
|
|
22
28
|
end
|
23
29
|
|
24
30
|
alias_method :get_multi, :get_multiple
|
31
|
+
alias_method :read_multiple, :get_multiple
|
32
|
+
alias_method :find_multiple, :get_multiple
|
25
33
|
|
26
34
|
def get_or_new(id)
|
27
35
|
get(id) || new(:id => id)
|
data/lib/toy/version.rb
CHANGED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe "SimpleUUID::UUID.to_store" do
|
4
|
+
it "should convert value to uuid" do
|
5
|
+
uuid = SimpleUUID::UUID.new
|
6
|
+
[uuid, uuid.to_guid, uuid.to_s, uuid.to_i].each do |value|
|
7
|
+
SimpleUUID::UUID.from_store(value).should eq(uuid)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "SimpleUUID::UUID.from_store" do
|
13
|
+
it "should convert value to uuid" do
|
14
|
+
uuid = SimpleUUID::UUID.new
|
15
|
+
[uuid, uuid.to_guid, uuid.to_s, uuid.to_i].each do |value|
|
16
|
+
SimpleUUID::UUID.from_store(value).should eq(uuid)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Toy::Identity::NativeUUIDKeyFactory do
|
4
|
+
uses_constants('User')
|
5
|
+
|
6
|
+
it "should use SimpleUUID::UUID as key_type" do
|
7
|
+
subject.key_type.should be(SimpleUUID::UUID)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should use uuid for next_key" do
|
11
|
+
result = subject.next_key(nil)
|
12
|
+
result.should be_instance_of(SimpleUUID::UUID)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#eql?" do
|
16
|
+
it "returns true for same class and key type" do
|
17
|
+
subject.eql?(described_class.new).should be_true
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns false for same class and different key type" do
|
21
|
+
other = described_class.new
|
22
|
+
other.stub(:key_type).and_return(Integer)
|
23
|
+
subject.eql?(other).should be_false
|
24
|
+
end
|
25
|
+
|
26
|
+
it "returns false for different classes" do
|
27
|
+
subject.eql?(Object.new).should be_false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "#==" do
|
32
|
+
it "returns true for same class and key type" do
|
33
|
+
subject.==(described_class.new).should be_true
|
34
|
+
end
|
35
|
+
|
36
|
+
it "returns false for same class and different key type" do
|
37
|
+
other = described_class.new
|
38
|
+
other.stub(:key_type).and_return(Integer)
|
39
|
+
subject.==(other).should be_false
|
40
|
+
end
|
41
|
+
|
42
|
+
it "returns false for different classes" do
|
43
|
+
subject.==(Object.new).should be_false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "Declaring key to be uuid" do
|
48
|
+
before(:each) do
|
49
|
+
User.key(:native_uuid)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "returns SimpleUUID::UUID as .key_type" do
|
53
|
+
User.key_type.should be(SimpleUUID::UUID)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "sets id attribute to SimpleUUID::UUID type" do
|
57
|
+
User.attributes['id'].type.should be(SimpleUUID::UUID)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/spec/toy/list_spec.rb
CHANGED
@@ -341,7 +341,6 @@ describe Toy::List do
|
|
341
341
|
@user = User.create
|
342
342
|
@game1 = @user.games.create
|
343
343
|
@game2 = @user.games.create
|
344
|
-
User.get(@user.id).games.should == [@game1, @game2]
|
345
344
|
end
|
346
345
|
|
347
346
|
it "should take multiple ids" do
|
@@ -396,7 +395,6 @@ describe Toy::List do
|
|
396
395
|
@user = User.create
|
397
396
|
@game1 = @user.games.create
|
398
397
|
@game2 = @user.games.create
|
399
|
-
User.get(@user.id).games.should == [@game1, @game2]
|
400
398
|
end
|
401
399
|
|
402
400
|
it "should destroy all" do
|
data/spec/toy/querying_spec.rb
CHANGED
@@ -7,35 +7,35 @@ describe Toy::Querying do
|
|
7
7
|
User.attribute :name, String
|
8
8
|
end
|
9
9
|
|
10
|
-
|
10
|
+
shared_examples_for "adapter read and load instance" do |method_name|
|
11
11
|
it "returns document if found" do
|
12
12
|
john = User.create(:name => 'John')
|
13
|
-
User.
|
13
|
+
User.send(method_name, john.id).name.should == 'John'
|
14
14
|
end
|
15
15
|
|
16
16
|
it "returns nil if not found" do
|
17
|
-
User.
|
17
|
+
User.send(method_name, '1').should be_nil
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
shared_examples_for "adapter read and load instance with bang" do |method_name|
|
22
22
|
it "returns document if found" do
|
23
23
|
john = User.create(:name => 'John')
|
24
|
-
User.
|
24
|
+
User.send(method_name, john.id).name.should == 'John'
|
25
25
|
end
|
26
26
|
|
27
27
|
it "raises not found exception if not found" do
|
28
28
|
lambda {
|
29
|
-
User.
|
29
|
+
User.send(method_name, '1')
|
30
30
|
}.should raise_error(Toy::NotFound, 'Could not find document with id: "1"')
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
|
34
|
+
shared_examples_for "adapter read_multiple and load instances" do |method_name|
|
35
35
|
it "returns Hash of ids pointed at result" do
|
36
36
|
john = User.create(:name => 'John')
|
37
37
|
steve = User.create(:name => 'Steve')
|
38
|
-
User.
|
38
|
+
User.send(method_name, john.id, steve.id, 'foo').should == {
|
39
39
|
john.id => john,
|
40
40
|
steve.id => steve,
|
41
41
|
'foo' => nil,
|
@@ -43,16 +43,44 @@ describe Toy::Querying do
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
+
describe ".get" do
|
47
|
+
include_examples "adapter read and load instance", :get
|
48
|
+
end
|
49
|
+
|
50
|
+
describe ".read" do
|
51
|
+
include_examples "adapter read and load instance", :read
|
52
|
+
end
|
53
|
+
|
54
|
+
describe ".find" do
|
55
|
+
include_examples "adapter read and load instance", :find
|
56
|
+
end
|
57
|
+
|
58
|
+
describe ".get!" do
|
59
|
+
include_examples "adapter read and load instance with bang", :get!
|
60
|
+
end
|
61
|
+
|
62
|
+
describe ".read!" do
|
63
|
+
include_examples "adapter read and load instance with bang", :read!
|
64
|
+
end
|
65
|
+
|
66
|
+
describe ".find!" do
|
67
|
+
include_examples "adapter read and load instance with bang", :find!
|
68
|
+
end
|
69
|
+
|
70
|
+
describe ".get_multiple" do
|
71
|
+
include_examples "adapter read_multiple and load instances", :get_multiple
|
72
|
+
end
|
73
|
+
|
74
|
+
describe ".read_multiple" do
|
75
|
+
include_examples "adapter read_multiple and load instances", :read_multiple
|
76
|
+
end
|
77
|
+
|
78
|
+
describe ".find_multiple" do
|
79
|
+
include_examples "adapter read_multiple and load instances", :find_multiple
|
80
|
+
end
|
81
|
+
|
46
82
|
describe ".get_multi" do
|
47
|
-
|
48
|
-
john = User.create(:name => 'John')
|
49
|
-
steve = User.create(:name => 'Steve')
|
50
|
-
User.get_multi(john.id, steve.id, 'foo').should == {
|
51
|
-
john.id => john,
|
52
|
-
steve.id => steve,
|
53
|
-
'foo' => nil,
|
54
|
-
}
|
55
|
-
end
|
83
|
+
include_examples "adapter read_multiple and load instances", :get_multi
|
56
84
|
end
|
57
85
|
|
58
86
|
describe ".get_or_new" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toystore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-11-
|
13
|
+
date: 2012-11-14 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: adapter
|
@@ -128,8 +128,10 @@ files:
|
|
128
128
|
- lib/toy/extensions/set.rb
|
129
129
|
- lib/toy/extensions/string.rb
|
130
130
|
- lib/toy/extensions/time.rb
|
131
|
+
- lib/toy/extensions/uuid.rb
|
131
132
|
- lib/toy/identity.rb
|
132
133
|
- lib/toy/identity/abstract_key_factory.rb
|
134
|
+
- lib/toy/identity/native_uuid_key_factory.rb
|
133
135
|
- lib/toy/identity/uuid_key_factory.rb
|
134
136
|
- lib/toy/identity_map.rb
|
135
137
|
- lib/toy/inheritance.rb
|
@@ -183,7 +185,9 @@ files:
|
|
183
185
|
- spec/toy/extensions/set_spec.rb
|
184
186
|
- spec/toy/extensions/string_spec.rb
|
185
187
|
- spec/toy/extensions/time_spec.rb
|
188
|
+
- spec/toy/extensions/uuid_spec.rb
|
186
189
|
- spec/toy/identity/abstract_key_factory_spec.rb
|
190
|
+
- spec/toy/identity/native_uuid_key_factory_spec.rb
|
187
191
|
- spec/toy/identity/uuid_key_factory_spec.rb
|
188
192
|
- spec/toy/identity_map_spec.rb
|
189
193
|
- spec/toy/identity_spec.rb
|
@@ -221,7 +225,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
221
225
|
version: '0'
|
222
226
|
segments:
|
223
227
|
- 0
|
224
|
-
hash:
|
228
|
+
hash: -1651404938588113
|
225
229
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
226
230
|
none: false
|
227
231
|
requirements:
|
@@ -230,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
230
234
|
version: '0'
|
231
235
|
segments:
|
232
236
|
- 0
|
233
|
-
hash:
|
237
|
+
hash: -1651404938588113
|
234
238
|
requirements: []
|
235
239
|
rubyforge_project:
|
236
240
|
rubygems_version: 1.8.23
|
@@ -265,7 +269,9 @@ test_files:
|
|
265
269
|
- spec/toy/extensions/set_spec.rb
|
266
270
|
- spec/toy/extensions/string_spec.rb
|
267
271
|
- spec/toy/extensions/time_spec.rb
|
272
|
+
- spec/toy/extensions/uuid_spec.rb
|
268
273
|
- spec/toy/identity/abstract_key_factory_spec.rb
|
274
|
+
- spec/toy/identity/native_uuid_key_factory_spec.rb
|
269
275
|
- spec/toy/identity/uuid_key_factory_spec.rb
|
270
276
|
- spec/toy/identity_map_spec.rb
|
271
277
|
- spec/toy/identity_spec.rb
|