danger 8.6.1 → 9.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 +4 -4
- data/LICENSE +1 -1
- data/lib/danger/ci_source/appcircle.rb +83 -0
- data/lib/danger/ci_source/bitrise.rb +7 -7
- data/lib/danger/ci_source/circle.rb +1 -1
- data/lib/danger/ci_source/code_build.rb +19 -5
- data/lib/danger/ci_source/gitlab_ci.rb +1 -1
- data/lib/danger/ci_source/jenkins.rb +1 -1
- data/lib/danger/comment_generators/gitlab_inline.md.erb +1 -1
- data/lib/danger/danger_core/dangerfile.rb +1 -1
- data/lib/danger/danger_core/plugins/dangerfile_danger_plugin.rb +1 -1
- data/lib/danger/danger_core/plugins/dangerfile_local_only_plugin.rb +1 -1
- data/lib/danger/request_sources/bitbucket_server.rb +48 -8
- data/lib/danger/request_sources/bitbucket_server_api.rb +5 -0
- data/lib/danger/request_sources/vsts.rb +1 -1
- data/lib/danger/request_sources/vsts_api.rb +2 -2
- data/lib/danger/version.rb +1 -1
- metadata +11 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8fc4bd35f1d805c6e3ef5b0467cd59281f0251c10b0580ebb138002e3b370e62
|
4
|
+
data.tar.gz: 29df2722f598ead34bee294304b60b3f6343c6147cce87054772aac2b40f1f2b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 304581c49ae31baa62f135883e006536e993a824a6cea8a920a37d58b232ea3118eccf773ffc760281c8a49b70446b51b955c952379e9d41e12e9d9e9842a4d7
|
7
|
+
data.tar.gz: d68b392bcb4075b852cc988fdaa3e9e2fd3df080417dd31d1cb314bf9ec1a4f3af5fdf759f7f106e5071b60e48ae4affb78750ae58a43ecadb94d533d9e80d83
|
data/LICENSE
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (c)
|
3
|
+
Copyright (c) 2015-present Orta, Felix Krause
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# https://docs.appcircle.io/environment-variables/managing-variables
|
2
|
+
# https://docs.appcircle.io/build/build-profile-configuration#environment-variables-configuration
|
3
|
+
require "danger/request_sources/github/github"
|
4
|
+
require "danger/request_sources/gitlab"
|
5
|
+
module Danger
|
6
|
+
# ### CI Setup
|
7
|
+
#
|
8
|
+
# Add a Custom Script step to your workflow and set it as a bash:
|
9
|
+
#
|
10
|
+
# ```shell
|
11
|
+
# cd $AC_REPOSITORY_DIR
|
12
|
+
# bundle install
|
13
|
+
# bundle exec danger
|
14
|
+
# ```
|
15
|
+
# ### Token Setup
|
16
|
+
#
|
17
|
+
# Login to Appcircle and select your build profile. Go to your *Config* and
|
18
|
+
# choose *Environment Variables*.
|
19
|
+
# https://docs.appcircle.io/environment-variables/managing-variables
|
20
|
+
#
|
21
|
+
# #### GitHub
|
22
|
+
# Add the `DANGER_GITHUB_API_TOKEN` to your profile's ENV.
|
23
|
+
#
|
24
|
+
# #### GitLab
|
25
|
+
# Add the `DANGER_GITLAB_API_TOKEN` to your profile's ENV.
|
26
|
+
#
|
27
|
+
# #### Bitbucket Cloud
|
28
|
+
# Add the `DANGER_BITBUCKETSERVER_USERNAME`, `DANGER_BITBUCKETSERVER_PASSWORD`
|
29
|
+
# to your profile's ENV.
|
30
|
+
#
|
31
|
+
# #### Bitbucket server
|
32
|
+
# Add the `DANGER_BITBUCKETSERVER_USERNAME`, `DANGER_BITBUCKETSERVER_PASSWORD`
|
33
|
+
# and `DANGER_BITBUCKETSERVER_HOST` to your profile's ENV.
|
34
|
+
#
|
35
|
+
class Appcircle < CI
|
36
|
+
def self.validates_as_ci?(env)
|
37
|
+
env.key? "AC_APPCIRCLE"
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.validates_as_pr?(env)
|
41
|
+
return false unless env.key? "AC_PULL_NUMBER"
|
42
|
+
env["AC_PULL_NUMBER"].to_i > 0
|
43
|
+
end
|
44
|
+
|
45
|
+
def supported_request_sources
|
46
|
+
@supported_request_sources ||= [
|
47
|
+
Danger::RequestSources::GitHub,
|
48
|
+
Danger::RequestSources::BitbucketCloud,
|
49
|
+
Danger::RequestSources::BitbucketServer,
|
50
|
+
Danger::RequestSources::GitLab
|
51
|
+
]
|
52
|
+
end
|
53
|
+
|
54
|
+
def initialize(env)
|
55
|
+
self.pull_request_id = env["AC_PULL_NUMBER"]
|
56
|
+
self.repo_url = env["AC_GIT_URL"]
|
57
|
+
self.repo_slug = repo_slug_from(self.repo_url)
|
58
|
+
end
|
59
|
+
|
60
|
+
def repo_slug_from(url)
|
61
|
+
if url =~ URI::regexp
|
62
|
+
# Try to parse the URL as a valid URI. This should cover the cases of http/https/ssh URLs.
|
63
|
+
begin
|
64
|
+
uri = URI.parse(url)
|
65
|
+
return uri.path.sub(/^(\/)/,'').sub(/(.git)$/,'')
|
66
|
+
rescue URI::InvalidURIError
|
67
|
+
# In case URL could not be parsed fallback to git URL parsing.
|
68
|
+
repo_slug_asgiturl(url)
|
69
|
+
end
|
70
|
+
else
|
71
|
+
# In case URL could not be parsed fallback to git URL parsing. git@github.com:organization/repo.git
|
72
|
+
repo_slug_asgiturl(url)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def repo_slug_asgiturl(url)
|
77
|
+
matcher_url = url
|
78
|
+
repo_matches = matcher_url.match(%r{([\/:])(([^\/]+\/)+[^\/]+?)(\.git$|$)})[2]
|
79
|
+
return repo_matches unless repo_matches.nil?
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
@@ -19,13 +19,13 @@ module Danger
|
|
19
19
|
#
|
20
20
|
# Add the `DANGER_GITHUB_API_TOKEN` to your workflow's [Secret App Env Vars](https://blog.bitrise.io/anyone-even-prs-can-have-secrets).
|
21
21
|
#
|
22
|
-
# ### bitbucket server and
|
22
|
+
# ### bitbucket server and bitrise
|
23
23
|
#
|
24
|
-
# Danger will read the environment variable GIT_REPOSITORY_URL to construct the Bitbucket Server API URL
|
25
|
-
# finding the project and repo slug in the GIT_REPOSITORY_URL variable. This GIT_REPOSITORY_URL variable
|
26
|
-
# comes from the App Settings tab for your
|
27
|
-
# Git Clone Repo step, you may need to set adjust this
|
28
|
-
# The patterns used are `(%r{\.com/(.*)})` and `(%r{\.com:(.*)})` and .split(/\.git$|$/) to remove ".git" if the URL contains it.
|
24
|
+
# Danger will read the environment variable GIT_REPOSITORY_URL to construct the Bitbucket Server API URL
|
25
|
+
# finding the project and repo slug in the GIT_REPOSITORY_URL variable. This GIT_REPOSITORY_URL variable
|
26
|
+
# comes from the App Settings tab for your Bitrise App. If you are manually setting a repo URL in the
|
27
|
+
# Git Clone Repo step, you may need to set adjust this property in the settings tab, maybe even fake it.
|
28
|
+
# The patterns used are `(%r{\.com/(.*)})` and `(%r{\.com:(.*)})` and .split(/\.git$|$/) to remove ".git" if the URL contains it.
|
29
29
|
#
|
30
30
|
class Bitrise < CI
|
31
31
|
def self.validates_as_ci?(env)
|
@@ -48,7 +48,7 @@ module Danger
|
|
48
48
|
def initialize(env)
|
49
49
|
self.pull_request_id = env["BITRISE_PULL_REQUEST"]
|
50
50
|
self.repo_url = env["GIT_REPOSITORY_URL"]
|
51
|
-
|
51
|
+
|
52
52
|
matcher_url = self.repo_url
|
53
53
|
self.repo_slug = repo_slug_from(self.repo_url)
|
54
54
|
end
|
@@ -31,7 +31,7 @@ module Danger
|
|
31
31
|
# to retrieve PR metadata, which will require an API token.
|
32
32
|
#
|
33
33
|
# 1. Go to your project > Settings > API Permissions. Create a token with scope "view-builds" and a label like "DANGER_CIRCLE_CI_API_TOKEN".
|
34
|
-
# 2. Settings >
|
34
|
+
# 2. Settings > Environment Variables. Add the token as a CircleCI environment variable, which exposes it to the Danger process.
|
35
35
|
#
|
36
36
|
# There is no difference here for OSS vs Closed, both scenarios will need this environment variable.
|
37
37
|
#
|
@@ -5,6 +5,7 @@ module Danger
|
|
5
5
|
# ### CI Setup
|
6
6
|
#
|
7
7
|
# In CodeBuild, make sure to correctly forward CODEBUILD_BUILD_ID, CODEBUILD_SOURCE_VERSION, CODEBUILD_SOURCE_REPO_URL and DANGER_GITHUB_API_TOKEN.
|
8
|
+
# In CodeBuild with batch builds, make sure to correctly forward CODEBUILD_BUILD_ID, CODEBUILD_WEBHOOK_TRIGGER, CODEBUILD_SOURCE_REPO_URL, CODEBUILD_BATCH_BUILD_IDENTIFIER and DANGER_GITHUB_API_TOKEN.
|
8
9
|
#
|
9
10
|
# ### Token Setup
|
10
11
|
#
|
@@ -25,7 +26,11 @@ module Danger
|
|
25
26
|
|
26
27
|
def initialize(env)
|
27
28
|
self.repo_slug = self.class.extract_repo_slug(env)
|
28
|
-
|
29
|
+
if env["CODEBUILD_BATCH_BUILD_IDENTIFIER"]
|
30
|
+
self.pull_request_id = env["CODEBUILD_WEBHOOK_TRIGGER"].split("/")[1].to_i
|
31
|
+
else
|
32
|
+
self.pull_request_id = env["CODEBUILD_SOURCE_VERSION"].split("/")[1].to_i
|
33
|
+
end
|
29
34
|
self.repo_url = self.class.extract_repo_url(env)
|
30
35
|
end
|
31
36
|
|
@@ -44,11 +49,20 @@ module Danger
|
|
44
49
|
end
|
45
50
|
|
46
51
|
def self.extract_pr_url(env)
|
47
|
-
|
48
|
-
|
49
|
-
|
52
|
+
if env["CODEBUILD_BATCH_BUILD_IDENTIFIER"]
|
53
|
+
return nil unless env.key? "CODEBUILD_WEBHOOK_TRIGGER"
|
54
|
+
return nil unless env.key? "CODEBUILD_SOURCE_REPO_URL"
|
55
|
+
return nil unless env["CODEBUILD_WEBHOOK_TRIGGER"].split("/").length == 2
|
56
|
+
|
57
|
+
event_type, pr_number = env["CODEBUILD_WEBHOOK_TRIGGER"].split("/")
|
58
|
+
return nil unless event_type == "pr"
|
59
|
+
else
|
60
|
+
return nil unless env.key? "CODEBUILD_SOURCE_VERSION"
|
61
|
+
return nil unless env.key? "CODEBUILD_SOURCE_REPO_URL"
|
62
|
+
return nil unless env["CODEBUILD_SOURCE_VERSION"].split("/").length == 2
|
50
63
|
|
51
|
-
|
64
|
+
_source_origin, pr_number = env["CODEBUILD_SOURCE_VERSION"].split("/")
|
65
|
+
end
|
52
66
|
github_repo_url = env["CODEBUILD_SOURCE_REPO_URL"].gsub(/\.git$/, "")
|
53
67
|
|
54
68
|
"#{github_repo_url}/pull/#{pr_number}"
|
@@ -48,7 +48,7 @@ module Danger
|
|
48
48
|
|
49
49
|
client_version = Gem::Version.new(client.version.version)
|
50
50
|
if (client_version >= Gem::Version.new("10.7"))
|
51
|
-
#Use the 'list merge requests associated with a commit' API, for
|
51
|
+
#Use the 'list merge requests associated with a commit' API, for speed
|
52
52
|
# (GET /projects/:id/repository/commits/:sha/merge_requests) available for GitLab >= 10.7
|
53
53
|
merge_request = client.commit_merge_requests(project_path, base_commit, state: :opened).first
|
54
54
|
if (client_version >= Gem::Version.new("13.8"))
|
@@ -31,7 +31,7 @@ module Danger
|
|
31
31
|
#
|
32
32
|
# #### General
|
33
33
|
#
|
34
|
-
# People occasionally see issues with Danger not classing your CI runs as a PR, to give you
|
34
|
+
# People occasionally see issues with Danger not classing your CI runs as a PR, to give you visibility
|
35
35
|
# the Jenkins side of Danger expects to see one of these env vars:
|
36
36
|
# - ghprbPullId
|
37
37
|
# - CHANGE_ID
|
@@ -17,5 +17,5 @@
|
|
17
17
|
<%= current %>
|
18
18
|
<%# the previous line has to be aligned far to the left, otherwise markdown can break easily %>
|
19
19
|
<%- end -%>
|
20
|
-
<%# Add the generated_by_ as a html
|
20
|
+
<%# Add the generated_by_ as a html comment to identify comments from danger. %>
|
21
21
|
<!-- "generated_by_<%= @danger_id %>" -->
|
@@ -132,7 +132,7 @@ module Danger
|
|
132
132
|
#
|
133
133
|
def import_dangerfile_from_path(path)
|
134
134
|
raise "`import_dangerfile_from_path` requires a string" unless path.kind_of?(String)
|
135
|
-
local_path = File.join(path, "Dangerfile")
|
135
|
+
local_path = File.file?(path) ? path : File.join(path, "Dangerfile")
|
136
136
|
@dangerfile.parse(Pathname.new(local_path))
|
137
137
|
end
|
138
138
|
|
@@ -3,7 +3,7 @@ require "danger/plugin_support/plugin"
|
|
3
3
|
# Danger
|
4
4
|
module Danger
|
5
5
|
# Handles interacting with local only plugin inside a Dangerfile.
|
6
|
-
# It is support
|
6
|
+
# It is support plugin for dry_run command and does not expose any methods.
|
7
7
|
# But you can still use other plugins like git
|
8
8
|
#
|
9
9
|
# @example Check that added lines contains agreed form of words
|
@@ -9,7 +9,7 @@ module Danger
|
|
9
9
|
module RequestSources
|
10
10
|
class BitbucketServer < RequestSource
|
11
11
|
include Danger::Helpers::CommentsHelper
|
12
|
-
attr_accessor :pr_json
|
12
|
+
attr_accessor :pr_json, :dismiss_out_of_range_messages
|
13
13
|
|
14
14
|
def self.env_vars
|
15
15
|
[
|
@@ -25,12 +25,14 @@ module Danger
|
|
25
25
|
"DANGER_BITBUCKETSERVER_CODE_INSIGHTS_REPORT_TITLE",
|
26
26
|
"DANGER_BITBUCKETSERVER_CODE_INSIGHTS_REPORT_DESCRIPTION",
|
27
27
|
"DANGER_BITBUCKETSERVER_CODE_INSIGHTS_REPORT_LOGO_URL",
|
28
|
-
"DANGER_BITBUCKETSERVER_VERIFY_SSL"
|
28
|
+
"DANGER_BITBUCKETSERVER_VERIFY_SSL",
|
29
|
+
"DANGER_BITBUCKETSERVER_DISMISS_OUT_OF_RANGE_MESSAGES"
|
29
30
|
]
|
30
31
|
end
|
31
32
|
|
32
33
|
def initialize(ci_source, environment)
|
33
34
|
self.ci_source = ci_source
|
35
|
+
self.dismiss_out_of_range_messages = environment["DANGER_BITBUCKETSERVER_DISMISS_OUT_OF_RANGE_MESSAGES"] == 'true'
|
34
36
|
|
35
37
|
project, slug = ci_source.repo_slug.split("/")
|
36
38
|
@api = BitbucketServerAPI.new(project, slug, ci_source.pull_request_id, environment)
|
@@ -58,6 +60,10 @@ module Danger
|
|
58
60
|
self.pr_json = @api.fetch_pr_json
|
59
61
|
end
|
60
62
|
|
63
|
+
def pr_diff
|
64
|
+
@pr_diff ||= @api.fetch_pr_diff
|
65
|
+
end
|
66
|
+
|
61
67
|
def setup_danger_branches
|
62
68
|
base_branch = self.pr_json[:toRef][:id].sub("refs/heads/", "")
|
63
69
|
base_commit = self.pr_json[:toRef][:latestCommit]
|
@@ -134,12 +140,22 @@ module Danger
|
|
134
140
|
end
|
135
141
|
|
136
142
|
def main_violations_group(warnings: [], errors: [], messages: [], markdowns: [])
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
+
if dismiss_out_of_range_messages
|
144
|
+
{
|
145
|
+
warnings: warnings.reject(&:inline?),
|
146
|
+
errors: errors.reject(&:inline?),
|
147
|
+
messages: messages.reject(&:inline?),
|
148
|
+
markdowns: markdowns.reject(&:inline?)
|
149
|
+
}
|
150
|
+
else
|
151
|
+
in_diff = proc { |a| find_position_in_diff?(a.file, a.line) }
|
152
|
+
{
|
153
|
+
warnings: warnings.reject(&in_diff),
|
154
|
+
errors: errors.reject(&in_diff),
|
155
|
+
messages: messages.reject(&in_diff),
|
156
|
+
markdowns: markdowns.reject(&in_diff)
|
157
|
+
}
|
158
|
+
end
|
143
159
|
end
|
144
160
|
|
145
161
|
def inline_violations_group(warnings: [], errors: [], messages: [], markdowns: [])
|
@@ -168,6 +184,30 @@ module Danger
|
|
168
184
|
puts self.pr_json.to_json
|
169
185
|
@api.update_pr_build_status(status, changeset, build_job_link, description)
|
170
186
|
end
|
187
|
+
|
188
|
+
def find_position_in_diff?(file, line)
|
189
|
+
return nil if file.nil? || line.nil?
|
190
|
+
return nil if file.empty?
|
191
|
+
added_lines(file).include?(line)
|
192
|
+
end
|
193
|
+
|
194
|
+
def file_diff(file)
|
195
|
+
self.pr_diff[:diffs].find{|diff| diff[:destination] && diff[:destination][:toString] == file } || {:hunks => []}
|
196
|
+
end
|
197
|
+
|
198
|
+
def added_lines(file)
|
199
|
+
@added_lines ||= {}
|
200
|
+
@added_lines[file] ||= begin
|
201
|
+
file_diff(file)[:hunks].map do |hunk|
|
202
|
+
hunk[:segments].select{|segment| segment[:type] == 'ADDED' }.map do |segment|
|
203
|
+
segment[:lines].map do |line|
|
204
|
+
line[:destination]
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end.flatten
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
171
211
|
end
|
172
212
|
end
|
173
213
|
end
|
@@ -43,6 +43,11 @@ module Danger
|
|
43
43
|
fetch_json(uri)
|
44
44
|
end
|
45
45
|
|
46
|
+
def fetch_pr_diff
|
47
|
+
uri = URI("#{pr_api_endpoint}/diff?withComments=false")
|
48
|
+
fetch_json(uri)
|
49
|
+
end
|
50
|
+
|
46
51
|
def fetch_last_comments
|
47
52
|
uri = URI("#{pr_api_endpoint}/activities?limit=1000")
|
48
53
|
fetch_json(uri)[:values].select { |v| v[:action] == "COMMENTED" }.map { |v| v[:comment] }
|
@@ -195,7 +195,7 @@ module Danger
|
|
195
195
|
body = generate_inline_markdown_body(m, danger_id: danger_id, template: "vsts")
|
196
196
|
else
|
197
197
|
# Hide the inline link behind a span
|
198
|
-
m.message.gsub
|
198
|
+
m.message = m.message.gsub("\n", "<br />")
|
199
199
|
m = process_markdown(m, true)
|
200
200
|
body = generate_inline_comment_body(emoji, m, danger_id: danger_id, template: "vsts")
|
201
201
|
# A comment might be in previous_violations because only now it's part of the unified diff
|
@@ -28,9 +28,9 @@ module Danger
|
|
28
28
|
|
29
29
|
def supports_comments?
|
30
30
|
major_version = @api_version.split(".").first.to_i
|
31
|
-
|
31
|
+
minimum_version_for_comments = self.min_api_version_for_comments.split(".").first.to_i
|
32
32
|
|
33
|
-
major_version >=
|
33
|
+
major_version >= minimum_version_for_comments
|
34
34
|
end
|
35
35
|
|
36
36
|
def inspect
|
data/lib/danger/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: danger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 9.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Orta Therox
|
8
8
|
- Juanito Fatas
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-
|
12
|
+
date: 2022-11-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: claide
|
@@ -135,14 +135,14 @@ dependencies:
|
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
138
|
+
version: '5.0'
|
139
139
|
type: :runtime
|
140
140
|
prerelease: false
|
141
141
|
version_requirements: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
145
|
+
version: '5.0'
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
147
|
name: terminal-table
|
148
148
|
requirement: !ruby/object:Gem::Requirement
|
@@ -206,6 +206,7 @@ files:
|
|
206
206
|
- lib/assets/DangerfileTemplate
|
207
207
|
- lib/danger.rb
|
208
208
|
- lib/danger/ci_source/appcenter.rb
|
209
|
+
- lib/danger/ci_source/appcircle.rb
|
209
210
|
- lib/danger/ci_source/appveyor.rb
|
210
211
|
- lib/danger/ci_source/azure_pipelines.rb
|
211
212
|
- lib/danger/ci_source/bamboo.rb
|
@@ -328,7 +329,7 @@ homepage: https://github.com/danger/danger
|
|
328
329
|
licenses:
|
329
330
|
- MIT
|
330
331
|
metadata: {}
|
331
|
-
post_install_message:
|
332
|
+
post_install_message:
|
332
333
|
rdoc_options: []
|
333
334
|
require_paths:
|
334
335
|
- lib
|
@@ -336,15 +337,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
336
337
|
requirements:
|
337
338
|
- - ">="
|
338
339
|
- !ruby/object:Gem::Version
|
339
|
-
version: 2.
|
340
|
+
version: 2.7.0
|
340
341
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
341
342
|
requirements:
|
342
343
|
- - ">="
|
343
344
|
- !ruby/object:Gem::Version
|
344
345
|
version: '0'
|
345
346
|
requirements: []
|
346
|
-
|
347
|
-
|
347
|
+
rubyforge_project:
|
348
|
+
rubygems_version: 2.7.6.2
|
349
|
+
signing_key:
|
348
350
|
specification_version: 4
|
349
351
|
summary: Like Unit Tests, but for your Team Culture.
|
350
352
|
test_files: []
|