departure 6.7.0 → 7.0.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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +5 -14
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +1 -1
  5. data/Appraisals +4 -24
  6. data/CHANGELOG.md +15 -1
  7. data/Gemfile +6 -1
  8. data/Gemfile.lock +108 -86
  9. data/README.md +8 -0
  10. data/Rakefile +9 -0
  11. data/bin/rails +24 -0
  12. data/departure.gemspec +3 -3
  13. data/gemfiles/rails_7_0.gemfile +8 -2
  14. data/gemfiles/rails_7_0.gemfile.lock +182 -131
  15. data/gemfiles/rails_7_1.gemfile +7 -2
  16. data/gemfiles/rails_7_1.gemfile.lock +156 -140
  17. data/gemfiles/{ruby_2.7_rails_6_0.gemfile → rails_7_2.gemfile} +7 -3
  18. data/gemfiles/rails_7_2.gemfile.lock +288 -0
  19. data/gemfiles/{rails_6_0.gemfile → rails_8_0.gemfile} +6 -2
  20. data/gemfiles/rails_8_0.gemfile.lock +285 -0
  21. data/lib/active_record/connection_adapters/for_alter.rb +4 -17
  22. data/lib/active_record/connection_adapters/patch_connection_handling.rb +18 -0
  23. data/lib/active_record/connection_adapters/percona_adapter.rb +9 -56
  24. data/lib/active_record/connection_adapters/rails_7_2_departure_adapter.rb +215 -0
  25. data/lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb +293 -0
  26. data/lib/departure/command.rb +6 -2
  27. data/lib/departure/configuration.rb +2 -1
  28. data/lib/departure/migration.rb +1 -5
  29. data/lib/departure/rails_adapter.rb +146 -0
  30. data/lib/departure/rails_patches/active_record_migrator_with_advisory_lock_patch.rb +25 -0
  31. data/lib/departure/runner.rb +24 -4
  32. data/lib/departure/version.rb +1 -1
  33. data/lib/departure.rb +2 -5
  34. data/lib/lhm/column_with_sql.rb +1 -8
  35. data/test_database.rb +2 -6
  36. metadata +18 -47
  37. data/gemfiles/rails_6_0.gemfile.lock +0 -238
  38. data/gemfiles/rails_6_1.gemfile +0 -10
  39. data/gemfiles/rails_6_1.gemfile.lock +0 -241
  40. data/gemfiles/ruby_2.7_rails_6_0.gemfile.lock +0 -239
  41. data/gemfiles/ruby_2.7_rails_6_1.gemfile +0 -11
  42. data/gemfiles/ruby_2.7_rails_6_1.gemfile.lock +0 -242
  43. data/gemfiles/ruby_2.7_rails_7_0.gemfile +0 -11
  44. data/gemfiles/ruby_2.7_rails_7_0.gemfile.lock +0 -241
  45. data/gemfiles/ruby_2.7_rails_7_1.gemfile +0 -11
  46. data/gemfiles/ruby_2.7_rails_7_1.gemfile.lock +0 -275
