fozzie 0.0.27 → 1.0.0

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 (42) hide show
  1. data/.gitignore +2 -1
  2. data/Guardfile +2 -2
  3. data/README.md +22 -11
  4. data/Rakefile +1 -1
  5. data/fozzie.gemspec +8 -14
  6. data/lib/core_ext/module/monitor.rb +4 -3
  7. data/lib/fozzie.rb +6 -7
  8. data/lib/fozzie/adapter.rb +1 -0
  9. data/lib/fozzie/adapter/statsd.rb +86 -0
  10. data/lib/fozzie/bulk_dsl.rb +28 -0
  11. data/lib/fozzie/configuration.rb +32 -13
  12. data/lib/fozzie/dsl.rb +19 -0
  13. data/lib/fozzie/exception.rb +5 -0
  14. data/lib/fozzie/interface.rb +30 -15
  15. data/lib/fozzie/rack/middleware.rb +3 -1
  16. data/lib/fozzie/sniff.rb +28 -33
  17. data/lib/fozzie/version.rb +1 -1
  18. data/spec/config/fozzie.yml +2 -1
  19. data/spec/lib/core_ext/module/monitor_spec.rb +9 -0
  20. data/spec/lib/fozzie/adapter/statsd_spec.rb +82 -0
  21. data/spec/lib/fozzie/bulk_dsl_spec.rb +47 -0
  22. data/spec/lib/fozzie/configuration_spec.rb +34 -20
  23. data/spec/lib/fozzie/dsl_spec.rb +16 -0
  24. data/spec/lib/fozzie/rack/middleware_spec.rb +6 -36
  25. data/spec/lib/fozzie/rack/sinatra_spec.rb +31 -0
  26. data/spec/lib/fozzie/sniff_spec.rb +37 -37
  27. data/spec/lib/fozzie/version_spec.rb +1 -1
  28. data/spec/lib/fozzie_spec.rb +19 -3
  29. data/spec/shared_examples/fozzie_adapter.rb +7 -0
  30. data/spec/shared_examples/interface.rb +160 -0
  31. data/spec/spec_helper.rb +20 -10
  32. metadata +31 -74
  33. data/lib/core_ext/hash.rb +0 -16
  34. data/lib/fozzie/mill.rb +0 -50
  35. data/lib/fozzie/rails/engine.rb +0 -15
  36. data/lib/fozzie/rails/middleware.rb +0 -39
  37. data/lib/fozzie/railtie.rb +0 -15
  38. data/lib/fozzie/socket.rb +0 -53
  39. data/spec/lib/core_ext/hash_spec.rb +0 -33
  40. data/spec/lib/fozzie/interface_spec.rb +0 -180
  41. data/spec/lib/fozzie/mill_spec.rb +0 -43
  42. data/spec/lib/fozzie/rails/middleware_spec.rb +0 -125
@@ -0,0 +1,31 @@
1
+ require 'fozzie/rack/middleware'
2
+ require 'sinatra/base'
3
+ require 'rack/test'
4
+
5
+ describe "Sinatra Server with Middleware" do
6
+ include Rack::Test::Methods
7
+
8
+ def app
9
+ Sinatra.new do
10
+ set :environment, :test
11
+ use Fozzie::Rack::Middleware
12
+ get('/') { "echo" }
13
+ get('/somewhere/nice') { "echo" }
14
+ end
15
+ end
16
+
17
+ it "sends stats request on root" do
18
+ S.should_receive(:timing).with('index.render', anything, anything)
19
+ get '/'
20
+ last_response.should be_ok
21
+ last_response.body.should == 'echo'
22
+ end
23
+
24
+ it "sends stats request on nested path" do
25
+ S.should_receive(:timing).with('somewhere.nice.render', anything, anything)
26
+
27
+ get '/somewhere/nice'
28
+ last_response.should be_ok
29
+ last_response.body.should == 'echo'
30
+ end
31
+ end
@@ -13,9 +13,15 @@ describe Fozzie::Sniff do
13
13
 
14
14
  def self.badger; :cares end
15
15
 
16
+ _monitor("my.awesome.class.bucket.name")
17
+ def self.class_method_with_non_default_bucket_name; true; end
18
+
16
19
  _monitor
17
- def foo; :foo end
20
+ def foo; :foo; end
18
21
 
