yogi_berra 0.0.3 → 0.0.4

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/Gemfile.lock CHANGED
@@ -3,15 +3,12 @@ PATH
3
3
  specs:
4
4
  yogi_berra (0.0.3)
5
5
  bson (= 1.8.3)
6
- bson_ext (= 1.8.3)
7
6
  mongo (= 1.8.3)
8
7
 
9
8
  GEM
10
9
  remote: https://rubygems.org/
11
10
  specs:
12
11
  bson (1.8.3)
13
- bson_ext (1.8.3)
14
- bson (~> 1.8.3)
15
12
  builder (3.2.1)
16
13
  diff-lcs (1.2.4)
17
14
  mongo (1.8.3)
@@ -37,7 +37,7 @@ module YogiBerra
37
37
  :server_address => request.headers['SERVER_ADDR'],
38
38
  :remote_address => request.remote_ip
39
39
  }
40
- error_id = YogiBerra.exceptionize(exception, environment, YogiBerra::Catcher.connection)
40
+ error_id = YogiBerra.exceptionize(exception, environment)
41
41
  request.env['yogi_berra.error_id'] = error_id
42
42
  end
43
43
 
@@ -39,7 +39,7 @@ module YogiBerra
39
39
  end
40
40
 
41
41
  def quick_connection
42
- load_db_settings
42
+ load_db_settings unless @@settings
43
43
 
44
44
  if @@settings
45
45
  host = @@settings["host"]
@@ -2,23 +2,24 @@ require 'mongo'
2
2
 
3
3
  module YogiBerra
4
4
  class Data
5
- def self.store!(exception, environment, client)
5
+ def self.store!(exception, environment = nil)
6
6
  data = parse_exception(exception)
7
7
  if environment
8
8
  session = environment.delete(:session)
9
9
  data[:session] = parse_session(session) if session
10
10
  data.merge!(environment)
11
11
  end
12
- client["caught_exceptions"].insert(data)
12
+ (YogiBerra::Catcher.connection || YogiBerra::Catcher.quick_connection)["caught_exceptions"].insert(data)
13
13
  end
14
14
 
15
15
  def self.parse_exception(notice)
16
16
  data_hash = {
17
- :error_class => notice.error_class,
17
+ :error_class => "#{notice.class}",
18
18
  :project => YogiBerra::Catcher.settings["project"],
19
- :error_message => notice.error_message
19
+ :error_message => notice.respond_to?(:error_message) ? notice.error_message : notice.message
20
20
  }
21
- if notice.backtrace.lines.any?
21
+ data_hash[:backtraces] = notice.backtrace
22
+ if notice.backtrace.respond_to?(:lines) && notice.backtrace.lines.any?
22
23
  data_hash[:backtraces] = notice.backtrace.lines.collect(&:to_s)
23
24
  end
24
25
  data_hash[:created_at] = Time.now.utc
@@ -27,7 +28,14 @@ module YogiBerra
27
28
 
28
29
  def self.parse_session(session)
29
30
  session.inject({}) do |result, element|
30
- result[element.first] = element.last.respond_to?(:as_json) ? element.last.as_json(:except => ["password"]) : element.last
31
+ key = element.first
32
+ value = element.last
33
+ if value.respond_to?(:as_json)
34
+ result[key] = value.as_json(:except => ["password"])
35
+ else
36
+ value.delete("password")
37
+ result[key] = value
38
+ end
31
39
  result
32
40
  end
33
41
  end
@@ -20,12 +20,12 @@ module YogiBerra
20
20
  :remote_address => env['REMOTE_ADDR']
21
21
  }
22
22
  rescue Exception => raised
23
- YogiBerra.exceptionize(raised, environment, YogiBerra::Catcher.connection)
23
+ YogiBerra.exceptionize(raised, environment)
24
24
  raise raised
25
25
  end
26
26
 
27
27
  if env['rack.exception']
28
- YogiBerra.exceptionize(raised, environment, YogiBerra::Catcher.connection)
28
+ YogiBerra.exceptionize(raised, environment)
29
29
  end
30
30
  response
31
31
  end
@@ -1,3 +1,3 @@
1
1
  module YogiBerra
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/yogi_berra.rb CHANGED
@@ -18,10 +18,10 @@ module YogiBerra
18
18
  # @params exception
19
19
  # @params environment
20
20
  # @params database
21
- def exceptionize(exception, environment, database, opts = {})
21
+ def exceptionize(exception, environment, opts = {})
22
22
  notice = build_notice_for(exception, opts)
23
- if database
24
- YogiBerra::Data.store!(notice, environment, database)
23
+ if YogiBerra::Catcher.connection
24
+ YogiBerra::Data.store!(notice, environment)
25
25
  else
26
26
  YogiBerra::Logger.log("No database connection!", :error)
27
27
  end
