batch_queue 1.0.0 → 1.1.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 +5 -5
- data/.github/workflows/ci.yml +18 -0
- data/.gitignore +1 -1
- data/CHANGELOG.md +9 -0
- data/Gemfile.lock +6 -5
- data/README.md +25 -1
- data/batch_queue.gemspec +2 -2
- data/lib/batch_queue/batch_queue.rb +14 -2
- data/lib/batch_queue/version.rb +1 -1
- metadata +13 -12
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: 3b0f824265dd97a0c9992e49bb276d1131a79851ee6392c477941aa2c34261f4
         | 
| 4 | 
            +
              data.tar.gz: 3f4067e301015ee56ba0263d8da5ef79b5b2a897bac6ffc863e14b31a5fdd4b9
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: eab99b1882c61b1ae01d68ece1680e055f5818e979869c6bd9f38e505f388e1768350468c8ac344326c5d7baf96968bd61bd3f74abaad144f3563f8c449e515d
         | 
| 7 | 
            +
              data.tar.gz: 5101491e33aca1f85e1d614ff6dabe3c825b68cc131164dbf4f4cc43074ee17aeb2868d26e62645aa6a617395e50a42d8834fe65d21274a690d0fab11bf7708f
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            name: CI
         | 
| 2 | 
            +
            on: [push, pull_request]
         | 
| 3 | 
            +
            jobs:
         | 
| 4 | 
            +
              test:
         | 
| 5 | 
            +
                strategy:
         | 
| 6 | 
            +
                  fail-fast: false
         | 
| 7 | 
            +
                  matrix:
         | 
| 8 | 
            +
                    os: [ubuntu-latest, macos-latest]
         | 
| 9 | 
            +
                    # Could consider adding head, jruby-head, jruby in the future
         | 
| 10 | 
            +
                    ruby: ['2.7', '3.0', '3.1', '3.2', '3.3', truffleruby, truffleruby-head]
         | 
| 11 | 
            +
                runs-on: ${{ matrix.os }}
         | 
| 12 | 
            +
                steps:
         | 
| 13 | 
            +
                  - uses: actions/checkout@v4
         | 
| 14 | 
            +
                  - uses: ruby/setup-ruby@v1
         | 
| 15 | 
            +
                    with:
         | 
| 16 | 
            +
                      ruby-version: ${{ matrix.ruby }}
         | 
| 17 | 
            +
                      bundler-cache: true # runs 'bundle install' and caches installed gems automatically
         | 
| 18 | 
            +
                  - run: bundle exec rake
         | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/CHANGELOG.md
    ADDED
    
    
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            PATH
         | 
| 2 2 | 
             
              remote: .
         | 
| 3 3 | 
             
              specs:
         | 
