marj 2.0.0 → 2.0.1
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/README.md +69 -32
 - data/lib/marj.rb +3 -1
 - data/lib/marj_adapter.rb +2 -0
 - data/lib/marj_config.rb +2 -0
 - data/{app/models/marj.rb → lib/marj_record.rb} +6 -9
 - metadata +8 -7
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 42a85f9f7752849bf9e7781eef989294d45420763c16fb5fadee3df3fc7a0c2e
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: acadf4b197599bd3150629a557857b8d48fa8bed662a2f4140a8dbe16f01e7ba
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: a30fe477c647ca284fdcde1bcccc8b000f3b4ef78b62de84f486376fa65450fcf3a52c7132df520fd45ee7e0f2856d8812a16b804ce89baa93a8d2353dc8348f
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 72a63c15a36f6bade30e93bb5f84d5d8c6bbab33b12f4c92c78579f07eb86689e8e7609dae9ec16b94334140e8e4c2828b6e6cb19a580ad9a42730f27afab8cb
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,6 +1,8 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Marj
         
     | 
| 
      
 1 
     | 
    
         
            +
            # Marj - Minimal ActiveRecord Jobs
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
      
 3 
     | 
    
         
            +
            The simplest database-backed ActiveJob queueing backend.
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            ## Quick Links
         
     | 
| 
       4 
6 
     | 
    
         | 
| 
       5 
7 
     | 
    
         
             
            API docs: https://www.rubydoc.info/github/nicholasdower/marj <br>
         
     | 
| 
       6 
8 
     | 
    
         
             
            RubyGems: https://rubygems.org/gems/marj <br>
         
     | 
| 
         @@ -8,27 +10,52 @@ Changelog: https://github.com/nicholasdower/marj/releases <br> 
     | 
|
| 
       8 
10 
     | 
    
         
             
            Issues: https://github.com/nicholasdower/marj/issues <br>
         
     | 
| 
       9 
11 
     | 
    
         
             
            Development: https://github.com/nicholasdower/marj/blob/master/CONTRIBUTING.md
         
     | 
| 
       10 
12 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
      
 13 
     | 
    
         
            +
            ## Features
         
     | 
| 
       12 
14 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
            -  
     | 
| 
       14 
     | 
    
         
            -
            -  
     | 
| 
       15 
     | 
    
         
            -
            -  
     | 
| 
      
 15 
     | 
    
         
            +
            - Enqueued jobs are written to the database.
         
     | 
| 
      
 16 
     | 
    
         
            +
            - Successfully executed jobs are deleted from the database.
         
     | 
| 
      
 17 
     | 
    
         
            +
            - Failed jobs which should be retried are updated in the database.
         
     | 
| 
      
 18 
     | 
    
         
            +
            - Failed jobs which should not be retried are deleted from the database.
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            ## Features Not Provided
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            - Workers
         
     | 
| 
      
 23 
     | 
    
         
            +
            - Timeouts
         
     | 
| 
      
 24 
     | 
    
         
            +
            - Concurrency Controls
         
     | 
| 
      
 25 
     | 
    
         
            +
            - Observability
         
     | 
| 
      
 26 
     | 
    
         
            +
            - A User Interace
         
     | 
| 
      
 27 
     | 
    
         
            +
            - Anything else you might dream up.
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            ## Interface
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            - `Marj` - An ActiveRecord model class
         
     | 
| 
      
 32 
     | 
    
         
            +
            - `Marj.ready` - Used to retrieve jobs ready to be executed
         
     | 
| 
      
 33 
     | 
    
         
            +
            - `Marj#execute` - Used to execute jobs retrieved from the database
         
     | 
| 
      
 34 
     | 
    
         
            +
            - `MarjConfig.table_name=` - Used to override the default table name
         
     | 
| 
       16 
35 
     | 
    
         | 
| 
       17 
36 
     | 
    
         
             
            ## Setup
         
     | 
| 
       18 
37 
     | 
    
         | 
| 
       19 
38 
     | 
    
         
             
            ### 1. Install
         
     | 
| 
       20 
39 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 40 
     | 
    
         
            +
            ```shell
         
     | 
| 
      
 41 
     | 
    
         
            +
            bundle add marj
         
     | 
| 
       22 
42 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
      
 43 
     | 
    
         
            +
            # or
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            gem install marj
         
     | 
| 
       25 
46 
     | 
    
         
             
            ```
         
     | 
| 
       26 
47 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
      
 48 
     | 
    
         
            +
            ### 2. Configure
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            By default, the database table is named "jobs". To use a different table name:
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 53 
     | 
    
         
            +
            require 'marj'
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            MarjConfig.table_name = 'some_name'
         
     | 
