bunyan 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ Version 0.4.0
2
+ =============
3
+ * New configuration syntax (see readme)
4
+ * Ability to pass in custom connection object
5
+
1
6
  Version 0.3.0
2
7
  =============
3
8
  * Can now specify and connect a remote host and alternate port
data/MIT-LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2010 Alex Sharp
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THEse, and/or sell
19
+ copies of the Software, and to permit p
data/README.md CHANGED
@@ -1,9 +1,15 @@
1
1
  Bunyan
2
2
  ======
3
+ ![](http://img2.timeinc.net/ew/dynamic/imgs/080612/Paul-Bunyan-Blue-Ox_l.jpg)
4
+
3
5
  Bunyan is a thin ruby wrapper around a MongoDB [capped collection](http://www.mongodb.org/display/DOCS/Capped+Collections),
4
6
  created with high-performance, flexible logging in mind.
5
7
 
6
- ![](http://img2.timeinc.net/ew/dynamic/imgs/080612/Paul-Bunyan-Blue-Ox_l.jpg)
8
+ Bunyan is not intended to be used as a drop-in replacement for the default
9
+ rails logger. If you need to do this, please see peburrows' [mongo\_db\_logger](http://github.com/peburrows/mongo_db_logger).
10
+
11
+ However, there is planned support for a flexible middleware component to drop in
12
+ to your rails app.
7
13
 
8
14
  Install
9
15
  =======
@@ -16,15 +22,20 @@ The only configuration options required are the database and collection name.
16
22
  For rails apps, put the following config block in an initializer.
17
23
 
18
24
  # config/initializers/bunyan.rb
19
- Bunyan::Logger.configure do |config|
25
+ Bunyan::Logger.configure do
20
26
  # required options
21
- config.database 'bunyan_logger'
22
- config.collection 'development_log'
27
+ database 'bunyan_logger'
28
+ collection 'development_log'
23
29
 
24
30
  # optional
25
- config.host 'some.remote.host' # defaults to localhost
26
- config.port '12345' # defaults to 27017
27
- config.disabled true
31
+ host 'some.remote.host' # defaults to localhost
32
+ port '12345' # defaults to 27017
33
+ disabled true
34
+
35
+ # other connection option
36
+ # Specify a valid ruby driver connection object (single / pair)
37
+ # if you do so, host / port are ignored
38
+ connection = $connection
28
39
  end
29
40
 
30
41
  Usage
@@ -58,9 +69,9 @@ More
58
69
 
59
70
  TODO
60
71
  ====
61
- * Ability to specify auth creds for making mongo connection
72
+ * Ability to specify auth creds for making a mongo connection
62
73
  * <del>Fail silently if no mongo server running</del>
63
74
  * Ability to limit bunyan to only run in certain environments
64
75
  * Add middleware client for easy drop-in to rails/rack apps
65
- <del>* Add ability to connect to a remote mongo server</del>
76
+ * <del>Add ability to connect to a remote mongo server</del>
66
77
  * <del>Ability to configure size of capped collection</del>
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
data/bunyan.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bunyan}
8
- s.version = "0.3.0"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Alex Sharp"]
12
- s.date = %q{2010-04-12}
12
+ s.date = %q{2010-08-14}
13
13
  s.description = %q{Bunyan is a thin ruby wrapper around a MongoDB capped collection, created with high-performance, flexible logging in mind.}
14
14
  s.email = %q{ajsharp@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
19
19
  ".gitignore",
20
20
  "CHANGELOG.md",
21
21
  "Gemfile",
22
+ "MIT-LICENSE",
22
23
  "README.md",
23
24
  "Rakefile",
24
25
  "VERSION",
@@ -26,8 +27,10 @@ Gem::Specification.new do |s|
26
27
  "examples/rails.rb",
27
28
  "lib/bunyan.rb",
28
29
  "lib/bunyan/config.rb",
30
+ "lib/bunyan/configurable_methods.rb",
29
31
  "spec/bunyan_spec.rb",
30
32
  "spec/config_spec.rb",
33
+ "spec/integration_spec.rb",
31
34
  "spec/spec.opts",
32
35
  "spec/spec_helper.rb"
33
36
  ]
@@ -39,6 +42,7 @@ Gem::Specification.new do |s|
39
42
  s.test_files = [
40
43
  "spec/bunyan_spec.rb",
41
44
  "spec/config_spec.rb",
45
+ "spec/integration_spec.rb",
42
46
  "spec/spec_helper.rb",
43
47
  "examples/rails.rb"
44
48
  ]
data/lib/bunyan/config.rb CHANGED
@@ -1,10 +1,11 @@
1
+ require 'bunyan/configurable_methods'
1
2
 
2
3
  module Bunyan
3
4
  class Logger
4
5
 
5
6
  class Config
6
- # used to hold all user-defined configuration options
7
- attr_accessor :collection, :database, :disabled
7
+ extend Bunyan::ConfigurableMethods
8
+ configurable_methods :port, :host, :database, :collection, :disabled, :connection
8
9
 
9
10
  def initialize
10
11
  @size = 52428800
@@ -15,36 +16,6 @@ module Bunyan
15
16
  send(meth)
16
17
  end
17
18
 
18
- def port(port_num = nil)
19
- @port ||= port_num
20
- end
21
- alias_method :port=, :port
22
-
23
- def host(host_address = nil)
24
- @host ||= host_address
25
- end
26
- alias_method :host=, :host
27
-
28
- # First time called sets the database name.
29
- # Otherwise, returns the database name.
30
- def database(db_name = nil)
31
- @database ||= db_name
32
- end
33
- alias_method :database=, :database
34
-
35
- # First time called sets the collection name.
36
- # Otherwise, returns the collection name.
37
- # For the actual collection object returned by Mongo, see #db.
38
- def collection(coll = nil)
39
- @collection ||= coll
40
- end
41
- alias_method :collection=, :collection
42
-
43
- def disabled(dis = nil)
44
- @disabled ||= dis
45
- end
46
- alias_method :disabled=, :disabled
47
-
48
19
  def disabled?
49
20
  !!@disabled
50
21
  end
@@ -0,0 +1,17 @@
1
+ module Bunyan
2
+ module ConfigurableMethods
3
+ private
4
+ def configurable_method(method_name)
5
+ class_eval %Q{
6
+ def #{method_name}(local_#{method_name} = nil)
7
+ @#{method_name} ||= local_#{method_name}
8
+ end
9
+ alias_method :#{method_name}=, :#{method_name}
10
+ }
11
+ end
12
+
13
+ def configurable_methods(*methods)
14
+ methods.each { |method| configurable_method(method) }
15
+ end
16
+ end
17
+ end
data/lib/bunyan.rb CHANGED
@@ -14,19 +14,20 @@ module Bunyan
14
14
 
15
15
  attr_reader :db, :connection, :collection, :config
16
16
 
17
- # Bunyan::Logger.configure do |config|
17
+ # Bunyan::Logger.configure do
18
18
  # # required options
19
- # config.database 'bunyan_logger'
20
- # config.collection 'development_log'
19
+ # database 'bunyan_logger'
20
+ # collection 'development_log'
21
21
  #
22
22
  # # optional options
23
- # config.disabled true
24
- # config.size 52428800 # 50.megabytes in Rails
23
+ # disabled true
24
+ # size 52428800 # 50.megabytes in Rails
25
25
  # end
26
26
  def configure(&block)
27
27
  @config = Logger::Config.new
28
28
 
29
- yield @config
29
+ # provide legacy support for old configuration syntax
30
+ (block.arity > 0) ? yield(@config) : @config.instance_eval(&block)
30
31
 
31
32
  ensure_required_options_exist
32
33
  initialize_connection unless disabled?
@@ -34,7 +35,7 @@ module Bunyan
34
35
  end
35
36
 
36
37
  def configured?
37
- @configured
38
+ !!@configured
38
39
  end
39
40
 
40
41
  def disabled?
@@ -58,8 +59,13 @@ module Bunyan
58
59
  private
59
60
  def initialize_connection
60
61
  begin
61
- @db = Mongo::Connection.new(config.host, config.port).db(config.database)
62
- @connection = @db.connection
62
+ if (config.connection)
63
+ @connection = config.connection
64
+ @db = @connection.db
65
+ else
66
+ @db = Mongo::Connection.new(config.host, config.port).db(config.database)
67
+ @connection = @db.connection
68
+ end
63
69
  @collection = retrieve_or_initialize_collection(config.collection)
64
70
  rescue Mongo::ConnectionFailure => ex
65
71
  # @TODO: I don't like how I'm overloading @config.disabled
data/spec/config_spec.rb CHANGED
@@ -43,7 +43,15 @@ describe Bunyan::Logger::Config, 'when setting the collection size' do
43
43
  end
44
44
 
45
45
  describe Bunyan::Logger::Config, 'when getting the collection size' do
46
- it 'should return the collection size'
46
+ it 'should return the collection size' do
47
+ Bunyan::Logger.configure do |c|
48
+ c.database 'test_db'
49
+ c.collection 'test_collection'
50
+ c.size 2929
51
+ end
52
+
53
+ Bunyan::Logger.config.size.should == 2929
54
+ end
47
55
  end
48
56
 
49
57
  describe Bunyan::Logger::Config, 'alternate method invocation syntax' do
@@ -158,3 +166,48 @@ describe 'when we configure a port' do
158
166
  end
159
167
  end
160
168
 
169
+ describe 'when we set a connection' do
170
+
171
+ def configure_with_connection
172
+ Bunyan::Logger.configure do |c|
173
+ c.connection = other_fake_mongo
174
+ c.port '20910'
175
+ c.database 'test_db'
176
+ c.collection 'test_collection'
177
+ end
178
+ end
179
+
180
+ it 'should not set a connection based on other params' do
181
+ Mongo::Connection.should_not_receive(:new)
182
+ configure_with_connection
183
+ end
184
+
185
+ it 'should set the db field' do
186
+ Mongo::Connection.should_not_receive(:new)
187
+ configure_with_connection
188
+ Bunyan::Logger.db.should eql(@mock_database)
189
+ end
190
+
191
+ end
192
+
193
+ describe 'the new configuration syntax' do
194
+ it 'should allow argument-less block configuration syntax' do
195
+ Bunyan::Logger.configure do
196
+ database 'new_config_db'
197
+ collection 'new_config_collection'
198
+ end
199
+
200
+ Bunyan::Logger.config.database.should == 'new_config_db'
201
+ end
202
+ end
203
+
204
+ describe 'the old configuration syntax' do
205
+ it 'should allow the configuration object to be passed in to the configure block' do
206
+ Bunyan::Logger.configure do |c|
207
+ c.database 'old_config_db'
208
+ c.collection 'old_config_collection'
209
+ end
210
+
211
+ Bunyan::Logger.config.database.should == 'old_config_db'
212
+ end
213
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'making a mongodb connection with the new configuration syntax' do
4
+ def configure_db_with_new_syntax
5
+ Bunyan::Logger.configure do
6
+ database 'bunyan_integration_db'
7
+ collection 'test_integration'
8
+ end
9
+ end
10
+
11
+ before do
12
+ Mongo::Connection.unstub!(:new)
13
+ configure_db_with_new_syntax
14
+ @params = {:request_uri => '/', :response_code => 200}
15
+ end
16
+
17
+ it 'should allow inserting documents' do
18
+ Bunyan::Logger.insert(@params).should be_instance_of BSON::ObjectID
19
+ end
20
+
21
+ it 'should allow querying documents' do
22
+ Bunyan::Logger.insert(@params)
23
+ Bunyan::Logger.find(@params).count.should == 1
24
+ end
25
+ end
26
+
27
+ describe 'making a mongodb connection with the old configuration syntax' do
28
+ def configure_db_with_old_syntax
29
+ Bunyan::Logger.configure do |c|
30
+ c.database 'bunyan_integration_db'
31
+ c.collection 'test_integration'
32
+ end
33
+ end
34
+
35
+ before do
36
+ Mongo::Connection.unstub!(:new)
37
+ configure_db_with_old_syntax
38
+ @params = {:request_uri => '/', :response_code => 200}
39
+ end
40
+
41
+ it 'should allow inserting documents' do
42
+ Bunyan::Logger.insert(@params).should be_instance_of BSON::ObjectID
43
+ end
44
+
45
+ it 'should allow querying documents' do
46
+ Bunyan::Logger.insert(@params)
47
+ Bunyan::Logger.find(@params).count.should == 1
48
+ end
49
+ end
data/spec/spec_helper.rb CHANGED
@@ -6,6 +6,9 @@ Bundler.require :default, :test
6
6
  require File.expand_path(File.dirname(__FILE__) + '/../lib/bunyan')
7
7
  $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__))
