toystore 0.13.1 → 0.13.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/Changelog.md +5 -3
  2. data/Gemfile +3 -1
  3. data/README.md +29 -1
  4. data/gemfiles/rails_3_0.gemfile +2 -0
  5. data/gemfiles/rails_3_1.gemfile +2 -0
  6. data/lib/toy.rb +10 -13
  7. data/lib/toy/callbacks.rb +1 -1
  8. data/lib/toy/dirty_store.rb +2 -2
  9. data/lib/toy/identity_map.rb +2 -2
  10. data/lib/toy/instrumentation/active_support_notifications.rb +5 -0
  11. data/lib/toy/instrumentation/log_subscriber.rb +49 -0
  12. data/lib/toy/instrumentation/metriks.rb +5 -0
  13. data/lib/toy/instrumentation/metriks_subscriber.rb +16 -0
  14. data/lib/toy/instrumentation/statsd.rb +5 -0
  15. data/lib/toy/instrumentation/statsd_subscriber.rb +22 -0
  16. data/lib/toy/instrumentation/subscriber.rb +38 -0
  17. data/lib/toy/instrumenters/memory.rb +27 -0
  18. data/lib/toy/instrumenters/noop.rb +9 -0
  19. data/lib/toy/middleware/identity_map.rb +10 -21
  20. data/lib/toy/object.rb +0 -1
  21. data/lib/toy/persistence.rb +22 -4
  22. data/lib/toy/querying.rb +46 -18
  23. data/lib/toy/version.rb +1 -1
  24. data/perf/reads.rb +1 -4
  25. data/perf/writes.rb +0 -3
  26. data/spec/helper.rb +4 -12
  27. data/spec/support/fake_udp_socket.rb +27 -0
  28. data/spec/support/instrumenter_helpers.rb +14 -0
  29. data/spec/toy/instrumentation/log_subscriber_spec.rb +85 -0
  30. data/spec/toy/instrumentation/metriks_subscriber_spec.rb +37 -0
  31. data/spec/toy/instrumentation/statsd_subscriber_spec.rb +47 -0
  32. data/spec/toy/instrumenters/memory_spec.rb +26 -0
  33. data/spec/toy/instrumenters/noop_spec.rb +22 -0
  34. data/spec/toy/persistence_spec.rb +45 -3
  35. data/spec/toy/querying_spec.rb +121 -36
  36. data/spec/toy_spec.rb +14 -16
  37. metadata +27 -7
  38. data/lib/toy/logger.rb +0 -15
  39. data/spec/toy/logger_spec.rb +0 -21
@@ -8,13 +8,53 @@ describe Toy::Querying do
8
8
  end
9
9
 
10
10
  shared_examples_for "adapter read and load instance" do |method_name|
11
- it "returns document if found" do
12
- john = User.create(:name => 'John')
13
- User.send(method_name, john.id).name.should == 'John'
11
+ context "when document found" do
12
+ before do
13
+ setup_memory_instrumenter
14
+
15
+ @user = User.create(:name => 'John')
16
+ @result = User.send(method_name, @user.id, {some: 'thing'})
17
+ end
18
+
19
+ it "returns document" do
20
+ @result.should eq(@user)
21
+ end
22
+
23
+ it "is instrumented and sets payload hit to true" do
24
+ event = instrumenter.events.last
25
+ event.should_not be_nil
26
+ event.name.should eq('read.toystore')
27
+ event.payload.should eq({
28
+ :id => @user.id,
29
+ :options => {some: 'thing'},
30
+ :model => User,
31
+ :hit => true,
32
+ })
33
+ end
14
34
  end
15
35
 
16
- it "returns nil if not found" do
17
- User.send(method_name, '1').should be_nil
36
+ context "when document not found" do
37
+ before do
38
+ setup_memory_instrumenter
39
+
40
+ @id = 'blah'
41
+ @result = User.send(method_name, @id, {some: 'thing'})
42
+ end
43
+
44
+ it "returns nil" do
45
+ @result.should be_nil
46
+ end
47
+
48
+ it "is instrumented and sets payload :hit to false" do
49
+ event = instrumenter.events.last
50
+ event.should_not be_nil
51
+ event.payload.should eq({
52
+ :id => @id,
53
+ :options => {some: 'thing'},
54
+ :model => User,
55
+ :hit => false,
56
+ })
57
+ end
18
58
  end
19
59
 
20
60
  it "passes options to adapter read" do
@@ -54,6 +94,36 @@ describe Toy::Querying do
54
94
  }
55
95
  end
56
96
 
97
+ it "is instrumented" do
98
+ setup_memory_instrumenter
99
+
100
+ john = User.create(:name => 'John')
101
+ steve = User.create(:name => 'Steve')
102
+
103
+ ids = [
104
+ john.id,
105
+ steve.id,
106
+ 'foo',
107
+ ]
108
+
109
+ User.send(method_name, ids, some: 'thing').should == {
110
+ john.id => john,
111
+ steve.id => steve,
112
+ 'foo' => nil,
113
+ }
114
+
115
+ event = instrumenter.events.last
116
+ event.should_not be_nil
117
+ event.name.should eq('read_multiple.toystore')
118
+ event.payload.should eq({
119
+ :ids => ids,
120
+ :options => {some: 'thing'},
121
+ :model => User,
122
+ :hits => 2,
123
+ :misses => 1,
124
+ })
125
+ end
126
+
57
127
  it "passes options to adapter read_multiple" do
