rackamole 0.2.5 → 0.2.6

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 (82) hide show
  1. data/HISTORY +12 -1
  2. data/README.rdoc +35 -35
  3. data/lib/rackamole.rb +1 -1
  4. data/lib/rackamole/alert/twitt.rb +5 -4
  5. data/lib/rackamole/mole.rb +40 -18
  6. data/lib/rackamole/store/mongo_db.rb +5 -3
  7. data/spec/rackamole/alert/twitt_spec.rb +3 -3
  8. data/spec/rackamole/mole_spec.rb +52 -5
  9. data/spec/rackamole/store/mongo_db_spec.rb +4 -4
  10. data/tasks/setup.rb +1 -1
  11. data/tasks/test.rake +1 -0
  12. metadata +3 -85
  13. data/a.rb +0 -18
  14. data/aaa.txt +0 -52
  15. data/images/mole_logo.png +0 -0
  16. data/images/mole_logo.psd +0 -0
  17. data/images/mole_logo_small.png +0 -0
  18. data/images/mole_logo_small.psd +0 -0
  19. data/samples/rails/moled/README +0 -243
  20. data/samples/rails/moled/Rakefile +0 -10
  21. data/samples/rails/moled/app/controllers/application_controller.rb +0 -21
  22. data/samples/rails/moled/app/controllers/fred_controller.rb +0 -14
  23. data/samples/rails/moled/app/helpers/application_helper.rb +0 -3
  24. data/samples/rails/moled/app/views/fred/index.html.erb +0 -1
  25. data/samples/rails/moled/app/views/fred/show.html.erb +0 -1
  26. data/samples/rails/moled/config/boot.rb +0 -110
  27. data/samples/rails/moled/config/database.yml +0 -22
  28. data/samples/rails/moled/config/environment.rb +0 -52
  29. data/samples/rails/moled/config/environments/development.rb +0 -17
  30. data/samples/rails/moled/config/environments/production.rb +0 -28
  31. data/samples/rails/moled/config/environments/test.rb +0 -28
  32. data/samples/rails/moled/config/initializers/backtrace_silencers.rb +0 -7
  33. data/samples/rails/moled/config/initializers/inflections.rb +0 -10
  34. data/samples/rails/moled/config/initializers/mime_types.rb +0 -5
  35. data/samples/rails/moled/config/initializers/new_rails_defaults.rb +0 -19
  36. data/samples/rails/moled/config/initializers/session_store.rb +0 -15
  37. data/samples/rails/moled/config/locales/en.yml +0 -5
  38. data/samples/rails/moled/config/routes.rb +0 -6
  39. data/samples/rails/moled/db/development.sqlite3 +0 -0
  40. data/samples/rails/moled/db/production.sqlite3 +0 -0
  41. data/samples/rails/moled/doc/README_FOR_APP +0 -2
  42. data/samples/rails/moled/log/development.log +0 -100
  43. data/samples/rails/moled/log/production.log +0 -46
  44. data/samples/rails/moled/log/server.log +0 -0
  45. data/samples/rails/moled/log/test.log +0 -0
  46. data/samples/rails/moled/public/404.html +0 -30
  47. data/samples/rails/moled/public/422.html +0 -30
  48. data/samples/rails/moled/public/500.html +0 -30
  49. data/samples/rails/moled/public/favicon.ico +0 -0
  50. data/samples/rails/moled/public/images/rails.png +0 -0
  51. data/samples/rails/moled/public/index.html +0 -275
  52. data/samples/rails/moled/public/javascripts/application.js +0 -2
  53. data/samples/rails/moled/public/javascripts/controls.js +0 -963
  54. data/samples/rails/moled/public/javascripts/dragdrop.js +0 -973
  55. data/samples/rails/moled/public/javascripts/effects.js +0 -1128
  56. data/samples/rails/moled/public/javascripts/prototype.js +0 -4320
  57. data/samples/rails/moled/public/robots.txt +0 -5
  58. data/samples/rails/moled/script/about +0 -4
  59. data/samples/rails/moled/script/console +0 -3
  60. data/samples/rails/moled/script/dbconsole +0 -3
  61. data/samples/rails/moled/script/destroy +0 -3
  62. data/samples/rails/moled/script/generate +0 -3
  63. data/samples/rails/moled/script/performance/benchmarker +0 -3
  64. data/samples/rails/moled/script/performance/profiler +0 -3
  65. data/samples/rails/moled/script/plugin +0 -3
  66. data/samples/rails/moled/script/runner +0 -3
  67. data/samples/rails/moled/script/server +0 -3
  68. data/samples/rails/moled/test/performance/browsing_test.rb +0 -9
  69. data/samples/rails/moled/test/test_helper.rb +0 -38
  70. data/samples/sinatra/moled.rb +0 -63
  71. data/samples/sinatra/public/.DS_Store +0 -0
  72. data/samples/sinatra/public/images/mole_logo.png +0 -0
  73. data/samples/sinatra/public/stylesheets/styles.css +0 -58
  74. data/samples/sinatra/views/index.erb +0 -14
  75. data/samples/sinatra/views/layout.erb +0 -23
  76. data/samples/sinatra/views/normal.erb +0 -1
  77. data/samples/sinatra/views/params.erb +0 -1
  78. data/samples/sinatra/views/post.erb +0 -1
  79. data/samples/sinatra/views/slow.erb +0 -1
  80. data/z_experiments/config.rb +0 -38
  81. data/z_experiments/config_sample.rb +0 -9
  82. data/z_experiments/configuration.rb +0 -5
