ci-helper 0.1.0 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f1aa6bfe29d050175db60010ea49b38125a9f46f0e903348c67145e881b8dc7e
4
- data.tar.gz: 614acf1d6cd9b22bb7697e54b51437d4cc67e13d65676e82c1ba934dc43e8f50
3
+ metadata.gz: fe12d4e12b312f65bd43218e3443d40c4ab27ce41aeb386bccebf4b9779d292e
4
+ data.tar.gz: ec3b1f6d22c637c72dd1600672cd1bb8b960e33727ebf3f16c97e6e10ce25e27
5
5
  SHA512:
6
- metadata.gz: a99b5df7187a385ef8895a76a3d4631a540d5a72deab1c704cda1c7bb710a6818ac29a69a702f6e6bb658ef5110af228e972a88a9ac985c0fd30231bcd318a66
7
- data.tar.gz: 3268627ed3a52c57f0b8328498c84a97c416ccb703c860d4599baee885195e7143734ec0096521375bb6f0d40cf5fbd12863b5b25ba5ba32bfd59c52ca97eddc
6
+ metadata.gz: d0fd1d742b556b1c6c3eac720d0709fb484780c2ac5dfa80f749bd4c4d8a338e6def6082550298c5c768df3fe6a25e65d0bc0333e9a7c2840b8273a30b544328
7
+ data.tar.gz: c50a69c1bf32a6ebec2299464063d656bd34af81eaf516935d20b9b55953851f293d5ac7bdaa82372fc79ad91f140ef4a65bda3191506d8a62cee5b7a6851f78
@@ -13,8 +13,11 @@ on:
13
13
  pull_request:
14
14
  branches: [ master ]
15
15
 
16
+ env:
17
+ FULL_COVERAGE_CHECK: true
18
+
16
19
  jobs:
17
- test:
20
+ test-latest:
18
21
 
19
22
  runs-on: ubuntu-latest
20
23
 
@@ -24,7 +27,7 @@ jobs:
24
27
  # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
25
28
  # change this to (see https://github.com/ruby/setup-ruby#versioning):
26
29
  # uses: ruby/setup-ruby@v1
27
- uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
30
+ uses: ruby/setup-ruby@v1
28
31
  with:
29
32
  ruby-version: 2.7
30
33
  - name: Install dependencies
@@ -33,6 +36,8 @@ jobs:
33
36
  run: bundle exec rake install
34
37
  - name: Run Linter
35
38
  run: ci-helper RubocopLint
