suo 0.3.4 → 0.4.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 +4 -4
- data/.github/workflows/CI.yml +38 -0
- data/CHANGELOG.md +7 -0
- data/lib/suo/client/base.rb +2 -2
- data/lib/suo/client/redis.rb +19 -11
- data/lib/suo/version.rb +1 -1
- data/suo.gemspec +2 -2
- metadata +11 -11
- data/.travis.yml +0 -9
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 76af80589128e43f0f5b0664f6604f657dd6735df18e18bf6134e49aae2656cb
         | 
| 4 | 
            +
              data.tar.gz: '0982702d597aa9d91da01f3921cabfdbdceb2e2e61961c4c7d5e2438d76883db'
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 1ce36f6537803bdd00962f79e8774b779afdd91546c6b5b7fc090372d7d2bdc0c9e00b34863a1fbbb9d8f5aa2a240af6907f96ff3a415304709132e19f084be3
         | 
| 7 | 
            +
              data.tar.gz: 3b8324c772750b34cc5d3268573d10abdce23e2026000f35117f894673e2616f5c3dc2c41d627978ae848072e20e2072c70183b81161bba884b69d61473e8ef2
         | 
| @@ -0,0 +1,38 @@ | |
| 1 | 
            +
            name: CI
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            on:
         | 
| 4 | 
            +
              push:
         | 
| 5 | 
            +
                branches:
         | 
| 6 | 
            +
                  - master
         | 
| 7 | 
            +
              pull_request:
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            jobs:
         | 
| 10 | 
            +
              build:
         | 
| 11 | 
            +
                runs-on: ubuntu-latest
         | 
| 12 | 
            +
                strategy:
         | 
| 13 | 
            +
                  fail-fast: false
         | 
| 14 | 
            +
                  matrix:
         | 
| 15 | 
            +
                    ruby:
         | 
| 16 | 
            +
                      - '2.5'
         | 
| 17 | 
            +
                      - '2.6'
         | 
| 18 | 
            +
                      - '2.7'
         | 
| 19 | 
            +
                      - '3.0'
         | 
| 20 | 
            +
                      - ruby-head
         | 
| 21 | 
            +
                continue-on-error: ${{ matrix.ruby == 'ruby-head' }}
         | 
| 22 | 
            +
                services:
         | 
| 23 | 
            +
                  memcached:
         | 
| 24 | 
            +
                    image: memcached
         | 
| 25 | 
            +
                    ports:
         | 
| 26 | 
            +
                      - 11211:11211
         | 
| 27 | 
            +
                  redis:
         | 
| 28 | 
            +
                    image: redis
         | 
| 29 | 
            +
                    ports:
         | 
| 30 | 
            +
                      - 6379:6379
         | 
| 31 | 
            +
                steps:
         | 
| 32 | 
            +
                  - uses: actions/checkout@v2
         | 
| 33 | 
            +
                  - uses: ruby/setup-ruby@v1
         | 
| 34 | 
            +
                    with:
         | 
| 35 | 
            +
                      ruby-version: ${{ matrix.ruby }}
         | 
| 36 | 
            +
                      bundler-cache: true
         | 
| 37 | 
            +
                  - run: |
         | 
| 38 | 
            +
                      bundle exec rake
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,3 +1,10 @@ | |
| 1 | 
            +
            ## 0.4.0
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            - Monotonic clock for locks, avoiding issues with DST (thanks @doits)
         | 
| 4 | 
            +
            - Pooled connection support (thanks @mlarraz)
         | 
| 5 | 
            +
            - Switch to Github actions for tests (thanks @mlarraz)
         | 
| 6 | 
            +
            - Update supported Ruby versions (thanks @mlarraz & @pat)
         | 
| 7 | 
            +
             | 
| 1 8 | 
             
            ## 0.3.4
         | 
| 2 9 |  | 
| 3 10 | 
             
            - Support for connection pooling when using memcached locks, via `with` blocks using Dalli (thanks to Lev).
         | 
    
        data/lib/suo/client/base.rb
    CHANGED
    
    | @@ -132,10 +132,10 @@ module Suo | |