@@ -1,8 +1,8 @@
1
1
  # mock rails
2
- ENV["RAILS_ENV"] = "test"
3
-
4
2
  class Rails
5
3
  def self.root
6
4
  "#{SPEC_FOLDER}/fixtures"
7
5
  end
8
- end
6
+ end
7
+
8
+ ENV["RAILS_ENV"] = "test"
data/spec/spec_helper.rb CHANGED
@@ -1,14 +1,22 @@
1
- # Load support files
2
1
  SPEC_FOLDER = File.dirname(__FILE__)
3
2
  require 'yaml'
4
3
  require 'yogi_berra'
4
+ require 'rspec/mocks'
5
5
  # Helper methods
6
-
7
-
8
6
  # Creates RunTimeError
9
7
  def build_exception
10
- raise
11
- rescue => caught_exception
8
+ raise Exception
9
+ rescue Exception => caught_exception
12
10
  caught_exception
13
11
  end
14
12
 
13
+ def build_session
14
+ { "access" =>
15
+ { "user_id" => 30785,
16
+ "id" => 605,
17
+ "password" => "[FILTERED]",
18
+ "auth_key" => "Baseball is ninety percent mental and the other half is physical."
19
+ }
20
+ }
21
+ end
22
+
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe YogiBerra do
4
+ before(:all) do
5
+ @test_yaml = "#{SPEC_FOLDER}/fixtures/test.yml"
6
+ end
7
+
8
+ before(:each) do
9
+ YogiBerra::Logger.stub(:log)
10
+ end
11
+
12
+ it "should load a yaml file without rails" do
13
+ lambda { YogiBerra::Catcher.load_db_settings(@test_yaml) }.should_not raise_error
14
+ YogiBerra::Catcher.settings.should_not == nil
15
+ YogiBerra::Catcher.settings["project"].should == "test_yogi_project"
16
+ end
17
+
18
+ it "should load a yaml file with rails" do
19
+ ENV["YOGI_ENV"] = nil
20
+ load "#{SPEC_FOLDER}/fixtures/rails.rb"
21
+ lambda { YogiBerra::Catcher.load_db_settings }.should_not raise_error
22
+ YogiBerra::Catcher.settings.should_not == nil
23
+ YogiBerra::Catcher.settings["project"].should == "rails_yogi_project"
24
+ Object.send(:remove_const, :Rails)
25
+ end
26
+
27
+ it "should grab a connection using the settings file" do
28
+ connection = nil
29
+ YogiBerra::Catcher.load_db_settings(@test_yaml)
30
+ connection = YogiBerra::Catcher.quick_connection
31
+ connection.should_not == nil
32
+ end
33
+
34
+ it "should grab a connection to mongodb" do
35
+ yaml = nil
36
+ yaml = YogiBerra::Catcher.load_db_settings(@test_yaml)
37
+ db_client = YogiBerra::Catcher.db_client(YogiBerra::Catcher.settings["host"], YogiBerra::Catcher.settings["port"])
38
+ db_client.should_not == nil
39
+ end
40
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe YogiBerra do
4
+ before(:each) do
5
+ YogiBerra::Logger.stub(:log)
6
+ end
7
+
8
+ it "should store an exception" do
9
+ YogiBerra::Catcher.connection = nil
10
+ exception = build_exception
11
+ mongo_client = double('mongo client')
12
+ mongo_connection = double('mongo connection')
13
+ Mongo::MongoClient.should_receive(:new) { mongo_client }
14
+ mongo_client.should_receive(:[]) { mongo_connection }
15
+ mongo_connection.should_receive(:[]) { mongo_connection }
16
+ mongo_connection.should_receive(:insert)
17
+ YogiBerra::Data.store!(exception)
18
+ end
19
+
20
+ it "should parse an exception" do
21
+ exception = build_exception
22
+ parsed_data = YogiBerra::Data.parse_exception(exception)
23
+ parsed_data[:error_class].should == "Exception"
24
+ parsed_data[:project].should == "test_yogi_project"
25
+ parsed_data[:error_message].should == "Exception"
26
+ parsed_data[:backtraces].size.should == 17
27
+ end
28
+
29
+ it "should parse a session" do
30
+ session = build_session
31
+ parsed_session = YogiBerra::Data.parse_session(session)
32
+ parsed_session["password"].should == nil
33
+ parsed_session["access"]["password"].should == nil
34
+ parsed_session["access"]["user_id"].should == 30785
35
+ parsed_session["access"]["id"].should == 605
36
+ parsed_session["access"]["auth_key"].should == "Baseball is ninety percent mental and the other half is physical."
37
+ end
38
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe YogiBerra::Logger do
4
+
5
+ it "should call $stderr to log" do
6
+ $stderr.should_receive(:puts).with("[YogiBerra Info] The future ain't what it used to be.")
7
+ YogiBerra::Logger.log("The future ain't what it used to be.")
8
+ end
9
+
10
+ it "should call Rails::Logger" do
11
+ load "#{SPEC_FOLDER}/fixtures/rails.rb"
12
+ logger = double('logger')
13
+ Rails.stub(:logger) { logger }
14
+ logger.should_receive(:info).with("[YogiBerra Info] Half the lies they tell about me aren't true.")
15
+ YogiBerra::Logger.log("Half the lies they tell about me aren't true.")
16
+ end
17
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yogi_berra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -59,22 +59,6 @@ dependencies:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.8.3
62
- - !ruby/object:Gem::Dependency
63
- name: bson_ext
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - '='
68
- - !ruby/object:Gem::Version
69
- version: 1.8.3
70
- type: :runtime
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - '='
76
- - !ruby/object:Gem::Version
77
- version: 1.8.3
78
62
  - !ruby/object:Gem::Dependency