| 
       29 
56 
     | 
    
         
             
            ```
         
     | 
| 
       30 
57 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
            ###  
     | 
| 
      
 58 
     | 
    
         
            +
            ### 3. Create the database table
         
     | 
| 
       32 
59 
     | 
    
         | 
| 
       33 
60 
     | 
    
         
             
            ```ruby
         
     | 
| 
       34 
61 
     | 
    
         
             
            class CreateJobs < ActiveRecord::Migration[7.1]
         
     | 
| 
         @@ -57,15 +84,7 @@ class CreateJobs < ActiveRecord::Migration[7.1] 
     | 
|
| 
       57 
84 
     | 
    
         
             
            end
         
     | 
| 
       58 
85 
     | 
    
         
             
            ```
         
     | 
| 
       59 
86 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
            ```ruby
         
     | 
| 
       63 
     | 
    
         
            -
            require 'marj'
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
            MarjConfig.table_name = 'some_name'
         
     | 
| 
       66 
     | 
    
         
            -
            ```
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
            ### 3. Configure the queue adapter
         
     | 
| 
      
 87 
     | 
    
         
            +
            ### 4. Configure the queue adapter
         
     | 
| 
       69 
88 
     | 
    
         | 
| 
       70 
89 
     | 
    
         
             
            ```ruby
         
     | 
| 
       71 
90 
     | 
    
         
             
            require 'marj'
         
     | 
| 
         @@ -93,28 +112,40 @@ job.perform_now 
     | 
|
| 
       93 
112 
     | 
    
         | 
| 
       94 
113 
     | 
    
         
             
            # Enqueue, retrieve and manually run a job:
         
     | 
| 
       95 
114 
     | 
    
         
             
            SomeJob.perform_later('foo')
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
            record.execute
         
     | 
| 
      
 115 
     | 
    
         
            +
            Marj.first.execute
         
     | 
| 
       98 
116 
     | 
    
         | 
| 
       99 
117 
     | 
    
         
             
            # Run all ready jobs:
         
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
      
 118 
     | 
    
         
            +
            Marj.ready.each(&:execute)
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
            # Run all ready jobs, querying each time:
         
     | 
| 
      
 121 
     | 
    
         
            +
            loop { Marj.ready.first&.tap(&:execute) || break }
         
     | 
| 
       103 
122 
     | 
    
         | 
| 
       104 
123 
     | 
    
         
             
            # Run all ready jobs in a specific queue:
         
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
       106 
     | 
    
         
            -
              record.execute
         
     | 
| 
       107 
     | 
    
         
            -
            end
         
     | 
| 
      
 124 
     | 
    
         
            +
            loop { Marj.where(queue_name: 'foo').ready.first&.tap(&:execute) || break }
         
     | 
| 
       108 
125 
     | 
    
         | 
| 
       109 
126 
     | 
    
         
             
            # Run jobs as they become ready:
         
     | 
| 
       110 
127 
     | 
    
         
             
            loop do
         
     | 
| 
       111 
     | 
    
         
            -
               
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
     | 
    
         
            -
               
     | 
| 
      
 128 
     | 
    
         
            +
              loop { Marj.ready.first&.tap(&:execute) || break }
         
     | 
| 
      
 129 
     | 
    
         
            +
            rescue Exception => e
         
     | 
| 
      
 130 
     | 
    
         
            +
              logger.error(e)
         
     | 
| 
      
 131 
     | 
    
         
            +
            ensure
         
     | 
| 
       114 
132 
     | 
    
         
             
              sleep 5.seconds
         
     | 
| 
       115 
133 
     | 
    
         
             
            end
         
     | 
| 
       116 
