sequel-pg-locker 0.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.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
data/README.md ADDED
@@ -0,0 +1,27 @@
1
+ # sequel-pg-locker
2
+
3
+ ![](https://github.com/dylanegan/sequel-pg-locker/raw/master/sequel-pg-locker.jpg)
4
+
5
+ A simple way, using PostgreSQL, to has [semaphores](http://en.wikipedia.org/wiki/Semaphore_(programming)).
6
+
7
+ ## Usage
8
+
9
+ ```ruby
10
+ ➜ sequel-pg-locker git:(master) ✗ irb
11
+ 1.9.3-p0 :001 > require 'sequel-pg-locker'
12
+ => true
13
+ 1.9.3-p0 :002 > ENV['DATABASE_URL'] = 'postgres://localhost/sequel_pg_locker_test'
14
+ => "postgres://localhost/sequel_pg_locker_test"
15
+ 1.9.3-p0 :003 > Sequel::PG::Locker.lock(12345)
16
+ => true
17
+
18
+ ➜ sequel-pg-locker git:(master) ✗ irb
19
+ 1.9.3-p0 :001 > require 'sequel-pg-locker'
20
+ => true
21
+ 1.9.3-p0 :002 > ENV['DATABASE_URL'] = 'postgres://localhost/sequel_pg_locker_test'
22
+ => "postgres://localhost/sequel_pg_locker_test"
23
+ 1.9.3-p0 :003 > Sequel::PG::Locker.lock(12345)
24
+ => false
25
+ 1.9.3-p0 :004 > Sequel::PG::Locker.lock(12346)
26
+ => true
27
+ ```
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs.push "lib"
7
+ t.libs.push "spec"
8
+ t.test_files = FileList['spec/**/*_spec.rb']
9
+ t.verbose = true
10
+ end
@@ -0,0 +1,7 @@
1
+ module Sequel
2
+ module Pg
3
+ module Locker
4
+ VERSION = "0.1.0"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,22 @@
1
+ require "sequel"
2
+ require "timeout"
3
+ require "sequel-pg-locker/version"
4
+
5
+ module Sequel
6
+ module PG
7
+ module Locker
8
+ def self.lock(id)
9
+ Timeout.timeout(3) { connection["SELECT pg_try_advisory_lock(#{id})"].get }
10
+ end
11
+
12
+ private
13
+
14
+ def self.connection
15
+ @connection ||= Sequel.connect(ENV['DATABASE_URL'], encoding: "unicode") do |conn|
16
+ conn.run("SET synchronous_commit TO 'off'")
17
+ conn
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/sequel-pg-locker/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Mark Fine", "Dylan Egan"]
6
+ gem.email = ["mark.fine@gmail.com", "dylanegan@gmail.com"]
7
+ gem.description = %q{Simple way to grab a lock using PostgreSQL.}
8
+ gem.summary = %q{Simple lock PostgreSQL.}
9
+ gem.homepage = "https://github.com/dylanegan/sequel-pg-locker"
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "sequel-pg-locker"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Sequel::Pg::Locker::VERSION
17
+
18
+ gem.add_development_dependency "minitest", "~> 2.12"
19
+ gem.add_development_dependency "rake", "~> 0.9"
20
+
21
+ gem.add_runtime_dependency "pg", "~> 0.13"
22
+ gem.add_runtime_dependency "sequel", "~> 3.34"
23
+ end
Binary file
Binary file
@@ -0,0 +1,28 @@
1
+ require 'minitest/autorun'
2
+
3
+ require "sequel-pg-locker"
4
+
5
+ LOCK_ID = rand(1_000_000)
6
+
7
+ describe Sequel::PG::Locker do
8
+ subject { Sequel::PG::Locker }
9
+
10
+ before do
11
+ ENV['DATABASE_URL'] = "postgres://localhost/sequel_pg_locker_test"
12
+ end
13
+
14
+ describe ".lock" do
15
+ before do
16
+ subject.instance_variable_set(:@connection, nil)
17
+ end
18
+
19
+ it "should provide a lock" do
20
+ assert subject.lock(LOCK_ID)
21
+ end
22
+
23
+ it "should not allow further locking" do
24
+ subject.lock(LOCK_ID)
25
+ assert !subject.lock(LOCK_ID)
26
+ end
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sequel-pg-locker
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Mark Fine
9
+ - Dylan Egan
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-04-17 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: minitest
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: '2.12'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: '2.12'
31
+ - !ruby/object:Gem::Dependency
32
+ name: rake
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: '0.9'
39
+ type: :development
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: '0.9'
47
+ - !ruby/object:Gem::Dependency
48
+ name: pg
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.13'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: '0.13'
63
+ - !ruby/object:Gem::Dependency
64
+ name: sequel
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ version: '3.34'
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ version: '3.34'
79
+ description: Simple way to grab a lock using PostgreSQL.
80
+ email:
81
+ - mark.fine@gmail.com
82
+ - dylanegan@gmail.com
83
+ executables: []
84
+ extensions: []
85
+ extra_rdoc_files: []
86
+ files:
87
+ - .gitignore
88
+ - Gemfile
89
+ - README.md
90
+ - Rakefile
91
+ - lib/sequel-pg-locker.rb
92
+ - lib/sequel-pg-locker/version.rb
93
+ - sequel-pg-locker.gemspec
94
+ - sequel-pg-locker.jpg
95
+ - spec/.sequel-pg-locker_test.rb.swp
96
+ - spec/sequel-pg-locker_spec.rb
97
+ homepage: https://github.com/dylanegan/sequel-pg-locker
98
+ licenses: []
99
+ post_install_message:
100
+ rdoc_options: []
101
+ require_paths:
102
+ - lib
103
+ required_ruby_version: !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ! '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ requirements: []
116
+ rubyforge_project:
117
+ rubygems_version: 1.8.21
118
+ signing_key:
119
+ specification_version: 3
120
+ summary: Simple lock PostgreSQL.
121
+ test_files:
122
+ - spec/sequel-pg-locker_spec.rb