data/HISTORY CHANGED
@@ -22,4 +22,15 @@
22
22
  validation problems in mongoDB. Thanks Rafael!
23
23
 
24
24
  0.2.4
25
- * Breaking off action_mailer dependencies. Now leveraging Pony for sending out email alerts.
25
+ * Breaking off action_mailer dependencies. Now leveraging Pony for sending out email alerts.
26
+
27
+ 0.2.5
28
+ * Added support for excluding certain params from request or session.
29
+ See the params_excludes and session_excludes options.
30
+
31
+ 0.2.6
32
+ * Added logging for response information such as status, headers and body. Body is excluded by default
33
+ * Added options for excluding certain mole information for being logged see mole_excludes option.
34
+ * Eliminated unwise defaults. From now, the option :app_name must be specified when initializing.
35
+ The option :db_name must also be present if the mongo store is used.
36
+ Keep in mind for rackamole to work with wackamole your db name must follow: mole_{app_name}_{environment}_mdb.
data/README.rdoc CHANGED
@@ -1,53 +1,53 @@
1
- == RackAMole
1
+ == RackAmole
2
2
 
3
3
  Observe your web applications in the wild!
4
4
 
5
- == DESCRIPTION:
5
+ == DESCRIPTION
6
6
 
7
- The MOle is a rack application that monitors user interactions with your web site. We are not
8
- talking about counting page hits here. The MOle tracks all the information available to capture
9
- the essence of a user interaction with your application. Using the MOle, you are able to see
10
- which feature is a hit or a bust. As an added bonus, the MOle also track performance and exceptions
11
- that might have escaped your test suites or alpha env. To boot your managers will love you for it!
7
+ The MOle is a rack application that monitors user interactions with your web site. We are not
8
+ talking about counting page hits here. The MOle tracks all the information available to capture
9
+ the essence of a user interaction with your application. Using the MOle, you are able to see
10
+ which feature is a hit or a bust. As an added bonus, the MOle also track performance and exceptions
11
+ that might have escaped your test suites or alpha env. To boot your managers will love you for it!
12
12
 