134 
     | 
    
         
             
            ```
         
     | 
| 
       117 
135 
     | 
    
         | 
| 
      
 136 
     | 
    
         
            +
            ## Testing
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
      
 138 
     | 
    
         
            +
            By default, jobs enqeued during tests will be written to the database. Enqueued jobs can be executed via:
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 141 
     | 
    
         
            +
            Marj.ready.each(&:execute)
         
     | 
| 
      
 142 
     | 
    
         
            +
            ```
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
            Alternatively, to use [ActiveJob::QueueAdapters::TestAdapter](https://api.rubyonrails.org/classes/ActiveJob/QueueAdapters/TestAdapter.html):
         
     | 
| 
      
 145 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 146 
     | 
    
         
            +
            ActiveJob::Base.queue_adapter = :test
         
     | 
| 
      
 147 
     | 
    
         
            +
            ```
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
       118 
149 
     | 
    
         
             
            ## Extension Examples
         
     | 
| 
       119 
150 
     | 
    
         | 
| 
       120 
151 
     | 
    
         
             
            ### Timeouts
         
     | 
| 
         @@ -176,6 +207,12 @@ end 
     | 
|
| 
       176 
207 
     | 
    
         | 
| 
       177 
208 
     | 
    
         
             
            ## ActiveJob Cheatsheet
         
     | 
| 
       178 
209 
     | 
    
         | 
| 
      
 210 
     | 
    
         
            +
            For more information on ActiveJob, see:
         
     | 
| 
      
 211 
     | 
    
         
            +
             
     | 
| 
      
 212 
     | 
    
         
            +
            - https://edgeguides.rubyonrails.org/active_job_basics.html
         
     | 
| 
      
 213 
     | 
    
         
            +
            - https://www.rubydoc.info/gems/activejob
         
     | 
| 
      
 214 
     | 
    
         
            +
            - https://github.com/nicholasdower/marj/blob/master/README.md#activejob-cheatsheet
         
     | 
| 
      
 215 
     | 
    
         
            +
             
     | 
| 
       179 
216 
     | 
    
         
             
            ### Configuring a Queue Adapter
         
     | 
| 
       180 
217 
     | 
    
         | 
| 
       181 
218 
     | 
    
         
             
            ```ruby
         
     | 
    
        data/lib/marj.rb
    CHANGED
    
    | 
         @@ -1,6 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            # See https://github.com/nicholasdower/marj
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       3 
5 
     | 
    
         
             
            require_relative 'marj_adapter'
         
     | 
| 
       4 
6 
     | 
    
         
             
            require_relative 'marj_config'
         
     | 
| 
       5 
7 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
            Kernel.autoload(:Marj, File.expand_path(' 
     | 
| 
      
 8 
     | 
    
         
            +
            Kernel.autoload(:Marj, File.expand_path('marj_record.rb', __dir__))
         
     | 
    
        data/lib/marj_adapter.rb
    CHANGED
    
    
    
        data/lib/marj_config.rb
    CHANGED
    
    
| 
         @@ -2,14 +2,14 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require 'active_job'
         
     | 
| 
       4 
4 
     | 
    
         
             
            require 'active_record'
         
     | 
| 
       5 
     | 
    
         
            -
            require_relative ' 
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative 'marj_config'
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
            # Marj  
     | 
| 
      
 7 
     | 
    
         
            +
            # The Marj ActiveRecord model class.
         
     | 
| 
       8 
8 
     | 
    
         
             
            #
         
     | 
| 
       9 
9 
     | 
    
         
             
            # See https://github.com/nicholasdower/marj
         
     | 
| 
       10 
10 
     | 
    
         
             
            class Marj < ActiveRecord::Base
         
     | 
| 
       11 
11 
     | 
    
         
             
              # The Marj version.
         
     | 
| 
       12 
     | 
    
         
            -
              VERSION = '2.0. 
     | 
| 
      
 12 
     | 
    
         
            +
              VERSION = '2.0.1'
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
              # Executes the job associated with this record and returns the result.
         
     | 
| 
       15 
15 
     | 
    
         
             
              def execute
         
     | 
| 
         @@ -29,13 +29,9 @@ class Marj < ActiveRecord::Base 
     | 
|
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                  # ActiveJob::Base#deserialize expects dates to be strings rather than Time objects.
         
     | 
| 
       31 
31 
     | 
    
         
             
                  job_data = job_data.to_h { |k, v| [k, %w[enqueued_at scheduled_at].include?(k) ? v&.iso8601 : v] }
         
     | 
| 
       32 
     | 
    
         
            -
                  job.deserialize(job_data)
         
     | 
| 
       33 
32 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
                   
     | 
| 
       35 
     | 
    
         
            -
                  job.perform_now 
     | 
| 
       36 
     | 
    
         
            -
                    # If no error was raised, the job should either be destroyed (success) or updated (retryable failure).
         
     | 
| 
       37 
     | 
    
         
            -
                    raise "job #{job_id} not destroyed or updated" unless destroyed? || (executions == new_executions && !changed?)
         
     | 
| 
       38 
     | 
    
         
            -
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
                  job.deserialize(job_data)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  job.perform_now
         
     | 
| 
       39 
35 
     | 
    
         
             
                end
         
     | 
| 
       40 
36 
     | 
    
         
             
              end
         
     | 
| 
       41 
37 
     | 
    
         | 
| 
         @@ -106,6 +102,7 @@ class Marj < ActiveRecord::Base 
     | 
|
| 
       106 
102 
     | 
    
         
             
                job.singleton_class.after_perform { |_j| record.destroy! }
         
     | 
| 
       107 
103 
     | 
    
         
             
                job.singleton_class.after_discard { |_j, _exception| record.destroy! }
         
     | 
| 
       108 
104 
     | 
    
         
             
                job.singleton_class.instance_variable_set(:@__marj, record)
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
       109 
106 
     | 
    
         
             
                job
         
     | 
| 
       110 
107 
     | 
    
         
             
              end
         
     | 
| 
       111 
108 
     | 
    
         
             
              private_class_method :register_callbacks
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: marj
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 2.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.0.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Nick Dower
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2024-01- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2024-01-23 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: activejob
         
     | 
| 
         @@ -38,7 +38,8 @@ dependencies: 
     | 
|
| 
       38 
38 
     | 
    
         
             
                - - ">="
         
     | 
| 
       39 
39 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       40 
40 
     | 
    
         
             
                    version: '7.1'
         
     | 
| 
       41 
     | 
    
         
            -
            description: Minimal ActiveRecord 
     | 
| 
      
 41 
     | 
    
         
            +
            description: Marj (Minimal ActiveRecord Jobs) is the simplest database-backed ActiveJob
         
     | 
| 
      
 42 
     | 
    
         
            +
              queueing backend.
         
     | 
| 
       42 
43 
     | 
    
         
             
            email: nicholasdower@gmail.com
         
     | 
| 
       43 
44 
     | 
    
         
             
            executables: []
         
     | 
| 
       44 
45 
     | 
    
         
             
            extensions: []
         
     | 
| 
         @@ -46,17 +47,17 @@ extra_rdoc_files: [] 
     | 
|
| 
       46 
47 
     | 
    
         
             
            files:
         
     | 
| 
       47 
48 
     | 
    
         
             
            - LICENSE.txt
         
     | 
| 
       48 
49 
     | 
    
         
             
            - README.md
         
     | 
| 
       49 
     | 
    
         
            -
            - app/models/marj.rb
         
     | 
| 
       50 
50 
     | 
    
         
             
            - lib/marj.rb
         
     | 
| 
       51 
51 
     | 
    
         
             
            - lib/marj_adapter.rb
         
     | 
| 
       52 
52 
     | 
    
         
             
            - lib/marj_config.rb
         
     | 
| 
      
 53 
     | 
    
         
            +
            - lib/marj_record.rb
         
     | 
| 
       53 
54 
     | 
    
         
             
            homepage: https://github.com/nicholasdower/marj
         
     | 
| 
       54 
55 
     | 
    
         
             
            licenses:
         
     | 
| 
       55 
56 
     | 
    
         
             
            - MIT
         
     | 
| 
       56 
57 
     | 
    
         
             
            metadata:
         
     | 
| 
       57 
58 
     | 
    
         
             
              bug_tracker_uri: https://github.com/nicholasdower/marj/issues
         
     | 
| 
       58 
     | 
    
         
            -
              changelog_uri: https://github.com/nicholasdower/marj/releases/tag/v2.0. 
     | 
| 
       59 
     | 
    
         
            -
              documentation_uri: https://www.rubydoc.info/github/nicholasdower/marj/v2.0. 
     | 
| 
      
 59 
     | 
    
         
            +
              changelog_uri: https://github.com/nicholasdower/marj/releases/tag/v2.0.1
         
     | 
| 
      
 60 
     | 
    
         
            +
              documentation_uri: https://www.rubydoc.info/github/nicholasdower/marj/v2.0.1
         
     | 
| 
       60 
61 
     | 
    
         
             
              homepage_uri: https://github.com/nicholasdower/marj
         
     | 
| 
       61 
62 
     | 
    
         
             
              rubygems_mfa_required: 'true'
         
     | 
| 
       62 
63 
     | 
    
         
             
              source_code_uri: https://github.com/nicholasdower/marj
         
     | 
| 
         @@ -78,5 +79,5 @@ requirements: [] 
     | 
|
| 
       78 
79 
     | 
    
         
             
            rubygems_version: 3.5.3
         
     | 
| 
       79 
80 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       80 
81 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       81 
     | 
    
         
            -
            summary:  
     | 
| 
      
 82 
     | 
    
         
            +
            summary: Minimal ActiveRecord Jobs
         
     | 
| 
       82 
83 
     | 
    
         
             
            test_files: []
         
     |