39
+ - name: Check missed spec suffixes
40
+ run: ci-helper CheckSpecSuffixes --extra-paths spec/*.rb --ignored-paths spec/*_helper.rb
36
41
  - name: Run specs
37
42
  run: ci-helper RunSpecs
38
43
  - name: Audit
@@ -41,3 +46,39 @@ jobs:
41
46
  uses: coverallsapp/github-action@v1.1.1
42
47
  with:
43
48
  github-token: ${{ secrets.GITHUB_TOKEN }}
49
+ specs-for-26:
50
+ runs-on: ubuntu-latest
51
+
52
+ steps:
53
+ - uses: actions/checkout@v2
54
+ - name: Set up Ruby
55
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
56
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
57
+ # uses: ruby/setup-ruby@v1
58
+ uses: ruby/setup-ruby@v1
59
+ with:
60
+ ruby-version: 2.6
61
+ - name: Install dependencies
62
+ run: bundle install && gem install bundler-audit
63
+ - name: Build and install gem to systems gems
64
+ run: bundle exec rake install
65
+ - name: Run specs
66
+ run: ci-helper RunSpecs
67
+ specs-for-25:
68
+ runs-on: ubuntu-latest
69
+
70
+ steps:
71
+ - uses: actions/checkout@v2
72
+ - name: Set up Ruby
73
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
74
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
75
+ # uses: ruby/setup-ruby@v1
76
+ uses: ruby/setup-ruby@v1
77
+ with:
78
+ ruby-version: 2.5
79
+ - name: Install dependencies
80
+ run: bundle install && gem install bundler-audit
81
+ - name: Build and install gem to systems gems
82
+ run: bundle exec rake install
83
+ - name: Run specs
84
+ run: ci-helper RunSpecs
data/.gitignore CHANGED
@@ -6,3 +6,5 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+
10
+ Gemfile.lock
@@ -10,3 +10,7 @@ Naming/MethodParameterName:
10
10
 
11
11
  RSpec/EmptyLineAfterHook:
12
12
  Enabled: false
13
+
14
+ Naming/FileName:
15
+ Exclude:
16
+ - lib/ci-helper.rb
data/README.md CHANGED
@@ -1,26 +1,122 @@
1
- # CIHelper [![Actions Status](https://github.com/umbrellio/ci_helper/workflows/Ruby/badge.svg)](https://github.com/umbrellio/ci_helper/actions) [![Coverage Status](https://coveralls.io/repos/github/umbrellio/ci_helper/badge.svg?branch=master)](https://coveralls.io/github/umbrellio/ci_helper?branch=master)
2
-
3
- Documentation about gem here.
1
+ # CIHelper [![Actions Status](https://github.com/umbrellio/ci_helper/workflows/Ruby/badge.svg)](https://github.com/umbrellio/ci_helper/actions) [![Coverage Status](https://coveralls.io/repos/github/umbrellio/ci_helper/badge.svg?branch=master)](https://coveralls.io/github/umbrellio/ci_helper?branch=master) [![Gem Version](https://badge.fury.io/rb/ci-helper.svg)](https://badge.fury.io/rb/ci-helper)
4
2
 
5
3
  ## Installation
6
4
 
7
5
  Add this line to your application's Gemfile:
8
6
 
9
7
  ```ruby
10
- gem 'ci_helper'
8
+ gem "ci-helper", require: false
11
9
  ```
12
10
 
13
11
  And then execute:
12
+ ```bash
13
+ $ bundle install
14
+ ```
15
+ Or install it yourself as:
16
+ ```bash
17
+ $ gem install ci_helper
18
+ ```
14
19
 
15
- $ bundle install
20
+ ## Usage
16
21
 
17
- Or install it yourself as:
22
+ ### Command Line
18
23
 
19
- $ gem install ci_helper
24
+ You can use this gem as command line utility. For example, to lint project by rubocop,
25
+ execute the following command in the project root:
26
+ ```bash
27
+ $ ci-helper RubocopLint # Here's RubocopLint is a command
28
+ ```
20
29
 
21
- ## Usage
30
+ A command can accept list of options (parameters). Option values are passed through flags.
31
+ For example, the BundlerAudit command accepts the ignored_advisories option
32
+ You can set a value of this option by setting the flag `--ignored-advisories ignored-advisory`.
33
+ It should be noted that all hyphens in flag names are automatically replaced with underscores.
34
+ ```bash
35
+ $ ci-helper BundlerAudit --ignored-advisories first,second
36
+ ```
37
+
38
+ List of available commands:
39
+
40
+ * **BundlerAudit** — executes `bundler-audit`. Accepted flags: `--ignored-advisories`.
41
+ * `--ignored-advisories [values]` — accepts advisory codes, delimited by comma.
42
+ * **CheckDBDevelopment** — executes rails db commands (`db:drop`, `db:create`, `db:migrate`)
43
+ and seeds database. Does not accept flags.
44
+ * **CheckDBRollback** — executes rails db commands with additional command
45
+ `db:rollback_new_migrations`, which rollbacks migrations, added in tested branch.
46
+ Does not accept flags. Gem provides this rake task, but only for `Sequel`.
47
+ If you want to use `ActiveRecord::Migrator`, you'll have to write rake task by your own.
48
+ * **RubocopLint** — executes rubocop linter. Does not accept flags.
49
+ * **RunSpecs** — executes `rspec` in project root.
50
+ Accepted flags: `--node-index`, `node-total`, `with-database`, `split-resultset`.
51
+ * `--node-index` — if you run specs in parallel in CI, then you might use this flag.
52
+ * `--node-total` — if you run specs in parallel in CI, then you might use this flag.
53
+ * `--with-database` — if you want to prepare database before executing specs,
54
+ you should set this flag to `true`.
55
+ * `--split-resultset` — if you run specs in parallel in CI,
56
+ then you might use this flag to `true`. If this flag set to true,
57
+ final `.resultset.json` will be renamed to `.resultset.#{node_index}.json`
58
+ * **CheckSpecSuffixes** — checks specs in the spec subdirectories for `_spec` suffix,
59
+ by default ignores directories `support`, `factories` and files with `context` suffix.
60
+ Accepted flags: `--extra_paths`, `--ignored_paths`.
61
+ * `--extra-paths [values]` - accepts additional path patterns that should be scanned,
62
+ delimited by coma.
63
+ * `--ignored-paths [values]` - accepts path patterns that should be ignored,
64
+ delimited by coma.
65
+
66
+ ### Rake Tasks
22
67
 
23
- TODO: Write usage instructions here
68
+ As you can see, some commands use generic rake tasks. To make tasks available in your application,
69
+ you need to require the file `ci_helper/railtie`. Also, you can require it directly in `Gemfile`:
70
+ `gem "ci-helper", require: "ci_helper/railtie, group: :test`.
71
+ Or if you haven't set `require` option to `false`, rake tasks loads automatically.
72
+
73
+ ### Script
74
+
75
+ Also, you can write your own script, which can executes this commands by calling classes:
76
+ `CIHelper::Commands::#{command_name}`. For example,
77
+ if you want to execute `RunSpecs` command in your script, you can write following lines:
78
+ ```ruby
79
+ begin
80
+ CIHelper::Commands::RunSpecs.call!(with_database: "true") # returned value is exit code.
81
+ rescue CIHelper::Commands::Error => e # Command raise error with this class if something went wrong.
82
+ abort e.message
83
+ end
84
+ ```
85
+
86
+ ## Adding your own commands
87
+
88
+ You can write plugins (gems) that add new commands.
89
+ You just need create gem with following structure:
90
+ ```
91
+ - lib
92
+ - ci_helper
93
+ - commands
94
+ - cool_command.rb
95
+ ```
96
+
97
+ Where your `CoolCoomand` class may look something like this:
98
+ ```ruby
99
+ module CIHelper
100
+ module Commands
101
+ class CoolCommand < BaseCommand
102
+ def call
103
+ execute("ls #{options[:cool_options]}")
104
+ end
105
+ end
106
+ end
107
+ end
108
+ ```
109
+
110
+ Then you add your gem to a Gemfile:
111
+ ```ruby
112
+ gem "ci-helper", require: false
113
+ gem "ci-helper-plugin-gem", require: false
114
+ ```
115
+
116
+ And now, you can use your custom command with command line tool:
117
+ ```bash
118
+ $ ci-helper CoolCommand --cool-options option_value
119
+ ```
24
120
 
25
121
  ## Contributing
26
122
 
@@ -30,3 +126,11 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/umbrel
30
126
  ## License
31
127
 
32
128
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
129
+
130
+ ## Authors
131
+
132
+ Created by Ivan Chernov.
133
+
134
+ <a href="https://github.com/umbrellio/">
135
+ <img style="float: left;" src="https://umbrellio.github.io/Umbrellio/supported_by_umbrellio.svg" alt="Supported by Umbrellio" width="439" height="72">
136
+ </a>
@@ -10,9 +10,9 @@ Gem::Specification.new do |spec|
10
10
 
11
11
  spec.summary = "Continuous Integration helpers for Ruby"
12
12
  spec.description = "CIHelper is a gem with Continuous Integration helpers for Ruby"
13
- spec.homepage = "https://github.com/umbrellio"
13
+ spec.homepage = "https://github.com/umbrellio/ci_helper"
14
14
  spec.license = "MIT"
15
- spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
15
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
16
16
 
17
17
  spec.metadata["homepage_uri"] = spec.homepage
18
18
  spec.metadata["source_code_uri"] = "https://github.com/umbrellio/ci_helper"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "./ci_helper"
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ module CIHelper
4
+ end
5
+
3
6
  require "colorized_string"
4
7
  require "delegate"
5
8
  require "dry/inflector"
@@ -10,8 +13,8 @@ require "singleton"
10
13
 
11
14
  require "ci_helper/cli"
12
15
  require "ci_helper/commands"
16
+ require "ci_helper/tools/colorize"
13
17
  require "ci_helper/tools/inflector"
14
18
  require "ci_helper/version"
15
19
 
16
- module CIHelper
17
- end
20
+ require "ci_helper/railtie" if defined?(Rails)
@@ -29,7 +29,7 @@ module CIHelper
29
29
  def execute(*commands)
30
30
  command = commands.join(" && ")
31
31
 
32
- process_stdout.puts(ColorizedString["> "].green.bold + ColorizedString[command].blue.bold)
32
+ process_stdout.puts(Tools::Colorize.command(command))
33
33
 
34
34
  Open3.popen2e(command) do |_stdin, stdout, thread|
35
35
  stdout.each_char { |char| process_stdout.print(char) }
@@ -54,6 +54,11 @@ module CIHelper
54
54
  raise Error, message
55
55
  end
56
56
 
57
+ def plural_option(key)
58
+ return [] unless options.key?(key)
59
+ options[key].split(",")
60
+ end
61
+
57
62
  def path
58
63
  @path ||= Pathname.pwd
59
64
  end
@@ -11,14 +11,14 @@ module CIHelper
11
11
 
12
12
  def audit_cmd
13
13
  (+"bundle exec bundler-audit check --update").tap do |audit_cmd|
14
- if ignored_advisories&.any?
14
+ if ignored_advisories.any?
15
15
  audit_cmd << " --ignore #{ignored_advisories.join(" ")}"
16
16
  end
17
17
  end
18
18
  end
19
19
 
20
20
  def ignored_advisories
21
- @ignored_advisories ||= options[:ignored_advisories]&.split(",")
21
+ @ignored_advisories ||= plural_option(:ignored_advisories)
22
22
  end
23
23
  end
24
24
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CIHelper
4
+ module Commands
5
+ class CheckDBDevelopment < BaseCommand
6
+ def call
7
+ create_and_migrate_database!
8
+ execute("bundle exec rake db:seed")
9
+ end
10
+
11
+ private
12
+
13
+ def env
14
+ :development
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CIHelper
4
+ module Commands
5
+ class CheckSpecSuffixes < BaseCommand
6
+ def call
7
+ paths = target_paths.reject { |path| path.end_with?("_spec.rb") }
8
+ fail!("Detected specs without _spec suffix: #{paths.join(" ")}") if paths.any?
9
+ 0
10
+ end
11
+
12
+ private
13
+
14
+ def target_paths
15
+ spec_paths + extra_paths - ignored_paths
16
+ end
17
+
18
+ def spec_paths
19
+ base_paths.select do |path|
20
+ next if path.start_with?("spec/support")
21
+ next if path.start_with?("spec/factories")
22
+ next if path.end_with?("context.rb")
23
+ true
24
+ end
25
+ end
26
+
27
+ def base_paths
28
+ Dir["spec/*/**/*.rb"]
29
+ end
30
+
31
+ def extra_paths
32
+ @extra_paths ||= plural_option(:extra_paths).flat_map { |path| Dir[path] }
33
+ end
34
+
35
+ def ignored_paths
36
+ @ignored_paths ||= plural_option(:ignored_paths).flat_map { |path| Dir[path] }
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CIHelper
4
+ class Railtie < Rails::Railtie
5
+ rake_tasks do
6
+ load "tasks/sequel_management.rake"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CIHelper
4
+ module Tools
5
+ module Colorize
6
+ extend self
7
+
8
+ def command(str)
9
+ ColorizedString[ColorizedString["> "].green.bold + ColorizedString[str].blue.bold]
10
+ end
11
+
12
+ def info(str)
13
+ ColorizedString[str].yellow
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CIHelper
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.5"
5
5
  end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "logger"
4
+
5
+ class SequelManagement
6
+ include Rake::DSL
7
+
8
+ MIGRATIONS_PATH = "db/migrate"
9
+
10
+ def initialize
11
+ self.logger = Logger.new(STDOUT)
12
+
13
+ define_db_task!
14
+ end
15
+
16
+ private
17
+
18
+ attr_accessor :logger
19
+
20
+ def migrations_path
21
+ self.class::MIGRATIONS_PATH
22
+ end
23
+
24
+ def define_db_task!
25
+ namespace :db do
26
+ desc "Rollback all migrations, which doesn't exist in master branch"
27
+ task rollback_new_migrations: :environment do
28
+ abort "Shouldn't run in production mode!" if Rails.env.production?
29
+
30
+ logger.info "Begin rolling back new migrations"
31
+
32
+ original_migrations = `#{git_command}`.split.map { |path| File.basename(path) }
33
+ migrations_to_rollback = (migrator.applied_migrations - original_migrations).sort.reverse
34
+
35
+ next if migrations_to_rollback.empty?
36
+
37
+ logger.info "Rolling back migrations:"
38
+ logger.info migrations_to_rollback.join("\n")
39
+
40
+ rollback!(migrations_to_rollback)
41
+ end
42
+ end
43
+ end
44
+
45
+ def git_command
46
+ "git ls-tree --name-only origin/master #{migrations_path}/"
47
+ end
48
+
49
+ def migrator
50
+ @migrator ||= begin
51
+ full_path = Rails.root.join(migrations_path)
52
+ Sequel::TimestampMigrator.new(DB, full_path, allow_missing_migration_files: true)
53
+ end
54
+ end
55
+
56
+ def rollback!(migrations)
57
+ migrations.each do |migration|
58
+ migrator.undo(migration.to_i)
59
+ rescue Sequel::Migrator::Error => error
60
+ if error.message.include?("does not exist in the filesystem")
61
+ logger.info error.message
62
+ else
63
+ raise error
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ SequelManagement.new
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ci-helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - JustAnotherDude
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-10 00:00:00.000000000 Z
11
+ date: 2020-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -164,7 +164,6 @@ files:
164
164
  - ".rspec"
165
165
  - ".rubocop.yml"
166
166
  - Gemfile
167
- - Gemfile.lock
168
167
  - LICENSE.txt
169
168
  - README.md
170
169
  - Rakefile
@@ -172,20 +171,26 @@ files:
172
171
  - bin/setup
173
172
  - ci_helper.gemspec
174
173
  - exe/ci-helper
174
+ - lib/ci-helper.rb
175
175
  - lib/ci_helper.rb
176
176
  - lib/ci_helper/cli.rb
177
177
  - lib/ci_helper/commands.rb
178
178
  - lib/ci_helper/commands/bundler_audit.rb
179
+ - lib/ci_helper/commands/check_db_development.rb
179
180
  - lib/ci_helper/commands/check_db_rollback.rb
181
+ - lib/ci_helper/commands/check_spec_suffixes.rb
180
182
  - lib/ci_helper/commands/rubocop_lint.rb
181
183
  - lib/ci_helper/commands/run_specs.rb
184
+ - lib/ci_helper/railtie.rb
185
+ - lib/ci_helper/tools/colorize.rb
182
186
  - lib/ci_helper/tools/inflector.rb
183
187
  - lib/ci_helper/version.rb
184
- homepage: https://github.com/umbrellio
188
+ - lib/tasks/sequel_management.rake
189
+ homepage: https://github.com/umbrellio/ci_helper
185
190
  licenses:
186
191
  - MIT
187
192
  metadata:
188
- homepage_uri: https://github.com/umbrellio
193
+ homepage_uri: https://github.com/umbrellio/ci_helper
189
194
  source_code_uri: https://github.com/umbrellio/ci_helper
190
195
  post_install_message:
191
196
  rdoc_options: []
@@ -195,14 +200,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
195
200
  requirements:
196
201
  - - ">="
197
202
  - !ruby/object:Gem::Version
198
- version: 2.7.0
203
+ version: 2.5.0
199
204
  required_rubygems_version: !ruby/object:Gem::Requirement
200
205
  requirements:
201
206
  - - ">="
202
207
  - !ruby/object:Gem::Version
203
208
  version: '0'
204
209
  requirements: []
205
- rubygems_version: 3.1.3
210
+ rubygems_version: 3.1.4
206
211
  signing_key:
207
212
  specification_version: 4
208
213
  summary: Continuous Integration helpers for Ruby
@@ -1,104 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- ci-helper (0.1.0)
5
- colorize (~> 0.8)
6
- dry-inflector (~> 0.2)
7
-
8
- GEM
9
- remote: https://rubygems.org/
10
- specs:
11
- activesupport (6.0.3.1)
12
- concurrent-ruby (~> 1.0, >= 1.0.2)
13
- i18n (>= 0.7, < 2)
14
- minitest (~> 5.1)
15
- tzinfo (~> 1.1)
16
- zeitwerk (~> 2.2, >= 2.2.2)
17
- ast (2.4.1)
18
- bundler-audit (0.6.1)
19
- bundler (>= 1.2.0, < 3)
20
- thor (~> 0.18)
21
- coderay (1.1.3)
22
- colorize (0.8.1)
23
- concurrent-ruby (1.1.6)
24
- diff-lcs (1.3)
25
- docile (1.3.2)
26
- dry-inflector (0.2.0)
27
- i18n (1.8.3)
28
- concurrent-ruby (~> 1.0)
29
- jaro_winkler (1.5.4)
30
- method_source (1.0.0)
31
- minitest (5.14.1)
32
- parallel (1.19.1)
33
- parser (2.7.1.3)
34
- ast (~> 2.4.0)
35
- pry (0.13.1)
36
- coderay (~> 1.1)
37
- method_source (~> 1.0)
38
- rack (2.2.2)
39
- rainbow (3.0.0)
40
- rake (13.0.1)
41
- rexml (3.2.4)
42
- rspec (3.9.0)
43
- rspec-core (~> 3.9.0)
44
- rspec-expectations (~> 3.9.0)
45
- rspec-mocks (~> 3.9.0)
46
- rspec-core (3.9.2)
47
- rspec-support (~> 3.9.3)
48
- rspec-expectations (3.9.2)
49
- diff-lcs (>= 1.2.0, < 2.0)
50
- rspec-support (~> 3.9.0)
51
- rspec-mocks (3.9.1)
52
- diff-lcs (>= 1.2.0, < 2.0)
53
- rspec-support (~> 3.9.0)
54
- rspec-support (3.9.3)
55
- rubocop (0.81.0)
56
- jaro_winkler (~> 1.5.1)
57
- parallel (~> 1.10)
58
- parser (>= 2.7.0.1)
59
- rainbow (>= 2.2.2, < 4.0)
60
- rexml
61
- ruby-progressbar (~> 1.7)
62
- unicode-display_width (>= 1.4.0, < 2.0)
63
- rubocop-config-umbrellio (0.81.0.78)
64
- rubocop (= 0.81.0)
65
- rubocop-performance (= 1.5.2)
66
- rubocop-rails (= 2.5.0)
67
- rubocop-rspec (= 1.38.1)
68
- rubocop-performance (1.5.2)
69
- rubocop (>= 0.71.0)
70
- rubocop-rails (2.5.0)
71
- activesupport
72
- rack (>= 1.1)
73
- rubocop (>= 0.72.0)
74
- rubocop-rspec (1.38.1)
75
- rubocop (>= 0.68.1)
76
- ruby-progressbar (1.10.1)
77
- simplecov (0.18.5)
78
- docile (~> 1.1)
79
- simplecov-html (~> 0.11)
80
- simplecov-html (0.12.2)
81
- simplecov-lcov (0.8.0)
82
- thor (0.20.3)
83
- thread_safe (0.3.6)
84
- tzinfo (1.2.7)
85
- thread_safe (~> 0.1)
86
- unicode-display_width (1.7.0)
87
- zeitwerk (2.3.0)
88
-
89
- PLATFORMS
90
- ruby
91
-
92
- DEPENDENCIES
93
- bundler
94
- bundler-audit
95
- ci-helper!
96
- pry
97
- rake
98
- rspec
99
- rubocop-config-umbrellio
100
- simplecov
101
- simplecov-lcov
102
-
103
- BUNDLED WITH
104
- 2.1.4