13
- Whether you are releasing a new application or improving on an old one, it is always a good thing
14
- to know if anyone is using your application and if they are, how they are using it.
15
- What features are your users most fond of and which features find their way into the abyss?
16
- You will be able to rapidly assess whether or not your application is a hit and if
17
- your coolest features are thought as such by your users. You will be able to elegantly record user
18
- interactions and leverage these findings for the next iteration of your application.
13
+ Whether you are releasing a new application or improving on an old one, it is always a good thing
14
+ to know if anyone is using your application and if they are, how they are using it.
15
+ What features are your users most fond of and which features find their way into the abyss?
16
+ You will be able to rapidly assess whether or not your application is a hit and if
17
+ your coolest features are thought as such by your users. You will be able to elegantly record user
18
+ interactions and leverage these findings for the next iteration of your application.
19
19
 
20
20
  == PROJECT INFORMATION
21
21
 
22
- * Developer: Fernand Galiana
23
- * Blog: http://www.liquidrail.com
24
- * Site: http://rackamole.com
25
- * Twitter: http://twitter.com/rackamole
26
- * Forum: http://groups.google.com/group/rackamole
27
- * Git: git://github.com/derailed/rackamole.git
22
+ Developer: Fernand Galiana
23
+ Blog: http://www.liquidrail.com
24
+ Site: http://rackamole.com
25
+ Twitter: http://twitter.com/rackamole
26
+ Forum: http://groups.google.com/group/rackamole
27
+ Git: git://github.com/derailed/rackamole.git
28
28
 
29
- == FEATURES:
29
+ == FEATURES
30
30
 
31
- * Monitors any rack based framework such as Rails and Sinatra
32
- * Captures the essence of the request as well as user information
33
- * Tracks performance issues based on your latency threshold
34
- * Tracks exceptions that might occurred during a request
31
+ Monitors any rack based framework such as Rails and Sinatra
32
+ Captures the essence of the request as well as user information
33
+ Tracks performance issues based on your latency threshold
34
+ Tracks exceptions that might occurred during a request
35
35
 
36
- == REQUIREMENTS:
36
+ == REQUIREMENTS
37
37
 
38
- * Logging
39
- * Hitimes
40
- * MongoDb + mongo ruby adapter
41
- * Twitter4r
42
- * Chronic
43
- * Erubis
44
- * Pony
38
+ Logging
39
+ Hitimes
40
+ mongo + mongo_ext
41
+ Twitter4r
42
+ Chronic
43
+ Erubis
44
+ Pony
45
45
 
46
- == INSTALL:
46
+ == INSTALL
47
47
 
48
- * sudo gem install rackamole
48
+ sudo gem install rackamole
49
49
 
50
- == USAGE:
50
+ == USAGE
51
51
 
52
52
  === Rails applications
53
53
 
data/lib/rackamole.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Rackamole
2
2
 
3
3
  # :stopdoc:
4
- VERSION = '0.2.5'
4
+ VERSION = '0.2.6'
5
5
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
6
6
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
7
7
  # :startdoc:
@@ -6,8 +6,8 @@ module Rackamole::Alert
6
6
  class Twitt
7
7
 
8
8
  # Twitt an alert
9
- def self.deliver_alert( username, password, attrs )
10
- @twitt ||= Twitt.new( username, password )
9
+ def self.deliver_alert( logger, username, password, attrs )
10
+ @twitt ||= Twitt.new( logger, username, password )
11
11
  @twitt.send_alert( attrs )
12
12
  end
13
13
 
@@ -27,10 +27,11 @@ module Rackamole::Alert
27
27
  # === Params:
28
28
  # username :: The name on the twitter account
29
29
  # password :: The password of your twitter account
30
- def initialize( username, password )
30
+ def initialize( logger, username, password )
31
31
  raise "You must specify your twitter account credentials" unless username or password
32
32
  @username = username
33
33
  @password = password
34
+ @logger = logger
34
35
  end
35
36
 
36
37
  # Send out a twitt notification based of the watched features. A short message will be blasted to your twitter
@@ -62,7 +63,7 @@ module Rackamole::Alert
62
63
  # =========================================================================
