job-iteration 1.9.0 → 1.11.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b32eb2fd6eb2dc54f59eff462a3cde3882192134c2964ffc05b737957e3d4abb
4
- data.tar.gz: 255864c2fac9d3cc0f75da1929d18c1aeb8e63ff83ea3dc6c19038c0e4894e54
3
+ metadata.gz: 61c40af6f75909b71f400462b9d64f994530f0fb68367ddbe6479f1b5fe8d831
4
+ data.tar.gz: a293c68062cd9714d522a2c3c5e81292bcd5a9f8172cbf3f537f0676e0de5731
5
5
  SHA512:
6
- metadata.gz: 7c241d626e4c92c4424dd08745feab35f1606fafbf6f0d610f34a704d16702a52623f646e5715925b331509257c737053b25bf90091f61a948b6fba2315cc659
7
- data.tar.gz: 19b821e84f93954cea21b0709455ac5ad12b2633f70c2182ae93e75d2e883a0985dda1cf7c56ac89295caab1720ef3508857201d0c33f18b35ffad76996f093b
6
+ metadata.gz: a773c72a419db3fe0677ba323ec0a2bdca6c02e34f322e7519ff080752c66e8ce7c973ca3b9031e84e2b70e27eb61dcf5875dfd38ef0b4421983991202256c71
7
+ data.tar.gz: 2abedd098be50d634f68eade3e681042aef00a87c8a3b0fb7cc88a91143cafade08bc18435f7479399c2ccbb660563ff781c1b4e9248b8bff7cf22190504383e
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ### Main (unreleased)
2
2
 
3
+ ### Breaking Changes
4
+
5
+ nil
6
+
3
7
  ### Changes
4
8
 
5
9
  nil
@@ -12,7 +16,30 @@ nil
12
16
 
13
17
  nil
14
18
 