@@ -0,0 +1,146 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Departure
4
+ class RailsAdapter
5
+ extend Forwardable
6
+
7
+ class << self
8
+ def version_matches?(version_string, compatibility_string = current_version::STRING)
9
+ raise "Invalid Gem Version: '#{version_string}'" unless Gem::Version.correct?(version_string)
10
+
11
+ requirement = Gem::Requirement.new(compatibility_string)
12
+ requirement.satisfied_by?(Gem::Version.new(version_string))
13
+ end
14
+
15
+ def current_version
16
+ ActiveRecord::VERSION
17
+ end
18
+
19
+ def for_current
20
+ self.for(current_version)
21
+ end
22
+
23
+ def for(ar_version)
24
+ if ar_version::MAJOR == 8
25
+ V8_0_Adapter
26
+ elsif ar_version::MAJOR >= 7 && ar_version::MINOR >= 2
27
+ V7_2_Adapter
28
+ elsif ar_version::MAJOR >= 6
29
+ BaseAdapter
30
+ else
31
+ raise "Unsupported Rails version: #{ar_version}"
32
+ end
33
+ end
34
+ end
35
+
36
+ class BaseAdapter
37
+ class << self
38
+ def register_integrations
39
+ require 'active_record/connection_adapters/percona_adapter'
40
+
41
+ ActiveSupport.on_load(:active_record) do
42
+ ActiveRecord::Migration.class_eval do
43
+ include Departure::Migration
44
+ end
45
+
46
+ if ActiveRecord::VERSION::MAJOR == 7 && ActiveRecord::VERSION::MINOR == 1
47
+ require 'departure/rails_patches/active_record_migrator_with_advisory_lock_patch'
48
+
49
+ ActiveRecord::Migrator.prepend Departure::RailsPatches::ActiveRecordMigratorWithAdvisoryLockPatch
50
+ end
51
+ end
52
+ end
53
+
54
+ # ActiveRecord::ConnectionAdapters::Mysql2Adapter
55
+ def create_connection_adapter(**config)
56
+ mysql2_adapter = ActiveRecord::Base.mysql2_connection(config)
57
+
58
+ connection_details = Departure::ConnectionDetails.new(config)
59
+ verbose = ActiveRecord::Migration.verbose
60
+ sanitizers = [
61
+ Departure::LogSanitizers::PasswordSanitizer.new(connection_details)
62
+ ]
63
+ percona_logger = Departure::LoggerFactory.build(sanitizers: sanitizers, verbose: verbose)
64
+ cli_generator = Departure::CliGenerator.new(connection_details)
65
+
66
+ runner = Departure::Runner.new(
67
+ percona_logger,
68
+ cli_generator,
69
+ mysql2_adapter
70
+ )
71
+
72
+ connection_options = { mysql_adapter: mysql2_adapter }
73
+
74
+ ActiveRecord::ConnectionAdapters::DepartureAdapter.new(
75
+ runner,
76
+ percona_logger,
77
+ connection_options,
78
+ config
79
+ )
80
+ end
81
+
82
+ def sql_column
83
+ ::ActiveRecord::ConnectionAdapters::DepartureAdapter::Column
84
+ end
85
+ end
86
+ end
87
+
88
+ class V7_2_Adapter < BaseAdapter # rubocop:disable Naming/ClassAndModuleCamelCase
89
+ class << self
90
+ def register_integrations
91
+ require 'active_record/connection_adapters/rails_7_2_departure_adapter'
92
+ require 'departure/rails_patches/active_record_migrator_with_advisory_lock_patch'
93
+
94
+ ActiveSupport.on_load(:active_record) do
95
+ ActiveRecord::Migration.class_eval do
96
+ include Departure::Migration
97
+ end
98
+
99
+ ActiveRecord::Migrator.prepend Departure::RailsPatches::ActiveRecordMigratorWithAdvisoryLockPatch
100
+ end
101
+
102
+ ActiveRecord::ConnectionAdapters.register 'percona',
103
+ 'ActiveRecord::ConnectionAdapters::Rails72DepartureAdapter',
104
+ 'active_record/connection_adapters/rails_7_2_departure_adapter'
105
+ end
106
+
107
+ def create_connection_adapter(**config)
108
+ ActiveRecord::ConnectionAdapters::Rails72DepartureAdapter.new(config)
109
+ end
110
+
111
+ def sql_column
112
+ ::ActiveRecord::ConnectionAdapters::Rails72DepartureAdapter::Column
113
+ end
114
+ end
115
+ end
116
+
117
+ class V8_0_Adapter < BaseAdapter # rubocop:disable Naming/ClassAndModuleCamelCase
118
+ class << self
119
+ def register_integrations
120
+ require 'active_record/connection_adapters/rails_8_0_departure_adapter'
121
+ require 'departure/rails_patches/active_record_migrator_with_advisory_lock_patch'
122
+
123
+ ActiveSupport.on_load(:active_record) do
124
+ ActiveRecord::Migration.class_eval do
125
+ include Departure::Migration
126
+ end
127
+
128
+ ActiveRecord::Migrator.prepend Departure::RailsPatches::ActiveRecordMigratorWithAdvisoryLockPatch
129
+ end
130
+
131
+ ActiveRecord::ConnectionAdapters.register 'percona',
132
+ 'ActiveRecord::ConnectionAdapters::Rails80DepartureAdapter',
133
+ 'active_record/connection_adapters/rails_8_0_departure_adapter'
134
+ end
135
+
136
+ def create_connection_adapter(**config)
137
+ ActiveRecord::ConnectionAdapters::Rails80DepartureAdapter.new(config)
138
+ end
139
+
140
+ def sql_column
141
+ ::ActiveRecord::ConnectionAdapters::Rails80DepartureAdapter::Column
142
+ end
143
+ end
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,25 @@
1
+ module Departure
2
+ module RailsPatches
3
+ module ActiveRecordMigratorWithAdvisoryLockPatch
4
+ RELEASE_LOCK_FAILED_MESSAGE = 'Failed to release advisory lock from ActiveRecordMigratorWithAdvisoryLockPatch'
5
+ .freeze
6
+
7
+ def with_advisory_lock
8
+ return super if Departure.configuration.disable_rails_advisory_lock_patch
9
+
10
+ lock_id = generate_migrator_advisory_lock_id
11
+ @__original_connection = connection
12
+
13
+ got_lock = @__original_connection.get_advisory_lock(lock_id)
14
+ raise ActiveRecord::ConcurrentMigrationError unless got_lock
15
+
16
+ load_migrated # reload schema_migrations to be sure it wasn't changed by another process before we got the lock
17
+ yield
18
+ ensure
19
+ if got_lock && !@__original_connection.release_advisory_lock(lock_id)
20
+ raise ActiveRecord::ConcurrentMigrationError, RELEASE_LOCK_FAILED_MESSAGE
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -4,6 +4,10 @@ module Departure
4
4
  # It executes pt-online-schema-change commands in a new process and gets its