| 132 132 | 
             
                  end
         | 
| 133 133 |  | 
| 134 134 | 
             
                  def retry_with_timeout
         | 
| 135 | 
            -
                    start =  | 
| 135 | 
            +
                    start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
         | 
| 136 136 |  | 
| 137 137 | 
             
                    retry_count.times do
         | 
| 138 | 
            -
                      elapsed =  | 
| 138 | 
            +
                      elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
         | 
| 139 139 | 
             
                      break if elapsed >= options[:acquisition_timeout]
         | 
| 140 140 |  | 
| 141 141 | 
             
                      synchronize do
         | 
    
        data/lib/suo/client/redis.rb
    CHANGED
    
    | @@ -9,21 +9,31 @@ module Suo | |
| 9 9 | 
             
                  end
         | 
| 10 10 |  | 
| 11 11 | 
             
                  def clear
         | 
| 12 | 
            -
                     | 
| 12 | 
            +
                    with { |r| r.del(@key) }
         | 
| 13 13 | 
             
                  end
         | 
| 14 14 |  | 
| 15 15 | 
             
                  private
         | 
| 16 16 |  | 
| 17 | 
            +
                  def with(&block)
         | 
| 18 | 
            +
                    if @client.respond_to?(:with)
         | 
| 19 | 
            +
                      @client.with(&block)
         | 
| 20 | 
            +
                    else
         | 
| 21 | 
            +
                      yield @client
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 17 25 | 
             
                  def get
         | 