22
+ _monitor("my.awesome.bucket.name")
23
+ def method_with_non_default_bucket_name; true; end
24
+
19
25
  _monitor
20
26
  def sloth(a, b, c); [a,b,c] end
21
27
 
@@ -30,34 +36,23 @@ describe Fozzie::Sniff do
30
36
  def self.class_method_yielding_to_block
31
37
  yield(:retval_from_block) if block_given?
32
38
  end
33
-
34
- self
35
- end
36
- end
37
-
38
-
39
- context "environments" do
40
- subject { klass }
41
-
42
- it "is disabled in test" do
43
- Fozzie.c.stubs(:env).returns('test')
44
- S.expects(:time_for).with(['foo_bar', 'bar!']).never
45
-
46
- subject.bar!
47
39
  end
48
40
 
49
- it "is enabled in development" do
50
- Fozzie.c.stubs(:env).returns('development')
51
- S.expects(:time_for).with(['foo_bar', 'bar!'])
41
+ FooBar
42
+ end
52
43
 
53
- subject.bar!
54
- end
44
+ # Turn on sniffing for the duration of this spec
45
+ before(:all) do
46
+ Fozzie.c.sniff_envs << :test
47
+ end
55
48
 
49
+ after(:all) do
50
+ Fozzie.c.sniff_envs.delete(:test)
56
51
  end
57
52
 
58
53
  context 'class methods' do
59
54
  subject { klass }
60
-
55
+
61
56
  it "aliases methods for monitoring" do
62
57
  subject.methods.grep(/bar/).should =~ [:bar!, :"bar_with_monitor!", :"bar_without_monitor!"]
63
58
  end
@@ -67,7 +62,7 @@ describe Fozzie::Sniff do
67
62
  end
68
63
 
69
64
  it "utilises Fozzie" do
70
- S.expects(:time_for).with(['foo_bar', 'bar!'])
65
+ S.should_receive(:time_for).with(['foo_bar', 'bar!'])
71
66
 
72
67
  subject.bar!
73
68
  end
@@ -78,23 +73,26 @@ describe Fozzie::Sniff do
78
73
  end
79
74
 
80
75
  it "does not monitor when mapped" do
81
- S.expects(:time_for).with(['foo_bar', 'badger']).never
76
+ S.should_receive(:time_for).with(['foo_bar', 'badger']).never
82
77
 
83
78
  subject.badger.should eq :cares
84
79
  end
85
80
 
86
-
87
- it "yields to a block when given" do
88
- subject.class_method_yielding_to_block do |value_from_block|
89
- value_from_block
90
- end.should eq :retval_from_block
81
+ it "optionally sets the bucket name" do
82
+ S.should_receive(:time_for).with("my.awesome.class.bucket.name")
83
+
84
+ subject.class_method_with_non_default_bucket_name
91
85
  end
92
86
 
87
+
88
+ it "yields to a block when given" do
89
+ subject.class_method_yielding_to_block {|val| val }.should eq :retval_from_block
90
+ end
93
91
  end
94
92
 
95
93
  context 'instance methods' do
96
- subject { FooBar.new }
97
-
94
+ subject { klass.new }
95
+
98
96
  it "aliases methods for monitoring" do
99
97
  subject.methods.grep(/foo/).should =~ [:foo, :foo_with_monitor, :foo_without_monitor]
100
98
  end
@@ -104,28 +102,30 @@ describe Fozzie::Sniff do
104
102
  end
105
103
 
106
104
  it "utilises Fozzie" do
107
- S.expects(:time_for).with(['foo_bar', 'foo'])
105
+ S.should_receive(:time_for).with(['foo_bar', 'foo'])
108
106
 
109
107
  subject.foo
110
108
  end
111
109
 
110
+ it "optionally sets the bucket name" do
111
+ S.should_receive(:time_for).with("my.awesome.bucket.name")
112
+
113
+ subject.method_with_non_default_bucket_name
114
+ end
115
+
112
116
  it "handles arguments" do
113
117
  a = [:slow, :slower, :slowest]
114
118
  subject.sloth(*a).should eq a
115
119
  end
116
120
 
117
121
  it "does not monitor when mapped" do
118
- S.expects(:time_for).with(['foo_bar', 'honeybadger']).never
122
+ S.should_receive(:time_for).with(['foo_bar', 'honeybadger']).never
119
123
 
120
124
  subject.honeybadger.should eq :dontcare
