rabbitmq 1.0.1 → 1.1.0

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: 4bfa34be8651dfe3efcfeb6f154a75f737019936
4
- data.tar.gz: 1586b65b879349e5240aebec45551cd0631b6939
3
+ metadata.gz: 3682bae0564eed99f1fd3ddf9c7c1d8d09705e6b
4
+ data.tar.gz: 8dae54b8f8606e465da48509a85e7472d3ccff9f
5
5
  SHA512:
6
- metadata.gz: 7f0fae5f4d1ed711a1a3b8b0c7cc2385cc5b4318b66954cd3f1077c15367320337877d12e7e96da56811926190a012320b5bddcafd1c5015b9399b74ce4d9139
7
- data.tar.gz: bbc35a0b0f0fbb85cbb78c767ecca4379b7bb1f93c7686f4ab5cd9447845a213436e0c90c2e4f95211c652dce9786b23a0b3224a2d03ab3379c5ce37a9a7ab2f
6
+ metadata.gz: 8eaf39f8a7f9f6f0d5c9b080ff1f320f3cf7bd025f9a65f70dc923cc7af204353af9635772c13b0a1a1890736aa318d7d9d8a543715cf545a22c8a019eb07966
7
+ data.tar.gz: 9cef2f9e99f3548bf626fb68a4c7173915738e460ad4bc2c16174b0eaa713d9917cfd86760e066e8ca8dfb8a6983033be83fc24ecb1fc155712c1e4e1718fa05
@@ -222,6 +222,18 @@ module RabbitMQ
222
222
  fetch_response :tx_rollback_ok
223
223
  end
224
224
 
225
+ ##
226
+ # Confirm mode operations
227
+
228
+ def confirm_select
229
+ send_request :confirm_select
230
+ fetch_response :confirm_select_ok
231
+ end
232
+
233
+ def fetch_confirm
234
+ fetch_response [:basic_ack, :basic_nack, :basic_reject]
235
+ end
236
+
225
237
  ##
226
238
  # Message operations
227
239
 
@@ -3,7 +3,7 @@ module RabbitMQ
3
3
  module FFI
4
4
 
5
5
  class Error < RuntimeError
6
- def initialize message=nil
6
+ def initialize(message=nil)
7
7
  @message = message
8
8
  end
9
9
 
@@ -4,6 +4,7 @@ require_relative 'ext/bytes'
4
4
 
5
5
  require_relative 'ext/connection_info'
6
6
  require_relative 'ext/field_value'
7
+ require_relative 'ext/array'
7
8
  require_relative 'ext/table'
8
9
 
9
10
  require_relative 'ext/method'
@@ -0,0 +1,46 @@
1
+
2
+ module RabbitMQ
3
+ module FFI
4
+
5
+ class Array
6
+ include Enumerable
7
+
8
+ def each(*a, &b)
9
+ entry_ptr = self[:entries]
10
+ entries = self[:num_entries].times.map do |i|
11
+ FFI::FieldValue.new(entry_ptr + i * FFI::FieldValue.size)
12
+ end
13
+ entries.each(*a, &b)
14
+ end
15
+
16
+ def to_a(free=false)
17
+ result = self.map do |item|
18
+ item.to_value(free)
19
+ end
20
+
21
+ clear if free
22
+ result
23
+ end
24
+
25
+ def free!
26
+ self.each(&:free!)
27
+ FFI.free(self[:entries])
28
+ clear
29
+ end
30
+
31
+ def self.from_a(items)
32
+ size = items.size
33
+ entry_ptr = Util.mem_ptr(size * FFI::FieldValue.size, release: false)
34
+ items.each_with_index do |item, idx|
35
+ FFI::FieldValue.new(entry_ptr + idx * FFI::FieldValue.size).apply(item)
36
+ end
37
+
38
+ obj = new
39
+ obj[:num_entries] = size
40
+ obj[:entries] = entry_ptr
41
+ obj
42
+ end
43
+ end
44
+
45
+ end
46
+ end
@@ -19,8 +19,7 @@ module RabbitMQ
19
19
  when :utf8; value.to_s(free).force_encoding(Encoding::UTF_8)
20
20
  when :timestamp; Time.at(value / 1000.0)
21
21
  when :table; value.to_h(free)
22
- when :array; value.to_array_not_yet_implemented!
23
- when :decimal; value.to_value_not_yet_implemented!
22
+ when :array; value.to_a(free)
24
23
  else value
25
24
  end
26
25
 
