rabbitmq 1.0.1 → 1.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.
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