121
125
  end
122
126
 
123
127
  it "yields to a block when given" do
124
- subject.method_yielding_to_block do |value_from_block|
125
- value_from_block
126
- end.should eq :retval_from_block
128
+ subject.method_yielding_to_block {|val| val }.should eq :retval_from_block
127
129
  end
128
-
129
130
  end
130
-
131
131
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe "Fozzie Version" do
4
4
 
5
- it "exists" do
5
+ it "is correct formatted" do
6
6
  Fozzie::VERSION.should be_kind_of(String)
7
7
  Fozzie::VERSION.should match(/\d{1,3}?\.?/)
8
8
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
+ require 'logger'
2
3
 
3
4
  describe Fozzie do
4
-
5
5
  it "allows dynamic assignment" do
6
6
  { :host => 'somewhere.local', :port => 99 }.each do |field, val|
7
7
  Fozzie.configure {|c| c.send("#{field}=", val) }
@@ -9,6 +9,23 @@ describe Fozzie do
9
9
  end
10
10
  end
11
11
 
12
+ describe ".logger" do
13
+ let(:logger) { double "logger" }
14
+
15
+ before do
16
+ @old_logger = Fozzie.logger
17
+ end
18
+
19
+ it "assigns a logger" do
20
+ Fozzie.logger = logger
21
+ Fozzie.logger.should eq logger
22
+ end
23
+
24
+ after do
25
+ Fozzie.logger = @old_logger
26
+ end
27
+ end
28
+
12
29
  it "has configuration" do
13
30
  Fozzie.config.should be_kind_of(Fozzie::Configuration)
14
31
  Fozzie.c.should be_kind_of(Fozzie::Configuration)
@@ -19,5 +36,4 @@ describe Fozzie do
19
36
  Kernel.const_defined?(k).should == true
20
37
  end
21
38
  end
