race_block 0.2.2 → 0.3.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: fabe01c4bff14ed3b474f4ebdefed580c6e99882ff1109f6039cb3455de624a9
4
- data.tar.gz: bb1476d977667ab35fba7614b3ba4f5fce3d7d7c3cfd4ceeebf15d4301a09a86
3
+ metadata.gz: 6891e1559d3458e5ce722b5d5c384fc9820fd0c7ea6fddf9a24a51e515fa6e96
4
+ data.tar.gz: 956a5414c1a69d3c55f5d7e8ccf6ce885f766544736dc92a26b8d4f1ce967ccb
5
5
  SHA512:
6
- metadata.gz: 6f05edc168a9e77c0200b898592f2bc1d1c44830deb23de29bd0c7d386d95f4426a7851590351c12b0e8b00a449f16bba1bd2313e65f249a72b8ce1e41a9fde8
7
- data.tar.gz: 62e7a5934630e63e267f01116ef649072450e2d3938e80215b17298b3569c456bd26f2508a5f0e19925b05c28af7d569b96e8ce3541ec580811debaad2d9fb5c
6
+ metadata.gz: 0f263d2351ec39423095fe1a4885fb6b0f80b1fd6a4792ff8ee5174af67fc16562c65ba0a8350cb82f2ec9e07121b409e2e40e3f3dd44ca076f3cb77e6fb8b01
7
+ data.tar.gz: 53c25dfa16723901211c7bae027497a20f009404cfe96ac8bcae6f837f1e6a23c99d3c3dda0d5b67173bb4b8d8f771861da5096f80ba0e4e80e122148e2fbeba
data/.deepsource.toml ADDED
@@ -0,0 +1,9 @@
1
+ version = 1
2
+
3
+ [[analyzers]]
4
+ name = "shell"
5
+ enabled = true
6
+
7
+ [[analyzers]]
8
+ name = "ruby"
9
+ enabled = true
data/.rubocop_todo.yml CHANGED
@@ -15,4 +15,4 @@ Metrics/AbcSize:
15
15
  # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
16
16
  # IgnoredMethods: refine
17
17
  Metrics/BlockLength:
18
- Max: 91
18
+ Max: 103
data/README.md CHANGED
@@ -62,7 +62,7 @@ RaceBlock.config.redis = Redis.new
62
62
  Any code that you want to be "thread-safe" and ensure is only executing in one location should be placed in a `RaceBlock` with a unique identifying key that will be checked across all instances.
63
63
 
64
64
  ```ruby
65
- RaceBlock.start('unique_key', {}) do
65
+ RaceBlock.start('unique_key', **kwargs) do
66
66
  # Insert code that should only be executed once at a time here...
67
67
  end
68
68
  ```
@@ -97,6 +97,16 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
97
97
 
98
98
  Bug reports and pull requests are welcome on GitHub at https://github.com/joeyparis/race_block. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/joeyparis/race_block/blob/master/CODE_OF_CONDUCT.md).
99
99
 
100
+ I am also interested in porting this project to multiple languages and would love help in the languages I am less familiar with.
101
+
102
+ - [x] Ruby
103
+ - [ ] JavaScript
104
+ - [ ] Python
105
+ - [ ] Go
106
+ - [ ] LolCode
107
+ - [ ] ..?
108
+
109
+
100
110
  ## License
101
111
 
102
112
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RaceBlock
4
- VERSION = "0.2.2"
4
+ VERSION = "0.3.0"
5
5
  end
data/lib/race_block.rb CHANGED
@@ -50,35 +50,30 @@ module RaceBlock
50
50
  RaceBlock.client.del(RaceBlock.key(key))
51
51
  end
52
52
 
53
- def self.start(key, expire: config.expire, expiration_delay: config.expiration_delay, **args)
54
- raise("A Redis client must be added to the RaceBlock configuration") unless configuration.redis
55
- raise("A key must be provided to start a RaceBlock") if key.empty?
53
+ def self.start(base_key, expire: config.expire, expiration_delay: config.expiration_delay, **args)
54
+ raise("A key must be provided to start a RaceBlock") if base_key.empty?
56
55
 
57
- @key = RaceBlock.key(key)
56
+ key = RaceBlock.key(base_key)
58
57
 
59
58
  # Set an expiration for the token if the key is defined but doesn't
60
59
  # have an expiration set (happens sometimes if a thread dies early).
61
60
  # `-1` means the key is set but does not expire, `-2` means the key is
62
61
  # not set
63
- RaceBlock.client.expire(@key, 10) if RaceBlock.client.ttl(@key) == -1
62
+ RaceBlock.client.expire(key, 10) if RaceBlock.client.ttl(key) == -1
64
63
 
65
64
  # Token already exists
66
- # todo: Revoke version 0.2.1 because it always return nil no matter what (never committed but released because I'm not a smart man)
67
- if RaceBlock.client.get(@key)
68
- logger.debug("Token already exists")
69
- return
70
- end
65
+ return logger.debug("Token already exists") if RaceBlock.client.get(key)
71
66
 
72
- return unless set_token_and_wait(@key, **args)
67
+ return unless set_token_and_wait(key, **args)
73
68
 
74
- RaceBlock.client.expire(@key, expire)
69
+ RaceBlock.client.expire(key, expire)
75
70
  logger.debug("Running block")
76
71
 
77
72
  r = yield
78
73
 
79
74
  # I have lots of internal debates on whether I should full
80
75
  # delete the key here or still let it sit for a few seconds
81
- RaceBlock.client.expire(@key, expiration_delay)
76
+ RaceBlock.client.expire(key, expiration_delay)
82
77
 
83
78
  r
84
79
  end
@@ -101,7 +96,7 @@ module RaceBlock
101
96
  # moment, and I also believe this is what is keep the EmailQueue
102
97
  # stable which seems to have no duplicate sending problems.
103
98
 
104
- return true if RaceBlock.client.get(@key) == token
99
+ return true if RaceBlock.client.get(key) == token
105
100
 
106
101
  # Token out of sync
107
102
  logger.debug("Token out of sync")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: race_block
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joey Paris
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-08 00:00:00.000000000 Z
11
+ date: 2022-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -94,7 +94,7 @@ dependencies:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
96
  version: 0.2.0
97
- description:
97
+ description:
98
98
  email:
99
99
  - joey@leadjig.com
100
100
  executables: []
@@ -102,6 +102,7 @@ extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
104
  - ".actrc"
105
+ - ".deepsource.toml"
105
106
  - ".github/workflows/main.yml"
106
107
  - ".gitignore"
107
108
  - ".rspec"
@@ -123,7 +124,7 @@ licenses:
123
124
  metadata:
124
125
  homepage_uri: https://rubygems.org/gems/race_block
125
126
  source_code_uri: https://github.com/joeyparis/race_block
126
- post_install_message:
127
+ post_install_message:
127
128
  rdoc_options: []
128
129
  require_paths:
129
130
  - lib
@@ -138,8 +139,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
139
  - !ruby/object:Gem::Version
139
140
  version: '0'
140
141
  requirements: []
141
- rubygems_version: 3.1.6
142
- signing_key:
142
+ rubygems_version: 3.2.3
143
+ signing_key:
143
144
  specification_version: 4
144
145
  summary: A Ruby code block wrapper to help prevent race conditions across multiple
145
146
  threads and even separate servers.