ci-helper 0.1.0 → 0.2.5

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 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