79
63
  name: mongo
80
64
  requirement: !ruby/object:Gem::Requirement
@@ -123,7 +107,6 @@ files:
123
107
  - spec/yogi_berra_data_spec.rb
124
108
  - spec/yogi_berra_exception_middleware_spec.rb
125
109
  - spec/yogi_berra_logger_spec.rb
126
- - spec/yogi_berra_spec.rb
127
110
  homepage: http://github.com/earlonrails/yogi_berra
128
111
  licenses: []
129
112
  post_install_message:
@@ -157,4 +140,3 @@ test_files:
157
140
  - spec/yogi_berra_data_spec.rb
158
141
  - spec/yogi_berra_exception_middleware_spec.rb
159
142
  - spec/yogi_berra_logger_spec.rb
160
- - spec/yogi_berra_spec.rb
@@ -1,85 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe YogiBerra do
4
- before(:all) do
5
- @test_yaml = "#{SPEC_FOLDER}/fixtures/test.yml"
6
- end
7
-
8
- before(:each) do
9
- YogiBerra::Logger.stub(:log)
10
- end
11
-
12
- it "should call the upstream app with the environment" do
13
- environment = { 'key' => 'value' }
14
- app = lambda { |env| ['response', {}, env] }
15
- stack = YogiBerra::ExceptionMiddleware.new(app)
16
-
17
- response = stack.call(environment)
18
-
19
- response[0].should == 'response'
20
- response[1].should == {}
21
- response[2].instance_variable_get("@response").should == { 'key' => 'value' }
22
- end
23
-
24
- it "deliver an exception raised while calling an upstream app" do
25
- exception = build_exception
26
- environment = { 'key' => 'value' }
27
- app = lambda do |env|
28
- raise exception
29
- end
30
-
31
- begin
32
- stack = YogiBerra::ExceptionMiddleware.new(app)
33
- stack.call(environment)
34
- rescue Exception => raised
35
- raised.should == exception
36
- end
37
- end
38
-
39
- it "should deliver an exception in rack.exception" do
40
- exception = build_exception
41
- environment = { 'key' => 'value' }
42
-
43
- response = [200, {}, ['okay']]
44
- app = lambda do |env|
45
- env['rack.exception'] = exception
46
- response
47
- end
48
- stack = YogiBerra::ExceptionMiddleware.new(app)
49
-
50
- actual_response = stack.call(environment)
51
-
52
- actual_response[0].should == 200
53
- actual_response[1].should == {}
54
- actual_response[2].instance_variable_get("@response").should == ["okay"]
55
- end
56
-
57
- it "should load a yaml file without rails" do
58
- lambda { YogiBerra::Catcher.load_db_settings(@test_yaml) }.should_not raise_error
59
- YogiBerra::Catcher.settings.should_not == nil
60
- YogiBerra::Catcher.settings["project"].should == "test_yogi_project"
61
- end
62
-
63
- it "should load a yaml file with rails" do
64
- ENV["YOGI_ENV"] = nil
65
- require 'fixtures/rails'
66
- lambda { YogiBerra::Catcher.load_db_settings }.should_not raise_error
67
- YogiBerra::Catcher.settings.should_not == nil
68
- YogiBerra::Catcher.settings["project"].should == "rails_yogi_project"
69
- Object.send(:remove_const, :Rails)
70
- end
71
-
72
- it "should grab a connection using the settings file" do
73
- connection = nil
74
- YogiBerra::Catcher.load_db_settings(@test_yaml)
75
- connection = YogiBerra::Catcher.quick_connection
76
- connection.should_not == nil
77
- end
78
-
79
- it "should grab a connection to mongodb" do
80
- yaml = nil
81
- yaml = YogiBerra::Catcher.load_db_settings(@test_yaml)
82
- db_client = YogiBerra::Catcher.db_client(YogiBerra::Catcher.settings["host"], YogiBerra::Catcher.settings["port"])
83
- db_client.should_not == nil
84
- end
85
- end