8
8
 
9
+ class DuckedMongo
10
+ end
11
+
9
12
  Spec::Runner.configure do |config|
10
13
 
11
14
  config.before :each do
@@ -25,6 +28,13 @@ Spec::Runner.configure do |config|
25
28
  @mock_database
26
29
  end
27
30
 
31
+ def other_fake_mongo
32
+ #I want to check Mongo::Connection.stub.new is not called
33
+ dm = DuckedMongo
34
+ dm.stub!(:db).and_return(@mock_database)
35
+ dm
36
+ end
37
+
28
38
  def configure_test_db
29
39
  Bunyan::Logger.configure do |config|
30
40
  config.database 'bunyan_test'
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 3
7
+ - 4
8
8
  - 0
9
- version: 0.3.0
9
+ version: 0.4.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Alex Sharp
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-12 00:00:00 -07:00
17
+ date: 2010-08-14 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -57,6 +57,7 @@ files:
57
57
  - .gitignore
58
58
  - CHANGELOG.md
59
59
  - Gemfile
60
+ - MIT-LICENSE
60
61
  - README.md
61
62
  - Rakefile
62
63
  - VERSION
@@ -64,8 +65,10 @@ files:
64
65
  - examples/rails.rb
65
66
  - lib/bunyan.rb
66
67
  - lib/bunyan/config.rb
68
+ - lib/bunyan/configurable_methods.rb
67
69
  - spec/bunyan_spec.rb
68
70
  - spec/config_spec.rb
71
+ - spec/integration_spec.rb
69
72
  - spec/spec.opts
70
73
  - spec/spec_helper.rb
71
74
  has_rdoc: true
@@ -101,5 +104,6 @@ summary: A MongoDB-based logging solution.
101
104
  test_files:
102
105
  - spec/bunyan_spec.rb
103
106
  - spec/config_spec.rb
107
+ - spec/integration_spec.rb
104
108
  - spec/spec_helper.rb
105
109
  - examples/rails.rb