coveralls-cobertura 1.0.0

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: ea7f566321f932675757635d823689b56124b5bc
4
+ data.tar.gz: 0509b621f03bfee72a435eb868cde1b0c2fdd010
5
+ SHA512:
6
+ metadata.gz: c4a697be9ba9fea6972cffe97712e767be37f3faf9bb4ce129610ae90f14b7f3d989e1a3e4d024b1aaf0bbbd199e9f834390a07249397d5aec5e5a1872b86bdf
7
+ data.tar.gz: ce2b52e1e10fc69345a9d880eef94038b3edb78fd75cae96a9d0a242f360643f399f54234c682b589e5e3dc828c5b724f2254389534f000d11642c2efa50342a
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2014 Scot Dalton
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # Coveralls::Cobertura
2
+ [![Build Status](https://travis-ci.org/scotdalton/coveralls-cobertura.svg)](https://travis-ci.org/scotdalton/coveralls-cobertura)
3
+ [![Dependency Status](https://gemnasium.com/scotdalton/coveralls-cobertura.svg)](https://gemnasium.com/scotdalton/coveralls-cobertura)
4
+ [![Code Climate](https://codeclimate.com/github/scotdalton/coveralls-cobertura/badges/gpa.svg)](https://codeclimate.com/github/scotdalton/coveralls-cobertura)
5
+ [![Coverage Status](https://img.shields.io/coveralls/scotdalton/coveralls-cobertura.svg)](https://coveralls.io/r/scotdalton/coveralls-cobertura)
6
+
7
+ Convert [Cobertura](https://github.com/cobertura/cobertura) XML to
8
+ [Coveralls](https://coveralls.io/) source files payload.
9
+
10
+
11
+ ## Installation
12
+ If you're using `bundler`, place the following in your Gemfile:
13
+ ```ruby
14
+ gem 'coveralls-cobertura', '~> 1.0.0'
15
+ ```
16
+ Otherwise, just install the gem:
17
+ ```shell
18
+ gem install coveralls-cobertura
19
+ ```
20
+
21
+ ## Usage
22
+ ```ruby
23
+ # Leverage the coveralls gem
24
+ require 'coveralls'
25
+ # Include this gem
26
+ require 'coveralls-cobertura'
27
+ # Coveralls endpoint that we want to send coverage data to
28
+ JOBS_ENDPOINT = 'jobs'
29
+ # Assumes you already have a payload
30
+ existing_source_files = payload[:source_files]
31
+ # Cobertura XML file
32
+ filename = 'path/to/cobertura.xml'
33
+ # Create a Converter instance
34
+ converter = Coveralls::Cobertura::Converter.new(filename)
35
+ # Convert to Coveralls
36
+ cobertura_source_files = converter.convert
37
+ # Add in the Cobertura generated source files
38
+ payload[:source_files] = existing_source_files + cobertura_source_files
39
+ Coveralls::API.post_json(JOBS_ENDPOINT, payload)
40
+ ```
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,2 @@
1
+ require "require_all"
2
+ require_all "#{File.dirname(__FILE__)}/coveralls/"
@@ -0,0 +1,25 @@
1
+ module Coveralls
2
+ module Cobertura
3
+ class Converter
4
+ attr_reader :filename
5
+
6
+ def initialize(filename)
7
+ @filename = filename
8
+ @reader = Reader.new(filename)
9
+ end
10
+
11
+ def convert
12
+ reader.class_coverages.map do |class_coverage|
13
+ {
14
+ 'name' => class_coverage.filename,
15
+ 'source' => '',
16
+ 'coverage' => class_coverage.coverage
17
+ }
18
+ end
19
+ end
20
+
21
+ private
22
+ attr_reader :reader
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,79 @@
1
+ module Coveralls
2
+ module Cobertura
3
+ require 'multi_xml'
4
+ class Reader
5
+ XML_OPTIONS = {symbolize_keys: true}
6
+
7
+ attr_reader :filename, :number_of_classes
8
+
9
+ def initialize(filename)
10
+ unless File.exists?(filename)
11
+ raise ArgumentError.new("Expecting file named #{filename} to exist.")
12
+ end
13
+ @filename = filename
14
+ @number_of_classes = classes.size
15
+ end
16
+
17
+ def class_coverages
18
+ @class_coverages ||= filenames.map do |filename|
19
+ class_coverage(filename)
20
+ end
21
+ end
22
+
23
+ private
24
+ def class_coverage(filename)
25
+ ClassCoverage.new(filename, coverage_for_filename(filename))
26
+ end
27
+
28
+ def coverage_for_filename(filename)
29
+ lines = classes.select do |e|
30
+ e[:filename] == filename
31
+ end.map do |e|
32
+ e[:lines][:line]
33
+ end.flatten
34
+ max_line = lines.map{ |line| line[:number].to_i }.max
35
+ (1..max_line).map do |index|
36
+ found_line = lines.find { |line| line[:number] == index.to_s }
37
+ (found_line.nil?) ? nil : found_line[:hits].to_i
38
+ end
39
+ end
40
+
41
+ def filenames
42
+ @filenames ||= classes.map { |e| e[:filename] }.uniq
43
+ end
44
+
45
+ def classes
46
+ packages.map do |package|
47
+ array_from_collection(package[:classes][:class])
48
+ end.flatten
49
+ end
50
+
51
+ def packages
52
+ @packages ||= array_from_collection(coverage[:packages][:package])
53
+ end
54
+
55
+ def coverage
56
+ @coverage ||= cobertura[:coverage] unless cobertura.nil?
57
+ end
58
+
59
+ def cobertura
60
+ @cobertura ||= MultiXml.parse(file, XML_OPTIONS)
61
+ end
62
+
63
+ def file
64
+ @file ||= File.new(filename)
65
+ end
66
+
67
+ def array_from_collection(collection)
68
+ case collection
69
+ when Hash
70
+ [collection]
71
+ when Array
72
+ collection
73
+ else
74
+ []
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,14 @@
1
+ module Coveralls
2
+ module Cobertura
3
+ class Reader
4
+ class ClassCoverage
5
+ attr_reader :filename, :coverage
6
+
7
+ def initialize(filename, coverage)
8
+ @filename = filename
9
+ @coverage = coverage
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ module Coveralls
2
+ module Cobertura
3
+ VERSION='1.0.0'
4
+ end
5
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+ module Coveralls
3
+ module Cobertura
4
+ describe Converter do
5
+ let(:filename) { "#{File.dirname(__FILE__)}/../../support/cobertura.xml"}
6
+ subject(:converter) { Converter.new(filename) }
7
+ it { is_expected.to be_a Converter }
8
+
9
+ describe '#filename' do
10
+ subject { converter.filename }
11
+ it { is_expected.to eq filename }
12
+ end
13
+
14
+ describe '#convert' do
15
+ subject { converter.convert }
16
+ it { is_expected.to be_an Array }
17
+ it 'should have the correct information' do
18
+ expect(subject.last).to eq({
19
+ 'name' => 'src/test/resources/TestSourceFile2.scala',
20
+ 'source' => '',
21
+ 'coverage' => [1, 1, 1]
22
+ })
23
+ end
24
+ end
25
+
26
+ context "when the filename doesn't exist" do
27
+ let(:filename) { "/does/not/exist" }
28
+ it 'should raise an ArgumentError' do
29
+ expect { is_expected.to }.to raise_error ArgumentError
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,28 @@
1
+ module Coveralls
2
+ module Cobertura
3
+ class Reader
4
+ describe ClassCoverage do
5
+ let(:filename) { 'src/test/resources/TestSourceFile.scala' }
6
+ let(:coverage) { [nil, nil, nil, 1, 1, 2, nil, nil, 1, 1] }
7
+ subject(:class_coverage) { ClassCoverage.new(filename, coverage) }
8
+
9
+ it { is_expected.to be_a ClassCoverage }
10
+
11
+ describe '#filename' do
12
+ subject { class_coverage.filename }
13
+ it { is_expected.to eq filename }
14
+ end
15
+
16
+ describe '#coverage' do
17
+ subject { class_coverage.coverage }
18
+ it { is_expected.to eq coverage }
19
+ end
20
+
21
+ describe '#coverage' do
22
+ subject { class_coverage.coverage }
23
+ it { is_expected.to eq [nil, nil, nil, 1, 1, 2, nil, nil, 1, 1] }
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,65 @@
1
+ module Coveralls
2
+ module Cobertura
3
+ describe Reader do
4
+ let(:support_path) { "#{File.dirname(__FILE__)}/../../support"}
5
+ let(:filename) { "#{support_path}/cobertura.xml"}
6
+ subject(:reader) { Reader.new(filename) }
7
+
8
+ it { is_expected.to be_a Reader }
9
+
10
+ describe '#filename' do
11
+ subject { reader.filename }
12
+ it { is_expected.to eq filename }
13
+ end
14
+
15
+ describe '#number_of_classes' do
16
+ subject { reader.number_of_classes }
17
+ it { is_expected.to eq 3 }
18
+ end
19
+
20
+ describe '#class_coverages' do
21
+ subject { reader.class_coverages }
22
+ it { is_expected.to all( be_a Reader::ClassCoverage ) }
23
+ context 'when there is one package' do
24
+ let(:filename) { "#{support_path}/cobertura.xml"}
25
+ it "should have 2 elements" do
26
+ expect(subject.size).to eq 2
27
+ end
28
+ context 'for the class coverage for "src/test/resources/TestSourceFile.scala"' do
29
+ let(:class_filename) { 'src/test/resources/TestSourceFile.scala' }
30
+ it 'should have the correct coverage' do
31
+ class_coverage = subject.find do |class_coverage|
32
+ class_coverage.filename == class_filename
33
+ end
34
+ coverage = class_coverage.coverage
35
+ expect(coverage).to eq [nil, nil, nil, 1, 1, 2, nil, nil, 1, 1]
36
+ end
37
+ end
38
+ context 'for the class coverage for "src/test/resources/TestSourceFile2.scala"' do
39
+ let(:class_filename) { 'src/test/resources/TestSourceFile2.scala' }
40
+ it 'should have the correct coverage' do
41
+ class_coverage = subject.find do |class_coverage|
42
+ class_coverage.filename == class_filename
43
+ end
44
+ coverage = class_coverage.coverage
45
+ expect(coverage).to eq [1, 1, 1]
46
+ end
47
+ end
48
+ end
49
+ context 'where there is more than 1 package' do
50
+ let(:filename) { "#{support_path}/cobertura_multi_packages.xml"}
51
+ it "should have 4 elements" do
52
+ expect(subject.size).to eq 4
53
+ end
54
+ end
55
+ end
56
+
57
+ context "when the filename doesn't exist" do
58
+ let(:filename) { "/does/not/exist" }
59
+ it 'should raise an ArgumentError' do
60
+ expect { is_expected.to }.to raise_error ArgumentError
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,92 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+ require 'coveralls-cobertura'
4
+ # This file was generated by the `rspec --init` command. Conventionally, all
5
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
6
+ # The generated `.rspec` file contains `--require spec_helper` which will cause this
7
+ # file to always be loaded, without a need to explicitly require it in any files.
8
+ #
9
+ # Given that it is always loaded, you are encouraged to keep this file as
10
+ # light-weight as possible. Requiring heavyweight dependencies from this file
11
+ # will add to the boot time of your test suite on EVERY test run, even for an
12
+ # individual file that may not need all of that loaded. Instead, consider making
13
+ # a separate helper file that requires the additional dependencies and performs
14
+ # the additional setup, and require it from the spec files that actually need it.
15
+ #
16
+ # The `.rspec` file also contains a few flags that are not defaults but that
17
+ # users commonly want.
18
+ #
19
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
20
+ RSpec.configure do |config|
21
+ # rspec-expectations config goes here. You can use an alternate
22
+ # assertion/expectation library such as wrong or the stdlib/minitest
23
+ # assertions if you prefer.
24
+ config.expect_with :rspec do |expectations|
25
+ # This option will default to `true` in RSpec 4. It makes the `description`
26
+ # and `failure_message` of custom matchers include text for helper methods
27
+ # defined using `chain`, e.g.:
28
+ # be_bigger_than(2).and_smaller_than(4).description
29
+ # # => "be bigger than 2 and smaller than 4"
30
+ # ...rather than:
31
+ # # => "be bigger than 2"
32
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
33
+ end
34
+
35
+ # rspec-mocks config goes here. You can use an alternate test double
36
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
37
+ config.mock_with :rspec do |mocks|
38
+ # Prevents you from mocking or stubbing a method that does not exist on
39
+ # a real object. This is generally recommended, and will default to
40
+ # `true` in RSpec 4.
41
+ mocks.verify_partial_doubles = true
42
+ end
43
+
44
+ # The settings below are suggested to provide a good initial experience
45
+ # with RSpec, but feel free to customize to your heart's content.
46
+ =begin
47
+ # These two settings work together to allow you to limit a spec run
48
+ # to individual examples or groups you care about by tagging them with
49
+ # `:focus` metadata. When nothing is tagged with `:focus`, all examples
50
+ # get run.
51
+ config.filter_run :focus
52
+ config.run_all_when_everything_filtered = true
53
+
54
+ # Limits the available syntax to the non-monkey patched syntax that is recommended.
55
+ # For more details, see:
56
+ # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
57
+ # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
58
+ # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
59
+ config.disable_monkey_patching!
60
+
61
+ # This setting enables warnings. It's recommended, but in some cases may
62
+ # be too noisy due to issues in dependencies.
63
+ config.warnings = true
64
+
65
+ # Many RSpec users commonly either run the entire suite or an individual
66
+ # file, and it's useful to allow more verbose output when running an
67
+ # individual spec file.
68
+ if config.files_to_run.one?
69
+ # Use the documentation formatter for detailed output,
70
+ # unless a formatter has already been configured
71
+ # (e.g. via a command-line flag).
72
+ config.default_formatter = 'doc'
73
+ end
74
+
75
+ # Print the 10 slowest examples and example groups at the
76
+ # end of the spec run, to help surface which specs are running
77
+ # particularly slow.
78
+ config.profile_examples = 10
79
+
80
+ # Run specs in random order to surface order dependencies. If you find an
81
+ # order dependency and want to debug it, you can fix the order by providing
82
+ # the seed, which is printed after each run.
83
+ # --seed 1234
84
+ config.order = :random
85
+
86
+ # Seed global randomization in this process using the `--seed` CLI option.
87
+ # Setting this allows you to use `--seed` to deterministically reproduce
88
+ # test failures related to randomization by passing the same `--seed` value
89
+ # as the one that triggered the failure.
90
+ Kernel.srand config.seed
91
+ =end
92
+ end
@@ -0,0 +1,31 @@
1
+ <coverage line-rate="0.87">
2
+ <packages>
3
+ <package line-rate="0.87" name="com.github.theon.coveralls">
4
+ <classes>
5
+ <class line-rate="0.87" name="TestSourceFile" filename="src/test/resources/TestSourceFile.scala">
6
+ <methods/>
7
+ <lines>
8
+ <line number="4" hits="1"/>
9
+ <line number="5" hits="1"/>
10
+ <line number="6" hits="2"/>
11
+ </lines>
12
+ </class>
13
+ <class line-rate="0.87" name="TestSourceFile" filename="src/test/resources/TestSourceFile.scala">
14
+ <methods/>
15
+ <lines>
16
+ <line number="9" hits="1"/>
17
+ <line number="10" hits="1"/>
18
+ </lines>
19
+ </class>
20
+ <class line-rate="0.87" name="TestSourceFile2" filename="src/test/resources/TestSourceFile2.scala">
21
+ <methods/>
22
+ <lines>
23
+ <line number="1" hits="1"/>
24
+ <line number="2" hits="1"/>
25
+ <line number="3" hits="1"/>
26
+ </lines>
27
+ </class>
28
+ </classes>
29
+ </package>
30
+ </packages>
31
+ </coverage>
@@ -0,0 +1,58 @@
1
+ <coverage line-rate="0.87">
2
+ <packages>
3
+ <package line-rate="0.87" name="com.github.theon.coveralls2">
4
+ <classes>
5
+ <class line-rate="0.87" name="TestSourceFile" filename="src/test/resources2/TestSourceFile.scala">
6
+ <methods/>
7
+ <lines>
8
+ <line number="4" hits="1"/>
9
+ <line number="5" hits="1"/>
10
+ <line number="6" hits="2"/>
11
+ </lines>
12
+ </class>
13
+ <class line-rate="0.87" name="TestSourceFile" filename="src/test/resources2/TestSourceFile.scala">
14
+ <methods/>
15
+ <lines>
16
+ <line number="9" hits="1"/>
17
+ <line number="10" hits="1"/>
18
+ </lines>
19
+ </class>
20
+ <class line-rate="0.87" name="TestSourceFile2" filename="src/test/resources2/TestSourceFile2.scala">
21
+ <methods/>
22
+ <lines>
23
+ <line number="1" hits="1"/>
24
+ <line number="2" hits="1"/>
25
+ <line number="3" hits="1"/>
26
+ </lines>
27
+ </class>
28
+ </classes>
29
+ </package>
30
+ <package line-rate="0.87" name="com.github.theon.coveralls">
31
+ <classes>
32
+ <class line-rate="0.87" name="TestSourceFile" filename="src/test/resources/TestSourceFile.scala">
33
+ <methods/>
34
+ <lines>
35
+ <line number="4" hits="1"/>
36
+ <line number="5" hits="1"/>
37
+ <line number="6" hits="2"/>
38
+ </lines>
39
+ </class>
40
+ <class line-rate="0.87" name="TestSourceFile" filename="src/test/resources/TestSourceFile.scala">
41
+ <methods/>
42
+ <lines>
43
+ <line number="9" hits="1"/>
44
+ <line number="10" hits="1"/>
45
+ </lines>
46
+ </class>
47
+ <class line-rate="0.87" name="TestSourceFile2" filename="src/test/resources/TestSourceFile2.scala">
48
+ <methods/>
49
+ <lines>
50
+ <line number="1" hits="1"/>
51
+ <line number="2" hits="1"/>
52
+ <line number="3" hits="1"/>
53
+ </lines>
54
+ </class>
55
+ </classes>
56
+ </package>
57
+ </packages>
58
+ </coverage>
metadata ADDED
@@ -0,0 +1,148 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: coveralls-cobertura
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Scot Dalton
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: require_all
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.3.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.3.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: multi_xml
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.5.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.5.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 3.1.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 3.1.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: nokogiri
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.6.4
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.6.4
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.10'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.10'
97
+ description: Covert Cobertura XML to Coveralls source files payload
98
+ email:
99
+ - scotdalton@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - MIT-LICENSE
105
+ - README.md
106
+ - Rakefile
107
+ - lib/coveralls-cobertura.rb
108
+ - lib/coveralls/cobertura/converter.rb
109
+ - lib/coveralls/cobertura/reader.rb
110
+ - lib/coveralls/cobertura/reader/class_coverage.rb
111
+ - lib/coveralls/cobertura/version.rb
112
+ - spec/coveralls/cobertura/converter_spec.rb
113
+ - spec/coveralls/cobertura/reader/class_coverage_spec.rb
114
+ - spec/coveralls/cobertura/reader_spec.rb
115
+ - spec/spec_helper.rb
116
+ - spec/support/cobertura.xml
117
+ - spec/support/cobertura_multi_packages.xml
118
+ homepage: https://github.com/scotdalton/coveralls-cobertura
119
+ licenses:
120
+ - MIT
121
+ metadata: {}
122
+ post_install_message:
123
+ rdoc_options: []
124
+ require_paths:
125
+ - lib
126
+ required_ruby_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ required_rubygems_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ requirements: []
137
+ rubyforge_project:
138
+ rubygems_version: 2.2.2
139
+ signing_key:
140
+ specification_version: 4
141
+ summary: Covert Cobertura XML to Coveralls
142
+ test_files:
143
+ - spec/coveralls/cobertura/converter_spec.rb
144
+ - spec/coveralls/cobertura/reader/class_coverage_spec.rb
145
+ - spec/coveralls/cobertura/reader_spec.rb
146
+ - spec/spec_helper.rb
147
+ - spec/support/cobertura.xml
148
+ - spec/support/cobertura_multi_packages.xml