oxblood 0.1.0.dev4 → 0.1.0.dev5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8a369a489b3733b77b4742e0d35cbaf30f8a794f
4
- data.tar.gz: 081150bc06a0c6c2d3dd280f7ac0405caabd46a2
3
+ metadata.gz: 2b3e70584c6264f36457da12558ba76dcabc4b19
4
+ data.tar.gz: 06a8d8e83f0e9d9a68790126fb1324023cd86c08
5
5
  SHA512:
6
- metadata.gz: 86727e0c5bcfb0960204d6bd5e516d21614a9fb992e9d1cfe7c424872c759dc2673e1faafd2f82ca7035f64524f6f46839498ff0811e018045c854bb6e32467c
7
- data.tar.gz: 24d72c0595245b1f19950acd2f65ae1ce19c32a9eed0b37893e9543bda7fb42b48523bd55511e5c87150260f5926e5a7de9f4502bffdc7152ed2df6945e250e1
6
+ metadata.gz: 36e9a9993f99b8fc11ebb7ee0208964c7eaedf08ce300f3b0061844dfe3d080e25d0d7b66353564b9a73c9c3af624b9e3f18773cbfb2c2ff0fac067b93e7a4fb
7
+ data.tar.gz: b8612141ca6b893edc340ce5247cf7f2a2b3429baf1b0ccd4688deb1fe2c77fd586910dba1fcb5658a6450c18472b7ba5f4efb2f50e4d8278846c8f22f66e6f7
@@ -1,18 +1,33 @@
1
+ require 'oxblood/session'
2
+
1
3
  module Oxblood
4
+ # Redis pipeling class. Commands won't be send until {#sync} is called.
5
+ # @see http://redis.io/topics/pipelining#redis-pipelining
6
+ #
7
+ # @example Basic workflow
8
+ # pipeline = Pipeline.new(connection)
9
+ # pipeline.echo('ping')
10
+ # pipeline.ping
11
+ # pipeline.echo('!')
12
+ # pipeline.sync # => ["ping", "PONG", "!"]
2
13
  class Pipeline < Session
3
14
  def initialize(connection)
4
15
  super
5
16
  @commands = Array.new
6
17
  end
7
18
 
8
- def run(command)
9
- @commands << command
10
- end
11
-
19
+ # Sends all commands at once and reads responses
20
+ # @return [Array] of responses
12
21
  def sync
13
- serialized_commands = @commands.map { |c| serialize(command) }
22
+ serialized_commands = @commands.map { |c| serialize(*c) }
14
23
  @connection.write(serialized_commands.join)
15
24
  @connection.read_responses(@commands.size)
16
25
  end
26
+
27
+ private
28
+
29
+ def run(*command)
30
+ @commands << command
31
+ end
17
32
  end
18
33
  end
data/lib/oxblood/pool.rb CHANGED
@@ -1,8 +1,10 @@
1
1
  require 'connection_pool'
2
2
  require 'oxblood/session'
3
3
  require 'oxblood/pipeline'
4
+ require 'oxblood/connection'
4
5
 
5
6
  module Oxblood
7
+ # Connection pool to Redis server
6
8
  class Pool
7
9
  # Initialize connection pool
8
10
  #
@@ -20,6 +22,17 @@ module Oxblood
20
22
  end
21
23
  end
22
24
 
25
+ # Run commands on a connection from pool.
26
+ # Connection is wrapped to the {Session}.
27
+ # @yield [session] provide {Session} to a block
28
+ # @yieldreturn response from the last executed operation
29
+ #
30
+ # @example
31
+ # pool = Oxblood::Pool.new(size: 8)
32
+ # pool.with do |session|
33
+ # session.set('hello', 'world')
34
+ # session.get('hello')
35
+ # end # => 'world'
23
36
  def with
24
37
  conn = @pool.checkout
25
38
  yield Session.new(conn)
@@ -27,6 +40,18 @@ module Oxblood
27
40
  @pool.checkin if conn
28
41
  end
29
42
 
43
+ # Run commands on a connection from pool. Connection is wrapped to
44
+ # the {Pipeline}. {Pipeline#sync} operation will be executed automatically
45
+ # at the end of a block.
46
+ # @yield [pipeline] provide {Pipeline} to a block
47
+ # @yieldreturn [Array] responses from all executed operations
48
+ #
49
+ # @example
50
+ # pool = Oxblood::Pool.new(size: 8)
51
+ # pool.pipelined do |pipeline|
52
+ # pipeline.set('hello', 'world')
53
+ # pipeline.get('hello')
54
+ # end # => ['OK', 'world']
30
55
  def pipelined
31
56
  conn = @pool.checkout
32
57
  pipeline = Pipeline.new(conn)
@@ -192,6 +192,16 @@ module Oxblood
192
192
  run(:AUTH, password)
193
193
  end
194
194
 
195
+ # Echo the given string
196
+ # @see http://redis.io/commands/echo
197
+ #
198
+ # @param [String] message
199
+ #
200
+ # @return [String] given string
201
+ def echo(message)
202
+ run(:ECHO, message)
203
+ end
204
+
195
205
  # Like {#auth}, except that if error returned, raises it.
196
206
  #
197
207
  # @param [String] password
@@ -1,3 +1,3 @@
1
1
  module Oxblood
2
- VERSION = '0.1.0.dev4'
2
+ VERSION = '0.1.0.dev5'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oxblood
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.dev4
4
+ version: 0.1.0.dev5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Shabanov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-01 00:00:00.000000000 Z
11
+ date: 2016-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: connection_pool