15
- ## v1.9.0 (Feb 3, 2024)
19
+ ## v1.11.0 (Jul 14, 2025)
20
+
21
+ ### Security fixes
22
+
23
+ - [595](https://github.com/Shopify/job-iteration/pull/595) [CVE-2025-53623] Fixes a security issue in the `CSVEnumerator` where the filename was directly interpolated into a bash command.
24
+
25
+ ### Bug fixes
26
+
27
+ - [590](https://github.com/Shopify/job-iteration/pull/590) Fix a compatibilty issue between the Sorbet DSL compiler and the latest Tapioca.
28
+ - [593](https://github.com/Shopify/job-iteration/pull/593) Properly support required and optional positional arguments in the Sorbet DSL compiler.
29
+ - [594](https://github.com/Shopify/job-iteration/pull/594) Clean up the size calculation in the `CSVEnumerator`.
30
+
31
+ ## v1.10.0 (Mar 20, 2025)
32
+
33
+ ### Breaking Changes
34
+
35
+ - [544](https://github.com/Shopify/job-iteration/pull/544) - Drop support for Ruby 2.6 and 2.7, and Rails 5.2 and 6.0. The minimum supported Ruby version is now 3.0, and the minimum supported Rails version is 6.1.
36
+
37
+ ### Features
38
+
39
+ - [547](https://github.com/Shopify/job-iteration/pull/547) Add interruption adapter for [DelayedJob](https://github.com/collectiveidea/delayed_job).
40
+ - [556](https://github.com/Shopify/job-iteration/pull/556) Add support for generic job classes in the Tapioca Sorbet compiler.
41
+
42
+ ## v1.9.0 (Feb 3, 2025)
16
43
 
17
44
  ### Features
18
45
 
data/README.md CHANGED
@@ -151,7 +151,25 @@ class NestedIterationJob < ApplicationJob
151
151
  end
152
152
  ```
153
153
 
154
- Iteration hooks into Sidekiq and Resque out of the box to support graceful interruption. No extra configuration is required.
154
+ Iteration hooks into most popular queue adapters out of the box to support graceful interruption. No extra configuration is required.
155
+
156
+ ## Supported dependencies
157
+
158
+ Job-iteration currently supports the following queue adapters (in order of implementation):
159
+
160
+ - [Resque](https://github.com/resque/resque)
161
+ - [Sidekiq](https://github.com/sidekiq/sidekiq/)
162
+ - [GoodJob](https://github.com/bensheldon/good_job)
163
+ - [Solid Queue](https://github.com/rails/solid_queue)
164
+ - [Amazon SQS](https://github.com/aws/aws-activejob-sqs-ruby)
165
+ - [Delayed::Job](https://github.com/collectiveidea/delayed_job)
166
+
167
+ It supports the following platforms:
168
+
169
+ - Ruby 3.0 and later
170
+ - Rails 6.1 and later
171
+
172
+ Support for older platforms that have reached end of life may occasionally be dropped if maintaining backwards compatibility is cumbersome.
155
173
 
156
174
  ## Guides
157
175
 
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require "job-iteration/version"
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.required_ruby_version = ">= 2.6"
8
+ spec.required_ruby_version = ">= 3.0"
9
9
  spec.name = "job-iteration"
10
10
  spec.version = JobIteration::VERSION
11
11
  spec.authors = ["Shopify"]
@@ -16,8 +16,8 @@ Gem::Specification.new do |spec|
16
16
  spec.homepage = "https://github.com/shopify/job-iteration"
17
17
  spec.license = "MIT"
18
18
 
19
- spec.files = %x(git ls-files -z).split("\x0").reject do |f|
20
- f.match(%r{^(test|spec|features)/})
19
+ spec.files = ["CHANGELOG.md", "LICENSE.txt", "README.md", "job-iteration.gemspec"] + Dir.glob("{lib,exe}/**/*", File::FNM_DOTMATCH).reject do |f|
20
+ File.directory?(f) || f.match(%r{^(test|spec|features)/})
21
21
  end
22
22
  spec.bindir = "exe"
23
23
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
@@ -26,5 +26,5 @@ Gem::Specification.new do |spec|
26
26
  spec.metadata["changelog_uri"] = "https://github.com/Shopify/job-iteration/blob/main/CHANGELOG.md"
27
27
  spec.metadata["allowed_push_host"] = "https://rubygems.org"
28
28
 
29
- spec.add_dependency("activejob", ">= 5.2")
29
+ spec.add_dependency("activejob", ">= 6.1")
30
30
  end
@@ -43,23 +43,19 @@ module JobIteration
43
43
  .each_slice(batch_size)
44
44
  .with_index
45
45
  .drop(count_of_processed_rows(cursor))
46
- .to_enum { (count_of_rows_in_file.to_f / batch_size).ceil }
46
+ .to_enum do
47
+ num_rows = count_of_rows_in_file
48
+ num_rows.nil? ? nil : (num_rows.to_f / batch_size).ceil
49
+ end
47
50
  end
48
51
 
49
52
  private
50
53
 
51
54
  def count_of_rows_in_file
52
- # TODO: Remove rescue for NoMethodError when Ruby 2.6 is no longer supported.
53
- begin
54
- filepath = @csv.path
55
- rescue NoMethodError
56
- return
57
- end
58
-
59
- # Behaviour of CSV#path changed in Ruby 2.6.3 (returns nil instead of raising NoMethodError)
55
+ filepath = @csv.path
60
56
  return unless filepath
61
57
 
62
- count = %x(wc -l < #{filepath}).strip.to_i
58
+ count = File.foreach(filepath).count
63
59
  count -= 1 if @csv.headers
64
60
  count
65
61
  end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ begin
4
+ require "delayed_job"
5
+ rescue LoadError
6
+ # DelayedJobb is not available, no need to load the adapter
7
+ return
8
+ end
9
+
10
+ begin
11
+ # Delayed::Worker#stop? was introduced in DelayedJob 3.0.3
12
+ gem("delayed_job", ">= 3.0.3")
13
+ rescue Gem::LoadError
14
+ warn("job-iteration's interruption adapter for DelayedJob requires DelayedJob 3.0.3 or newer")
15
+ return
16
+ end
17
+
18
+ module JobIteration
19
+ module InterruptionAdapters
20
+ module DelayedJobAdapter
21
+ class << self
22
+ attr_accessor :delayed_worker, :delayed_worker_started
23
+
24
+ def call
25
+ if delayed_worker_started
26
+ delayed_worker.nil? || delayed_worker.stop?
27
+ else
28
+ false
29
+ end
30
+ end
31
+ end
32
+
33
+ self.delayed_worker_started = false
34
+
35
+ class DelayedJobPlugin < Delayed::Plugin
36
+ callbacks do |lifecycle|
37
+ lifecycle.before(:execute) do |worker|
38
+ DelayedJobAdapter.delayed_worker = worker
39
+ DelayedJobAdapter.delayed_worker_started = true
40
+ end
41
+
42
+ lifecycle.after(:execute) do |_worker|
43
+ DelayedJobAdapter.delayed_worker = nil
44
+ end
45
+ end
46
+ end
47
+ private_constant :DelayedJobPlugin
48
+
49
+ Delayed::Worker.plugins << DelayedJobPlugin
50
+ end
51
+
52
+ register(:delayed_job, DelayedJobAdapter)
53
+ end
54
+ end
@@ -4,7 +4,7 @@ require_relative "interruption_adapters/null_adapter"
4
4
 
5
5
  module JobIteration
6
6
  module InterruptionAdapters
7
- BUNDLED_ADAPTERS = [:good_job, :resque, :sidekiq, :solid_queue, :sqs].freeze # @api private
7
+ BUNDLED_ADAPTERS = [:delayed_job, :good_job, :resque, :sidekiq, :solid_queue, :sqs].freeze # @api private
8
8
 
9
9
  class << self
10
10
  # Returns adapter for specified name.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JobIteration
4
- VERSION = "1.9.0"
4
+ VERSION = "1.11.0"
5
5
  end
@@ -8,10 +8,11 @@ module Tapioca
8
8
  module Compilers
9
9
  class JobIteration < Compiler
10
10
  extend T::Sig
11
+ extend T::Generic
11
12
 
12
13
  ConstantType = type_member { { fixed: T.class_of(::JobIteration::Iteration) } }
13
14
  PARAM_TYPES_IN_ORDER = [
14
- RBI::Param,
15
+ RBI::ReqParam,
15
16
  RBI::OptParam,
16
17
  RBI::RestParam,
17
18
  RBI::KwParam,
@@ -55,10 +56,18 @@ module Tapioca
55
56
  # Sorbet expects optional keyword arguments to be after required keyword arguments.
56
57
  expanded_parameters.sort_by! { |typed_param| PARAM_TYPES_IN_ORDER.index(typed_param.param.class) }
57
58
 
59
+ number_of_generic_type_members = Tapioca::Runtime::GenericTypeRegistry.lookup_type_variables(constant)&.size
60
+
61
+ returned_job_class = if number_of_generic_type_members&.nonzero?
62
+ "#{constant_name}[#{number_of_generic_type_members.times.map { "T.untyped" }.join(", ")}]"
63
+ else
64
+ constant_name
65
+ end
66
+
58
67
  job.create_method(
59
68
  "perform_later",
60
- parameters: perform_later_parameters(expanded_parameters, constant_name),
61
- return_type: "T.any(#{constant_name}, FalseClass)",
69
+ parameters: perform_later_parameters(expanded_parameters, returned_job_class),
70
+ return_type: "T.any(#{returned_job_class}, FalseClass)",
62
71
  class_method: true,
63
72
  )
64
73
 
@@ -83,15 +92,15 @@ module Tapioca
83
92
  sig do
84
93
  params(
85
94
  parameters: T::Array[RBI::TypedParam],
86
- constant_name: T.nilable(String),
95
+ returned_job_class: String,
87
96
  ).returns(T::Array[RBI::TypedParam])
88
97
  end
89
- def perform_later_parameters(parameters, constant_name)
98
+ def perform_later_parameters(parameters, returned_job_class)
90
99
  if ::Gem::Requirement.new(">= 7.0").satisfied_by?(::ActiveJob.gem_version)
91
100
  parameters.reject! { |typed_param| RBI::BlockParam === typed_param.param }
92
101
  parameters + [create_block_param(
93
102
  "block",
94
- type: "T.nilable(T.proc.params(job: #{constant_name}).void)",
103
+ type: "T.nilable(T.proc.params(job: #{returned_job_class}).void)",
95
104
  )]
96
105
  else
97
106
  parameters
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: job-iteration
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-02-03 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: activejob
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: '5.2'
18
+ version: '6.1'
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: '5.2'
25
+ version: '6.1'
26
26
  description: Makes your background jobs interruptible and resumable.
27
27
  email:
28
28
  - ops-accounts+shipit@shopify.com
@@ -30,29 +30,9 @@ executables: []
30
30
  extensions: []
31
31
  extra_rdoc_files: []
32
32
  files:
33
- - ".github/dependabot.yml"
34
- - ".github/workflows/ci.yml"
35
- - ".github/workflows/cla.yml"
36
- - ".gitignore"
37
- - ".rubocop.yml"
38
- - ".ruby-version"
39
- - ".yardopts"
40
33
  - CHANGELOG.md
41
- - CODE_OF_CONDUCT.md
42
- - Gemfile
43
- - Gemfile.lock
44
34
  - LICENSE.txt
45
35
  - README.md
46
- - Rakefile
47
- - bin/setup
48
- - bin/test
49
- - dev.yml
50
- - gemfiles/rails_gems.gemfile
51
- - guides/argument-semantics.md
52
- - guides/best-practices.md
53
- - guides/custom-enumerator.md
54
- - guides/iteration-how-it-works.md
55
- - guides/throttling.md
56
36
  - job-iteration.gemspec
57
37
  - lib/job-iteration.rb
58
38
  - lib/job-iteration/active_record_batch_enumerator.rb
@@ -61,6 +41,7 @@ files:
61
41
  - lib/job-iteration/csv_enumerator.rb
62
42
  - lib/job-iteration/enumerator_builder.rb
63
43
  - lib/job-iteration/interruption_adapters.rb
44
+ - lib/job-iteration/interruption_adapters/delayed_job_adapter.rb
64
45
  - lib/job-iteration/interruption_adapters/good_job_adapter.rb
65
46
  - lib/job-iteration/interruption_adapters/null_adapter.rb
66
47
  - lib/job-iteration/interruption_adapters/resque_adapter.rb
@@ -88,14 +69,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
88
69
  requirements:
89
70
  - - ">="
90
71
  - !ruby/object:Gem::Version
91
- version: '2.6'
72
+ version: '3.0'
92
73
  required_rubygems_version: !ruby/object:Gem::Requirement
93
74
  requirements:
94
75
  - - ">="
95
76
  - !ruby/object:Gem::Version
96
77
  version: '0'
97
78
  requirements: []
98
- rubygems_version: 3.6.3
79
+ rubygems_version: 3.6.9
99
80
  specification_version: 4
100
81
  summary: Makes your background jobs interruptible and resumable.
101
82
  test_files: []
@@ -1,16 +0,0 @@
1
- version: 2
2
-
3
- updates:
4
-
5
- - package-ecosystem: bundler
6
- directory: '/'
7
- versioning-strategy: increase
8
- open-pull-requests-limit: 100
9
- insecure-external-code-execution: allow
10
- schedule:
11
- interval: weekly
12
-
13
- - package-ecosystem: github-actions
14
- directory: '/'
15
- schedule:
16
- interval: daily
@@ -1,98 +0,0 @@
1
- name: CI
2
-
3
- on: [push, pull_request]
4
-
5
- jobs:
6
- build:
7
- runs-on: ubuntu-latest
8
- name: Ruby ${{ matrix.ruby }} | Rails ${{ matrix.rails }} | Gemfile ${{ matrix.gemfile }}
9
- continue-on-error: ${{ matrix.rails == 'edge' }}
10
- services:
11
- redis:
12
- image: redis
13
- ports:
14
- - 6379:6379
15
- strategy:
16
- fail-fast: false
17
- matrix:
18
- ruby: ["2.6", "2.7", "3.0", "3.1", "3.2", "3.3"]
19
- rails: ["5.2", "6.0", "6.1", "7.0", "7.1", "7.2", "edge"]
20
- gemfile: [rails_gems]
21
- exclude:
22
- - ruby: "2.6"
23
- rails: "7.0"
24
- - ruby: "2.6"
25
- rails: "7.1"
26
- - ruby: "2.6"
27
- rails: "7.2"
28
- - ruby: "2.6"
29
- rails: "edge"
30
- - ruby: "2.7"
31
- rails: "7.1"
32
- - ruby: "2.7"
33
- rails: "7.2"
34
- - ruby: "2.7"
35
- rails: "edge"
36
- - ruby: "3.0"
37
- rails: "5.2"
38
- - ruby: "3.0"
39
- rails: "7.1"
40
- - ruby: "3.0"
41
- rails: "7.2"
42
- - ruby: "3.0"
43
- rails: "edge"
44
- - ruby: "3.1"
45
- rails: "5.2"
46
- - ruby: "3.1"
47
- rails: "6.0"
48
- - ruby: "3.1"
49
- rails: "edge"
50
- - ruby: "3.2"
51
- rails: "5.2"
52
- - ruby: "3.2"
53
- rails: "6.0"
54
- - ruby: "3.2"
55
- rails: "6.1"
56
- - ruby: "3.3"
57
- rails: "5.2"
58
- - ruby: "3.3"
59
- rails: "6.0"
60
- - ruby: "3.3"
61
- rails: "6.1"
62
-
63
- include:
64
- - ruby: head
65
- rails: "edge"
66
- gemfile: rails_gems
67
- env:
68
- BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile
69
- RAILS_VERSION: ${{ matrix.rails }}
70
- steps:
71
- - name: Check out code
72
- uses: actions/checkout@v4
73
- - name: Set up Ruby ${{ matrix.ruby }}
74
- uses: ruby/setup-ruby@v1
75
- with:
76
- ruby-version: ${{ matrix.ruby }}
77
- bundler-cache: true
78
- - name: Start MySQL and create DB
79
- run: |
80
- sudo systemctl start mysql.service
81
- mysql -uroot -h localhost -proot -e "CREATE DATABASE job_iteration_test;"
82
- - name: Ruby tests
83
- run: bundle exec rake test
84
-
85
- lint:
86
- runs-on: ubuntu-latest
87
- name: Lint
88
- steps:
89
- - name: Check out code
90
- uses: actions/checkout@v4
91
- - name: Set up Ruby
92
- uses: ruby/setup-ruby@v1
93
- with:
94
- bundler-cache: true
95
- - name: Rubocop
96
- run: bundle exec rubocop
97
- - name: Documentation correctly written
98
- run: bundle exec yardoc --no-output --no-save --no-stats --fail-on-warning
@@ -1,22 +0,0 @@
1
- name: Contributor License Agreement (CLA)
2
-
3
- on:
4
- pull_request_target:
5
- types: [opened, synchronize]
6
- issue_comment:
7
- types: [created]
8
-
9
- jobs:
10
- cla:
11
- runs-on: ubuntu-latest
12
- if: |
13
- (github.event.issue.pull_request
14
- && !github.event.issue.pull_request.merged_at
15
- && contains(github.event.comment.body, 'signed')
16
- )
17
- || (github.event.pull_request && !github.event.pull_request.merged)
18
- steps:
19
- - uses: Shopify/shopify-cla-action@v1
20
- with:
21
- github-token: ${{ secrets.GITHUB_TOKEN }}
22
- cla-token: ${{ secrets.CLA_TOKEN }}
data/.gitignore DELETED
@@ -1,11 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
- .rubocop-http---shopify-github-io-ruby-style-guide-rubocop-yml
10
- gemfiles/*.lock
11
- dump.rdb
data/.rubocop.yml DELETED
@@ -1,16 +0,0 @@
1
- inherit_gem:
2
- rubocop-shopify: rubocop.yml
3
-
4
- inherit_mode:
5
- merge:
6
- - Include
7
-
8
- AllCops:
9
- Include:
10
- - '**/*.gemfile'
11
- Lint/SuppressedException:
12
- Exclude:
13
- - lib/job-iteration.rb
14
- Naming/FileName:
15
- Exclude:
16
- - lib/job-iteration.rb
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 3.3.3
data/.yardopts DELETED
@@ -1,3 +0,0 @@
1
- --no-private
2
- --embed-mixins
3
- --markup markdown
data/CODE_OF_CONDUCT.md DELETED
@@ -1,74 +0,0 @@
1
- # Contributor Covenant Code of Conduct
2
-
3
- ## Our Pledge
4
-
5
- In the interest of fostering an open and welcoming environment, we as
6
- contributors and maintainers pledge to making participation in our project and
7
- our community a harassment-free experience for everyone, regardless of age, body
8
- size, disability, ethnicity, gender identity and expression, level of experience,
9
- nationality, personal appearance, race, religion, or sexual identity and
10
- orientation.
11
-
12
- ## Our Standards
13
-
14
- Examples of behavior that contributes to creating a positive environment
15
- include:
16
-
17
- * Using welcoming and inclusive language
18
- * Being respectful of differing viewpoints and experiences
19
- * Gracefully accepting constructive criticism
20
- * Focusing on what is best for the community
21
- * Showing empathy towards other community members
22
-
23
- Examples of unacceptable behavior by participants include:
24
-
25
- * The use of sexualized language or imagery and unwelcome sexual attention or
26
- advances
27
- * Trolling, insulting/derogatory comments, and personal or political attacks
28
- * Public or private harassment
29
- * Publishing others' private information, such as a physical or electronic
30
- address, without explicit permission
31
- * Other conduct which could reasonably be considered inappropriate in a
32
- professional setting
33
-
34
- ## Our Responsibilities
35
-
36
- Project maintainers are responsible for clarifying the standards of acceptable
37
- behavior and are expected to take appropriate and fair corrective action in
38
- response to any instances of unacceptable behavior.
39
-
40
- Project maintainers have the right and responsibility to remove, edit, or
41
- reject comments, commits, code, wiki edits, issues, and other contributions
42
- that are not aligned to this Code of Conduct, or to ban temporarily or
43
- permanently any contributor for other behaviors that they deem inappropriate,
44
- threatening, offensive, or harmful.
45
-
46
- ## Scope
47
-
48
- This Code of Conduct applies both within project spaces and in public spaces
49
- when an individual is representing the project or its community. Examples of
50
- representing a project or community include using an official project e-mail
51
- address, posting via an official social media account, or acting as an appointed
52
- representative at an online or offline event. Representation of a project may be
53
- further defined and clarified by project maintainers.
54
-
55
- ## Enforcement
56
-
57
- Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
- reported by contacting the project team at shatrov@me.com. All
59
- complaints will be reviewed and investigated and will result in a response that
60
- is deemed necessary and appropriate to the circumstances. The project team is
61
- obligated to maintain confidentiality with regard to the reporter of an incident.
62
- Further details of specific enforcement policies may be posted separately.
63
-
64
- Project maintainers who do not follow or enforce the Code of Conduct in good
65
- faith may face temporary or permanent repercussions as determined by other
66
- members of the project's leadership.
67
-
68
- ## Attribution
69
-
70
- This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
- available at [http://contributor-covenant.org/version/1/4][version]
72
-
73
- [homepage]: http://contributor-covenant.org
74
- [version]: http://contributor-covenant.org/version/1/4/
data/Gemfile DELETED
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
-
7
- # Specify your gem's dependencies in job-iteration.gemspec
8
- gemspec
9
-
10
- # for integration testing
11
- gem "sidekiq"
12
- gem "resque"
13
-
14
- if defined?(@rails_gems_requirements) && @rails_gems_requirements
15
- # We avoid the `gem "..."` syntax here so Dependabot doesn't try to update these gems.
16
- [
17
- "activejob",
18
- "activerecord",
19
- ].each { |name| gem name, @rails_gems_requirements }
20
- else
21
- # gem "activejob" # Set in gemspec
22
- gem "activerecord"
23
- end
24
-
25
- gem "mysql2", github: "brianmario/mysql2"
26
- gem "globalid"
27
- gem "i18n"
28
- gem "redis"
29
-
30
- gem "pry"
31
- gem "mocha"
32
-
33
- gem "rubocop-shopify", require: false
34
- gem "yard"
35
- gem "rake"
36
- gem "csv" # required for Ruby 3.4+
37
-
38
- # for unit testing optional sorbet support
39
- gem "sorbet-runtime"
40
- gem "tapioca"
41
-
42
- gem "logger"