Exceptional_Log 0.1.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.
@@ -0,0 +1,8 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+
6
+ coverage
7
+ rdoc
8
+ .yardoc
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ $:.push File.expand_path("../lib", __FILE__)
4
+ require "Exceptional_Log/version"
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "Exceptional_Log"
8
+ s.version = Exceptional_Log_Version
9
+ s.authors = ["da99"]
10
+ s.email = ["i-hate-spam-45671204@mailinator.com"]
11
+ s.homepage = "https://github.com/da99/Exceptional_Log"
12
+ s.summary = %q{Turn a file into an Exception-like object.}
13
+ s.description = %q{
14
+
15
+ Turn your log files into exceptions.
16
+ The contents are used as a backtrace.
17
+
18
+ }
19
+
20
+ s.files = `git ls-files`.split("\n")
21
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ s.require_paths = ["lib"]
24
+
25
+ s.add_development_dependency 'bacon'
26
+ s.add_development_dependency 'rake'
27
+ s.add_development_dependency 'Bacon_Colored'
28
+ s.add_development_dependency 'pry'
29
+
30
+ # Specify any dependencies here; for example:
31
+ # s.add_runtime_dependency 'rest-client'
32
+ s.add_runtime_dependency 'Split_Lines'
33
+ s.add_runtime_dependency 'Classy_Name'
34
+ end
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ source "http://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in Bob.gemspec
6
+ gemspec
@@ -0,0 +1,48 @@
1
+
2
+ Exceptional\_Log
3
+ ================
4
+
5
+ A Ruby gem to turn your log files into exceptions.
6
+
7
+ Installation
8
+ ------------
9
+
10
+ gem install Exceptional_Log
11
+
12
+ Usage
13
+ ------
14
+
15
+ require "Exceptional_Log"
16
+
17
+ e = Exceptional_Log("/my_apps/logs/thin_a.log")
18
+
19
+ e.class # --> Thin_A
20
+ e.message # --> '/my_apps/logs/thin_a.log'
21
+ e.backtrace # --> Array
22
+ e.exception # --> self
23
+ e.created_at # --> File.stat(file).atime
24
+ e.to_hash # --> Hash[ :exception => ..., :message => ..., :created_at => ..., :backtrace => ... ]
25
+
26
+ Each exception is a subclass of `Exceptional_Log` and is named based on the basename of
27
+ the file path.
28
+
29
+ Nginx/HTTP Error Logs
30
+ ---------------------
31
+
32
+ For NGINX error logs (not access logs), try looking at
33
+ [the Http\_Error\_Log](https://github.com/da99/Http_Error_Log).
34
+
35
+ Run Tests
36
+ ---------
37
+
38
+ git clone git@github.com:da99/Exceptional_Log.git
39
+ cd Exceptional_Log
40
+ bundle update
41
+ bundle exec bacon spec/lib/main.rb
42
+
43
+ "I hate writing."
44
+ -----------------------------
45
+
46
+ If you know of existing software that makes the above redundant,
47
+ please tell me. The last thing I want to do is maintain code.
48
+
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/gem_tasks"
@@ -0,0 +1,54 @@
1
+ require 'Exceptional_Log/version'
2
+ require "Classy_Name"
3
+
4
+ class Exceptional_Log < RuntimeError
5
+
6
+ module Class_Methods
7
+
8
+ def convert file
9
+ f = file
10
+ full_path = File.expand_path(f)
11
+ msg = full_path
12
+
13
+ e_name = Classy_Name(File.basename(f).sub( /\.log\z/i, '' ))
14
+
15
+ k = begin
16
+ unless Object.const_defined?(e_name)
17
+ c = Class.new(Exceptional_Log)
18
+ Object.const_set e_name, c
19
+ end
20
+
21
+ Object.const_get e_name
22
+ end
23
+
24
+ e = k.new(msg)
25
+ e.set_backtrace Split_Lines(File.read full_path )
26
+ e.created_at = File.stat(full_path).atime
27
+
28
+ e
29
+ end
30
+
31
+ end # === Class_Methods
32
+
33
+ module Base
34
+
35
+ attr_accessor :created_at
36
+
37
+ def [] name
38
+ send name
39
+ end
40
+
41
+ def to_hash
42
+ keys = %w{ exception message backtrace created_at }
43
+ keys.inject(Hash[]) { |memo, k|
44
+ memo[k.to_sym] = send(k)
45
+ memo
46
+ }
47
+ end
48
+
49
+ end # === Base
50
+
51
+ extend Class_Methods
52
+ include Base
53
+
54
+ end # === Exceptional_Log
@@ -0,0 +1 @@
1
+ Exceptional_Log_Version = "0.1.0"
@@ -0,0 +1,61 @@
1
+
2
+ describe "Exceptional_Log.convert file_path" do
3
+
4
+ before {
5
+ @files = Dir.glob("./spec/file/thin*.log")
6
+ @e = @files.map { |f|
7
+ Exceptional_Log.convert(f)
8
+ }
9
+ }
10
+
11
+ it "returns an Enumerable" do
12
+ @e.should.respond_to :each_index
13
+ end
14
+
15
+ it "turns each log into a Exceptional_Log" do
16
+ @e.each { |e| e.should.is_a Exceptional_Log }
17
+ end
18
+
19
+ it "sets exception class to file basename: thin_A.log -> Thin_A" do
20
+ @files.each_index { |i|
21
+ @e[i].class.name
22
+ .should == File.basename(@files[i]).sub('.log', '').split("_").map(&:capitalize).join('_')
23
+ }
24
+ end
25
+
26
+ it "sets key :message to file path" do
27
+ File.file?( @e.first.message )
28
+ .should == true
29
+ end
30
+
31
+ it "sets key :backtrace as Array of lines from file" do
32
+ @e.last[:backtrace]
33
+ .should == Split_Lines( File.read(@files.last) )
34
+ end
35
+
36
+ it "sets key :created_at to :atime of file" do
37
+ @e.last[:created_at]
38
+ .should == File.stat(@files.last).atime
39
+ end
40
+
41
+ end # === Exceptional_Log ruby_glob
42
+
43
+
44
+ describe "Exceptional#to_hash" do
45
+
46
+ before {
47
+ @e = Exceptional_Log.convert(Dir.glob('spec/file/thin*').first)
48
+ @h = @e.to_hash
49
+ }
50
+
51
+ %w{ exception message backtrace created_at }.each { |k|
52
+
53
+ it "sets :#{k}" do
54
+ @h[:"#{k}"].should == @e.send(k)
55
+ end
56
+
57
+ }
58
+
59
+
60
+ end # === Exceptional#to_hash
61
+
@@ -0,0 +1,13 @@
1
+
2
+ bins = Dir.glob("bin/*")
3
+
4
+ unless bins.empty?
5
+ describe "permissions of bin/" do
6
+ bins.each { |file|
7
+ it "should chmod 755 for: #{file}" do
8
+ `stat -c %a #{file}`.strip
9
+ .should.be == "755"
10
+ end
11
+ }
12
+ end # === permissions of bin/
13
+ end # === unless bins.empty?
@@ -0,0 +1,16 @@
1
+ /home/da01/MyLife/apps/GEMS/Exceptional_Log/spec/file/config.ru:1:in `block in <main>': uninitialized constant A (NameError)
2
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:51:in `instance_eval'
3
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:51:in `initialize'
4
+ from /home/da01/MyLife/apps/GEMS/Exceptional_Log/spec/file/config.ru:1:in `new'
5
+ from /home/da01/MyLife/apps/GEMS/Exceptional_Log/spec/file/config.ru:1:in `<main>'
6
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/rack/adapter/loader.rb:36:in `eval'
7
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/rack/adapter/loader.rb:36:in `load'
8
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/rack/adapter/loader.rb:45:in `for'
9
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/thin/controllers/controller.rb:169:in `load_adapter'
10
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/thin/controllers/controller.rb:73:in `start'
11
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/thin/runner.rb:185:in `run_command'
12
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/thin/runner.rb:151:in `run!'
13
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/thin-1.3.1/bin/thin:6:in `<top (required)>'
14
+ from /home/da01/.rbenv/versions/1.9.3-p194/bin/thin:23:in `load'
15
+ from /home/da01/.rbenv/versions/1.9.3-p194/bin/thin:23:in `<main>'
16
+ >> Using rack adapter
@@ -0,0 +1,16 @@
1
+ /home/da01/MyLife/apps/GEMS/Exceptional_Log/spec/file/config.ru:1:in `block in <main>': uninitialized constant B (NameError)
2
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:51:in `instance_eval'
3
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:51:in `initialize'
4
+ from /home/da01/MyLife/apps/GEMS/Exceptional_Log/spec/file/config.ru:1:in `new'
5
+ from /home/da01/MyLife/apps/GEMS/Exceptional_Log/spec/file/config.ru:1:in `<main>'
6
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/rack/adapter/loader.rb:36:in `eval'
7
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/rack/adapter/loader.rb:36:in `load'
8
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/rack/adapter/loader.rb:45:in `for'
9
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/thin/controllers/controller.rb:169:in `load_adapter'
10
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/thin/controllers/controller.rb:73:in `start'
11
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/thin/runner.rb:185:in `run_command'
12
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/thin/runner.rb:151:in `run!'
13
+ from /home/da01/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/thin-1.3.1/bin/thin:6:in `<top (required)>'
14
+ from /home/da01/.rbenv/versions/1.9.3-p194/bin/thin:23:in `load'
15
+ from /home/da01/.rbenv/versions/1.9.3-p194/bin/thin:23:in `<main>'
16
+ >> Using rack adapter
@@ -0,0 +1,46 @@
1
+
2
+ require 'rubygems'
3
+ require 'bundler'
4
+ begin
5
+ Bundler.setup(:default, :development)
6
+ rescue Bundler::BundlerError => e
7
+ $stderr.print e.message, "\n"
8
+ $stderr.print "Run `bundle install` to install missing gems\n"
9
+ exit e.status_code
10
+ end
11
+ require 'bacon'
12
+
13
+ Gem_Dir = File.expand_path( File.join(File.dirname(__FILE__) + '/../..') )
14
+ $LOAD_PATH.unshift Gem_Dir
15
+ $LOAD_PATH.unshift( Gem_Dir + "/lib" )
16
+
17
+ Bacon.summary_on_exit
18
+
19
+ require 'Exceptional_Log'
20
+ require 'Bacon_Colored'
21
+ require 'pry'
22
+
23
+ require 'Split_Lines'
24
+
25
+
26
+ # ======== Custom code.
27
+
28
+ # Nothing yet.
29
+
30
+
31
+
32
+
33
+ # ======== Include the tests.
34
+ target_files = ARGV[1, ARGV.size - 1].select { |a| File.file?(a) }
35
+
36
+ if target_files.empty?
37
+
38
+ # include all files
39
+ Dir.glob('./spec/*.rb').each { |file|
40
+ require file.sub('.rb', '') if File.file?(file)
41
+ }
42
+
43
+ else
44
+ # Do nothing. Bacon grabs the file.
45
+
46
+ end
metadata ADDED
@@ -0,0 +1,154 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: Exceptional_Log
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - da99
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bacon
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: Bacon_Colored
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: pry
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: Split_Lines
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: Classy_Name
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ description: ! "\n\n Turn your log files into exceptions.\n The contents are
111
+ used as a backtrace.\n\n "
112
+ email:
113
+ - i-hate-spam-45671204@mailinator.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - .gitignore
119
+ - Exceptional_Log.gemspec
120
+ - Gemfile
121
+ - README.md
122
+ - Rakefile
123
+ - lib/Exceptional_Log.rb
124
+ - lib/Exceptional_Log/version.rb
125
+ - spec/Exceptional_Log.rb
126
+ - spec/bin.rb
127
+ - spec/file/thin_A.log
128
+ - spec/file/thin_B.log
129
+ - spec/lib/main.rb
130
+ homepage: https://github.com/da99/Exceptional_Log
131
+ licenses: []
132
+ post_install_message:
133
+ rdoc_options: []
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ required_rubygems_version: !ruby/object:Gem::Requirement
143
+ none: false
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ requirements: []
149
+ rubyforge_project:
150
+ rubygems_version: 1.8.23
151
+ signing_key:
152
+ specification_version: 3
153
+ summary: Turn a file into an Exception-like object.
154
+ test_files: []