| 4 | 
            -
                batch_queue ( | 
| 4 | 
            +
                batch_queue (1.1.0)
         | 
| 5 5 |  | 
| 6 6 | 
             
            GEM
         | 
| 7 7 | 
             
              remote: https://rubygems.org/
         | 
| @@ -14,18 +14,19 @@ GEM | |
| 14 14 | 
             
                  builder
         | 
| 15 15 | 
             
                  minitest (>= 5.0)
         | 
| 16 16 | 
             
                  ruby-progressbar
         | 
| 17 | 
            -
                rake ( | 
| 17 | 
            +
                rake (13.0.1)
         | 
| 18 18 | 
             
                ruby-progressbar (1.10.0)
         | 
| 19 19 |  | 
| 20 20 | 
             
            PLATFORMS
         | 
| 21 21 | 
             
              ruby
         | 
| 22 | 
            +
              universal-darwin-24
         | 
| 22 23 |  | 
| 23 24 | 
             
            DEPENDENCIES
         | 
| 24 25 | 
             
              batch_queue!
         | 
| 25 | 
            -
              bundler (~>  | 
| 26 | 
            +
              bundler (~> 2.2)
         | 
| 26 27 | 
             
              minitest (~> 5.0)
         | 
| 27 28 | 
             
              minitest-reporters (~> 1.4)
         | 
| 28 | 
            -
              rake (~>  | 
| 29 | 
            +
              rake (~> 13.0)
         | 
| 29 30 |  | 
| 30 31 | 
             
            BUNDLED WITH
         | 
| 31 | 
            -
                | 
| 32 | 
            +
               2.3.26
         | 
    
        data/README.md
    CHANGED
    
    | @@ -2,7 +2,8 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            BatchQueue is queue that takes jobs and runs them, in aggregate, via a callback on a background thread.  You can process a “batch” of N jobs at a time or after T seconds whichever comes sooner.
         | 
| 4 4 |  | 
| 5 | 
            -
            Example | 
| 5 | 
            +
            ## Example
         | 
| 6 | 
            +
            You want to send metrics to Amazon’s AWS CloudWatch service every 60 seconds or when the batch size reaches 20, whichever comes first. You might write code like this:
         | 
| 6 7 |  | 
| 7 8 | 
             
            ```
         | 
| 8 9 | 
             
            # Create the AWS CloudWatch Client
         | 
| @@ -59,7 +60,30 @@ or | |
| 59 60 | 
             
            bq << MyJob.new(...)
         | 
| 60 61 |  | 
| 61 62 | 
             
            ```
         | 
| 63 | 
            +
            ### 3. Error handling
         | 
| 64 | 
            +
            You have two options for handling errors in `BatchQueue`:
         | 
| 62 65 |  | 
| 66 | 
            +
            * Rescue exceptions within the processing block:
         | 
| 67 | 
            +
             | 
| 68 | 
            +
              ```
         | 
| 69 | 
            +
              bq = BatchQueue.new(max_batch_size: 20, max_interval_seconds: 60) do |batch_metric_data|
         | 
| 70 | 
            +
                begin
         | 
| 71 | 
            +
                    # Put your code that you want to execute here.
         | 
| 72 | 
            +
                rescue => e
         | 
| 73 | 
            +
                    # Handle the exception here.
         | 
| 74 | 
            +
                end
         | 
| 75 | 
            +
              end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
              ```
         | 
| 78 | 
            +
             | 
| 79 | 
            +
            * Set a global error handler:
         | 
| 80 | 
            +
             | 
| 81 | 
            +
              ```
         | 
| 82 | 
            +
              bq.on_error = ->(e) { puts e.message }
         | 
| 83 | 
            +
              ```
         | 
| 84 | 
            +
             | 
| 85 | 
            +
            If neither method is used, `BatchQueue` will catch the exception and print it to 
         | 
| 86 | 
            +
            the standard console output.
         | 
| 63 87 |  | 
| 64 88 | 
             
            ## Development
         | 
| 65 89 |  | 
    
        data/batch_queue.gemspec
    CHANGED
    
    | @@ -23,8 +23,8 @@ Gem::Specification.new do |spec| | |
| 23 23 | 
             
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         | 
| 24 24 | 
             
              spec.require_paths = ["lib"]
         | 
| 25 25 |  | 
| 26 | 
            -
              spec.add_development_dependency "bundler", "~>  | 
| 27 | 
            -
              spec.add_development_dependency "rake", "~>  | 
| 26 | 
            +
              spec.add_development_dependency "bundler", "~> 2.2"
         | 
| 27 | 
            +
              spec.add_development_dependency "rake", "~> 13.0"
         | 
| 28 28 | 
             
              spec.add_development_dependency "minitest", "~> 5.0"
         | 
| 29 29 | 
             
              spec.add_development_dependency "minitest-reporters", '~> 1.4'
         | 
| 30 30 | 
             
            end
         | 
| @@ -1,4 +1,7 @@ | |
| 1 1 | 
             
            class BatchQueue
         | 
| 2 | 
            +
              attr_reader :max_batch_size
         | 
| 3 | 
            +
              attr_reader :max_interval_seconds
         | 
| 4 | 
            +
             | 
| 2 5 | 
             
              # starts the queue
         | 
| 3 6 | 
             
              # either max_batch_size or interval_milliseconds or both must be set
         | 
| 4 7 | 
             
              def initialize(max_batch_size: nil, max_interval_seconds: nil, &block)
         | 
| @@ -13,6 +16,7 @@ class BatchQueue | |
| 13 16 | 
             
                @mutex = Mutex.new
         | 
| 14 17 | 
             
                @cond_var = ConditionVariable.new
         | 
| 15 18 | 
             
                @runner = Thread.new { run }
         | 
| 19 | 
            +
                @on_error_callback = nil
         | 
| 16 20 |  | 
| 17 21 | 
             
                at_exit do
         | 
| 18 22 | 
             
                  stop
         | 
| @@ -44,6 +48,10 @@ class BatchQueue | |
| 44 48 | 
             
                @runner.join
         | 
| 45 49 | 
             
              end
         | 
| 46 50 |  | 
| 51 | 
            +
              def on_error(&block)
         | 
| 52 | 
            +
                @on_error_callback = block
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
             | 
| 47 55 | 
             
              private
         | 
| 48 56 |  | 
| 49 57 | 
             
              def run
         | 
| @@ -81,8 +89,12 @@ class BatchQueue | |
| 81 89 | 
             
                @mutex.unlock
         | 
| 82 90 | 
             
                begin
         | 
| 83 91 | 
             
                  @block.call(arr)
         | 
| 84 | 
            -
                rescue StandardError =>  | 
| 85 | 
            -
                   | 
| 92 | 
            +
                rescue StandardError => e
         | 
| 93 | 
            +
                  if @on_error_callback
         | 
| 94 | 
            +
                    @on_error_callback.call(e)
         | 
| 95 | 
            +
                  else
         | 
| 96 | 
            +
                    puts "BatchQueue: Unhandled exception #{exc.inspect}"
         | 
| 97 | 
            +
                  end
         | 
| 86 98 | 
             
                ensure
         | 
| 87 99 | 
             
                  @mutex.lock
         | 
| 88 100 | 
             
                end
         | 
    
        data/lib/batch_queue/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: batch_queue
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.1.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Felix Livni
         | 
| 8 | 
            -
            autorequire: | 
| 8 | 
            +
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2024-11-04 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -16,28 +16,28 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - "~>"
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: ' | 
| 19 | 
            +
                    version: '2.2'
         | 
| 20 20 | 
             
              type: :development
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - "~>"
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: ' | 
| 26 | 
            +
                    version: '2.2'
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: rake
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - "~>"
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: ' | 
| 33 | 
            +
                    version: '13.0'
         | 
| 34 34 | 
             
              type: :development
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 38 | 
             
                - - "~>"
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: ' | 
| 40 | 
            +
                    version: '13.0'
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 42 | 
             
              name: minitest
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -66,15 +66,17 @@ dependencies: | |
| 66 66 | 
             
                - - "~>"
         | 
| 67 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 68 | 
             
                    version: '1.4'
         | 
| 69 | 
            -
            description: | 
| 69 | 
            +
            description:
         | 
| 70 70 | 
             
            email:
         | 
| 71 71 | 
             
            - flivni@gmail.com
         | 
| 72 72 | 
             
            executables: []
         | 
| 73 73 | 
             
            extensions: []
         | 
| 74 74 | 
             
            extra_rdoc_files: []
         | 
| 75 75 | 
             
            files:
         | 
| 76 | 
            +
            - ".github/workflows/ci.yml"
         | 
| 76 77 | 
             
            - ".gitignore"
         | 
| 77 78 | 
             
            - ".travis.yml"
         | 
| 79 | 
            +
            - CHANGELOG.md
         | 
| 78 80 | 
             
            - Gemfile
         | 
| 79 81 | 
             
            - Gemfile.lock
         | 
| 80 82 | 
             
            - LICENSE.txt
         | 
| @@ -90,7 +92,7 @@ homepage: https://github.com/flivni/batch_queue | |
| 90 92 | 
             
            licenses:
         | 
| 91 93 | 
             
            - MIT
         | 
| 92 94 | 
             
            metadata: {}
         | 
| 93 | 
            -
            post_install_message: | 
| 95 | 
            +
            post_install_message:
         | 
| 94 96 | 
             
            rdoc_options: []
         | 
| 95 97 | 
             
            require_paths:
         | 
| 96 98 | 
             
            - lib
         | 
| @@ -105,9 +107,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 105 107 | 
             
                - !ruby/object:Gem::Version
         | 
| 106 108 | 
             
                  version: '0'
         | 
| 107 109 | 
             
            requirements: []
         | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 110 | 
            -
            signing_key: 
         | 
| 110 | 
            +
            rubygems_version: 3.3.27
         | 
| 111 | 
            +
            signing_key:
         | 
| 111 112 | 
             
            specification_version: 4
         | 
| 112 113 | 
             
            summary: An in-memory queue that takes data and allows you to process it, in batches,
         | 
| 113 114 | 
             
              on a background thread.
         |