| 18 | 
            -
                    [ | 
| 26 | 
            +
                    [with { |r| r.get(@key) }, nil]
         | 
| 19 27 | 
             
                  end
         | 
| 20 28 |  | 
| 21 29 | 
             
                  def set(newval, _, expire: false)
         | 
| 22 | 
            -
                    ret =  | 
| 23 | 
            -
                       | 
| 24 | 
            -
                         | 
| 25 | 
            -
             | 
| 26 | 
            -
                         | 
| 30 | 
            +
                    ret = with do |r|
         | 
| 31 | 
            +
                      r.multi do |rr|
         | 
| 32 | 
            +
                        if expire
         | 
| 33 | 
            +
                          rr.setex(@key, @options[:ttl], newval)
         | 
| 34 | 
            +
                        else
         | 
| 35 | 
            +
                          rr.set(@key, newval)
         | 
| 36 | 
            +
                        end
         | 
| 27 37 | 
             
                      end
         | 
| 28 38 | 
             
                    end
         | 
| 29 39 |  | 
| @@ -31,11 +41,9 @@ module Suo | |
| 31 41 | 
             
                  end
         | 
| 32 42 |  | 
| 33 43 | 
             
                  def synchronize
         | 
| 34 | 
            -
                     | 
| 35 | 
            -
                      yield
         | 
| 36 | 
            -
                    end
         | 
| 44 | 
            +
                    with { |r| r.watch(@key) { yield } }
         | 
| 37 45 | 
             
                  ensure
         | 
| 38 | 
            -
                     | 
| 46 | 
            +
                    with { |r| r.unwatch }
         | 
| 39 47 | 
             
                  end
         | 
| 40 48 |  | 
| 41 49 | 
             
                  def initial_set(val = BLANK_STR)
         | 
    
        data/lib/suo/version.rb
    CHANGED
    
    
    
        data/suo.gemspec
    CHANGED
    
    | @@ -19,14 +19,14 @@ Gem::Specification.new do |spec| | |
| 19 19 | 
             
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         | 
| 20 20 | 
             
              spec.require_paths = ["lib"]
         | 
| 21 21 |  | 
| 22 | 
            -
              spec.required_ruby_version = " | 
| 22 | 
            +
              spec.required_ruby_version = ">= 2.5"
         | 
| 23 23 |  | 
| 24 24 | 
             
              spec.add_dependency "dalli"
         | 
| 25 25 | 
             
              spec.add_dependency "redis"
         | 
| 26 26 | 
             
              spec.add_dependency "msgpack"
         | 
| 27 27 |  | 
| 28 28 | 
             
              spec.add_development_dependency "bundler"
         | 
| 29 | 
            -
              spec.add_development_dependency "rake", "~>  | 
| 29 | 
            +
              spec.add_development_dependency "rake", "~> 13.0"
         | 
| 30 30 | 
             
              spec.add_development_dependency "rubocop", "~> 0.49.0"
         | 
| 31 31 | 
             
              spec.add_development_dependency "minitest", "~> 5.5.0"
         | 
| 32 32 | 
             
              spec.add_development_dependency "codeclimate-test-reporter", "~> 0.4.7"
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: suo
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.4.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Nick Elser
         | 
| 8 | 
            -
            autorequire: | 
| 8 | 
            +
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2021-01-21 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: dalli
         | 
| @@ -72,14 +72,14 @@ dependencies: | |
| 72 72 | 
             
                requirements:
         | 
| 73 73 | 
             
                - - "~>"
         | 
| 74 74 | 
             
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            -
                    version: ' | 
| 75 | 
            +
                    version: '13.0'
         | 
| 76 76 | 
             
              type: :development
         | 
| 77 77 | 
             
              prerelease: false
         | 
| 78 78 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 79 | 
             
                requirements:
         | 
| 80 80 | 
             
                - - "~>"
         | 
| 81 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            -
                    version: ' | 
| 82 | 
            +
                    version: '13.0'
         | 
| 83 83 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 84 84 | 
             
              name: rubocop
         | 
| 85 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -129,9 +129,9 @@ executables: [] | |
| 129 129 | 
             
            extensions: []
         | 
| 130 130 | 
             
            extra_rdoc_files: []
         | 
| 131 131 | 
             
            files:
         | 
| 132 | 
            +
            - ".github/workflows/CI.yml"
         | 
| 132 133 | 
             
            - ".gitignore"
         | 
| 133 134 | 
             
            - ".rubocop.yml"
         | 
| 134 | 
            -
            - ".travis.yml"
         | 
| 135 135 | 
             
            - CHANGELOG.md
         | 
| 136 136 | 
             
            - Gemfile
         | 
| 137 137 | 
             
            - LICENSE.txt
         | 
| @@ -152,23 +152,23 @@ homepage: https://github.com/nickelser/suo | |
| 152 152 | 
             
            licenses:
         | 
| 153 153 | 
             
            - MIT
         | 
| 154 154 | 
             
            metadata: {}
         | 
| 155 | 
            -
            post_install_message: | 
| 155 | 
            +
            post_install_message:
         | 
| 156 156 | 
             
            rdoc_options: []
         | 
| 157 157 | 
             
            require_paths:
         | 
| 158 158 | 
             
            - lib
         | 
| 159 159 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 160 160 | 
             
              requirements:
         | 
| 161 | 
            -
              - - " | 
| 161 | 
            +
              - - ">="
         | 
| 162 162 | 
             
                - !ruby/object:Gem::Version
         | 
| 163 | 
            -
                  version: '2. | 
| 163 | 
            +
                  version: '2.5'
         | 
| 164 164 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 165 165 | 
             
              requirements:
         | 
| 166 166 | 
             
              - - ">="
         | 
| 167 167 | 
             
                - !ruby/object:Gem::Version
         | 
| 168 168 | 
             
                  version: '0'
         | 
| 169 169 | 
             
            requirements: []
         | 
| 170 | 
            -
            rubygems_version: 3. | 
| 171 | 
            -
            signing_key: | 
| 170 | 
            +
            rubygems_version: 3.1.2
         | 
| 171 | 
            +
            signing_key:
         | 
| 172 172 | 
             
            specification_version: 4
         | 
| 173 173 | 
             
            summary: Distributed locks (mutexes & semaphores) using Memcached or Redis.
         | 
| 174 174 | 
             
            test_files:
         |