coveralls 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,19 @@
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
+
19
+ .DS_Store
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ rvm:
3
+ - rbx-18mode
4
+ - rbx-19mode
5
+ - jruby-18mode
6
+ - jruby-19mode
7
+ - 1.8.7
8
+ - 1.9.2
9
+ - 1.9.3
10
+ - ruby-head
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in coveralls-ruby.gemspec
4
+ gemspec
5
+
6
+ gem 'simplecov', :require => false
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Wil Gieseler
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # Coveralls for Ruby
2
+ Add the following to your Gemfile
3
+
4
+ group :test do
5
+ gem 'coveralls', require: false, github: 'lemurheavy/coveralls-ruby'
6
+ end
7
+
8
+ <!---
9
+ TODO: Write a gem description
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ gem 'coveralls-ruby'
16
+
17
+ And then execute:
18
+
19
+ $ bundle
20
+
21
+ Or install it yourself as:
22
+
23
+ $ gem install coveralls-ruby
24
+
25
+ ## Usage
26
+
27
+ TODO: Write usage instructions here
28
+
29
+ ## Contributing
30
+
31
+ 1. Fork it
32
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
33
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
34
+ 4. Push to the branch (`git push origin my-new-feature`)
35
+ 5. Create new Pull Request
36
+ -->
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+
4
+ # Travis!
5
+ require 'rubygems'
6
+ require 'rake'
7
+ require 'rspec/core/rake_task'
8
+
9
+ desc "Run RSpec"
10
+ RSpec::Core::RakeTask.new do |t|
11
+ t.verbose = false
12
+ end
13
+
14
+ task :default => :spec
data/bin/coveralls ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
4
+ $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
5
+
6
+ require 'coveralls'
7
+ require 'coveralls/command'
8
+
9
+ Coveralls::CommandLine.start
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/coveralls/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Wil Gieseler"]
6
+ gem.email = ["supapuerco@gmail.com"]
7
+ gem.description = "A Ruby implementation of the Coveralls API."
8
+ gem.summary = "A Ruby implementation of the Coveralls API."
9
+ gem.homepage = "http://coveralls.io"
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "coveralls"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Coveralls::VERSION
17
+
18
+ gem.add_dependency 'rest-client'
19
+ gem.add_dependency 'colorize'
20
+ gem.add_dependency 'json'
21
+ gem.add_dependency 'thor'
22
+
23
+ if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new("1.9")
24
+ gem.add_dependency 'simplecov', ">= 0.7"
25
+ end
26
+
27
+ gem.add_runtime_dependency('jruby-openssl') if RUBY_PLATFORM == 'java'
28
+
29
+ gem.add_development_dependency 'rspec'
30
+ gem.add_development_dependency 'rake'
31
+
32
+ end
data/lib/coveralls.rb ADDED
@@ -0,0 +1,65 @@
1
+ require 'colorize'
2
+
3
+ require "coveralls/version"
4
+ require "coveralls/configuration"
5
+ require "coveralls/api"
6
+ require "coveralls/simplecov"
7
+
8
+ module Coveralls
9
+
10
+ def self.wear!(simplecov_setting = nil)
11
+ setup!
12
+ start!(simplecov_setting)
13
+ end
14
+
15
+ def self.setup!
16
+
17
+ # Try to load up SimpleCov.
18
+ @@adapter = nil
19
+ if defined?(::SimpleCov)
20
+ @@adapter = :simplecov
21
+ else
22
+ begin
23
+ require 'simplecov'
24
+ @@adapter = :simplecov if defined?(::SimpleCov)
25
+ rescue
26
+ end
27
+ end
28
+
29
+ # Load the appropriate adapter.
30
+ if @@adapter == :simplecov
31
+ ::SimpleCov.formatter = Coveralls::SimpleCov::Formatter
32
+ puts "[Coveralls] Using the SimpleCov formatter.".green
33
+ else
34
+ puts "[Coveralls] Couldn't find an appropriate adapter.".red
35
+ end
36
+
37
+ end
38
+
39
+ def self.start!(simplecov_setting = nil)
40
+ if @@adapter == :simplecov
41
+ if simplecov_setting
42
+ puts "[Coveralls] Using SimpleCov's '#{simplecov_setting}' settings.".green
43
+ ::SimpleCov.start(simplecov_setting)
44
+ else
45
+ ::SimpleCov.start
46
+ end
47
+ end
48
+ end
49
+
50
+ def self.should_run?
51
+
52
+ # Fail early if we're not on Travis
53
+ unless ENV["TRAVIS"] || ENV["COVERALLS_RUN_LOCALLY"]
54
+ puts "[Coveralls] Not saving coverage run because we aren't on Travis CI.".yellow
55
+ return false
56
+ end
57
+
58
+ if ENV["COVERALLS_RUN_LOCALLY"] == "true"
59
+ puts "[Coveralls] Creating a new job on Coveralls from local coverage results.".cyan
60
+ end
61
+
62
+ true
63
+ end
64
+
65
+ end
@@ -0,0 +1,48 @@
1
+ module Coveralls
2
+ class API
3
+
4
+ require 'json'
5
+ require 'rest_client'
6
+
7
+ # API_BASE = "http://coveralls.dev/api/v1"
8
+ API_BASE = "https://coveralls.io/api/v1"
9
+
10
+ def self.post_json(endpoint, hash)
11
+ url = endpoint_to_url(endpoint)
12
+ puts JSON.pretty_generate(hash).green if ENV['COVERALLS_DEBUG']
13
+ hash = apified_hash hash
14
+ puts "[Coveralls] Submitting to #{API_BASE}".cyan
15
+ response = RestClient.post(url, :json_file => hash_to_file(hash))
16
+ response_hash = JSON.parse response.to_str
17
+ puts ("[Coveralls] " + response_hash['message']).cyan
18
+ if response_hash['message']
19
+ puts ("[Coveralls] " + response_hash['url'].underline).cyan
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def self.endpoint_to_url(endpoint)
26
+ "#{API_BASE}/#{endpoint}"
27
+ end
28
+
29
+ def self.hash_to_file(hash)
30
+ file = nil
31
+ Tempfile.open(['coveralls-upload', 'json']) do |f|
32
+ f.write(hash.to_json.to_s)
33
+ file = f
34
+ end
35
+ File.new(file.path, 'rb')
36
+ end
37
+
38
+ def self.apified_hash hash
39
+ config = Coveralls::Configuration.configuration
40
+ if ENV['TRAVIS'] || ENV['COVERALLS_DEBUG']
41
+ puts "[Coveralls] Submiting with config:".yellow
42
+ puts JSON.pretty_generate(config).yellow
43
+ end
44
+ hash.merge(config)
45
+ end
46
+
47
+ end
48
+ end
@@ -0,0 +1,27 @@
1
+ module Coveralls
2
+ require "thor"
3
+
4
+ class CommandLine < Thor
5
+
6
+ desc "rspec", "Runs your specs and pushes the coverage results to Coveralls."
7
+ def rspec
8
+ return unless ensure_can_run_locally!
9
+ ENV["COVERALLS_RUN_LOCALLY"] = "true"
10
+ exec "bundle exec rspec"
11
+ ENV["COVERALLS_RUN_LOCALLY"] = nil
12
+ end
13
+
14
+ private
15
+
16
+ def ensure_can_run_locally!
17
+ config = Coveralls::Configuration.configuration
18
+ if config[:repo_token].nil?
19
+ puts "Coveralls cannot run locally because no repo_secret_token is set in .coveralls.yml".red
20
+ puts "Please try again when you get your act together.".red
21
+ return false
22
+ end
23
+ true
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,99 @@
1
+ module Coveralls
2
+ module Configuration
3
+
4
+ require 'yaml'
5
+
6
+ def self.configuration
7
+ yaml_config = nil
8
+ if self.configuration_path && File.exists?(self.configuration_path)
9
+ yaml_config = YAML::load_file(self.configuration_path)
10
+ end
11
+ config = {
12
+ :environment => self.relevant_env,
13
+ :configuration => yaml_config,
14
+ :repo_token => yaml_config ? yaml_config['repo_secret_token'] : nil,
15
+ :git => git
16
+ }
17
+ if ENV['TRAVIS']
18
+ config[:service_job_id] = ENV['TRAVIS_JOB_ID']
19
+ config[:service_name] = (yaml_config ? yaml_config['service_name'] : nil) || 'travis-ci'
20
+ end
21
+ config
22
+ end
23
+
24
+ def self.configuration_path
25
+ File.expand_path(File.join(self.root, ".coveralls.yml")) if self.root
26
+ end
27
+
28
+ def self.root
29
+ pwd
30
+ end
31
+
32
+ def self.pwd
33
+ Dir.pwd
34
+ end
35
+
36
+ def self.simplecov_root
37
+ if defined?(::SimpleCov)
38
+ ::SimpleCov.root
39
+ end
40
+ end
41
+
42
+ def self.rails_root
43
+ Rails.root.to_s
44
+ rescue
45
+ nil
46
+ end
47
+
48
+ def self.git
49
+ hash = {}
50
+
51
+ Dir.chdir(root) do
52
+
53
+ hash[:head] = {
54
+ :id => `git log -1 --pretty=format:'%H'`,
55
+ :author_name => `git log -1 --pretty=format:'%aN'`,
56
+ :author_email => `git log -1 --pretty=format:'%ae'`,
57
+ :committer_name => `git log -1 --pretty=format:'%cN'`,
58
+ :committer_email => `git log -1 --pretty=format:'%ce'`,
59
+ :message => `git log -1 --pretty=format:'%s'`
60
+ }
61
+
62
+ # Branch
63
+ branch = `git branch`.split("\n").delete_if { |i| i[0] != "*" }
64
+ hash[:branch] = [branch].flatten.first.gsub("* ","")
65
+
66
+ # Remotes
67
+ remotes = nil
68
+ begin
69
+ remotes = `git remote -v`.split(/\n/).map do |remote|
70
+ splits = remote.split(" ").compact
71
+ {:name => splits[0], :url => splits[1]}
72
+ end.uniq
73
+ rescue
74
+ end
75
+ hash[:remotes] = remotes
76
+
77
+ end
78
+
79
+ hash
80
+
81
+ rescue Exception => e
82
+ puts "Coveralls git error:".red
83
+ puts e.to_s.red
84
+ nil
85
+ end
86
+
87
+ def self.relevant_env
88
+ {
89
+ :travis_job_id => ENV['TRAVIS_JOB_ID'],
90
+ :travis_pull_request => ENV['TRAVIS_PULL_REQUEST'],
91
+ :pwd => self.pwd,
92
+ :rails_root => self.rails_root,
93
+ :simplecov_root => simplecov_root,
94
+ :gem_version => VERSION
95
+ }
96
+ end
97
+
98
+ end
99
+ end
@@ -0,0 +1,92 @@
1
+ module Coveralls
2
+ module SimpleCov
3
+ class Formatter
4
+
5
+ def format(result)
6
+
7
+ unless Coveralls.should_run?
8
+ # Log which files would be submitted.
9
+ if result.files.length > 0
10
+ puts "[Coveralls] We suspect you're in a development environment, here's some handy coverage stats:"
11
+ else
12
+ puts "[Coveralls] There are no covered files.".yellow
13
+ end
14
+ result.files.each do |f|
15
+ print " * "
16
+ print "#{short_filename(f.filename)}".cyan
17
+ print " => ".white
18
+ cov = "#{f.covered_percent.round}%"
19
+ if f.covered_percent > 90
20
+ print cov.green
21
+ elsif f.covered_percent > 80
22
+ print cov.yellow
23
+ else
24
+ print cov.red
25
+ end
26
+ puts ""
27
+ end
28
+ return
29
+ end
30
+
31
+ # Gather the source files.
32
+ source_files = []
33
+ result.files.each do |file|
34
+ properties = {}
35
+
36
+ # Get Source
37
+ properties[:source] = File.open(file.filename, "rb").read
38
+
39
+ # Get the root-relative filename
40
+ properties[:name] = short_filename(file.filename)
41
+
42
+ # Get the coverage
43
+ properties[:coverage] = file.coverage
44
+
45
+ # Get the group
46
+ # puts "result groups: #{result.groups}"
47
+ # result.groups.each do |group_name, grouped_files|
48
+ # puts "Checking #{grouped_files.map(&:filename)} for #{file.filename}"
49
+ # if grouped_files.map(&:filename).include?(file.filename)
50
+ # properties[:group] = group_name
51
+ # break
52
+ # end
53
+ # end
54
+
55
+ source_files << properties
56
+ end
57
+
58
+ # Log which files are being submitted.
59
+ # puts "Submitting #{source_files.length} file#{source_files.length == 1 ? '' : 's'}:"
60
+ # source_files.each do |f|
61
+ # puts " => #{f[:name]}"
62
+ # end
63
+
64
+ # Post to Coveralls.
65
+ API.post_json "jobs", {:source_files => source_files, :test_framework => result.command_name.downcase, :run_at => result.created_at}
66
+
67
+ true
68
+
69
+ rescue Exception => e
70
+ puts "Coveralls encountered an exception:".red
71
+ puts e.class.to_s.red
72
+ puts e.message.red
73
+ e.backtrace.each do |line|
74
+ puts line.red
75
+ end
76
+ if e.respond_to?(:response) && e.response
77
+ puts e.response.to_s.red
78
+ end
79
+ end
80
+
81
+ def output_message(result)
82
+ "Coverage is at #{result.covered_percent.round(2)}%.\nCoverage report sent to Coveralls."
83
+ end
84
+
85
+ def short_filename(filename)
86
+ filename = filename.gsub(::SimpleCov.root, '.').gsub(/^\.\//, '') if ::SimpleCov.root
87
+ filename
88
+ end
89
+
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,3 @@
1
+ module Coveralls
2
+ VERSION = "0.5.1"
3
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe Coveralls::Configuration do
4
+
5
+ it "asserts true" do
6
+ config = Coveralls::Configuration.configuration
7
+ config.should_not be_nil
8
+ end
9
+
10
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Coveralls::SimpleCov::Formatter do
4
+
5
+ # it "fails unless we are on travis" do
6
+ # Coveralls::SimpleCov::Formatter.new.format(nil).should be_false
7
+ # end
8
+
9
+ it "asserts true" do
10
+ true.should be_true
11
+ end
12
+
13
+ end
@@ -0,0 +1,20 @@
1
+ require 'simplecov'
2
+
3
+ class InceptionFormatter
4
+ def format(result)
5
+ Coveralls::SimpleCov::Formatter.new.format(result)
6
+ end
7
+ end
8
+
9
+ SimpleCov.formatter = InceptionFormatter
10
+ SimpleCov.start do
11
+ add_filter 'spec'
12
+ end
13
+
14
+ require 'coveralls'
15
+
16
+ RSpec.configure do |config|
17
+ config.treat_symbols_as_metadata_keys_with_true_values = true
18
+ config.run_all_when_everything_filtered = true
19
+ config.filter_run :focus
20
+ end
metadata ADDED
@@ -0,0 +1,185 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: coveralls
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Wil Gieseler
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rest-client
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
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: colorize
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
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: json
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
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: thor
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
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: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: simplecov
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0.7'
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.7'
94
+ - !ruby/object:Gem::Dependency
95
+ name: rspec
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
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
+ - !ruby/object:Gem::Dependency
111
+ name: rake
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ description: A Ruby implementation of the Coveralls API.
127
+ email:
128
+ - supapuerco@gmail.com
129
+ executables:
130
+ - coveralls
131
+ extensions: []
132
+ extra_rdoc_files: []
133
+ files:
134
+ - .gitignore
135
+ - .rspec
136
+ - .travis.yml
137
+ - Gemfile
138
+ - LICENSE
139
+ - README.md
140
+ - Rakefile
141
+ - bin/coveralls
142
+ - coveralls-ruby.gemspec
143
+ - lib/coveralls.rb
144
+ - lib/coveralls/api.rb
145
+ - lib/coveralls/command.rb
146
+ - lib/coveralls/configuration.rb
147
+ - lib/coveralls/simplecov.rb
148
+ - lib/coveralls/version.rb
149
+ - spec/coveralls/configuration_spec.rb
150
+ - spec/coveralls/simplecov_spec.rb
151
+ - spec/spec_helper.rb
152
+ homepage: http://coveralls.io
153
+ licenses: []
154
+ post_install_message:
155
+ rdoc_options: []
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ none: false
160
+ requirements:
161
+ - - ! '>='
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ segments:
165
+ - 0
166
+ hash: -2712901091024616588
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
168
+ none: false
169
+ requirements:
170
+ - - ! '>='
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ segments:
174
+ - 0
175
+ hash: -2712901091024616588
176
+ requirements: []
177
+ rubyforge_project:
178
+ rubygems_version: 1.8.24
179
+ signing_key:
180
+ specification_version: 3
181
+ summary: A Ruby implementation of the Coveralls API.
182
+ test_files:
183
+ - spec/coveralls/configuration_spec.rb
184
+ - spec/coveralls/simplecov_spec.rb
185
+ - spec/spec_helper.rb