pipeline_toolkit 1.2.9 → 1.2.10

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/README.markdown CHANGED
@@ -96,12 +96,19 @@ Pipeline toolkit also includes pre-canned cucumber steps for you to test your ma
96
96
 
97
97
  Given I run this machine with acknowledgements:
98
98
  Given I run this machine without acknowledgements:
99
- When I input these messages:
100
- When I input these messages with ack_ids:
101
- Then these messages are passed on:
102
- Then these messages are acknowledged:
99
+
100
+ When I input these messages: (table)
101
+ When I input these messages with ack_ids: (table)
102
+ When I input these messages without ack_ids: (table)
103
+
104
+ When I input this messages: (json string)
105
+ When I input these messages with ack_ids: (json string)
106
+ When I input these messages without ack_ids: (json string)
107
+
108
+ Then these messages are passed on: (table)
109
+ Then these messages are acknowledged: (table)
103
110
 
104
- Given an amqp server running at "localhost" on port 1234
111
+ Given an amqp server running on "localhost" at port 1234
105
112
  Given amqp queue "queue-name" is empty
106
113
  When I input these messages to exchange "queue-name"
107
114
  Then these messages are on queue "queue-name"
@@ -1,4 +1,4 @@
1
- Given /^an amqp server running at "(\w+)" on port (\d+)$/ do |host, port|
1
+ Given /^an amqp server running on "(\w+)" at port (\d+)$/ do |host, port|
2
2
  @amqp = PipelineToolkit::Cucumber::AMQP.new
3
3
  @amqp.start(host, port)
4
4
  end
@@ -7,8 +7,8 @@ module PipelineToolkit
7
7
  # talks messages.
8
8
  class IOProcess
9
9
 
10
- def run(command)
11
- @process = BackgroundProcess.run("ruby -rubygems bin/#{command}")
10
+ def run(command, path = "bin")
11
+ @process = BackgroundProcess.run("ruby -rubygems #{path}/#{command}")
12
12
  # wait for process to start
13
13
  sleep(0.5)
14
14
  raise @process.stderr.gets unless @process.running?
@@ -10,8 +10,8 @@ module PipelineToolkit
10
10
 
11
11
  attr_reader :use_acknowledgements
12
12
 
13
- def run(command, use_acknowledgements = true)
14
- super(command)
13
+ def run(command, use_acknowledgements = true, path = "bin")
14
+ super(command, path)
15
15
 
16
16
  @use_acknowledgements = use_acknowledgements
17
17
  setup_system
@@ -9,10 +9,23 @@ After do
9
9
  @process.kill unless @process.nil?
10
10
  end
11
11
 
12
- When /^I input these messages with(out)? ack_ids?:$/ do |without_acks_ids, messages|
12
+ # Lets you use JSON to express a complex message
13
+ When /^I input this message$/ do |json_str|
14
+ @process.input_messages([JSON.parse(json_str)], false)
15
+ end
16
+
17
+ When /^I input this message with(out)? ack_ids$/ do |without_acks_ids, json_str|
18
+ @process.input_messages([JSON.parse(json_str)], !without_acks_ids)
19
+ end
20
+
21
+ When /^I input these messages with(out)? ack_ids:$/ do |without_acks_ids, messages|
13
22
  @process.input_messages(messages.hashes, !without_acks_ids)
14
23
  end
15
24
 
25
+ When /^I input these messages:$/ do |messages|
26
+ @process.input_messages(messages.hashes, false)
27
+ end
28
+
16
29
  Then /^these messages are passed on:$/ do |expected_msgs|
17
30
  received_messages = @process.get_messages(expected_msgs.rows.size)
18
31
  # turn everything into str
@@ -20,6 +33,14 @@ Then /^these messages are passed on:$/ do |expected_msgs|
20
33
  expected_msgs.diff!(received_messages)
21
34
  end
22
35
 
36
+ # Lets you use JSON to express a complex message
37
+ Then /^this message is passed on$/ do |expected_msg|
38
+ received_message = @process.get_messages(1).first
39
+ # turn everything into str
40
+ received_message.each { |k,v| received_message[k] = v.to_s }
41
+ received_message.should == JSON.parse(expected_msg)
42
+ end
43
+
23
44
  Then /^these messages are acknowledged:$/ do |expected_msgs|
24
45
  received_messages = @process.get_acknowledged_messages(expected_msgs.rows.size)
25
46
  # turn everything into str
@@ -27,3 +48,4 @@ Then /^these messages are acknowledged:$/ do |expected_msgs|
27
48
  expected_msgs.diff!(received_messages)
28
49
  end
29
50
 
51
+
@@ -8,6 +8,8 @@ module PipelineToolkit
8
8
  # is being included in a IOProcess or subclass of.
9
9
  module PipelineIO
10
10
 
11
+ attr_reader :all_messages
12
+
11
13
  # Gets output from process, and decodes it into a pipeline message
12
14
  def get_messages(number, timeout = 5)
13
15
  output_msgs = []
@@ -15,6 +17,10 @@ module PipelineToolkit
15
17
  msg = MessageCoder.decode(line)
16
18
  output_msgs << msg
17
19
  end
20
+
21
+ @all_messages ||= []
22
+ @all_messages << output_msgs
23
+
18
24
  output_msgs
19
25
  end
20
26
 
@@ -6,6 +6,12 @@ module PipelineToolkit
6
6
  #
7
7
  class MessageCoder
8
8
 
9
+ # Replace illegal chars (because we're using a line orientated procotol)
10
+ TRANSLATION = {
11
+ "\r" => "@@r",
12
+ "\n" => "@@n",
13
+ }
14
+
9
15
  ##
10
16
  # Encode the hash message
11
17
  #
@@ -14,9 +20,9 @@ module PipelineToolkit
14
20
  def self.encode(message)
15
21
  # NB: Using Msgpack because it's 9-10x faster than altnatives
16
22
  # See http://gist.github.com/190849
17
- MessagePack.pack(message)
18
- # str.gsub!("\n", "?n")
19
- # str.gsub!("\r", "?r")
23
+ str = MessagePack.pack(message)
24
+ str.gsub!(/[#{TRANSLATION.keys.join}]/) { |c| TRANSLATION[c] }
25
+ str
20
26
  end
21
27
 
22
28
  ##
@@ -26,6 +32,7 @@ module PipelineToolkit
26
32
  #
27
33
  def self.decode(str)
28
34
  str.chomp!
35
+ str.gsub!(/#{TRANSLATION.values.join("|")}/) { |s| TRANSLATION.invert[s] }
29
36
  obj = MessagePack.unpack(str)
30
37
 
31
38
  obj = case obj
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 2
8
- - 9
9
- version: 1.2.9
8
+ - 10
9
+ version: 1.2.10
10
10
  platform: ruby
11
11
  authors:
12
12
  - Aisha Fenton