build_log_parser 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e7bc3c47b1f6e7bf65547ab0542c9a1295153043
4
+ data.tar.gz: 106338d3a1c8481784f0c4b869978920c3a45710
5
+ SHA512:
6
+ metadata.gz: a762bf3aefffba2089e8c69a34f121e9d80daffddd62f73b84aa8b3843daf541439141e38878cfbb74b0097daaa3789b2998122f2a7805c15623b5e1affda382
7
+ data.tar.gz: 70e5cc9525a37138e17c0567f4376afdac2e91ee6d693655271c35dc72548cda5121397352c3bdd3c8ea2852775cd0bab845265f85b881239dedd36a3e59b00a
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .DS_Store
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format=documentation
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Magnum CI
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,83 @@
1
+ # build_log_parser
2
+
3
+ Fetch metrics from build logs: tests, duration, coverage, etc.
4
+
5
+ [![Build Status](https://magnum-ci.com/status/eb64be07cb99aaa701aa902522f11ffa.png)](https://magnum-ci.com/public/71629b4f296ef091fc02/builds)
6
+ [![Code Climate](https://codeclimate.com/github/magnumci/build_log_parser.png)](https://codeclimate.com/github/magnumci/build_log_parser)
7
+
8
+ ## Installation
9
+
10
+ Install via rubygems:
11
+
12
+ ```
13
+ gem install build_log_parser
14
+ ```
15
+
16
+ Or with bundler:
17
+
18
+ ```
19
+ gem "build_log_parser"
20
+ ```
21
+
22
+ ## Usage
23
+
24
+ Build log parser library provides an ability to fetch various metrics from build
25
+ logs. Supports tests, coverage and duration metrics from frameworks:
26
+
27
+ - RSpec (Ruby)
28
+ - Test::Unit (Ruby)
29
+ - NPM (Node.js)
30
+ - PHPUnit (PHP)
31
+
32
+ Example log output:
33
+
34
+ ```
35
+ Finished in 2 minutes 23.4 seconds
36
+ 1169 examples, 0 failures, 17 pending
37
+ Coverage report generated for RSpec to /app/coverage. 3816 / 4835 LOC (78.92%) covered.
38
+ ```
39
+
40
+ Example usage:
41
+
42
+ ``` ruby
43
+ require "build_log_parser"
44
+
45
+ # Initialize parser
46
+ parser = BuildLogParser::Parser.new(str)
47
+
48
+ # Get tests metrics
49
+ parser.tests
50
+ # => {:count=>1169, :failures=>0, :pending=>17}
51
+
52
+ # Get coverage metrics
53
+ parser.coverage
54
+ # => {:lines_covered=>3816, :lines_total=>4835, :coverage_percent=>78.92}
55
+
56
+ # Get duration
57
+ parser.duration
58
+ # => 143.4 (in seconds)
59
+ ```
60
+
61
+ Alternative usage:
62
+
63
+ ``` ruby
64
+ str = "your build log"
65
+
66
+ BuildLogParser.tests(str)
67
+ BuildLogParser.coverage(str)
68
+ BuildLogParser.duration(str)
69
+ ```
70
+
71
+ ## Tests
72
+
73
+ Execute test suite by running the following command:
74
+
75
+ ```
76
+ bundle exec rake test
77
+ ```
78
+
79
+ ## License
80
+
81
+ The MIT License
82
+
83
+ Copyright (c) 2014 Magnum CI
data/Rakefile ADDED
@@ -0,0 +1,19 @@
1
+ require "bundler"
2
+ require "bundler/gem_tasks"
3
+ require "rspec/core/rake_task"
4
+
5
+ RSpec::Core::RakeTask.new(:test) do |t|
6
+ t.pattern = "spec/**/*_spec.rb"
7
+ t.verbose = false
8
+ end
9
+
10
+ task :console do
11
+ require "irb"
12
+ require "irb/completion"
13
+ require "build_log_parser"
14
+
15
+ ARGV.clear
16
+ IRB.start
17
+ end
18
+
19
+ task :default => :test
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ require "build_log_parser/version"
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "build_log_parser"
9
+ spec.version = BuildLogParser::VERSION
10
+ spec.summary = "Parse build metrics from logs"
11
+ spec.description = "Parses various build metrics from builds logs (Rspec, Test::Unit, etc)"
12
+ spec.homepage = "https://github.com/magnumci/build_log_parser"
13
+ spec.authors = ["Dan Sosedoff"]
14
+ spec.email = ["dan.sosedoff@gmail.com"]
15
+ spec.license = "MIT"
16
+
17
+ spec.add_development_dependency "rake", "~> 10"
18
+ spec.add_development_dependency "rspec", "~> 2.13"
19
+ spec.add_development_dependency "simplecov", "~> 0.8"
20
+
21
+ spec.add_dependency "chronic_duration", "~> 0.10"
22
+
23
+ spec.files = `git ls-files`.split("\n")
24
+ spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
25
+ spec.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
26
+ spec.require_paths = ["lib"]
27
+ end
@@ -0,0 +1,32 @@
1
+ module BuildLogParser
2
+ module CoverageMatcher
3
+ PATTERN = /\s([\d]+) \/ ([\d]+) LOC \(([\d]+\.[\d]+)%\) covered\./
4
+
5
+ def fetch_coverage(str)
6
+ fetch_rspec_coverage(str) ||
7
+ fetch_phpunit_coverage(str)
8
+ end
9
+
10
+ protected
11
+
12
+ def fetch_rspec_coverage(str)
13
+ if body =~ PATTERN
14
+ {
15
+ lines_covered: $1.to_i,
16
+ lines_total: $2.to_i,
17
+ coverage_percent: $3.to_f
18
+ }
19
+ end
20
+ end
21
+
22
+ def fetch_phpunit_coverage(str)
23
+ if body =~ /Lines:\s+([\d.]+)% \(([\d]+)\/([\d]+)\)/
24
+ {
25
+ lines_covered: $2.to_i,
26
+ lines_total: $3.to_i,
27
+ coverage_percent: $1.to_f
28
+ }
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,27 @@
1
+ module BuildLogParser
2
+ module DurationMatcher
3
+ DURATION_PATTERNS = [
4
+ /^finished in (.*)/i,
5
+ /^finished tests in ([\d]\.[\d]+s),/i,
6
+ /ran [\d]+ tests in (.*)\n?/i,
7
+ /time: (.*), memory:/i,
8
+ /[\d]+ passing (.*)/
9
+ ]
10
+
11
+ def fetch_duration(str)
12
+ DURATION_PATTERNS.map { |p| scan_duration(str, p) }.compact.reduce(:+)
13
+ end
14
+
15
+ private
16
+
17
+ def scan_duration(str, pattern)
18
+ str.
19
+ gsub(/(seconds|minutes|hours)\s\((.*)\)/, "").
20
+ gsub(/(([\d]+)\s?ms)/) { |m| "0.#{$2}s" }.
21
+ scan(pattern).
22
+ flatten.
23
+ map { |m| ChronicDuration.parse(m) }.
24
+ reduce(:+)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,35 @@
1
+ require "build_log_parser/duration_matcher"
2
+ require "build_log_parser/coverage_matcher"
3
+ require "build_log_parser/rspec_matcher"
4
+ require "build_log_parser/test_unit_matcher"
5
+ require "build_log_parser/phpunit_matcher"
6
+
7
+ module BuildLogParser
8
+ class Parser
9
+ include DurationMatcher
10
+ include CoverageMatcher
11
+ include RspecMatcher
12
+ include TestUnitMatcher
13
+ include PHPUnitMatcher
14
+
15
+ attr_reader :body
16
+
17
+ def initialize(body)
18
+ @body = body
19
+ end
20
+
21
+ def duration
22
+ fetch_duration(body)
23
+ end
24
+
25
+ def tests
26
+ fetch_rspec_stats(body) ||
27
+ fetch_test_unit_stats(body) ||
28
+ fetch_phpunit_stats(body)
29
+ end
30
+
31
+ def coverage
32
+ fetch_coverage(body)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,22 @@
1
+ module BuildLogParser
2
+ module PHPUnitMatcher
3
+ PHPUNIT_PATTERN = /^(OK|FAIL) \(([\d]+) tests/
4
+ PHPUNIT_PATTERN_ERROR = /Tests: ([\d]+), Assertions: [\d]+, Errors: ([\d]+)/
5
+
6
+ def fetch_phpunit_stats(str)
7
+ if str =~ PHPUNIT_PATTERN
8
+ {
9
+ count: $2.to_i,
10
+ failures: nil,
11
+ pending: nil
12
+ }
13
+ elsif str =~ PHPUNIT_PATTERN_ERROR
14
+ {
15
+ count: $1.to_i,
16
+ failures: $2.to_i,
17
+ pending: nil
18
+ }
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ module BuildLogParser
2
+ module RspecMatcher
3
+ RSPEC_PATTERN = /^([\d]+) examples, ([\d]+) failures(, ([\d]+) pending)?/m
4
+
5
+ def fetch_rspec_stats(str)
6
+ matches = str.scan(RSPEC_PATTERN)
7
+ return if matches.empty?
8
+
9
+ result = { count: 0, failures: 0, pending: 0 }
10
+
11
+ matches.each do |m|
12
+ result[:count] += m[0].to_i if m[0] # examples
13
+ result[:failures] += m[1].to_i if m[1] # failures
14
+ result[:pending] += m[3].to_i if m[3] # pending
15
+ end
16
+
17
+ result
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ module BuildLogParser
2
+ module TestUnitMatcher
3
+ TEST_UNIT_PATTERN = /^([\d]+) (tests|runs), ([\d]+) assertions, ([\d]+) failures, ?([\d]+) errors(, ([\d]+) skips)?$/m
4
+
5
+ def fetch_test_unit_stats(str)
6
+ if str =~ TEST_UNIT_PATTERN
7
+ {
8
+ count: $1.to_i,
9
+ failures: $4.to_i,
10
+ pending: $7 ? $7.to_i : nil
11
+ }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ module BuildLogParser
2
+ VERSION = "0.1.1"
3
+ end
@@ -0,0 +1,17 @@
1
+ require "build_log_parser/version"
2
+ require "build_log_parser/parser"
3
+ require "chronic_duration"
4
+
5
+ module BuildLogParser
6
+ def self.tests(str)
7
+ Parser.new(str).tests
8
+ end
9
+
10
+ def self.coverage(str)
11
+ Parser.new(str).coverage
12
+ end
13
+
14
+ def self.duration(str)
15
+ Parser.new(str).duration
16
+ end
17
+ end
@@ -0,0 +1 @@
1
+ JS 1.9.7 (Linux): Executed 202 of 202 SUCCESS (12.156 secs / 11.47 secs)
@@ -0,0 +1,11 @@
1
+ Time: 176 ms, Memory: 8.25Mb
2
+
3
+ OK (5 tests, 6 assertions)
4
+
5
+ Code Coverage Report
6
+ 2014-03-20 20:38:22
7
+
8
+ Summary:
9
+ Classes: 41.18% (7/17)
10
+ Methods: 78.45% (222/283)
11
+ Lines: 81.16% (1034/1274)
@@ -0,0 +1,2 @@
1
+ FAILURES!
2
+ Tests: 158, Assertions: 303, Errors: 3.
@@ -0,0 +1,10 @@
1
+ Pending:
2
+ BaseMailer
3
+ # No reason given
4
+ # ./spec/mailers/base_mailer_spec.rb:4
5
+ OrderMailer#on_complete sends order notification to buyer
6
+ # No reason given
7
+ # ./spec/mailers/build_mailer_spec.rb:5
8
+
9
+ Finished in 4.8 seconds
10
+ 71 examples, 0 failures, 2 pending
@@ -0,0 +1,12 @@
1
+ ... come other code ...
2
+
3
+ Finished in 3.93 seconds
4
+ 615 examples, 4 failures
5
+
6
+ Finished in 0.54247 seconds
7
+ 54 examples, 5 failures
8
+
9
+ Finished in 58.09 seconds
10
+ 1017 examples, 6 failures, 3 pending
11
+
12
+ ... some other code ...
@@ -0,0 +1,14 @@
1
+ Finished in 58.09 seconds
2
+ 1017 examples, 0 failures
3
+
4
+ Finished in 57.53 seconds
5
+ 499 examples, 27 failures
6
+
7
+ Finished in 13 minutes 42 seconds
8
+ 1126 examples, 377 failures
9
+
10
+ Finished in 3.93 seconds
11
+ 615 examples, 0 failures
12
+
13
+ Finished in 0.54247 seconds
14
+ 54 examples, 0 failures
@@ -0,0 +1,3 @@
1
+ Finished in 14.4 seconds
2
+ 188 examples, 0 failures, 4 pending
3
+ Coverage report generated for RSpec to /app/project/coverage. 3357 / 5048 LOC (66.5%) covered.
@@ -0,0 +1,7 @@
1
+ Started
2
+ ...........
3
+ Finished in 0.021957 seconds.
4
+
5
+ 11 tests, 14 assertions, 4 failures, 2 errors
6
+
7
+ Done. Build script exited with: 0
@@ -0,0 +1,3 @@
1
+ Finished in 79.456543s, 49.9770 runs/s, 140.1143 assertions/s.
2
+
3
+ 3971 runs, 11133 assertions, 11 failures, 0 errors, 1 skips
@@ -0,0 +1,30 @@
1
+ require "spec_helper"
2
+
3
+ describe BuildLogParser do
4
+ before do
5
+ [:tests, :coverage, :duration].each do |method_name|
6
+ BuildLogParser::Parser.any_instance.stub(method_name)
7
+ end
8
+ end
9
+
10
+ describe ".tests" do
11
+ it "returns tests metrics" do
12
+ expect_any_instance_of(BuildLogParser::Parser).to receive(:tests)
13
+ described_class.tests("foo")
14
+ end
15
+ end
16
+
17
+ describe ".coverage" do
18
+ it "returns coverage metrics" do
19
+ expect_any_instance_of(BuildLogParser::Parser).to receive(:coverage)
20
+ described_class.coverage("foo")
21
+ end
22
+ end
23
+
24
+ describe ".duration" do
25
+ it "returns duration metrics" do
26
+ expect_any_instance_of(BuildLogParser::Parser).to receive(:duration)
27
+ described_class.duration("foo")
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,173 @@
1
+ require "spec_helper"
2
+
3
+ describe BuildLogParser::Parser do
4
+ let(:parser) { described_class.new(log) }
5
+
6
+ describe "#tests" do
7
+ let(:result) { parser.tests }
8
+
9
+ context "when no test data" do
10
+ let(:log) { "foobar" }
11
+
12
+ it "returns nil" do
13
+ expect(result).to be_nil
14
+ end
15
+ end
16
+
17
+ context "on test unit data" do
18
+ let(:log) { fixture "test_unit.txt" }
19
+
20
+ it "returns test metrics" do
21
+ expect(result).to eq Hash(
22
+ count: 11,
23
+ failures: 4,
24
+ pending: nil
25
+ )
26
+ end
27
+
28
+ context "on alternative syntax" do
29
+ let(:log) { fixture "test_unit_2.txt" }
30
+
31
+ it "returns tests metrics" do
32
+ expect(result).to eq Hash(
33
+ count: 3971,
34
+ failures: 11,
35
+ pending: 1
36
+ )
37
+ end
38
+ end
39
+ end
40
+
41
+ context "on rspec data" do
42
+ let(:log) { fixture "rspec.txt" }
43
+
44
+ it "returns rspec test metrics" do
45
+ expect(result).to eq Hash(
46
+ count: 71,
47
+ failures: 0,
48
+ pending: 2
49
+ )
50
+ end
51
+ end
52
+
53
+ context "on rspec with multiple runs" do
54
+ let(:log) { fixture "rspec_multiple.txt" }
55
+
56
+ it "returns summarized test metrics" do
57
+ expect(result).to eq Hash(
58
+ count: 1686,
59
+ failures: 15,
60
+ pending: 3
61
+ )
62
+ end
63
+ end
64
+
65
+ context "with phpunit data" do
66
+ let(:log) { fixture "phpunit.txt" }
67
+
68
+ it "returns test metrics" do
69
+ expect(result).to eq Hash(
70
+ count: 5,
71
+ failures: nil,
72
+ pending: nil
73
+ )
74
+ end
75
+
76
+ context "on failure" do
77
+ let(:log) { fixture "phpunit_failure.txt" }
78
+
79
+ it "returns test metrics" do
80
+ expect(result).to eq Hash(
81
+ count: 158,
82
+ failures: 3,
83
+ pending: nil
84
+ )
85
+ end
86
+ end
87
+ end
88
+ end
89
+
90
+ describe "#coverage" do
91
+ let(:log) { "Coverage report generated for RSpec to /tmp/coverage. 3354 / 5045 LOC (66.48%) covered." }
92
+ let(:result) { parser.coverage }
93
+
94
+ it "returns a hash" do
95
+ expect(result).to be_a Hash
96
+ end
97
+
98
+ it "returns coverage metrics hash" do
99
+ expect(result).to eq Hash(
100
+ coverage_percent: 66.48,
101
+ lines_covered: 3354,
102
+ lines_total: 5045
103
+ )
104
+ end
105
+
106
+ context "with no coverage data" do
107
+ let(:log) { "Foobar" }
108
+
109
+ it "returns nil" do
110
+ expect(result).to be_nil
111
+ end
112
+ end
113
+
114
+ context "with phpunit data" do
115
+ let(:log) { fixture "phpunit.txt" }
116
+
117
+ it "returns coverage metrics" do
118
+ expect(result).to eq Hash(
119
+ coverage_percent: 81.16,
120
+ lines_covered: 1034,
121
+ lines_total: 1274
122
+ )
123
+ end
124
+ end
125
+ end
126
+
127
+ describe "#duration" do
128
+ let(:result) { parser.duration }
129
+
130
+ context "with no duration data" do
131
+ let(:log) { "no duration entries here..." }
132
+
133
+ it "returns nil" do
134
+ expect(result).to be_nil
135
+ end
136
+ end
137
+
138
+ context "with duration entry" do
139
+ let(:formats) do
140
+ [
141
+ [ "Finished in 5 seconds", 5.00 ],
142
+ [ "Ran 1234 tests in 14.855s", 14.855 ],
143
+ [ "Time: 01:50, Memory: 113.00Mb", 110.00 ],
144
+ [ "Finished tests in 8.071688s, 3.8406 tests/s, 9.4156 assertions/s.", 8.071688 ],
145
+ [ "Finished in 10.8 seconds (3.1s on load, 7.7s on tests)", 10.8 ],
146
+ [ "80 passing (347ms)", 0.347 ]
147
+ ]
148
+ end
149
+
150
+ it "parses multiple formats" do
151
+ formats.each do |f|
152
+ expect(described_class.new(f[0]).duration).to eq f[1]
153
+ end
154
+ end
155
+ end
156
+
157
+ context "with multiple duration entries" do
158
+ let(:log) { fixture "rspec_multiple_duration.txt" }
159
+
160
+ it "returns total duration" do
161
+ expect(result).to eq 942.0924699999999
162
+ end
163
+ end
164
+
165
+ context "with phpunit data" do
166
+ let(:log) { fixture "phpunit.txt" }
167
+
168
+ it "returns total duration" do
169
+ expect(result).to eq 0.176
170
+ end
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,15 @@
1
+ require "simplecov"
2
+ SimpleCov.start
3
+
4
+ $:.unshift File.expand_path("../..", __FILE__)
5
+
6
+ require "build_log_parser"
7
+
8
+ def fixture_path(filename = nil)
9
+ path = File.expand_path("../fixtures", __FILE__)
10
+ filename.nil? ? path : File.join(path, filename)
11
+ end
12
+
13
+ def fixture(file)
14
+ File.read(File.join(fixture_path, file))
15
+ end
metadata ADDED
@@ -0,0 +1,139 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: build_log_parser
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Dan Sosedoff
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '2.13'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '2.13'
41
+ - !ruby/object:Gem::Dependency
42
+ name: simplecov
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '0.8'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: chronic_duration
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '0.10'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '0.10'
69
+ description: Parses various build metrics from builds logs (Rspec, Test::Unit, etc)
70
+ email:
71
+ - dan.sosedoff@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - .gitignore
77
+ - .rspec
78
+ - Gemfile
79
+ - LICENSE
80
+ - README.md
81
+ - Rakefile
82
+ - build_log_parser.gemspec
83
+ - lib/build_log_parser.rb
84
+ - lib/build_log_parser/coverage_matcher.rb
85
+ - lib/build_log_parser/duration_matcher.rb
86
+ - lib/build_log_parser/parser.rb
87
+ - lib/build_log_parser/phpunit_matcher.rb
88
+ - lib/build_log_parser/rspec_matcher.rb
89
+ - lib/build_log_parser/test_unit_matcher.rb
90
+ - lib/build_log_parser/version.rb
91
+ - spec/fixtures/js.txt
92
+ - spec/fixtures/phpunit.txt
93
+ - spec/fixtures/phpunit_failure.txt
94
+ - spec/fixtures/rspec.txt
95
+ - spec/fixtures/rspec_multiple.txt
96
+ - spec/fixtures/rspec_multiple_duration.txt
97
+ - spec/fixtures/simplecov.txt
98
+ - spec/fixtures/test_unit.txt
99
+ - spec/fixtures/test_unit_2.txt
100
+ - spec/lib/build_log_parser_spec.rb
101
+ - spec/lib/parser_spec.rb
102
+ - spec/spec_helper.rb
103
+ homepage: https://github.com/magnumci/build_log_parser
104
+ licenses:
105
+ - MIT
106
+ metadata: {}
107
+ post_install_message:
108
+ rdoc_options: []
109
+ require_paths:
110
+ - lib
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ requirements: []
122
+ rubyforge_project:
123
+ rubygems_version: 2.1.11
124
+ signing_key:
125
+ specification_version: 4
126
+ summary: Parse build metrics from logs
127
+ test_files:
128
+ - spec/fixtures/js.txt
129
+ - spec/fixtures/phpunit.txt
130
+ - spec/fixtures/phpunit_failure.txt
131
+ - spec/fixtures/rspec.txt
132
+ - spec/fixtures/rspec_multiple.txt
133
+ - spec/fixtures/rspec_multiple_duration.txt
134
+ - spec/fixtures/simplecov.txt
135
+ - spec/fixtures/test_unit.txt
136
+ - spec/fixtures/test_unit_2.txt
137
+ - spec/lib/build_log_parser_spec.rb
138
+ - spec/lib/parser_spec.rb
139
+ - spec/spec_helper.rb