63
64
  private
64
65
 
65
- attr_reader :username, :password #:nodoc:
66
+ attr_reader :logger, :username, :password #:nodoc:
66
67
 
67
68
  # Fetch twitter connection...
68
69
  def twitt
@@ -3,6 +3,8 @@ require 'json'
3
3
  require 'mongo'
4
4
  require 'yaml'
5
5
 
6
+ # TODO - remove default app and db name
7
+ # TODO - add recording for response
6
8
  module Rack
7
9
  class Mole
8
10
 
@@ -43,6 +45,9 @@ module Rack
43
45
  # :user_key => { :session_key => :user_id, :extractor => lambda{ |id| User.find( id ).name} }
44
46
  # ==
45
47
  #
48
+ # :mole_excludes :: Exclude some of the paramaters that the mole would normaly include. The list of
49
+ # customizable paramaters is: software, ip, browser type, url, path, status, headers and body.
50
+ # This options takes an array of symbols. Defaults to [:body].
46
51
  # :excluded_paths:: Exclude paths that you do not wish to mole by specifying an array of regular expresssions.
47
52
  # :param_excludes:: Exempt params from being logged to the mole. Specify an array of keys as
48
53
  # as symbols ie [:password, :card_number].
@@ -85,12 +90,12 @@ module Rack
85
90
  elapsed = Hitimes::Interval.measure do
86
91
  begin
87
92
  status, headers, body = @app.call( env )
88
- rescue => boom
93
+ rescue => boom
89
94
  env['mole.exception'] = boom
90
95
  mole_feature( env, elapsed, status, headers, body )
91
96
  raise boom
92
97
  end
93
- end
98
+ end
94
99
  mole_feature( env, elapsed, status, headers, body )
95
100
  return status, headers, body
96
101
  end
@@ -119,10 +124,10 @@ module Rack
119
124
  {
120
125
  :moleable => true,
121
126
  :log_level => :info,
122
- :expiration => 60*60, # 1 hour
123
- :app_name => "Moled App",
127
+ :expiration => 60*60, # 1 hour
124
128
  :environment => 'development',
125
129
  :excluded_paths => [/.?\.ico/, /.?\.png/],
130
+ :mole_excludes => [:body],
126
131
  :perf_threshold => 10.0,
127
132
  :store => Rackamole::Store::Log.new
128
133
  }
@@ -227,12 +232,19 @@ module Rack
227
232
  end
228
233
 
229
234
  # Extract interesting information from the request
230
- def mole_info( env, elapsed, status, headers, body )
231
- request = Rack::Request.new( env )
232
- info = OrderedHash.new
235
+ def mole_info( env, elapsed, status, headers, body )
236
+ request = Rack::Request.new( env )
237
+ response = nil
238
+ begin
239
+ response = Rack::Response.new( body, status, headers )
240
+ rescue
241
+ ;
242
+ end
243
+
244
+ info = OrderedHash.new
233
245
 
234
246
  return info unless mole_request?( request )
235
-
247
+
236
248
  session = env['rack.session']
237
249
  route = get_route( request )
238
250
 
@@ -257,29 +269,32 @@ module Rack
257
269
  info[:type] = (elapsed and elapsed > options[:perf_threshold] ? Rackamole.perf : Rackamole.feature)
258
270
  info[:app_name] = options[:app_name]
259
271
  info[:environment] = options[:environment] || "Unknown"
260
- info[:user_id] = user_id if user_id
272
+ info[:user_id] = user_id if user_id
261
273
  info[:user_name] = user_name || "Unknown"
262
- info[:ip] = ip
263
- info[:browser] = id_browser( user_agent )
264
274
  info[:host] = env['SERVER_NAME']
265
- info[:software] = env['SERVER_SOFTWARE']
266
275
  info[:request_time] = elapsed if elapsed
267
- info[:url] = request.url
268
276
  info[:method] = env['REQUEST_METHOD']