58
128
  john = User.create(:name => 'John')
59
129
  User.adapter.should_receive(:read_multiple).with([john.id], my: 'options').and_return({john.id => {'name' => 'John'}})
@@ -62,13 +132,54 @@ describe Toy::Querying do
62
132
  end
63
133
 
64
134
  shared_examples_for "adapter key?" do |method_name|
65
- it "returns true if key exists" do
66
- user = User.create(:name => 'John')
67
- User.send(method_name, user.id).should be_true
135
+ context "when found" do
136
+ before do
137
+ setup_memory_instrumenter
138
+
139
+ @user = User.create(:name => 'John')
140
+ @result = User.send(method_name, @user.id, {some: 'thing'})
141
+ end
142
+
143
+ it "returns true" do
144
+ @result.should be_true
145
+ end
146
+
147
+ it "is instrumented and sets hit to true" do
148
+ event = instrumenter.events.last
149
+ event.should_not be_nil
150
+ event.name.should eq('key.toystore')
151
+ event.payload.should eq({
152
+ :id => @user.id,
153
+ :options => {some: 'thing'},
154
+ :model => User,
155
+ :hit => true,
156
+ })
157
+ end
68
158
  end
69
159
 
70
- it "returns false if key does not exist" do
71
- User.send(method_name, 'taco:bell:tacos').should be_false
160
+ context "when not found" do
161
+ before do
162
+ setup_memory_instrumenter
163
+
164
+ @id = 'taco:bell:tacos'
165
+ @result = User.send(method_name, @id, {some: 'thing'})
166
+ end
167
+
168
+ it "returns false" do
169
+ @result.should be_false
170
+ end
171
+
172
+ it "is instrumented and sets hit to false" do
173
+ event = instrumenter.events.last
174
+ event.should_not be_nil
175
+ event.name.should eq('key.toystore')
176
+ event.payload.should eq({
177
+ :id => @id,
178
+ :options => {some: 'thing'},
179
+ :model => User,
180
+ :hit => false,
181
+ })
182
+ end
72
183
  end
73
184
  end
74
185
 
@@ -108,32 +219,6 @@ describe Toy::Querying do
108
219
  include_examples "adapter read_multiple and load instances", :find_multiple
109
220
  end
110
221
 
111
- describe ".get_or_new" do
112
- it "returns found" do
113
- user = User.create
114
- User.get_or_new(user.id).should == user
115
- end
116
-
117
- it "creates new with id set if not found" do
118
- user = User.get_or_new('foo')
119
- user.should be_instance_of(User)
120
- user.id.should == 'foo'
121
- end
122
- end
123
-
124
- describe ".get_or_create" do
125
- it "returns found" do
126
- user = User.create
127
- User.get_or_create(user.id).should == user
128
- end
129
-
130
- it "creates new with id set if not found" do
131
- user = User.get_or_create('foo')
132
- user.should be_instance_of(User)
133
- user.id.should == 'foo'
134
- end
135
- end
136
-
137
222
  describe ".key?" do
138
223
  include_examples "adapter key?", :key?
139
224
  end
@@ -3,22 +3,6 @@ require 'helper'
3
3
  describe Toy do
4
4
  uses_constants('User', 'Game')
5
5
 
6
- describe ".logger" do
7
- before do
8
- @logger = Toy.logger
9
- end
10
-
11
- after do
12
- Toy.logger = @logger
13
- end
14
-
15
- it "should set the default logger" do
16
- logger = stub
17
- Toy.logger = logger
18
- Toy.logger.should == logger
19
- end
20
- end
21
-
22
6
  describe ".key_factory" do
23
7
  it "should set the default key_factory" do
24
8
  key_factory = stub
@@ -31,4 +15,18 @@ describe Toy do
31
15
  Toy.key_factory.should be_instance_of(Toy::Identity::UUIDKeyFactory)
32
16
  end
33
17
  end
18
+
19
+ describe ".instrumenter" do
20
+ it "defaults to noop" do
21
+ described_class.instrumenter.should eq(Toy::Instrumenters::Noop)
22
+ end
23
+ end
24
+
25
+ describe ".instrumenter=" do
26
+ it "sets instrumenter" do
27
+ instrumenter = double('Instrumenter')
28
+ Toy.instrumenter = instrumenter
29
+ Toy.instrumenter.should be(instrumenter)
30
+ end
31
+ end
34
32
  end
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.13.1
4
+ version: 0.13.2
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: 2013-01-26 00:00:00.000000000 Z
13
+ date: 2013-04-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: adapter
@@ -140,9 +140,17 @@ files:
140
140
  - lib/toy/identity_map.rb
141
141
  - lib/toy/inheritance.rb
142
142
  - lib/toy/inspect.rb