5
5
  # output and status
6
6
  class Runner
7
+ extend Forwardable
8
+
9
+ def_delegators :raw_connection, :execute, :escape, :close, :affected_rows
10
+
7
11
  # Constructor
8
12
  #
9
13
  # @param logger [#say, #write]
@@ -14,8 +18,24 @@ module Departure
14
18
  @logger = logger
15
19
  @cli_generator = cli_generator
16
20
  @mysql_adapter = mysql_adapter
17
- @error_log_path = config.error_log_path
18
- @redirect_stderr = config.redirect_stderr
21
+ @error_log_path = config&.error_log_path
22
+ @redirect_stderr = config&.redirect_stderr
23
+ end
24
+
25
+ def query_options
26
+ raw_connection.query_options
27
+ end
28
+
29
+ def abandon_results!
30
+ raw_connection.abandon_results!
31
+ end
32
+
33
+ def database_adapter
34
+ @mysql_adapter
35
+ end
36
+
37
+ def raw_connection
38
+ database_adapter.raw_connection
19
39
  end
20
40
 
21
41
  # Executes the passed sql statement using pt-online-schema-change for ALTER
@@ -27,7 +47,7 @@ module Departure
27
47
  command_line = cli_generator.parse_statement(sql)
28
48
  execute(command_line)
29
49
  else
30
- mysql_adapter.execute(sql)
50
+ database_adapter.execute(sql)
31
51
  end
32
52
  end
33
53
 
@@ -36,7 +56,7 @@ module Departure
36
56
  #
37
57
  # @return [Integer]
38
58
  def affected_rows