269
- info[:path] = request.path
270
- info[:route_info] = route if route
277
+ info[:route_info] = route if route
271
278
  info[:created_at] = Time.now.utc
279
+
280
+ # Optional elements...
281
+ mole?( :software , info, env['SERVER_SOFTWARE'] )
282
+ mole?( :ip , info, ip )
283
+ mole?( :browser , info, id_browser( user_agent ) )
284
+ mole?( :url , info, request.url )
285
+ mole?( :path , info, request.path )
286
+ mole?( :status , info, status )
287
+ mole?( :headers , info, headers )
288
+ mole?( :body , info, response.body ) if response
272
289
 
273
290
  # Dump request params
274
291
  unless request.params.empty?
275
292
  info[:params] = filter_params( request.params, options[:param_excludes] || [] )
276
- # request.params.keys.sort.each { |k| info[:params][k.to_sym] = request.params[k].to_json }
277
293
  end
278
294
 
279
295
  # Dump session var
280
296
  if session and !session.empty?
281
297
  info[:session] = filter_params( session, options[:session_excludes] || [] )
282
- # session.keys.sort{ |a,b| a.to_s <=> b.to_s }.each { |k| info[:session][k.to_sym] = session[k].to_json }
283
298
  end
284
299
 
285
300
  # Check if an exception was raised. If so consume it and clear state
@@ -293,7 +308,14 @@ module Rack
293
308
  end
294
309
  info
295
310
  end
296
-
311
+
312
+ # check exclusion to see if the information should be moled
313
+ def mole?( key, stash, value )
314
+ # puts "Checking #{key} -- #{options[:mole_excludes].inspect}"
315
+ return stash[key] = value if !options[:mole_excludes] or options[:mole_excludes].empty?
316
+ stash[key] = (options[:mole_excludes].include?( key ) ? nil : value)
317
+ end
318
+
297
319
  # filters out params hash and convert values to json
298
320
  def filter_params( source, excludes )
299
321
  results = OrderedHash.new
@@ -98,8 +98,7 @@ module Rackamole
98
98
  def default_options
99
99
  {
100
100
  :host => 'localhost',
101
- :port => Mongo::Connection::DEFAULT_PORT,
102
- :db_name => 'mole_mdb'
101
+ :port => Mongo::Connection::DEFAULT_PORT
103
102
  }
104
103
  end
105
104
 
@@ -210,7 +209,10 @@ module Rackamole
210
209
  :ruby_version => :ver,
211
210
  :fault => :msg,
212
211
  :stack => :sta,
213
- :created_at => :cro
212
+ :created_at => :cro,
213
+ :status => :sts,
214
+ :headers => :hdr,
215
+ :body => :bod
214
216
  }
215
217
  end
216
218
  end
@@ -3,7 +3,7 @@ require 'chronic'
3
3
 
4
4
  describe Rackamole::Alert::Twitt do
5
5
  before( :each ) do
6
- @alert = Rackamole::Alert::Twitt.new( 'fernand', "blee" )
6
+ @alert = Rackamole::Alert::Twitt.new( nil, 'fernand', "blee" )
7
7
  end
8
8
 
9
9
  it "should truncate a message correctly" do
@@ -35,11 +35,11 @@ describe Rackamole::Alert::Twitt do
35
35
  twitt = mock( Rackamole::Alert::Twitt )
36
36
  client = Twitter::Client.stub!( :new )
37
37
 
38
- Rackamole::Alert::Twitt.should_receive( :new ).with( 'blee', 'duh').once.and_return( twitt )
38
+ Rackamole::Alert::Twitt.should_receive( :new ).with( nil, 'blee', 'duh').once.and_return( twitt )
39
39
  # client.should_receive( :new ).once.and_return( client )
40
40
  twitt.should_receive( :send_alert ).with( @args ).once.and_return( "yeah" )
41
41
 
