redis-lockex 0.0.3

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6a80789c1ae6a8abf9817ba63e2a12d5f8372d4f
4
+ data.tar.gz: 281edf6a81fad1f1cc853d8fcdca4afb6c729a4b
5
+ SHA512:
6
+ metadata.gz: cae679ca497fcc705dea7535c15cc1932ac83440c479cefec2a3f9577bac7fcd343688c735314c22d80fb0e601540eb978a603e3b1b348f291f0a00e8e133243
7
+ data.tar.gz: ada52bd74ae705d3bce55defdbd875485a4781725feedb8a995091a2c35c8995a6c69bb42995b7c395c4407a3c887c42008ec1422b03967b144a925eee2b79dc
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ /*.gem
2
+ /tmp
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.2.0
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,43 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ redis-lockex (0.0.3)
5
+ activesupport (>= 4)
6
+ redis
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activesupport (4.2.0)
12
+ i18n (~> 0.7)
13
+ json (~> 1.7, >= 1.7.7)
14
+ minitest (~> 5.1)
15
+ thread_safe (~> 0.3, >= 0.3.4)
16
+ tzinfo (~> 1.1)
17
+ diff-lcs (1.2.5)
18
+ i18n (0.7.0)
19
+ json (1.8.2)
20
+ minitest (5.7.0)
21
+ redis (3.2.1)
22
+ rspec (3.1.0)
23
+ rspec-core (~> 3.1.0)
24
+ rspec-expectations (~> 3.1.0)
25
+ rspec-mocks (~> 3.1.0)
26
+ rspec-core (3.1.7)
27
+ rspec-support (~> 3.1.0)
28
+ rspec-expectations (3.1.2)
29
+ diff-lcs (>= 1.2.0, < 2.0)
30
+ rspec-support (~> 3.1.0)
31
+ rspec-mocks (3.1.3)
32
+ rspec-support (~> 3.1.0)
33
+ rspec-support (3.1.2)
34
+ thread_safe (0.3.5)
35
+ tzinfo (1.2.2)
36
+ thread_safe (~> 0.1)
37
+
38
+ PLATFORMS
39
+ ruby
40
+
41
+ DEPENDENCIES
42
+ redis-lockex!
43
+ rspec
data/README.md ADDED
File without changes
data/bin/push ADDED
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+
5
+ def version_numbers(version)
6
+ ver_nums = version.split('.').map(&:to_i)
7
+ fail 'Invalid version format!' unless ver_nums.length == 3
8
+ ver_nums
9
+ end
10
+
11
+ def later_version!(ver_nums1, ver_nums2)
12
+ ver_nums1 = version_numbers(ver_nums1) if ver_nums1.is_a?(String)
13
+ ver_nums2 = version_numbers(ver_nums2) if ver_nums2.is_a?(String)
14
+ [ver_nums1, ver_nums2].transpose.each do |ver_num1, ver_num2|
15
+ return if ver_num1 > ver_num2
16
+ fail 'Not later version!' if ver_num1 < ver_num2
17
+ end
18
+ fail 'Not later version!'
19
+ end
20
+
21
+ path = File.expand_path('../..', __FILE__)
22
+
23
+ specified_ver_nums = version_numbers(ARGV[0]) if ARGV.length > 0
24
+ current_ver = `cat redis-lockex.gemspec | grep 'version =' | awk '{ print $3 }'`.strip.gsub("'", '')
25
+ current_ver_nums = version_numbers(current_ver)
26
+ specified_ver_nums ||=
27
+ begin
28
+ r = current_ver_nums.dup
29
+ r[2] = r[2] + 1
30
+ r
31
+ end
32
+
33
+ later_version!(specified_ver_nums, current_ver_nums)
34
+
35
+ new_ver = specified_ver_nums.join('.')
36
+ `sed -i -e 's/version = '"'"'#{current_ver}'"'"'/version = '"'"'#{new_ver}'"'"'/g' #{path}/*.gemspec`
37
+ `bundle install`
38
+ `git add --all`
39
+ `git commit -m 'version #{new_ver}'`
40
+ `git push origin master`
41
+ `git tag #{new_ver}`
42
+ `git push origin #{new_ver}`
43
+ `gem build redis-lockex.gemspec`
44
+ puts `gem push redis-lockex-#{new_ver}.gem 2>&1`
data/lib/initialize.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'active_support/all'
5
+ require 'redis'
6
+
7
+ ActiveSupport::Dependencies.autoload_paths << File.expand_path('../../lib', __FILE__)
@@ -0,0 +1,55 @@
1
+ require_relative 'initialize'
2
+
3
+ class Redis
4
+ def lock(options, &proc)
5
+ key = options.is_a?(String) ? options : extract_option(options, :key)
6
+ interval = extract_option(options, :interval, 1)
7
+ block = extract_option(options, :block, true)
8
+ proc ||= extract_option(options, :proc)
9
+ locked = extract_option(options, :locked, -> {})
10
+ unlocked = extract_option(options, :unlocked, -> {})
11
+ expire = extract_option(options, :expire, nil)
12
+ k = lock_key(key)
13
+ if block
14
+ sleep(interval) until lock_core(k, expire)
15
+ else
16
+ unless lock_core(k, expire)
17
+ return false
18
+ end
19
+ end
20
+ locked.call
21
+ if proc
22
+ begin
23
+ proc.call
24
+ ensure
25
+ unlock(key)
26
+ unlocked.call
27
+ end
28
+ else
29
+ key
30
+ end
31
+ end
32
+
33
+ def unlock(key)
34
+ k = lock_key(key)
35
+ del(k)
36
+ end
37
+
38
+ private
39
+
40
+ def lock_key(key)
41
+ "lock:#{key}"
42
+ end
43
+
44
+ def lock_core(key, expire)
45
+ set(key, '', nx: true, ex: expire)
46
+ end
47
+
48
+ def extract_option(options, key, default = nil)
49
+ if options.is_a?(Hash) && options.key?(key)
50
+ options.delete(key)
51
+ else
52
+ default
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,14 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'redis-lockex'
3
+ s.version = '0.0.3'
4
+ s.authors = ['Tetsuri Moriya']
5
+ s.email = ['tetsuri.moriya@gmail.com']
6
+ s.summary = 'Redis lock extension'
7
+ s.description = 'Redis lock extension with various options'
8
+ s.homepage = 'https://github.com/pandora2000/redis-lockex'
9
+ s.license = 'MIT'
10
+ s.files = `git ls-files`.split("\n")
11
+ s.add_development_dependency 'rspec', '>= 0'
12
+ s.add_runtime_dependency 'redis', '>= 0'
13
+ s.add_runtime_dependency 'activesupport', '>= 4'
14
+ end
@@ -0,0 +1 @@
1
+ require 'spec_helper'
@@ -0,0 +1,4 @@
1
+ require 'bundler/setup'
2
+ Bundler.require
3
+
4
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: redis-lockex
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Tetsuri Moriya
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: redis
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '4'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '4'
55
+ description: Redis lock extension with various options
56
+ email:
57
+ - tetsuri.moriya@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".ruby-version"
64
+ - Gemfile
65
+ - Gemfile.lock
66
+ - README.md
67
+ - bin/push
68
+ - lib/initialize.rb
69
+ - lib/redis-lockex.rb
70
+ - redis-lockex.gemspec
71
+ - spec/redis_lockex_spec.rb
72
+ - spec/spec_helper.rb
73
+ homepage: https://github.com/pandora2000/redis-lockex
74
+ licenses:
75
+ - MIT
76
+ metadata: {}
77
+ post_install_message:
78
+ rdoc_options: []
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubyforge_project:
93
+ rubygems_version: 2.4.5
94
+ signing_key:
95
+ specification_version: 4
96
+ summary: Redis lock extension
97
+ test_files: []