bunyan 0.3.0 → 0.4.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.
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