39
- mysql_adapter.raw_connection.affected_rows
59
+ raw_connection.affected_rows
40
60
  end
41
61
 
42
62
  # TODO: rename it so we don't confuse it with AR's #execute
@@ -1,3 +1,3 @@
1
1
  module Departure
2
- VERSION = '6.7.0'.freeze
2
+ VERSION = '7.0.0'.freeze
3
3
  end
data/lib/departure.rb CHANGED
@@ -15,17 +15,14 @@ require 'departure/errors'
15
15
  require 'departure/command'
16
16
  require 'departure/connection_base'
17
17
  require 'departure/migration'
18
+ require 'departure/rails_adapter'
18
19
 
19
20
  require 'departure/railtie' if defined?(Rails)
20
21
 
21
22
  # We need the OS not to buffer the IO to see pt-osc's output while migrating
22
23
  $stdout.sync = true
23
24
 
24
- ActiveSupport.on_load(:active_record) do
25
- ActiveRecord::Migration.class_eval do
26
- include Departure::Migration
27
- end
28
- end
25
+ Departure::RailsAdapter.for_current.register_integrations
29
26
 
30
27
  module Departure
31
28
  class << self
@@ -6,13 +6,6 @@ module Lhm
6
6
  class ColumnWithSql
7
7
  extend Forwardable
8
8
 
9
- # Returns the column's class to be used
10
- #
11
- # @return [Constant]
12
- def self.column_factory
13
- ::ActiveRecord::ConnectionAdapters::DepartureAdapter::Column
14
- end
15
-
16
9
  # Constructor
17
10
  #
18
11
  # @param name [String, Symbol]
@@ -59,7 +52,7 @@ module Lhm
59
52
  limit: cast_type.limit
60
53
  )
61
54
  mysql_metadata = ActiveRecord::ConnectionAdapters::MySQL::TypeMetadata.new(metadata)
