Dex 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -26,10 +26,21 @@ Usage
26
26
  begin
27
27
  raise
28
28
  rescue Object => e
29
- Dex.log $!
29
+ Dex.insert $!
30
30
  raise e
31
31
  end
32
32
 
33
+ You can also create your own fields:
34
+
35
+ Dex.insert $!, :HTTP_USER_AGENT=> the_agent
36
+
37
+ You can also override default fields like `:status` or `:created_at`:
38
+
39
+ Dex.insert $?, :created_at=>Time.now, :status=>1
40
+
41
+ Are you importing errors from log files? You can treat a Hash as an exception:
42
+
43
+ Dex.insert :exception=>"Nginx Error", :message=>"Upstream closed", :backtrace=>[]
33
44
 
34
45
  Run Tests
35
46
  ---------
data/lib/Dex.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'Dex/version'
2
2
  require 'sequel'
3
+ require 'ostruct'
3
4
 
4
5
  class Dex
5
6
 
@@ -85,6 +86,10 @@ class Dex
85
86
  end
86
87
 
87
88
  def insert e, other=Hash[]
89
+ if e.is_a?(Hash)
90
+ e = OpenStruct.new(e)
91
+ end
92
+
88
93
  unless other.keys.empty?
89
94
  keys=other.keys.map(&:to_sym)
90
95
  new_keys = keys - fields
@@ -98,9 +103,9 @@ class Dex
98
103
  end
99
104
 
100
105
  h = Hash[
101
- :message => e.message,
102
- :exception => e.exception.class.name,
103
- :backtrace => e.backtrace.join("\n"),
106
+ :message => e.message || "Unknown",
107
+ :exception => e.exception.is_a?(String) ? e.exception : (e.exception ? e.exception.class.name : "Unknown"),
108
+ :backtrace => (e.backtrace && e.backtrace.join("\n")) || "",
104
109
  :status => 0,
105
110
  :created_at => Time.now.utc
106
111
  ]
@@ -1,3 +1,3 @@
1
1
  class Dex
2
- VERSION = "0.2.2"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -119,6 +119,26 @@ describe "Dex :insert" do
119
119
  }
120
120
  end
121
121
 
122
+ it "allows :created_at to be overridden" do
123
+ dex = new_dex "created_at"
124
+ target = Time.now
125
+
126
+ rollback(dex) {
127
+ dex.insert( except("Optional Hash"), :created_at=>target )
128
+ last(dex)[:created_at].to_s.should == target.to_s
129
+ }
130
+ end
131
+
132
+ it "accepts a Hash instead of an exception" do
133
+ dex = new_dex "custom hash"
134
+ rollback(dex) {
135
+ dex.insert :exception=>"Nginx Error", :message=>"upstream not found", :backtrace=>["file:12:txt"]
136
+ last(dex)[:exception].should == "Nginx Error"
137
+ last(dex)[:message].should == "upstream not found"
138
+ last(dex)[:backtrace].should == "file:12:txt"
139
+ }
140
+ end
141
+
122
142
  end # === Dex :insert
123
143
 
124
144
  describe "Dex :keep_only" do
@@ -42,6 +42,15 @@ def except name
42
42
  err
43
43
  end
44
44
 
45
+ def rollback dex
46
+ dex.db.transaction(:rollback=>:always) {
47
+ yield
48
+ }
49
+ end
50
+
51
+ def last dex
52
+ dex.reverse_order(:id).limit(1).first
53
+ end
45
54
 
46
55
  shared "Test DB" do
47
56
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Dex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-06 00:00:00.000000000 Z
12
+ date: 2012-05-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bacon