@@ -29,19 +28,30 @@ module RabbitMQ
29
28
  end
30
29
 
31
30
  def free!
32
- kind = self[:kind]
33
- value = self[:value][value_member(kind)]
31
+ kind = self[:kind]
32
+ value = self[:value][value_member(kind)]
34
33
  value.free! if value.respond_to? :free!
35
- clear
34
+ self
36
35
  end
37
36
 
38
- def self.from(value)
39
- obj = new
40
- obj[:kind], obj[:value] = case value
41
- when String; [:bytes, FieldValueValue.new(Bytes.from_s(value).pointer)]
42
- else raise NotImplementedError
37
+ def apply(value)
38
+ self[:kind], self[:value] = case value
39
+ when ::String; [:bytes, FieldValueValue.new(Bytes.from_s(value).pointer)]
40
+ when ::Symbol; [:bytes, FieldValueValue.new(Bytes.from_s(value.to_s).pointer)]
41
+ when ::Array; [:array, FieldValueValue.new(Array.from_a(value).pointer)]
42
+ when ::Hash; [:table, FieldValueValue.new(Table.from(value).pointer)]
43
+ when ::Fixnum; [:i64, (v=FieldValueValue.new; v[:i64]=value; v)]
44
+ when ::Float; [:f64, (v=FieldValueValue.new; v[:f64]=value; v)]
45
+ when ::Time; [:timestamp, (v=FieldValueValue.new; v[:u64]=value.to_i*1000; v)]
46
+ when true; [:boolean, (v=FieldValueValue.new; v[:boolean]=true; v)]
47
+ when false; [:boolean, (v=FieldValueValue.new; v[:boolean]=false; v)]
48
+ else raise NotImplementedError, "#{self.class}.from(#<#{value.class}>)"
43
49
  end
44
- obj
50
+ self
51
+ end
52
+
53
+ def self.from(value)
54
+ new.apply(value)
45
55
  end
46
56
  end
47
57
 
@@ -23,7 +23,7 @@ module RabbitMQ
23
23
  end
24
24
 
25
25
  def free!
26
- self.each do
26
+ self.each do |entry|
27
27
  entry[:key].free!
28
28
  entry[:value].free!
29
29
  end
data/lib/rabbitmq/util.rb CHANGED
@@ -10,30 +10,30 @@ module RabbitMQ
10
10
  lowercase_name.to_s.gsub(/((?:\A\w)|(?:_\w))/) { |x| x[-1].upcase }
11
11
  end
12
12
 
13
- def error_check action, status
13
+ def error_check(action, status)
14
14
  return if status == :ok
15
15
  raise RabbitMQ::FFI::Error.lookup(status), "while #{action}"
16
16
  end
17
17
 
18
- def null_check action, obj
18
+ def null_check(action, obj)
19
19
  return unless obj.nil?
20
20
  raise RabbitMQ::FFI::Error, "while #{action} - got unexpected null"
21
21
  end
22
22
 
23
- def mem_ptr size, count: 1, clear: true, release: true
23
+ def mem_ptr(size, count: 1, clear: true, release: true)
24
24
  ptr = ::FFI::MemoryPointer.new(size, count, clear)
25
25
  ptr.autorelease = false unless release
26
26
  ptr
27
27
  end
28
28
 
29
- def strdup_ptr str, **kwargs
29
+ def strdup_ptr(str, **kwargs)
30
30
  str = str + "\x00"
31
31
  ptr = mem_ptr(str.bytesize, **kwargs)
32
32
  ptr.write_string(str)
33
33
  ptr
34
34
  end
35
35
 
36
- def connection_info url=nil, **overrides
36
+ def connection_info(url=nil, **overrides)
37
37
  info = FFI::ConnectionInfo.new
38
38
  FFI.amqp_default_connection_info(info)
39
39
  result = info.to_h
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rabbitmq
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe McIlvain
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-18 00:00:00.000000000 Z
11
+ date: 2015-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -131,6 +131,7 @@ files:
131
131
  - lib/rabbitmq/ffi.rb
132
132
  - lib/rabbitmq/ffi/error.rb
133
133
  - lib/rabbitmq/ffi/ext.rb
134
+ - lib/rabbitmq/ffi/ext/array.rb
134
135
  - lib/rabbitmq/ffi/ext/basic_properties.rb
135
136
  - lib/rabbitmq/ffi/ext/bytes.rb
136
137
  - lib/rabbitmq/ffi/ext/connection_info.rb