22
-
23
- end
39
+ end
@@ -0,0 +1,7 @@
1
+ shared_examples_for "fozzie adapter" do
2
+
3
+ it { should respond_to(:register) }
4
+
5
+ it { should respond_to(:delimeter) }
6
+
7
+ end
@@ -0,0 +1,160 @@
1
+ shared_examples "interface" do
2
+
3
+ it "#increment" do
4
+ subject.should_receive(:send).with('wat', 1, :count, 1)
5
+ subject.increment 'wat'
6
+ end
7
+
8
+ it "#decrement" do
9
+ subject.should_receive(:send).with('wat', -1, :count, 1)
10
+ subject.decrement 'wat'
11
+ end
12
+
13
+ it "#count" do
14
+ subject.should_receive(:send).with('wat', 5, :count, 1)
15
+ subject.count 'wat', 5
16
+ end
17
+
18
+ it "#timing" do
19
+ subject.should_receive(:send).with('wat', 500, :timing, 1)
20
+ subject.timing 'wat', 500
21
+ end
22
+
23
+ it "times a given block" do
24
+ subject.should_receive(:timing).with do |b, val, timing|
25
+ b == 'data.bin' && (1..11).include?(val)
26
+ end.exactly(3).times
27
+
28
+ subject.time_for('data.bin') { sleep 0.01 }
29
+ subject.time_to_do('data.bin') { sleep 0.01 }
30
+ subject.time('data.bin') { sleep 0.01 }
31
+ end
32
+
33
+ describe "event" do
34
+ it "for a commit" do
35
+ subject.should_receive(:gauge).with(['event', 'commit', nil], anything).twice
36
+ subject.commit
37
+ subject.committed
38
+ end
39
+
40
+ it "for a build" do
41
+ subject.should_receive(:gauge).with(['event', 'build', nil], anything).twice
42
+ subject.build
43
+ subject.built
44
+ end
45
+
46
+ it "for a deploy" do
47
+ subject.should_receive(:gauge).with(['event', 'deploy', nil], anything).twice
48
+ subject.deploy
49
+ subject.deployed
50
+ end
51
+
52
+ it "for anything" do
53
+ subject.should_receive(:send).with(['event', 'foo', nil], anything, :gauge, 1)
54
+ subject.event 'foo'
55
+ end
56
+
57
+ it "accepts an app name" do
58
+ subject.should_receive(:send).with(['event', 'foo', 'fozzie'], anything, :gauge, 1)
59
+ subject.event 'foo', 'fozzie'
60
+ end
61
+ end
62
+
63
+ describe "#increment_on" do
64
+ it "registers success" do
65
+ subject.should_receive(:increment).with(["event.increment", "success"], 1)
66
+ subject.increment_on('event.increment', true).should == true
67
+ end
68
+
69
+ it "registers failure" do
70
+ subject.should_receive(:increment).with(["event.increment", "fail"], 1)
71
+ subject.increment_on('event.increment', false).should == false
72
+ end
73
+
74
+ it "simply questions the passed val with if" do
75
+ a = mock
76
+ a.should_receive(:save).and_return({})
77
+ subject.should_receive(:increment).with(["event.increment", "success"], 1)
78
+ subject.increment_on('event.increment', a.save).should == {}
79
+ end
80
+
81
+ it "registers fail on nil return" do
82
+ a = mock
83
+ a.should_receive(:save).and_return(nil)
84
+ subject.should_receive(:increment).with(["event.increment", "fail"], 1)
85
+ subject.increment_on('event.increment', a.save).should == nil
86
+ end
87
+
88
+ describe "performing actions" do
89
+ it "registers success" do
90
+ a = mock
91
+ a.should_receive(:save).and_return(true)
92
+ subject.should_receive(:increment).with(["event.increment", "success"], 1)
93
+ subject.increment_on('event.increment', a.save).should == true
94
+ end
95
+
96
+ it "registers failure" do
97
+ a = mock
98
+ a.should_receive(:save).and_return(false)
99
+ subject.should_receive(:increment).with(["event.increment", "fail"], 1)
100
+ subject.increment_on('event.increment', a.save).should == false
101
+ end
102
+
103
+ it "registers positive even when nested" do
104
+ a = mock
105
+ a.should_receive(:save).and_return(true)
106
+ subject.should_receive(:timing).with('event.run', anything, anything)
107
+ subject.should_receive(:increment).with(["event.increment", "success"], 1)
108
+
109
+ res = subject.time_to_do "event.run" do
110
+ subject.increment_on('event.increment', a.save)
111
+ end
112
+ res.should == true
113
+ end
114
+
115
+ it "registers negative even when nested" do
116
+ a = mock
117
+ a.should_receive(:save).and_return(false)
118
+ subject.should_receive(:timing).with('event.run', anything, anything)
119
+ subject.should_receive(:increment).with(["event.increment", "fail"], 1)
120
+
121
+ res = subject.time_to_do "event.run" do
122
+ subject.increment_on('event.increment', a.save)
123
+ end
124
+ res.should == false
125
+ end
126
+ end
127
+ end
128
+
129
+ describe "#bulk" do
130
+
131
+ it "registers statistics in a single call" do
132
+ Fozzie.c.adapter.should_receive(:register).once
133
+
134
+ subject.bulk do
135
+ increment :foo
136
+ decrement :bar
137
+ end
138
+ end
139
+
140
+ end
141
+
142
+ it "registers a gauge measurement" do
143
+ subject.should_receive(:send).with("mystat", 99, :gauge, 1)
144
+ subject.gauge("mystat", 99)
145
+ end
146
+
147
+ it "raises exception if natural exception from block" do
148
+ proc { subject.time_to_do('data.bin', 1, :gauge, 1) { raise ArgumentError, "testing" } }.should raise_error(ArgumentError)
149
+ end
150
+
151
+ it "only calls the block once on error" do
152
+ Fozzie.c.adapter.stub(:send) { raise SocketError }
153
+ i = 0
154
+ p = proc {|n| (n + 1) }
155
+ val = subject.time_to_do('data.bin') { i+= p.call(i) }
156
+
157
+ val.should == 1
158
+ end
159
+
160
+ end
@@ -1,19 +1,29 @@
1
1
  ENV['RACK_ENV'] ||= 'test'
2
2
 
3
- root = File.expand_path('../', File.dirname(__FILE__))
4
- lib = File.expand_path('lib', root)
3
+ # Basic path registers
4
+ root = File.expand_path('../', File.dirname(__FILE__))
5
+ lib = File.expand_path('lib', root)
5
6
  $:.unshift(root, lib)
6
7
 
7
- require 'simplecov'
8
- SimpleCov.start
9
-
10
- RSpec.configure do |config|
11
- config.mock_with :mocha
12
- end
8
+ # Shared Examples
9
+ Dir[File.expand_path('spec/shared_examples/*.rb')].each {|r| require r }
13
10
 