143
+ - lib/toy/instrumentation/active_support_notifications.rb
144
+ - lib/toy/instrumentation/log_subscriber.rb
145
+ - lib/toy/instrumentation/metriks.rb
146
+ - lib/toy/instrumentation/metriks_subscriber.rb
147
+ - lib/toy/instrumentation/statsd.rb
148
+ - lib/toy/instrumentation/statsd_subscriber.rb
149
+ - lib/toy/instrumentation/subscriber.rb
150
+ - lib/toy/instrumenters/memory.rb
151
+ - lib/toy/instrumenters/noop.rb
143
152
  - lib/toy/list.rb
144
153
  - lib/toy/lists.rb
145
- - lib/toy/logger.rb
146
154
  - lib/toy/mass_assignment_security.rb
147
155
  - lib/toy/middleware/identity_map.rb
148
156
  - lib/toy/object.rb
@@ -165,7 +173,9 @@ files:
165
173
  - spec/helper.rb
166
174
  - spec/spec.opts
167
175
  - spec/support/constants.rb
176
+ - spec/support/fake_udp_socket.rb
168
177
  - spec/support/identity_map_matcher.rb
178
+ - spec/support/instrumenter_helpers.rb
169
179
  - spec/support/name_and_number_key_factory.rb
170
180
  - spec/support/objects.rb
171
181
  - spec/support/shared_active_model_lint.rb
@@ -198,9 +208,13 @@ files:
198
208
  - spec/toy/identity_spec.rb
199
209
  - spec/toy/inheritance_spec.rb
200
210
  - spec/toy/inspect_spec.rb
211
+ - spec/toy/instrumentation/log_subscriber_spec.rb
212
+ - spec/toy/instrumentation/metriks_subscriber_spec.rb
213
+ - spec/toy/instrumentation/statsd_subscriber_spec.rb
214
+ - spec/toy/instrumenters/memory_spec.rb
215
+ - spec/toy/instrumenters/noop_spec.rb
201
216
  - spec/toy/list_spec.rb
202
217
  - spec/toy/lists_spec.rb
203
- - spec/toy/logger_spec.rb
204
218
  - spec/toy/mass_assignment_security_spec.rb
205
219
  - spec/toy/middleware/identity_map_spec.rb
206
220
  - spec/toy/object_spec.rb
@@ -230,7 +244,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
230
244
  version: '0'
231
245
  segments:
232
246
  - 0
233
- hash: 3156935686083657765
247
+ hash: 4223268135797679612
234
248
  required_rubygems_version: !ruby/object:Gem::Requirement
235
249
  none: false
236
250
  requirements:
@@ -239,7 +253,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
239
253
  version: '0'
240
254
  segments:
241
255
  - 0
242
- hash: 3156935686083657765
256
+ hash: 4223268135797679612
243
257
  requirements: []
244
258
  rubyforge_project:
245
259
  rubygems_version: 1.8.23
@@ -250,7 +264,9 @@ test_files:
250
264
  - spec/helper.rb
251
265
  - spec/spec.opts
252
266
  - spec/support/constants.rb
267
+ - spec/support/fake_udp_socket.rb
253
268
  - spec/support/identity_map_matcher.rb
269
+ - spec/support/instrumenter_helpers.rb
254
270
  - spec/support/name_and_number_key_factory.rb
255
271
  - spec/support/objects.rb
256
272
  - spec/support/shared_active_model_lint.rb
@@ -283,9 +299,13 @@ test_files:
283
299
  - spec/toy/identity_spec.rb
284
300
  - spec/toy/inheritance_spec.rb
285
301
  - spec/toy/inspect_spec.rb
302
+ - spec/toy/instrumentation/log_subscriber_spec.rb
303
+ - spec/toy/instrumentation/metriks_subscriber_spec.rb
304
+ - spec/toy/instrumentation/statsd_subscriber_spec.rb
305
+ - spec/toy/instrumenters/memory_spec.rb
306
+ - spec/toy/instrumenters/noop_spec.rb
286
307
  - spec/toy/list_spec.rb
287
308
  - spec/toy/lists_spec.rb
288
- - spec/toy/logger_spec.rb
289
309
  - spec/toy/mass_assignment_security_spec.rb
290
310
  - spec/toy/middleware/identity_map_spec.rb
291
311
  - spec/toy/object_spec.rb
@@ -1,15 +0,0 @@
1
- module Toy
2
- module Logger
3
- extend ActiveSupport::Concern
4
-
5
- module ClassMethods
6
- def logger
7
- Toy.logger
8
- end
9
- end
10
-
11
- def logger
12
- Toy.logger
13
- end
14
- end
15
- end
@@ -1,21 +0,0 @@
1
- require 'helper'
2
-
3
- describe Toy::Logger do
4
- uses_objects('User')
5
-
6
- before do
7
- @logger = Toy.logger
8
- end
9
-
10
- after do
11
- Toy.logger = @logger
12
- end
13
-
14
- it "should use Toy.logger for class" do
15
- User.logger.should == Toy.logger
16
- end
17
-
18
- it "should use Toy.logger for instance" do
19
- User.new.logger.should == Toy.logger
20
- end
21
- end