42
- Rackamole::Alert::Twitt.deliver_alert( "blee", "duh", @args )
42
+ Rackamole::Alert::Twitt.deliver_alert( nil, "blee", "duh", @args )
43
43
  end
44
44
 
45
45
  it "should twitt a feature alert correctly" do
@@ -161,7 +161,39 @@ describe Rack::Mole do
161
161
  fault.count.should == 1
162
162
  end
163
163
  end
164
+
165
+ # ---------------------------------------------------------------------------
166
+ describe "exclusions" do
167
+ before( :each) do
168
+ opts = @opts.clone
169
+ opts[:mole_excludes] = [:headers, :body, :browser, :ip, :url]
170
+ app( opts )
171
+ end
172
+
173
+ it "should exclude some mole attributes correctly" do
174
+ get "/fred/blee", nil, @test_env
164
175
 
176
+ @test_store.mole_result[:app_name].should == "Test App"
177
+ @test_store.mole_result[:environment].should == :test
178
+ @test_store.mole_result[:user_id].should be_nil
179
+ @test_store.mole_result[:user_name].should == 'fernand'
180
+ @test_store.mole_result[:method].should == 'GET'
181
+ @test_store.mole_result[:path].should == '/fred/blee'
182
+ @test_store.mole_result[:type].should == Rackamole.feature
183
+ @test_store.mole_result[:params].should be_nil
184
+ @test_store.mole_result[:session].should_not be_nil
185
+ @test_store.mole_result[:session].keys.should have(2).items
186
+ @test_store.mole_result[:status].should == 200
187
+
188
+ # Excluded
189
+ @test_store.mole_result[:headers].should be_nil
190
+ @test_store.mole_result[:body].should be_nil
191
+ @test_store.mole_result[:browser].should be_nil
192
+ @test_store.mole_result[:ip].should be_nil
193
+ @test_store.mole_result[:url].should be_nil
194
+ end
195
+ end
196
+
165
197
  # ---------------------------------------------------------------------------
166
198
  describe 'moling a request' do
167
199
  before :each do
@@ -170,6 +202,7 @@ describe Rack::Mole do
170
202
 
171
203
  it "should set the mole meta correctly" do
172
204
  get "/fred/blee", nil, @test_env
205
+
173
206
  @test_store.mole_result[:app_name].should == "Test App"
174
207
  @test_store.mole_result[:environment].should == :test
175
208
  @test_store.mole_result[:user_id].should be_nil
@@ -183,6 +216,9 @@ describe Rack::Mole do
183
216
  @test_store.mole_result[:params].should be_nil
184
217
  @test_store.mole_result[:session].should_not be_nil
185
218
  @test_store.mole_result[:session].keys.should have(2).items
219
+ @test_store.mole_result[:status].should == 200
220
+ @test_store.mole_result[:headers].should == { "Content-Type" => "text/plain" }
221
+ @test_store.mole_result[:body].should be_nil
186
222
  end
187
223
 
188
224
  it "mole an exception correctly" do
@@ -195,7 +231,7 @@ describe Rack::Mole do
195
231
  @test_store.mole_result[:stack].should have(4).items
196
232
  @test_store.mole_result[:fault].should == 'Oh snap!'
197
233
  last_request.env['mole.stash'].should_not be_nil
198
- fault = last_request.env['mole.stash'].send( :find_fault, "/", "./spec/rackamole/mole_spec.rb:190" )
234
+ fault = last_request.env['mole.stash'].send( :find_fault, "/", "./spec/rackamole/mole_spec.rb:226" )
199
235
  fault.should_not be_nil
200
236
  fault.count.should == 1
201
237
  end
@@ -234,7 +270,7 @@ describe Rack::Mole do
234
270
  it "should find route info correctly" do
235
271
  RAILS_ENV = true
236
272
  ActionController::Routing::Routes.stub!( :recognize_path ).and_return( { :controller => 'fred', :action => 'blee' } )
237
- rack = Rack::Mole.new( nil )
273
+ rack = Rack::Mole.new( nil, :app_name => "test app" )
238
274
 