14
11
  require 'fozzie'
15
12
 
13
+ module Fozzie
14
+ class Adapter::TestAdapter
15
+ def register(*params); end
16
+ def delimeter; ""; end
17
+ def safe_separator; ""; end
18
+ end
19
+ end
20
+
16
21
  Fozzie.configure do |config|
17
- config.host = '127.0.0.1'
18
- config.port = 8809
22
+ config.host = '127.0.0.1'
23
+ config.port = 8809
24
+ config.adapter = "TestAdapter"
25
+ end
26
+
27
+ RSpec.configure do |config|
28
+ config.order = :random
19
29
  end
metadata CHANGED
@@ -1,16 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fozzie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.27
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Marc Watts
9
- - Dave Nolan
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2012-08-22 00:00:00.000000000 Z
12
+ date: 2012-10-07 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: sys-uname
@@ -77,7 +76,7 @@ dependencies:
77
76
  - !ruby/object:Gem::Version
78
77
  version: '0'
79
78
  - !ruby/object:Gem::Dependency
80
- name: mocha
79
+ name: guard
81
80
  requirement: !ruby/object:Gem::Requirement
82
81
  none: false
83
82
  requirements:
@@ -93,7 +92,7 @@ dependencies:
93
92
  - !ruby/object:Gem::Version
94
93
  version: '0'
95
94
  - !ruby/object:Gem::Dependency
96
- name: syntax
95
+ name: guard-rspec
97
96
  requirement: !ruby/object:Gem::Requirement
98
97
  none: false
99
98
  requirements:
@@ -109,7 +108,7 @@ dependencies:
109
108
  - !ruby/object:Gem::Version
110
109
  version: '0'
111
110
  - !ruby/object:Gem::Dependency
112
- name: simplecov
111
+ name: rb-fsevent
113
112
  requirement: !ruby/object:Gem::Requirement
114
113
  none: false
115
114
  requirements:
@@ -156,57 +155,9 @@ dependencies:
156
155
  - - ! '>='
157
156
  - !ruby/object:Gem::Version
158
157
  version: '0'
159
- - !ruby/object:Gem::Dependency
160
- name: actionpack
161
- requirement: !ruby/object:Gem::Requirement
162
- none: false
163
- requirements:
164
- - - '='
165
- - !ruby/object:Gem::Version
166
- version: 2.3.14
167
- type: :development
168
- prerelease: false
169
- version_requirements: !ruby/object:Gem::Requirement
170
- none: false
171
- requirements:
172
- - - '='
173
- - !ruby/object:Gem::Version
174
- version: 2.3.14
175
- - !ruby/object:Gem::Dependency
176
- name: guard
177
- requirement: !ruby/object:Gem::Requirement
178
- none: false
179
- requirements:
180
- - - ! '>='
181
- - !ruby/object:Gem::Version
182
- version: '0'
183
- type: :development
184
- prerelease: false
185
- version_requirements: !ruby/object:Gem::Requirement
186
- none: false
187
- requirements:
188
- - - ! '>='
189
- - !ruby/object:Gem::Version
190
- version: '0'
191
- - !ruby/object:Gem::Dependency
192
- name: guard-rspec
193
- requirement: !ruby/object:Gem::Requirement
194
- none: false
195
- requirements:
196
- - - ! '>='
197
- - !ruby/object:Gem::Version
198
- version: '0'
199
- type: :development
200
- prerelease: false
201
- version_requirements: !ruby/object:Gem::Requirement
202
- none: false
203
- requirements:
204
- - - ! '>='
205
- - !ruby/object:Gem::Version
206
- version: '0'
207
- description: ! "\n Gem to make statistics sending to Statsd from Ruby applications
208
- simple and efficient as possible.\n Inspired by the original ruby-statsd gem
209
- by Etsy, currently used by Lonely Planet Online.\n "
158
+ description: ! "\n Gem to make statistics sending from Ruby applications simple
159
+ and efficient as possible.\n Currently supports Statsd, and is inspired by the
160
+ original ruby-statsd gem by Etsy.\n "
210
161
  email:
211
162
  - marc.watts@lonelyplanet.co.uk
212
163
  executables: []
@@ -222,31 +173,33 @@ files:
222
173
  - Rakefile
223
174
  - fozzie.gemspec
