xccoveralls 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +38 -0
- data/bin/xccoveralls +7 -0
- data/lib/xccoveralls.rb +7 -0
- data/lib/xccoveralls/command.rb +56 -0
- data/lib/xccoveralls/ignorefile.rb +63 -0
- data/lib/xccoveralls/options.rb +70 -0
- data/lib/xccoveralls/runner.rb +36 -0
- data/lib/xccoveralls/version.rb +7 -0
- data/lib/xccoveralls/xccov.rb +106 -0
- metadata +257 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 606f261288aa70308e1e1d13e26e59a0482de3188131aa7b510f3d39d1b49c4e
|
4
|
+
data.tar.gz: 2d31330cbfea3eba83010fa3ebdb45184c3c2c0db7eeb2b62be08bc85e59f7f0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: '068e529f033c304d7a9bb32c6112e045d24f6b19ac9bf716ae1e0e11a3b3a9ebda8857f330404ba28f65cce19ee1c2ec4162d8f1fe967ef8e97496281b5840db'
|
7
|
+
data.tar.gz: 8702ba1a73421a4c15ca6df01ae43a70701d1ae07564e4a5287758b0e9db168d342a6528bbd2e4e374b9fd5880bf3df4ad2c3f7f6aeaaab2aab53e0b189b6a9a
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2018 Atsushi NAGASE
|
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,38 @@
|
|
1
|
+
# `$ xccoveralls`
|
2
|
+
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/xccoveralls.png)][gem]
|
4
|
+
[![CircleCI](https://circleci.com/gh/ngs/xccoveralls.svg?style=svg)](https://circleci.com/gh/ngs/xccoveralls)
|
5
|
+
[![Coverage Status](https://coveralls.io/repos/github/ngs/xccoveralls/badge.svg)](https://coveralls.io/github/ngs/xccoveralls)
|
6
|
+
|
7
|
+
Command line tool for sending Xcode 9.3+ coverage information to [Coveralls]
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
```sh
|
12
|
+
$ [sudo] gem install xccoveralls
|
13
|
+
```
|
14
|
+
|
15
|
+
## Command
|
16
|
+
|
17
|
+
```sh
|
18
|
+
$ xccoveralls report
|
19
|
+
```
|
20
|
+
|
21
|
+
## Options
|
22
|
+
|
23
|
+
| Name | Description | Env Name | Default | Required |
|
24
|
+
| --------------------------- | --------------------------- | ------------------------------- | --------------------------------------- | :------: |
|
25
|
+
| `-s`, `--source_path` | Path to project root | `XCCOVERALLS_SOURCE_PATH` | Top level of Git repository | |
|
26
|
+
| `-d`, `--derived_data_path` | Path to DerivedDat | `XCCOVERALLS_DERIVED_DATA_PATH` | `~/Library/Developer/Xcode/DerivedData` | |
|
27
|
+
| `-i`, `--ignorefile_path` | Path to Ignorefile | `XCCOVERALLS_IGNOREFILE_PATH` | `(source_path)/.coverallsignore` | |
|
28
|
+
| `-T`, `--repo_token` | Coveralls secret repo token | `XCCOVERALLS_REPO_TOKEN` | | * |
|
29
|
+
|
30
|
+
|
31
|
+
## License
|
32
|
+
|
33
|
+
Copyright © 2018 [Atsushi Nagase]. MIT Licensed, see [LICENSE] for details.
|
34
|
+
|
35
|
+
[Coveralls]: https://coveralls.io/
|
36
|
+
[gem]: https://rubygems.org/gems/xccoveralls
|
37
|
+
[LICENSE]: LICENSE
|
38
|
+
[Atsushi Nagase]: https://ngs.io
|
data/bin/xccoveralls
ADDED
data/lib/xccoveralls.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'commander'
|
2
|
+
require 'fastlane_core'
|
3
|
+
require 'xccoveralls/options'
|
4
|
+
require 'xccoveralls/runner'
|
5
|
+
require 'xccoveralls/version'
|
6
|
+
|
7
|
+
HighLine.track_eof = false
|
8
|
+
|
9
|
+
module Xccoveralls
|
10
|
+
class Command
|
11
|
+
include Commander::Methods
|
12
|
+
FastlaneCore::CommanderGenerator.new.generate(Options.available_options)
|
13
|
+
|
14
|
+
def self.run!
|
15
|
+
FastlaneCore::UpdateChecker.start_looking_for_update NAME
|
16
|
+
new.run!
|
17
|
+
ensure
|
18
|
+
FastlaneCore::UpdateChecker.show_update_status NAME, VERSION
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize # rubocop:disable Metrics/MethodLength
|
22
|
+
program :version, VERSION
|
23
|
+
program :description, DESCRIPTION
|
24
|
+
program :help, 'Author', 'Atsushi Nagase <a@ngs.io>'
|
25
|
+
program :help, 'Blog', 'https://ngs.io'
|
26
|
+
program :help, 'GitHub', 'https://github.com/ngs/xccoveralls'
|
27
|
+
program :help_formatter, :compact
|
28
|
+
|
29
|
+
global_option('--verbose') do
|
30
|
+
FastlaneCore::Globals.verbose = true
|
31
|
+
ENV['COVERALLS_DEBUG'] = '1'
|
32
|
+
end
|
33
|
+
|
34
|
+
command(:report) { |command| setup_report(command) }
|
35
|
+
default_command :report
|
36
|
+
end
|
37
|
+
|
38
|
+
def setup_report(command)
|
39
|
+
command.syntax = NAME
|
40
|
+
command.description = 'Send Coverage information to Coveralls'
|
41
|
+
command.action { |args, options| run_report!(args, options) }
|
42
|
+
FastlaneCore::CommanderGenerator.new.generate(
|
43
|
+
Options.available_options,
|
44
|
+
command: command
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
def run_report!(_args, options)
|
49
|
+
config = FastlaneCore::Configuration.create(
|
50
|
+
Options.available_options,
|
51
|
+
options.__hash__.reject { |k, _v| k == :verbose }
|
52
|
+
)
|
53
|
+
Xccoveralls::Runner.new(config.values).run!
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
##
|
4
|
+
# Ignore things
|
5
|
+
# Originally bollowed from https://git.io/fbj4N
|
6
|
+
##
|
7
|
+
module Xccoveralls
|
8
|
+
class Ignorefile
|
9
|
+
attr_reader :statements
|
10
|
+
COMMENT_OR_WHITESPACE = /^\s*(?:#.*)?$/
|
11
|
+
|
12
|
+
def initialize(*args)
|
13
|
+
@statements = []
|
14
|
+
|
15
|
+
args.each do |arg|
|
16
|
+
!arg.is_a?(Array) && File.exist?(arg) &&
|
17
|
+
(return load_file(arg))
|
18
|
+
push(arg)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def push(*arg)
|
23
|
+
statements.push(*arg.flatten.map(&:strip))
|
24
|
+
|
25
|
+
self
|
26
|
+
end
|
27
|
+
alias << push
|
28
|
+
|
29
|
+
def load_file(file)
|
30
|
+
file = Pathname.new(file)
|
31
|
+
return unless file.exist?
|
32
|
+
|
33
|
+
push(file.readlines.map(&:strip).reject do |line|
|
34
|
+
line.empty? || line =~ COMMENT_OR_WHITESPACE
|
35
|
+
end)
|
36
|
+
|
37
|
+
self
|
38
|
+
end
|
39
|
+
|
40
|
+
def ignored?(file) # rubocop:disable Metrics/AbcSize
|
41
|
+
return true if file.to_s.strip.empty?
|
42
|
+
|
43
|
+
path = Pathname.new file
|
44
|
+
|
45
|
+
includes = statements.reject { |statement| statement[0] == '!' }
|
46
|
+
.map { |statement| "*#{statement}*" }
|
47
|
+
|
48
|
+
excludes = statements.select { |statement| statement[0] == '!' }
|
49
|
+
.map { |statement| "*#{statement[1..-1]}*" }
|
50
|
+
|
51
|
+
includes.any? { |statement| path.fnmatch?(statement) } &&
|
52
|
+
excludes.all? { |statement| !path.fnmatch?(statement) }
|
53
|
+
end
|
54
|
+
|
55
|
+
def apply(files)
|
56
|
+
files.reject { |file| ignored?(file) }
|
57
|
+
end
|
58
|
+
|
59
|
+
def apply!(files)
|
60
|
+
files.reject! { |file| ignored?(file) }
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'fastlane_core'
|
2
|
+
|
3
|
+
module Xccoveralls
|
4
|
+
class Options
|
5
|
+
def self.available_options # rubocop:disable Metrics/MethodLength, Metrics/LineLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
6
|
+
root_path = `git rev-parse --show-toplevel`.strip
|
7
|
+
[
|
8
|
+
FastlaneCore::ConfigItem.new(
|
9
|
+
key: :source_path,
|
10
|
+
short_option: '-s',
|
11
|
+
optional: true,
|
12
|
+
env_name: 'XCCOVERALLS_SOURCE_PATH',
|
13
|
+
description: 'Path to project root',
|
14
|
+
default_value: root_path,
|
15
|
+
verify_block: proc do |value|
|
16
|
+
v = File.expand_path(value.to_s)
|
17
|
+
File.exist?(v) ||
|
18
|
+
user_error!("Source path #{v} does not exist")
|
19
|
+
File.directory?(v) ||
|
20
|
+
user_error!("Source path #{v} is not a directory")
|
21
|
+
end
|
22
|
+
),
|
23
|
+
FastlaneCore::ConfigItem.new(
|
24
|
+
key: :derived_data_path,
|
25
|
+
short_option: '-d',
|
26
|
+
optional: true,
|
27
|
+
env_name: 'XCCOVERALLS_DERIVED_DATA_PATH',
|
28
|
+
description: 'Path to DerivedData',
|
29
|
+
default_value: "#{ENV.fetch('HOME')}/Library/Developer/Xcode/DerivedData", # rubocop:disable Metrics/LineLength
|
30
|
+
verify_block: proc do |value|
|
31
|
+
v = File.expand_path(value.to_s)
|
32
|
+
File.exist?(v) ||
|
33
|
+
user_error!("Source path #{v} does not exist")
|
34
|
+
File.directory?(v) ||
|
35
|
+
user_error!("Source path #{v} is not a directory")
|
36
|
+
end
|
37
|
+
),
|
38
|
+
FastlaneCore::ConfigItem.new(
|
39
|
+
key: :ignorefile_path,
|
40
|
+
short_option: '-i',
|
41
|
+
optional: true,
|
42
|
+
env_name: 'XCCOVERALLS_IGNOREFILE_PATH',
|
43
|
+
description: 'Path to Ignorefile',
|
44
|
+
default_value: nil,
|
45
|
+
verify_block: proc do |value|
|
46
|
+
value.nil? && return
|
47
|
+
v = File.expand_path(value.to_s)
|
48
|
+
File.exist?(v) ||
|
49
|
+
user_error!("Ignorefile does not exist at #{v}")
|
50
|
+
File.file?(v) ||
|
51
|
+
user_error!("#{v} is not a file")
|
52
|
+
end
|
53
|
+
),
|
54
|
+
FastlaneCore::ConfigItem.new(
|
55
|
+
key: :repo_token,
|
56
|
+
short_option: '-T',
|
57
|
+
optional: true,
|
58
|
+
env_name: 'XCCOVERALLS_REPO_TOKEN',
|
59
|
+
description: 'Coveralls secret repo token'
|
60
|
+
)
|
61
|
+
]
|
62
|
+
end
|
63
|
+
|
64
|
+
private_class_method
|
65
|
+
|
66
|
+
def self.user_error!(msg)
|
67
|
+
FastlaneCore::UI.user_error!(msg)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'fastlane_core'
|
2
|
+
require 'xccoveralls/xccov'
|
3
|
+
require 'coveralls'
|
4
|
+
|
5
|
+
module Xccoveralls
|
6
|
+
class Runner
|
7
|
+
attr_reader :repo_token
|
8
|
+
attr_reader :xccov
|
9
|
+
attr_reader :coveralls_configuration
|
10
|
+
|
11
|
+
def initialize(
|
12
|
+
repo_token: nil, derived_data_path: nil,
|
13
|
+
source_path: nil, ignorefile_path: nil
|
14
|
+
)
|
15
|
+
options = {
|
16
|
+
derived_data_path: derived_data_path,
|
17
|
+
source_path: source_path, ignorefile_path: ignorefile_path
|
18
|
+
}
|
19
|
+
@xccov = Xccoveralls::Xccov.new(options)
|
20
|
+
@repo_token = repo_token
|
21
|
+
|
22
|
+
FastlaneCore::PrintTable.print_values(
|
23
|
+
config: options,
|
24
|
+
title: "Summary for #{Xccoveralls::NAME} #{Xccoveralls::VERSION}"
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def run!
|
29
|
+
org_repo_token = ENV['COVERALLS_REPO_TOKEN']
|
30
|
+
ENV['COVERALLS_REPO_TOKEN'] = repo_token || org_repo_token
|
31
|
+
@coveralls_configuration = Coveralls::Configuration.configuration
|
32
|
+
Coveralls::API.post_json 'jobs', xccov.to_json
|
33
|
+
ENV['COVERALLS_REPO_TOKEN'] = org_repo_token
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'fastlane_core'
|
2
|
+
require 'xccoveralls/ignorefile'
|
3
|
+
|
4
|
+
module Xccoveralls
|
5
|
+
class Xccov
|
6
|
+
attr_reader :source_path
|
7
|
+
attr_reader :derived_data_path
|
8
|
+
attr_reader :ignorefile_path
|
9
|
+
|
10
|
+
def initialize(
|
11
|
+
derived_data_path: nil,
|
12
|
+
source_path: nil,
|
13
|
+
ignorefile_path: nil
|
14
|
+
)
|
15
|
+
@source_path = source_path
|
16
|
+
@derived_data_path = derived_data_path
|
17
|
+
@ignorefile_path = ignorefile_path || File.join(
|
18
|
+
source_path, '.coverallsignore'
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_logs_path
|
23
|
+
File.join derived_data_path, 'Logs', 'Test'
|
24
|
+
end
|
25
|
+
|
26
|
+
def archive_path
|
27
|
+
return @archive_path if @archive_path
|
28
|
+
ext = '.xccovarchive'
|
29
|
+
files = Dir[File.join(test_logs_path, "*#{ext}")]
|
30
|
+
@archive_path = files.sort_by { |filename| File.mtime(filename) }
|
31
|
+
.reverse.first
|
32
|
+
@archive_path ||
|
33
|
+
user_error!("Could not find any #{ext} in #{derived_data_path}")
|
34
|
+
@archive_path
|
35
|
+
end
|
36
|
+
|
37
|
+
def coverage(path)
|
38
|
+
file_paths.include?(path) ||
|
39
|
+
user_error!("No coverage data for #{path}")
|
40
|
+
res = exec(['--file', "'#{path}'"])
|
41
|
+
res.split("\n").map do |line|
|
42
|
+
line = line.strip.split(/[\s:]/).reject(&:empty?)
|
43
|
+
next unless line[0] =~ /^\d+$/
|
44
|
+
hits = line[1]
|
45
|
+
hits == '*' ? nil : hits.to_i
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def source_digest(path)
|
50
|
+
File.file?(path) ||
|
51
|
+
user_error!("File at #{path} does not exist")
|
52
|
+
FastlaneCore::CommandExecutor.execute(
|
53
|
+
command: %w[git hash-object] + %W["#{path}"],
|
54
|
+
print_command: false
|
55
|
+
).strip
|
56
|
+
end
|
57
|
+
|
58
|
+
def name(path)
|
59
|
+
path.start_with?(source_path) || (return path)
|
60
|
+
Pathname.new(path).relative_path_from(
|
61
|
+
Pathname.new(source_path)
|
62
|
+
).to_s
|
63
|
+
end
|
64
|
+
|
65
|
+
# http://docs.coveralls.io/api-introduction#source-files
|
66
|
+
def file(path)
|
67
|
+
{
|
68
|
+
name: name(path),
|
69
|
+
source_digest: source_digest(path),
|
70
|
+
coverage: coverage(path)
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
def files
|
75
|
+
file_paths.map { |path| file(path) }
|
76
|
+
end
|
77
|
+
|
78
|
+
def to_json
|
79
|
+
{ source_files: files }
|
80
|
+
end
|
81
|
+
|
82
|
+
def file_paths
|
83
|
+
return @file_paths if @file_paths
|
84
|
+
paths = exec(%w[--file-list]).split("\n")
|
85
|
+
if File.file?(ignorefile_path)
|
86
|
+
ignore = Ignorefile.new(ignorefile_path)
|
87
|
+
ignore.apply!(paths)
|
88
|
+
end
|
89
|
+
@file_paths = paths
|
90
|
+
end
|
91
|
+
|
92
|
+
def exec(args)
|
93
|
+
cmd = %w[xcrun xccov view] + args + %W["#{archive_path}"]
|
94
|
+
FastlaneCore::CommandExecutor.execute(
|
95
|
+
command: cmd,
|
96
|
+
print_command: false
|
97
|
+
).strip
|
98
|
+
end
|
99
|
+
|
100
|
+
private_class_method
|
101
|
+
|
102
|
+
def user_error!(msg)
|
103
|
+
FastlaneCore::UI.user_error!(msg)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
metadata
ADDED
@@ -0,0 +1,257 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xccoveralls
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Atsushi Nagase
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-07-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: coveralls
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.8'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.8'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: fastlane
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.82'
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '3.0'
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '2.82'
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '3.0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: bundler
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
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
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: guard
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: guard-rspec
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: guard-rubocop
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: rake
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: rspec
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: rspec-collection_matchers
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
- !ruby/object:Gem::Dependency
|
146
|
+
name: rspec-its
|
147
|
+
requirement: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '0'
|
152
|
+
type: :development
|
153
|
+
prerelease: false
|
154
|
+
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
- !ruby/object:Gem::Dependency
|
160
|
+
name: rspec-mocks
|
161
|
+
requirement: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - ">="
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0'
|
173
|
+
- !ruby/object:Gem::Dependency
|
174
|
+
name: rspec_junit_formatter
|
175
|
+
requirement: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - ">="
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '0'
|
180
|
+
type: :development
|
181
|
+
prerelease: false
|
182
|
+
version_requirements: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0'
|
187
|
+
- !ruby/object:Gem::Dependency
|
188
|
+
name: rubocop
|
189
|
+
requirement: !ruby/object:Gem::Requirement
|
190
|
+
requirements:
|
191
|
+
- - '='
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: '0.49'
|
194
|
+
type: :development
|
195
|
+
prerelease: false
|
196
|
+
version_requirements: !ruby/object:Gem::Requirement
|
197
|
+
requirements:
|
198
|
+
- - '='
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
version: '0.49'
|
201
|
+
- !ruby/object:Gem::Dependency
|
202
|
+
name: simplecov
|
203
|
+
requirement: !ruby/object:Gem::Requirement
|
204
|
+
requirements:
|
205
|
+
- - ">="
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: '0'
|
208
|
+
type: :development
|
209
|
+
prerelease: false
|
210
|
+
version_requirements: !ruby/object:Gem::Requirement
|
211
|
+
requirements:
|
212
|
+
- - ">="
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: '0'
|
215
|
+
description: Command line tool for sending Xcode 9.3+ coverage information to Coveralls
|
216
|
+
email:
|
217
|
+
- a@ngs.io
|
218
|
+
executables:
|
219
|
+
- xccoveralls
|
220
|
+
extensions: []
|
221
|
+
extra_rdoc_files: []
|
222
|
+
files:
|
223
|
+
- LICENSE
|
224
|
+
- README.md
|
225
|
+
- bin/xccoveralls
|
226
|
+
- lib/xccoveralls.rb
|
227
|
+
- lib/xccoveralls/command.rb
|
228
|
+
- lib/xccoveralls/ignorefile.rb
|
229
|
+
- lib/xccoveralls/options.rb
|
230
|
+
- lib/xccoveralls/runner.rb
|
231
|
+
- lib/xccoveralls/version.rb
|
232
|
+
- lib/xccoveralls/xccov.rb
|
233
|
+
homepage: https://github.com/ngs/xccoveralls
|
234
|
+
licenses:
|
235
|
+
- MIT
|
236
|
+
metadata: {}
|
237
|
+
post_install_message:
|
238
|
+
rdoc_options: []
|
239
|
+
require_paths:
|
240
|
+
- lib
|
241
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
242
|
+
requirements:
|
243
|
+
- - ">="
|
244
|
+
- !ruby/object:Gem::Version
|
245
|
+
version: 2.0.0
|
246
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - ">="
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '0'
|
251
|
+
requirements: []
|
252
|
+
rubyforge_project:
|
253
|
+
rubygems_version: 2.7.7
|
254
|
+
signing_key:
|
255
|
+
specification_version: 4
|
256
|
+
summary: Command line tool for sending Xcode 9.3+ coverage information to Coveralls
|
257
|
+
test_files: []
|