239
275
  # routes.should_receive( 'recognize_path' ).with( 'fred', { :method => 'blee' } ).and_return( )
240
276
  res = rack.send( :get_route, OpenStruct.new( :path => "/", :request_method => "GET") )
@@ -288,12 +324,13 @@ describe Rack::Mole do
288
324
  describe '#alertable?' do
289
325
  before( :each ) do
290
326
  @rack = Rack::Mole.new( nil,
291
- :twitter => {
327
+ :app_name => "test app",
328
+ :twitter => {
292
329
  :username => 'fred',
293
330
  :password => 'blee',
294
331
  :alert_on => [Rackamole.perf, Rackamole.fault]
295
332
  },
296
- :email => {
333
+ :email => {
297
334
  :from => 'fred',
298
335
  :to => ['blee'],
299
336
  :alert_on => [Rackamole.perf, Rackamole.fault, Rackamole.feature]
@@ -321,6 +358,7 @@ describe Rack::Mole do
321
358
  describe '#configured?' do
322
359
  before( :each ) do
323
360
  options = {
361
+ :app_name => "test app",
324
362
  :blee => [1,2,3],
325
363
  :twitter => { :username => 'Fernand', :password => "Blee", :alert_on => [Rackamole.perf, Rackamole.fault] },
326
364
  }
@@ -354,7 +392,7 @@ describe Rack::Mole do
354
392
  # ---------------------------------------------------------------------------
355
393
  describe '#id_browser' do
356
394
  before :all do
357
- @rack = Rack::Mole.new( nil )
395
+ @rack = Rack::Mole.new( nil, :app_name => "test app" )
358
396
  end
359
397
 
360
398
  it "should detect a browser type correctly" do
@@ -442,4 +480,13 @@ describe Rack::Mole do
442
480
 
443
481
  end
444
482
 
483
+ # ---------------------------------------------------------------------------
484
+ describe 'required params' do
485
+ it "should crap out if a required param is omitted" do
486
+ lambda {
487
+ Rack::Mole.new( app )
488
+ }.should raise_error( /app_name/ )
489
+ end
490
+ end
491
+
445
492
  end
@@ -9,7 +9,7 @@ describe Rackamole::Store::MongoDb do
9
9
  @store = Rackamole::Store::MongoDb.new(
10
10
  :host => 'localhost',
11
11
  :port => 27017,
12
- :database => 'test_mole_mdb',
12
+ :db_name => 'mole_app_test_mdb',
13
13
  :logger => Rackamole::Logger.new( :file_name => $stdout, :log_level => 'info' ) )
14
14
  @db = @store.database
15
15
  end
@@ -19,7 +19,7 @@ describe Rackamole::Store::MongoDb do
19
19
 
20
20
  @args = OrderedHash.new
21
21
  @args[:type] = Rackamole.feature
22
- @args[:app_name] = "Test app"
22
+ @args[:app_name] = "app"
23
23
  @args[:environment] = :test
24
24
  @args[:perf_issue] = false
25
25
  @args[:ip] = "1.1.1.1"
@@ -42,7 +42,7 @@ describe Rackamole::Store::MongoDb do
42
42
 
43
43
  feature = @store.features.find_one()
44
44
  feature.should_not be_nil
45
- feature['app'].should == 'Test app'
45
+ feature['app'].should == 'app'
46
46
  feature['env'].should == 'test'
47
47
  feature['ctx'].should == '/fred'
48
48
 
@@ -63,7 +63,7 @@ describe Rackamole::Store::MongoDb do
63
63
 
64
64
  feature = @store.features.find_one( log['fid'] )
65
65
  feature.should_not be_nil
66
- feature['app'].should == 'Test app'
66
+ feature['app'].should == 'app'
67
67
  feature['env'].should == 'test'
68
68
  feature['ctx'].should == '/fred'
69
69
  feature['did'].should == '20091127'