easycov 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.
- checksums.yaml +7 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +68 -0
- data/Rakefile +39 -0
- data/VERSION +1 -0
- data/easycov.gemspec +57 -0
- data/lib/easycov/filters.rb +59 -0
- data/lib/easycov.rb +185 -0
- metadata +134 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 96b862186042f31d03bf6642fa0714e3644ec856
|
4
|
+
data.tar.gz: ec52a3bc841ecdf46951eeb184e405f6ee8dd9db
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ffa376fa75fb898e20a5973e95ec0242c2fb0733e79ba7635ede89b500611a34f37518ecd1859136181de174a3f078c28839ca7a0a7d0dd2286268085a0177d3
|
7
|
+
data.tar.gz: ecd01431d0e10a25cff6e346feb7fcbd4465fc93abf803749866cf33da63689ed6cc4d933b3efd71acfc7c2d8b2d495f0e54a4d229a2012ff08bb4caf12ba5e3
|
data/Gemfile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gem "simplecov"
|
4
|
+
gem "multi_json"
|
5
|
+
|
6
|
+
group :development do
|
7
|
+
gem "yard", "~> 0.8"
|
8
|
+
gem "bundler", "~> 1.1"
|
9
|
+
gem "jeweler", :git => "https://github.com/chetan/jeweler.git", :branch => "bixby"
|
10
|
+
|
11
|
+
gem "minitest", "~> 4.0", :platforms => [:mri_19, :mri_20, :rbx]
|
12
|
+
end
|
13
|
+
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
GIT
|
2
|
+
remote: https://github.com/chetan/jeweler.git
|
3
|
+
revision: c83ba18b074e82415052e80499a770bff87bf944
|
4
|
+
branch: bixby
|
5
|
+
specs:
|
6
|
+
jeweler (1.8.7)
|
7
|
+
builder
|
8
|
+
bundler (~> 1.0)
|
9
|
+
git (>= 1.2.5)
|
10
|
+
github_api (= 0.10.1)
|
11
|
+
highline (>= 1.6.15)
|
12
|
+
nokogiri (= 1.5.10)
|
13
|
+
rake
|
14
|
+
rdoc
|
15
|
+
|
16
|
+
GEM
|
17
|
+
remote: https://rubygems.org/
|
18
|
+
specs:
|
19
|
+
addressable (2.3.5)
|
20
|
+
builder (3.2.2)
|
21
|
+
faraday (0.8.8)
|
22
|
+
multipart-post (~> 1.2.0)
|
23
|
+
git (1.2.6)
|
24
|
+
github_api (0.10.1)
|
25
|
+
addressable
|
26
|
+
faraday (~> 0.8.1)
|
27
|
+
hashie (>= 1.2)
|
28
|
+
multi_json (~> 1.4)
|
29
|
+
nokogiri (~> 1.5.2)
|
30
|
+
oauth2
|
31
|
+
hashie (2.0.5)
|
32
|
+
highline (1.6.19)
|
33
|
+
httpauth (0.2.0)
|
34
|
+
json (1.8.0)
|
35
|
+
jwt (0.1.8)
|
36
|
+
multi_json (>= 1.5)
|
37
|
+
minitest (4.7.5)
|
38
|
+
multi_json (1.8.0)
|
39
|
+
multi_xml (0.5.5)
|
40
|
+
multipart-post (1.2.0)
|
41
|
+
nokogiri (1.5.10)
|
42
|
+
oauth2 (0.9.2)
|
43
|
+
faraday (~> 0.8)
|
44
|
+
httpauth (~> 0.2)
|
45
|
+
jwt (~> 0.1.4)
|
46
|
+
multi_json (~> 1.0)
|
47
|
+
multi_xml (~> 0.5)
|
48
|
+
rack (~> 1.2)
|
49
|
+
rack (1.5.2)
|
50
|
+
rake (10.1.0)
|
51
|
+
rdoc (4.0.1)
|
52
|
+
json (~> 1.4)
|
53
|
+
simplecov (0.7.1)
|
54
|
+
multi_json (~> 1.0)
|
55
|
+
simplecov-html (~> 0.7.1)
|
56
|
+
simplecov-html (0.7.1)
|
57
|
+
yard (0.8.7.1)
|
58
|
+
|
59
|
+
PLATFORMS
|
60
|
+
ruby
|
61
|
+
|
62
|
+
DEPENDENCIES
|
63
|
+
bundler (~> 1.1)
|
64
|
+
jeweler!
|
65
|
+
minitest (~> 4.0)
|
66
|
+
multi_json
|
67
|
+
simplecov
|
68
|
+
yard (~> 0.8)
|
data/Rakefile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
require 'jeweler'
|
14
|
+
|
15
|
+
Jeweler::Tasks.new do |gemspec|
|
16
|
+
gemspec.name = "easycov"
|
17
|
+
gemspec.summary = "Ruby code coverage library"
|
18
|
+
gemspec.description = "An easy to use, simplecov-compatibile code coverage library for Ruby"
|
19
|
+
gemspec.email = "chetan@pixelcop.net"
|
20
|
+
gemspec.homepage = "http://github.com/chetan/easycov"
|
21
|
+
gemspec.authors = ["Chetan Sarva"]
|
22
|
+
gemspec.license = "MIT"
|
23
|
+
end
|
24
|
+
Jeweler::RubygemsDotOrgTasks.new
|
25
|
+
|
26
|
+
Dir['tasks/**/*.rake'].each { |rake| load rake }
|
27
|
+
|
28
|
+
require 'rake/testtask'
|
29
|
+
Rake::TestTask.new(:test) do |test|
|
30
|
+
test.libs << 'lib' << 'test'
|
31
|
+
test.pattern = 'test/**/*_test.rb'
|
32
|
+
test.verbose = true
|
33
|
+
end
|
34
|
+
|
35
|
+
task :default => :test
|
36
|
+
|
37
|
+
require 'yard'
|
38
|
+
YARD::Rake::YardocTask.new
|
39
|
+
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/easycov.gemspec
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "easycov"
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Chetan Sarva"]
|
12
|
+
s.date = "2013-09-25"
|
13
|
+
s.description = "An easy to use, simplecov-compatibile code coverage library for Ruby"
|
14
|
+
s.email = "chetan@pixelcop.net"
|
15
|
+
s.files = [
|
16
|
+
"Gemfile",
|
17
|
+
"Gemfile.lock",
|
18
|
+
"Rakefile",
|
19
|
+
"VERSION",
|
20
|
+
"easycov.gemspec",
|
21
|
+
"lib/easycov.rb",
|
22
|
+
"lib/easycov/filters.rb"
|
23
|
+
]
|
24
|
+
s.homepage = "http://github.com/chetan/easycov"
|
25
|
+
s.licenses = ["MIT"]
|
26
|
+
s.require_paths = ["lib"]
|
27
|
+
s.rubygems_version = "2.0.5"
|
28
|
+
s.summary = "Ruby code coverage library"
|
29
|
+
|
30
|
+
if s.respond_to? :specification_version then
|
31
|
+
s.specification_version = 4
|
32
|
+
|
33
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
34
|
+
s.add_runtime_dependency(%q<simplecov>, [">= 0"])
|
35
|
+
s.add_runtime_dependency(%q<multi_json>, [">= 0"])
|
36
|
+
s.add_development_dependency(%q<yard>, ["~> 0.8"])
|
37
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.1"])
|
38
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
39
|
+
s.add_development_dependency(%q<minitest>, ["~> 4.0"])
|
40
|
+
else
|
41
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
42
|
+
s.add_dependency(%q<multi_json>, [">= 0"])
|
43
|
+
s.add_dependency(%q<yard>, ["~> 0.8"])
|
44
|
+
s.add_dependency(%q<bundler>, ["~> 1.1"])
|
45
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
46
|
+
s.add_dependency(%q<minitest>, ["~> 4.0"])
|
47
|
+
end
|
48
|
+
else
|
49
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
50
|
+
s.add_dependency(%q<multi_json>, [">= 0"])
|
51
|
+
s.add_dependency(%q<yard>, ["~> 0.8"])
|
52
|
+
s.add_dependency(%q<bundler>, ["~> 1.1"])
|
53
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
54
|
+
s.add_dependency(%q<minitest>, ["~> 4.0"])
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
@@ -0,0 +1,59 @@
|
|
1
|
+
|
2
|
+
module EasyCov
|
3
|
+
module Filters
|
4
|
+
|
5
|
+
class << self
|
6
|
+
# Get the list of STDLIB load paths
|
7
|
+
def stdlib_paths
|
8
|
+
return @stdlib_paths if !@stdlib_paths.nil?
|
9
|
+
|
10
|
+
# load
|
11
|
+
opt, lib = ENV.delete("RUBYOPT"), ENV.delete("RUBYLIB")
|
12
|
+
@stdlib_paths ||= `ruby -e 'puts $:'`.strip.split(/\n/)
|
13
|
+
ENV["RUBYOPT"] = opt
|
14
|
+
ENV["RUBYLIB"] = lib
|
15
|
+
|
16
|
+
return @stdlib_paths
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Ignore files in <root>/test/
|
21
|
+
IGNORE_TESTS = lambda { |filename|
|
22
|
+
filename =~ %r{^#{EasyCov.root}/test/}
|
23
|
+
}
|
24
|
+
|
25
|
+
# Ignore all filfes outside EasyCov.root (pwd by default)
|
26
|
+
IGNORE_OUTSIDE_ROOT = lambda { |filename|
|
27
|
+
filename !~ /^#{EasyCov.root}/
|
28
|
+
}
|
29
|
+
|
30
|
+
# Ignore all ruby STDLIB files
|
31
|
+
IGNORE_STDLIB = lambda { |filename|
|
32
|
+
EasyCov::Filters.stdlib_paths.each do |path|
|
33
|
+
if filename =~ /^#{path}/ then
|
34
|
+
return true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
false
|
38
|
+
}
|
39
|
+
|
40
|
+
# Ignore all gems (uses GEM_PATH if set, else /gems/ in filename)
|
41
|
+
IGNORE_GEMS = lambda { |filename|
|
42
|
+
if ENV["GEM_PATH"] && !ENV["GEM_PATH"].empty? then
|
43
|
+
# use GEM_PATH if avail
|
44
|
+
ENV["GEM_PATH"].split(':').each do |path|
|
45
|
+
if filename =~ /^#{path}/ then
|
46
|
+
return true
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
false
|
51
|
+
|
52
|
+
else
|
53
|
+
# simple regex
|
54
|
+
filename =~ %r{/gems/}
|
55
|
+
end
|
56
|
+
}
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
data/lib/easycov.rb
ADDED
@@ -0,0 +1,185 @@
|
|
1
|
+
|
2
|
+
require "coverage"
|
3
|
+
require "fileutils"
|
4
|
+
|
5
|
+
require "simplecov"
|
6
|
+
require "multi_json"
|
7
|
+
|
8
|
+
require "easycov/filters"
|
9
|
+
|
10
|
+
module EasyCov
|
11
|
+
|
12
|
+
include EasyCov::Filters
|
13
|
+
|
14
|
+
class << self
|
15
|
+
attr_accessor :root, :path, :resolve_symlinks
|
16
|
+
|
17
|
+
# Start coverage engine
|
18
|
+
# Can be run multiple times without side-effect.
|
19
|
+
def start
|
20
|
+
return if ENV["DISABLE_EASYCOV"] == "1"
|
21
|
+
@resolve_symlinks = true if @resolve_symlinks.nil?
|
22
|
+
@path ||= File.expand_path("coverage")
|
23
|
+
@root ||= Dir.pwd # only set first time
|
24
|
+
Coverage.start
|
25
|
+
end
|
26
|
+
|
27
|
+
# Dump coverage to disk in a thread-safe way
|
28
|
+
def dump
|
29
|
+
return if ENV["DISABLE_EASYCOV"] == "1"
|
30
|
+
Coverage.start # always make sure we are started
|
31
|
+
|
32
|
+
FileUtils.mkdir_p(@path)
|
33
|
+
|
34
|
+
if ENV["PARALLEL_EASYCOV"] == "1" then
|
35
|
+
# in parallel mode, write output to separate files for each process
|
36
|
+
# to be merged later, via #merge
|
37
|
+
write_json(File.join(@path, ".tmp.#{$$}.resultset.json"))
|
38
|
+
return
|
39
|
+
end
|
40
|
+
|
41
|
+
# default is to lock the output file
|
42
|
+
output = File.join(@path, ".resultset.json")
|
43
|
+
EasyCov.lock(output) do
|
44
|
+
write_json(output)
|
45
|
+
end
|
46
|
+
|
47
|
+
end # dump
|
48
|
+
|
49
|
+
# Write coverage to disk and restart
|
50
|
+
def checkpoint
|
51
|
+
dump()
|
52
|
+
start()
|
53
|
+
end
|
54
|
+
|
55
|
+
# List of filters
|
56
|
+
def filters
|
57
|
+
@filters ||= []
|
58
|
+
end
|
59
|
+
|
60
|
+
# Add filter block
|
61
|
+
def filter(&block)
|
62
|
+
filters << block
|
63
|
+
end
|
64
|
+
|
65
|
+
# Set path to coverage dir
|
66
|
+
def path=(path)
|
67
|
+
@path = File.expand_path(path)
|
68
|
+
end
|
69
|
+
|
70
|
+
def install_exit_hook
|
71
|
+
return if ENV["DISABLE_EASYCOV"] == "1"
|
72
|
+
Kernel.at_exit do
|
73
|
+
EasyCov.checkpoint
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Merge all temporary coverage files into main file
|
78
|
+
def merge!
|
79
|
+
|
80
|
+
output = File.join(@path, ".resultset.json")
|
81
|
+
files = [ output ] + Dir.glob(File.join(@path, ".tmp.*.resultset.json"))
|
82
|
+
|
83
|
+
data = {}
|
84
|
+
files.each do |f|
|
85
|
+
next if !File.exists? f
|
86
|
+
data.merge!(MultiJson.load(File.read(f)))
|
87
|
+
File.delete(f)
|
88
|
+
end
|
89
|
+
|
90
|
+
# write to final dest
|
91
|
+
File.open(output+".tmp", 'w'){ |f| f.write(MultiJson.dump(data)) }
|
92
|
+
File.rename(output+".tmp", output)
|
93
|
+
end
|
94
|
+
|
95
|
+
# Create a flock on the given file
|
96
|
+
#
|
97
|
+
# @param [String] lockfile to lock on
|
98
|
+
# @param [Block]
|
99
|
+
def lock(lockfile, &block)
|
100
|
+
lockfile = "#{lockfile}.lock"
|
101
|
+
|
102
|
+
FileUtils.touch(lockfile)
|
103
|
+
lock = File.new(lockfile)
|
104
|
+
lock.flock(File::LOCK_EX)
|
105
|
+
|
106
|
+
block.call()
|
107
|
+
|
108
|
+
begin
|
109
|
+
lock.flock(File::LOCK_UN)
|
110
|
+
rescue
|
111
|
+
end
|
112
|
+
|
113
|
+
begin
|
114
|
+
File.delete(lockfile)
|
115
|
+
rescue
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
private
|
122
|
+
|
123
|
+
# Apply filters
|
124
|
+
def apply_filters(result)
|
125
|
+
|
126
|
+
ret = {}
|
127
|
+
|
128
|
+
if @resolve_symlinks then
|
129
|
+
# resolve any symlinks in paths
|
130
|
+
result.each do |file,cov|
|
131
|
+
next if not File.exists? file
|
132
|
+
f = File.realpath(file)
|
133
|
+
if f != file then
|
134
|
+
ret[f] = cov
|
135
|
+
else
|
136
|
+
ret[file] = cov
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
else
|
141
|
+
ret = result.dup
|
142
|
+
end
|
143
|
+
|
144
|
+
# apply filters
|
145
|
+
filters.each do |filter|
|
146
|
+
ret.delete_if { |file, cov|
|
147
|
+
filter.call(file)
|
148
|
+
}
|
149
|
+
end
|
150
|
+
|
151
|
+
return ret
|
152
|
+
end
|
153
|
+
|
154
|
+
def write_json(output)
|
155
|
+
# load existing if avail
|
156
|
+
data = File.exists?(output) ? MultiJson.load(File.read(output)) : {}
|
157
|
+
|
158
|
+
# merge our data
|
159
|
+
result = apply_filters(Coverage.result)
|
160
|
+
|
161
|
+
time = Time.new
|
162
|
+
name = "Test #{time.strftime('%Y%m%d.%H%M%S')} #{Random.rand(1_000_000)}"
|
163
|
+
data[name] = {
|
164
|
+
:coverage => result,
|
165
|
+
:timestamp => time.to_i
|
166
|
+
}
|
167
|
+
|
168
|
+
# write to tmp file then move, in case we err out
|
169
|
+
File.open(output+".tmp", 'w'){ |f| f.write(MultiJson.dump(data)) }
|
170
|
+
File.rename(output+".tmp", output)
|
171
|
+
end
|
172
|
+
|
173
|
+
end # self
|
174
|
+
|
175
|
+
TOP_PID = Process.pid
|
176
|
+
end
|
177
|
+
|
178
|
+
# Patch to use our path
|
179
|
+
module SimpleCov
|
180
|
+
class << self
|
181
|
+
def coverage_path
|
182
|
+
EasyCov.path
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
metadata
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: easycov
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Chetan Sarva
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-09-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: simplecov
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: multi_json
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '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'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: yard
|
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: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.1'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.1'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: jeweler
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: minitest
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '4.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '4.0'
|
97
|
+
description: An easy to use, simplecov-compatibile code coverage library for Ruby
|
98
|
+
email: chetan@pixelcop.net
|
99
|
+
executables: []
|
100
|
+
extensions: []
|
101
|
+
extra_rdoc_files: []
|
102
|
+
files:
|
103
|
+
- Gemfile
|
104
|
+
- Gemfile.lock
|
105
|
+
- Rakefile
|
106
|
+
- VERSION
|
107
|
+
- easycov.gemspec
|
108
|
+
- lib/easycov.rb
|
109
|
+
- lib/easycov/filters.rb
|
110
|
+
homepage: http://github.com/chetan/easycov
|
111
|
+
licenses:
|
112
|
+
- MIT
|
113
|
+
metadata: {}
|
114
|
+
post_install_message:
|
115
|
+
rdoc_options: []
|
116
|
+
require_paths:
|
117
|
+
- lib
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - '>='
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
123
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - '>='
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
requirements: []
|
129
|
+
rubyforge_project:
|
130
|
+
rubygems_version: 2.0.5
|
131
|
+
signing_key:
|
132
|
+
specification_version: 4
|
133
|
+
summary: Ruby code coverage library
|
134
|
+
test_files: []
|