224
175
  - fozzie.yml.example
225
- - lib/core_ext/hash.rb
226
176
  - lib/core_ext/module/monitor.rb
227
177
  - lib/fozzie.rb
178
+ - lib/fozzie/adapter.rb
179
+ - lib/fozzie/adapter/statsd.rb
180
+ - lib/fozzie/bulk_dsl.rb
228
181
  - lib/fozzie/configuration.rb
182
+ - lib/fozzie/dsl.rb
183
+ - lib/fozzie/exception.rb
229
184
  - lib/fozzie/interface.rb
230
- - lib/fozzie/mill.rb
231
185
  - lib/fozzie/rack/middleware.rb
232
- - lib/fozzie/rails/engine.rb
233
- - lib/fozzie/rails/middleware.rb
234
- - lib/fozzie/railtie.rb
235
186
  - lib/fozzie/sniff.rb
236
- - lib/fozzie/socket.rb
237
187
  - lib/fozzie/version.rb
238
188
  - resources/mill.js.example
239
189
  - resources/mill.min.js.example
240
190
  - spec/config/fozzie.yml
241
- - spec/lib/core_ext/hash_spec.rb
191
+ - spec/lib/core_ext/module/monitor_spec.rb
192
+ - spec/lib/fozzie/adapter/statsd_spec.rb
193
+ - spec/lib/fozzie/bulk_dsl_spec.rb
242
194
  - spec/lib/fozzie/configuration_spec.rb
243
- - spec/lib/fozzie/interface_spec.rb
244
- - spec/lib/fozzie/mill_spec.rb
195
+ - spec/lib/fozzie/dsl_spec.rb
245
196
  - spec/lib/fozzie/rack/middleware_spec.rb
246
- - spec/lib/fozzie/rails/middleware_spec.rb
197
+ - spec/lib/fozzie/rack/sinatra_spec.rb
247
198
  - spec/lib/fozzie/sniff_spec.rb
248
199
  - spec/lib/fozzie/version_spec.rb
249
200
  - spec/lib/fozzie_spec.rb
201
+ - spec/shared_examples/fozzie_adapter.rb
202
+ - spec/shared_examples/interface.rb
250
203
  - spec/spec_helper.rb
251
204
  homepage:
252
205
  licenses: []
@@ -262,7 +215,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
262
215
  version: '0'
263
216
  segments:
264
217
  - 0
265
- hash: 1975054614990968952
218
+ hash: 254608194485651365
266
219
  required_rubygems_version: !ruby/object:Gem::Requirement
267
220
  none: false
268
221
  requirements:
@@ -271,22 +224,26 @@ required_rubygems_version: !ruby/object:Gem::Requirement
271
224
  version: '0'
272
225
  segments:
273
226
  - 0
274
- hash: 1975054614990968952
227
+ hash: 254608194485651365
275
228
  requirements: []
276
229
  rubyforge_project: fozzie
277
230
  rubygems_version: 1.8.24
278
231
  signing_key:
279
232
  specification_version: 3
280
- summary: Statsd Ruby gem from Lonely Planet Online
233
+ summary: Ruby gem from Lonely Planet Online to register statistics. Currently supports
234
+ Statsd.
281
235
  test_files:
282
236
  - spec/config/fozzie.yml
283
- - spec/lib/core_ext/hash_spec.rb
237
+ - spec/lib/core_ext/module/monitor_spec.rb
238
+ - spec/lib/fozzie/adapter/statsd_spec.rb
239
+ - spec/lib/fozzie/bulk_dsl_spec.rb
284
240
  - spec/lib/fozzie/configuration_spec.rb
285
- - spec/lib/fozzie/interface_spec.rb
286
- - spec/lib/fozzie/mill_spec.rb
241
+ - spec/lib/fozzie/dsl_spec.rb
287
242
  - spec/lib/fozzie/rack/middleware_spec.rb
288
- - spec/lib/fozzie/rails/middleware_spec.rb
243
+ - spec/lib/fozzie/rack/sinatra_spec.rb
289
244
  - spec/lib/fozzie/sniff_spec.rb
290
245
  - spec/lib/fozzie/version_spec.rb
291
246
  - spec/lib/fozzie_spec.rb
247
+ - spec/shared_examples/fozzie_adapter.rb
248
+ - spec/shared_examples/interface.rb
292
249
  - spec/spec_helper.rb