siberite-client 0.8.1 → 0.9.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/.travis.yml +13 -0
- data/README.md +48 -9
- data/Rakefile +1 -0
- data/lib/siberite/client.rb +18 -2
- data/lib/siberite/client/version.rb +1 -1
- data/siberite-client.gemspec +1 -1
- data/spec/siberite/client_spec.rb +45 -0
- data/spec/siberite/config_spec.rb +4 -2
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f667417977971354ef3c6d06d2d9526f73960674
|
4
|
+
data.tar.gz: c70be62871788f345bef4a2d45d4980e73117b08
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c080b76344a9afe9611f052beb6b548cb8752e62d9461b95136355d11ba90992cb291c0301251a112fe87ea6595a9534c9453927ed25cef767d5b71f9b5ab07
|
7
|
+
data.tar.gz: 229b296a8f33d3ec558e1988645bf5ff63764ec86a7df98566c1d6b1a8b9048cd9956f00d541379ff45d8736bdbf37c49ded86a13d09e87b355b475a76f32fd5
|
data/.travis.yml
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
- 2.0.0
|
4
|
+
- 2.1.0
|
5
|
+
- 2.2.0
|
6
|
+
|
7
|
+
before_install:
|
8
|
+
- wget https://github.com/bogdanovich/siberite/releases/download/v0.6/siberite-0.6-linux_x86_64.tgz -O /tmp/siberite.tar.gz
|
9
|
+
- tar -xvf /tmp/siberite.tar.gz && cd siberite*
|
10
|
+
- ./siberite > siberite.log 2>&1 &
|
11
|
+
|
12
|
+
install:
|
13
|
+
- bundle install
|
data/README.md
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
[![License][License-Image]][License-Url] [![Build][Build-Status-Image]][Build-Status-Url] [![Gem Version][Gem-Image]][Gem-Url]
|
1
2
|
## Talk to Siberite queue server from Ruby
|
2
3
|
|
3
4
|
Siberite-client is a library that allows you to talk to a [Siberite](http://github.com/bogdanovich/siberite) queue server from ruby.
|
@@ -27,9 +28,23 @@ See the [rdoc for Memcached](http://blog.evanweaver.com/files/doc/fauna/memcache
|
|
27
28
|
```ruby
|
28
29
|
require 'siberite'
|
29
30
|
|
30
|
-
|
31
|
-
|
32
|
-
|
31
|
+
queue = Siberite::Client.new('localhost:22133')
|
32
|
+
queue.set('a_queue', 'foo')
|
33
|
+
queue.set('a_queue', 'bar')
|
34
|
+
queue.set('a_queue', 'baz')
|
35
|
+
|
36
|
+
queue.get('a_queue') # => 'foo'
|
37
|
+
|
38
|
+
# opens a reliable read
|
39
|
+
queue.get_open('a_queue') # => 'bar'
|
40
|
+
queue.get_close('a_queue')
|
41
|
+
|
42
|
+
# acknowledges previously opened read and opens a new one)
|
43
|
+
queue.get_close_open('a_queue') # => 'baz'
|
44
|
+
|
45
|
+
# raw format, skip marshalling
|
46
|
+
queue.set('a_queue', [1,2,3].to_json, 0, raw: true)
|
47
|
+
queue.get('a_queue', raw: true) # => "[1,2,3]"
|
33
48
|
```
|
34
49
|
|
35
50
|
## Client Proxies
|
@@ -37,13 +52,30 @@ require 'siberite'
|
|
37
52
|
siberite-client comes with a number of decorators that change the behavior of the raw client.
|
38
53
|
|
39
54
|
```ruby
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
55
|
+
client = Siberite::Client.new('localhost:22133')
|
56
|
+
client.get('empty_queue') # => nil
|
57
|
+
|
58
|
+
# Blocking client
|
59
|
+
queue = Siberite::Client::Blocking.new(client)
|
60
|
+
queue.get('empty_queue') # does not return until it pulls something from the queue
|
61
|
+
|
62
|
+
# Namespaced client
|
63
|
+
queue = Siberite::Client::Namespace.new('foo', client)
|
64
|
+
queue.set('work', 1) # adds message to foo:work queue
|
65
|
+
|
66
|
+
# Partitioned client
|
67
|
+
client_1 = Siberite::Client.new('siberite01.example.com:22133')
|
68
|
+
client_2 = Siberite::Client.new('siberite02.example.com:22133')
|
69
|
+
default_client = Siberite::Client.new('siberite03.example.com:22133')
|
70
|
+
|
71
|
+
client = Siberite::Client::Partitioning.new(
|
72
|
+
'queue1' => client_1,
|
73
|
+
['queue2', 'queue3'] => client_2,
|
74
|
+
default: default_client
|
75
|
+
)
|
45
76
|
```
|
46
77
|
|
78
|
+
|
47
79
|
## Configuration Management
|
48
80
|
|
49
81
|
Siberite::Config provides some tools for pulling queue config out of a YAML config file.
|
@@ -52,7 +84,7 @@ Siberite::Config provides some tools for pulling queue config out of a YAML conf
|
|
52
84
|
Siberite::Config.load 'path/to/siberite.yml'
|
53
85
|
Siberite::Config.environment = 'production' # defaults to development
|
54
86
|
|
55
|
-
|
87
|
+
queue = Siberite::Config.new_client
|
56
88
|
```
|
57
89
|
|
58
90
|
This tells siberite-client to look for `path/to/siberite.yml`, and pull the client configuration out of
|
@@ -77,3 +109,10 @@ development:
|
|
77
109
|
- localhost:22133
|
78
110
|
show_backtraces: true
|
79
111
|
```
|
112
|
+
|
113
|
+
[License-Url]: http://opensource.org/licenses/Apache-2.0
|
114
|
+
[License-Image]: https://img.shields.io/hexpm/l/plug.svg
|
115
|
+
[Build-Status-Url]: https://travis-ci.org/bogdanovich/siberite-ruby
|
116
|
+
[Build-Status-Image]: https://travis-ci.org/bogdanovich/siberite-ruby.svg?branch=master
|
117
|
+
[Gem-Image]: https://badge.fury.io/rb/siberite-client.svg
|
118
|
+
[Gem-Url]: https://rubygems.org/gems/siberite-client
|
data/Rakefile
CHANGED
data/lib/siberite/client.rb
CHANGED
@@ -143,7 +143,23 @@ module Siberite
|
|
143
143
|
end
|
144
144
|
|
145
145
|
def peek(queue)
|
146
|
-
get queue, :
|
146
|
+
get queue, peek: true
|
147
|
+
end
|
148
|
+
|
149
|
+
def get_open(queue)
|
150
|
+
get queue, open: true
|
151
|
+
end
|
152
|
+
|
153
|
+
def get_close(queue)
|
154
|
+
get_from_last queue, close: true
|
155
|
+
end
|
156
|
+
|
157
|
+
def get_close_open(queue)
|
158
|
+
get_from_last queue, close: true, open: true
|
159
|
+
end
|
160
|
+
|
161
|
+
def get_abort(queue)
|
162
|
+
get_from_last queue, abort: true
|
147
163
|
end
|
148
164
|
|
149
165
|
private
|
@@ -173,7 +189,7 @@ module Siberite
|
|
173
189
|
end
|
174
190
|
|
175
191
|
def extract_queue_commands(opts)
|
176
|
-
commands = [:
|
192
|
+
commands = [:close, :open, :abort, :peek].select do |key|
|
177
193
|
opts[key]
|
178
194
|
end
|
179
195
|
|
data/siberite-client.gemspec
CHANGED
@@ -30,6 +30,6 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.add_development_dependency "rspec", "~> 3.2"
|
31
31
|
s.add_development_dependency "rr", "~> 1.1"
|
32
32
|
s.add_development_dependency "activesupport", "> 3.1"
|
33
|
-
s.add_development_dependency "bundler"
|
33
|
+
s.add_development_dependency "bundler"
|
34
34
|
s.add_development_dependency "rake", "~> 10.0"
|
35
35
|
end
|
@@ -81,6 +81,51 @@ describe Siberite::Client do
|
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
|
+
describe "#get_open" do
|
85
|
+
it "opens a reliable read" do
|
86
|
+
@queue = "some_random_queue_#{Time.now.to_i}_#{rand(10000)}"
|
87
|
+
@client.set(@queue, "item_1")
|
88
|
+
@client.set(@queue, "item_2")
|
89
|
+
expect(@client.get_open(@queue)).to eq "item_1"
|
90
|
+
expect{ @client.get(@queue) }.to raise_error Memcached::ClientError
|
91
|
+
expect(@client.get_open(@queue)).to eq "item_1"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "#get_close" do
|
96
|
+
it "closes a reliable read" do
|
97
|
+
@queue = "some_random_queue_#{Time.now.to_i}_#{rand(10000)}"
|
98
|
+
@client.set(@queue, "item_1")
|
99
|
+
@client.set(@queue, "item_2")
|
100
|
+
expect(@client.get_open(@queue)).to eq "item_1"
|
101
|
+
expect{ @client.get_close(@queue) }.to_not raise_error
|
102
|
+
expect(@client.get_open(@queue)).to eq "item_2"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe "#get_close_open" do
|
107
|
+
it "closes a reliable read" do
|
108
|
+
@queue = "some_random_queue_#{Time.now.to_i}_#{rand(10000)}"
|
109
|
+
@client.set(@queue, "item_1")
|
110
|
+
@client.set(@queue, "item_2")
|
111
|
+
expect(@client.get_open(@queue)).to eq "item_1"
|
112
|
+
expect{ @client.get(@queue) }.to raise_error Memcached::ClientError
|
113
|
+
expect(@client.get_open(@queue)).to eq "item_1"
|
114
|
+
expect(@client.get_close_open(@queue)).to eq "item_2"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "#get_abort" do
|
119
|
+
it "aborts a reliable read" do
|
120
|
+
@queue = "some_random_queue_#{Time.now.to_i}_#{rand(10000)}"
|
121
|
+
@client.set(@queue, "item_1")
|
122
|
+
@client.set(@queue, "item_2")
|
123
|
+
expect(@client.get_open(@queue)).to eq "item_1"
|
124
|
+
expect{ @client.get_abort(@queue) }.to_not raise_error
|
125
|
+
expect(@client.get(@queue)).to eq "item_1"
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
84
129
|
describe "#with_retries" do
|
85
130
|
it "retries a specified number of times" do
|
86
131
|
mock(@client).set(anything, anything) { raise Memcached::SystemError }.times(6)
|
@@ -9,10 +9,12 @@ describe Siberite::Config do
|
|
9
9
|
describe "load" do
|
10
10
|
it "loads a yaml file" do
|
11
11
|
Siberite::Config.config = nil
|
12
|
-
|
12
|
+
expect {
|
13
|
+
Siberite::Config.default
|
14
|
+
}.to raise_error Siberite::Config::ConfigNotLoaded
|
13
15
|
|
14
16
|
Siberite::Config.load TEST_CONFIG_FILE
|
15
|
-
|
17
|
+
expect { Siberite::Config.default }.to_not raise_error
|
16
18
|
end
|
17
19
|
end
|
18
20
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: siberite-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Freels
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-11-
|
13
|
+
date: 2015-11-29 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: memcached
|
@@ -100,16 +100,16 @@ dependencies:
|
|
100
100
|
name: bundler
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
|
-
- -
|
103
|
+
- - '>='
|
104
104
|
- !ruby/object:Gem::Version
|
105
|
-
version: '
|
105
|
+
version: '0'
|
106
106
|
type: :development
|
107
107
|
prerelease: false
|
108
108
|
version_requirements: !ruby/object:Gem::Requirement
|
109
109
|
requirements:
|
110
|
-
- -
|
110
|
+
- - '>='
|
111
111
|
- !ruby/object:Gem::Version
|
112
|
-
version: '
|
112
|
+
version: '0'
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: rake
|
115
115
|
requirement: !ruby/object:Gem::Requirement
|
@@ -132,6 +132,7 @@ extra_rdoc_files:
|
|
132
132
|
- README.md
|
133
133
|
files:
|
134
134
|
- .gitignore
|
135
|
+
- .travis.yml
|
135
136
|
- Gemfile
|
136
137
|
- LICENSE
|
137
138
|
- README.md
|