62
- @column ||= self.class.column_factory.new(
55
+ @column ||= Departure::RailsAdapter.for_current.sql_column.new(
63
56
  name,
64
57
  default_value,
65
58
  mysql_metadata,
data/test_database.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'active_record'
2
2
  require 'active_record/connection_adapters/mysql2_adapter'
3
+ require 'departure'
3
4
 
4
5
  # Setups the test database with the schema_migrations table that ActiveRecord
5
6
  # requires for the migrations, plus a table for the Comment model used throught
@@ -70,11 +71,6 @@ class TestDatabase
70
71
  end
71
72
 
72
73
  def conn
73
- @conn ||= ActiveRecord::Base.mysql2_connection(
74
- host: @config['hostname'],
75
- username: @config['username'],
76
- password: @config['password'],
77
- reconnect: true
78
- )
74
+ ActiveRecord::Base.connection
79
75
  end
80
76
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: departure
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.7.0
4
+ version: 7.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ilya Zayats
@@ -12,10 +12,9 @@ authors:
12
12
  - Adrian Serafin
13
13
  - Kirk Haines
14
14
  - Guillermo Iguaran
15
- autorequire:
16
15
  bindir: bin
17
16
  cert_chain: []
18
- date: 2024-02-20 00:00:00.000000000 Z
17
+ date: 2025-08-27 00:00:00.000000000 Z
19
18
  dependencies:
20
19
  - !ruby/object:Gem::Dependency
21
20
  name: railties
@@ -23,52 +22,28 @@ dependencies:
23
22
  requirements:
24
23
  - - ">="
25
24
  - !ruby/object:Gem::Version
26
- version: 6.0.0
27
- - - "!="
28
- - !ruby/object:Gem::Version
29
- version: 7.0.0
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: 7.2.0
25
+ version: 7.0.1
33
26
  type: :runtime
34
27
  prerelease: false
35
28
  version_requirements: !ruby/object:Gem::Requirement
36
29
  requirements:
37
30
  - - ">="
38
31
  - !ruby/object:Gem::Version
39
- version: 6.0.0
40
- - - "!="
41
- - !ruby/object:Gem::Version
42
- version: 7.0.0
43
- - - "<"
44
- - !ruby/object:Gem::Version
45
- version: 7.2.0
32
+ version: 7.0.1
46
33
  - !ruby/object:Gem::Dependency
47
34
  name: activerecord
48
35
  requirement: !ruby/object:Gem::Requirement
49
36
  requirements:
50
37
  - - ">="
51
38
  - !ruby/object:Gem::Version
52
- version: 6.0.0
53
- - - "!="
54
- - !ruby/object:Gem::Version
55
- version: 7.0.0
56
- - - "<"
57
- - !ruby/object:Gem::Version
58
- version: 7.2.0
39
+ version: 7.0.1
59
40
  type: :runtime
60
41
  prerelease: false
61
42
  version_requirements: !ruby/object:Gem::Requirement
62
43
  requirements:
63
44
  - - ">="
64
45
  - !ruby/object:Gem::Version
65
- version: 6.0.0
66
- - - "!="
67
- - !ruby/object:Gem::Version
68
- version: 7.0.0
69
- - - "<"
70
- - !ruby/object:Gem::Version
71
- version: 7.2.0
46
+ version: 7.0.1
72
47
  - !ruby/object:Gem::Dependency
73
48
  name: mysql2
74
49
  requirement: !ruby/object:Gem::Requirement
@@ -211,30 +186,26 @@ files:
211
186
  - RELEASING.md
212
187
  - Rakefile
213
188
  - bin/console
189
+ - bin/rails
214
190
  - bin/rspec
215
191
  - bin/setup
216
192
  - config.yml.erb
217
193
  - configuration.rb
218
194
  - departure.gemspec
219
195
  - docker-compose.yml
220
- - gemfiles/rails_6_0.gemfile
221
- - gemfiles/rails_6_0.gemfile.lock
222
- - gemfiles/rails_6_1.gemfile
223
- - gemfiles/rails_6_1.gemfile.lock
224
196
  - gemfiles/rails_7_0.gemfile
225
197
  - gemfiles/rails_7_0.gemfile.lock
226
198
  - gemfiles/rails_7_1.gemfile
227
199
  - gemfiles/rails_7_1.gemfile.lock
228
- - gemfiles/ruby_2.7_rails_6_0.gemfile
229
- - gemfiles/ruby_2.7_rails_6_0.gemfile.lock
230
- - gemfiles/ruby_2.7_rails_6_1.gemfile
231
- - gemfiles/ruby_2.7_rails_6_1.gemfile.lock
232
- - gemfiles/ruby_2.7_rails_7_0.gemfile
233
- - gemfiles/ruby_2.7_rails_7_0.gemfile.lock
234
- - gemfiles/ruby_2.7_rails_7_1.gemfile
235
- - gemfiles/ruby_2.7_rails_7_1.gemfile.lock
200
+ - gemfiles/rails_7_2.gemfile
201
+ - gemfiles/rails_7_2.gemfile.lock
202
+ - gemfiles/rails_8_0.gemfile
203
+ - gemfiles/rails_8_0.gemfile.lock
236
204
  - lib/active_record/connection_adapters/for_alter.rb
205
+ - lib/active_record/connection_adapters/patch_connection_handling.rb
237
206
  - lib/active_record/connection_adapters/percona_adapter.rb
207
+ - lib/active_record/connection_adapters/rails_7_2_departure_adapter.rb
208
+ - lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb
238
209
  - lib/departure.rb
239
210
  - lib/departure/alter_argument.rb
240
211
  - lib/departure/cli_generator.rb
@@ -250,6 +221,8 @@ files:
250
221
  - lib/departure/migration.rb
251
222
  - lib/departure/null_logger.rb
252
223
  - lib/departure/option.rb
224
+ - lib/departure/rails_adapter.rb
225
+ - lib/departure/rails_patches/active_record_migrator_with_advisory_lock_patch.rb
253
226
  - lib/departure/railtie.rb
254
227
  - lib/departure/runner.rb
255
228
  - lib/departure/user_options.rb
@@ -263,7 +236,6 @@ homepage: https://github.com/departurerb/departure
263
236
  licenses:
264
237
  - MIT
265
238
  metadata: {}
266
- post_install_message:
267
239
  rdoc_options: []
268
240
  require_paths:
269
241
  - lib
@@ -271,15 +243,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
271
243
  requirements:
272
244
  - - ">="
273
245
  - !ruby/object:Gem::Version
274
- version: 2.7.0
246
+ version: 3.2.0
275
247
  required_rubygems_version: !ruby/object:Gem::Requirement
276
248
  requirements:
277
249
  - - ">="
278
250
  - !ruby/object:Gem::Version
279
251
  version: '0'
280
252
  requirements: []
281
- rubygems_version: 3.2.33
282
- signing_key:
253
+ rubygems_version: 3.6.2
283
254
  specification_version: 4
284
255
  summary: pt-online-schema-change runner for ActiveRecord migrations
285
256
  test_files: []
@@ -1,238 +0,0 @@
1
- PATH
2
- remote: ..
3
- specs:
4
- departure (6.7.0)
5
- activerecord (>= 6.0.0, < 7.2.0, != 7.0.0)
6
- mysql2 (>= 0.4.0, < 0.6.0)
7
- railties (>= 6.0.0, < 7.2.0, != 7.0.0)
8
-
9
- GEM
10
- remote: https://rubygems.org/
11
- specs:
12
- actioncable (6.0.6.1)
13
- actionpack (= 6.0.6.1)
14
- nio4r (~> 2.0)
15
- websocket-driver (>= 0.6.1)
16
- actionmailbox (6.0.6.1)
17
- actionpack (= 6.0.6.1)
18
- activejob (= 6.0.6.1)
19
- activerecord (= 6.0.6.1)
20
- activestorage (= 6.0.6.1)
21
- activesupport (= 6.0.6.1)
22
- mail (>= 2.7.1)
23
- actionmailer (6.0.6.1)
24
- actionpack (= 6.0.6.1)
25
- actionview (= 6.0.6.1)
26
- activejob (= 6.0.6.1)
27
- mail (~> 2.5, >= 2.5.4)
28
- rails-dom-testing (~> 2.0)
29
- actionpack (6.0.6.1)
30
- actionview (= 6.0.6.1)
31
- activesupport (= 6.0.6.1)
32
- rack (~> 2.0, >= 2.0.8)
33
- rack-test (>= 0.6.3)
34
- rails-dom-testing (~> 2.0)
35
- rails-html-sanitizer (~> 1.0, >= 1.2.0)
36
- actiontext (6.0.6.1)
37
- actionpack (= 6.0.6.1)
38
- activerecord (= 6.0.6.1)
39
- activestorage (= 6.0.6.1)
40
- activesupport (= 6.0.6.1)
41
- nokogiri (>= 1.8.5)
42
- actionview (6.0.6.1)
43
- activesupport (= 6.0.6.1)
44
- builder (~> 3.1)
45
- erubi (~> 1.4)
46
- rails-dom-testing (~> 2.0)
47
- rails-html-sanitizer (~> 1.1, >= 1.2.0)
48
- activejob (6.0.6.1)
49
- activesupport (= 6.0.6.1)
50
- globalid (>= 0.3.6)
51
- activemodel (6.0.6.1)
52
- activesupport (= 6.0.6.1)
53
- activerecord (6.0.6.1)
54
- activemodel (= 6.0.6.1)
55
- activesupport (= 6.0.6.1)
56
- activestorage (6.0.6.1)
57
- actionpack (= 6.0.6.1)
58
- activejob (= 6.0.6.1)
59
- activerecord (= 6.0.6.1)
60
- marcel (~> 1.0)
61
- activesupport (6.0.6.1)
62
- concurrent-ruby (~> 1.0, >= 1.0.2)
63
- i18n (>= 0.7, < 2)
64
- minitest (~> 5.1)
65
- tzinfo (~> 1.1)
66
- zeitwerk (~> 2.2, >= 2.2.2)
67
- appraisal (2.4.1)
68
- bundler
69
- rake
70
- thor (>= 0.14.0)
71
- ast (2.4.2)
72
- builder (3.2.4)
73
- byebug (11.1.3)
74
- climate_control (0.0.4)
75
- activesupport (>= 3.0)
76
- codeclimate-test-reporter (1.0.9)
77
- simplecov (<= 0.13)
78
- coderay (1.1.3)
79
- concurrent-ruby (1.2.3)
80
- crass (1.0.6)
81
- date (3.3.4)
82
- diff-lcs (1.5.1)
83
- docile (1.1.5)
84
- erubi (1.12.0)
85
- globalid (1.1.0)
86
- activesupport (>= 5.0)
87
- i18n (1.14.1)
88
- concurrent-ruby (~> 1.0)
89
- json (2.7.1)
90
- language_server-protocol (3.17.0.3)
91
- loofah (2.22.0)
92
- crass (~> 1.0.2)
93
- nokogiri (>= 1.12.0)
94
- mail (2.8.1)
95
- mini_mime (>= 0.1.1)
96
- net-imap
97
- net-pop
98
- net-smtp
99
- marcel (1.0.2)
100
- method_source (1.0.0)
101
- mini_mime (1.1.5)
102
- minitest (5.22.2)
103
- mysql2 (0.5.6)
104
- net-imap (0.4.10)
105
- date
106
- net-protocol
107
- net-pop (0.1.2)
108
- net-protocol
109
- net-protocol (0.2.2)
110
- timeout
111
- net-smtp (0.4.0.1)
112
- net-protocol
113
- nio4r (2.7.0)
114
- nokogiri (1.16.2-arm64-darwin)
115
- racc (~> 1.4)
116
- nokogiri (1.16.2-x86_64-linux)
117
- racc (~> 1.4)
118
- parallel (1.24.0)
119
- parser (3.3.0.5)
120
- ast (~> 2.4.1)
121
- racc
122
- pry (0.14.2)
123
- coderay (~> 1.1)
124
- method_source (~> 1.0)
125
- pry-byebug (3.10.1)
126
- byebug (~> 11.0)
127
- pry (>= 0.13, < 0.15)
128
- racc (1.7.3)
129
- rack (2.2.8)
130
- rack-test (2.1.0)
131
- rack (>= 1.3)
132
- rails (6.0.6.1)
133
- actioncable (= 6.0.6.1)
134
- actionmailbox (= 6.0.6.1)
135
- actionmailer (= 6.0.6.1)
136
- actionpack (= 6.0.6.1)
137
- actiontext (= 6.0.6.1)
138
- actionview (= 6.0.6.1)
139
- activejob (= 6.0.6.1)
140
- activemodel (= 6.0.6.1)
141
- activerecord (= 6.0.6.1)
142
- activestorage (= 6.0.6.1)
143
- activesupport (= 6.0.6.1)
144
- bundler (>= 1.3.0)
145
- railties (= 6.0.6.1)
146
- sprockets-rails (>= 2.0.0)
147
- rails-dom-testing (2.2.0)
148
- activesupport (>= 5.0.0)
149
- minitest
150
- nokogiri (>= 1.6)
151
- rails-html-sanitizer (1.6.0)
152
- loofah (~> 2.21)
153
- nokogiri (~> 1.14)
154
- railties (6.0.6.1)
155
- actionpack (= 6.0.6.1)
156
- activesupport (= 6.0.6.1)
157
- method_source
158
- rake (>= 0.8.7)
159
- thor (>= 0.20.3, < 2.0)
160
- rainbow (3.1.1)
161
- rake (13.1.0)
162
- regexp_parser (2.9.0)
163
- rexml (3.2.6)
164
- rspec (3.13.0)
165
- rspec-core (~> 3.13.0)
166
- rspec-expectations (~> 3.13.0)
167
- rspec-mocks (~> 3.13.0)
168
- rspec-core (3.13.0)
169
- rspec-support (~> 3.13.0)
170
- rspec-expectations (3.13.0)
171
- diff-lcs (>= 1.2.0, < 2.0)
172
- rspec-support (~> 3.13.0)
173
- rspec-its (1.3.0)
174
- rspec-core (>= 3.0.0)
175
- rspec-expectations (>= 3.0.0)
176
- rspec-mocks (3.13.0)
177
- diff-lcs (>= 1.2.0, < 2.0)
178
- rspec-support (~> 3.13.0)
179
- rspec-support (3.13.0)
180
- rubocop (1.60.2)
181
- json (~> 2.3)
182
- language_server-protocol (>= 3.17.0)
183
- parallel (~> 1.10)
184
- parser (>= 3.3.0.2)
185
- rainbow (>= 2.2.2, < 4.0)
186
- regexp_parser (>= 1.8, < 3.0)
187
- rexml (>= 3.2.5, < 4.0)
188
- rubocop-ast (>= 1.30.0, < 2.0)
189
- ruby-progressbar (~> 1.7)
190
- unicode-display_width (>= 2.4.0, < 3.0)
191
- rubocop-ast (1.30.0)
192
- parser (>= 3.2.1.0)
193
- rubocop-performance (1.20.2)
194
- rubocop (>= 1.48.1, < 2.0)
195
- rubocop-ast (>= 1.30.0, < 2.0)
196
- ruby-progressbar (1.13.0)
197
- simplecov (0.13.0)
198
- docile (~> 1.1.0)
199
- json (>= 1.8, < 3)
200
- simplecov-html (~> 0.10.0)
201
- simplecov-html (0.10.2)
202
- sprockets (4.2.1)
203
- concurrent-ruby (~> 1.0)
204
- rack (>= 2.2.4, < 4)
205
- sprockets-rails (3.4.2)
206
- actionpack (>= 5.2)
207
- activesupport (>= 5.2)
208
- sprockets (>= 3.0.0)
209
- thor (1.3.0)
210
- thread_safe (0.3.6)
211
- timeout (0.4.1)
212
- tzinfo (1.2.11)
213
- thread_safe (~> 0.1)
214
- unicode-display_width (2.5.0)
215
- websocket-driver (0.7.6)
216
- websocket-extensions (>= 0.1.0)
217
- websocket-extensions (0.1.5)
218
- zeitwerk (2.6.13)
219
-
220
- PLATFORMS
221
- arm64-darwin-23
222
- x86_64-linux
223
-
224
- DEPENDENCIES
225
- appraisal (~> 2.4.1)
226
- climate_control (~> 0.0.3)
227
- codeclimate-test-reporter (~> 1.0.3)
228
- departure!
229
- pry-byebug
230
- rails (= 6.0.6.1)
231
- rake (>= 10.0)
232
- rspec (~> 3.4, >= 3.4.0)
233
- rspec-its (~> 1.2)
234
- rubocop (~> 1.60.2)
235
- rubocop-performance (~> 1.20.2)
236
-
237
- BUNDLED WITH
238
- 2.4.22
@@ -1,10 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source 'https://rubygems.org'
4
-
5
- gem 'codeclimate-test-reporter', '~> 1.0.3', group: :test, require: nil
6
- gem 'rails', '6.1.7.6'
7
- gem 'rubocop', '~> 1.60.2', require: false
8
- gem 'rubocop-performance', '~> 1.20.2', require: false
9
-
10
- gemspec path: '../'