mbus 1.0.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.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/README.mediawiki +169 -0
  3. data/Rakefile +24 -0
  4. data/bin/console +11 -0
  5. data/bin/messagebus_swarm +77 -0
  6. data/lib/messagebus.rb +62 -0
  7. data/lib/messagebus/client.rb +166 -0
  8. data/lib/messagebus/cluster_map.rb +161 -0
  9. data/lib/messagebus/connection.rb +118 -0
  10. data/lib/messagebus/consumer.rb +447 -0
  11. data/lib/messagebus/custom_errors.rb +37 -0
  12. data/lib/messagebus/dottable_hash.rb +113 -0
  13. data/lib/messagebus/error_status.rb +42 -0
  14. data/lib/messagebus/logger.rb +45 -0
  15. data/lib/messagebus/message.rb +168 -0
  16. data/lib/messagebus/messagebus_types.rb +107 -0
  17. data/lib/messagebus/producer.rb +187 -0
  18. data/lib/messagebus/swarm.rb +49 -0
  19. data/lib/messagebus/swarm/controller.rb +296 -0
  20. data/lib/messagebus/swarm/drone.rb +195 -0
  21. data/lib/messagebus/swarm/drone/logging_worker.rb +53 -0
  22. data/lib/messagebus/validations.rb +68 -0
  23. data/lib/messagebus/version.rb +36 -0
  24. data/messagebus.gemspec +29 -0
  25. data/spec/messagebus/client_spec.rb +157 -0
  26. data/spec/messagebus/cluster_map_spec.rb +178 -0
  27. data/spec/messagebus/consumer_spec.rb +338 -0
  28. data/spec/messagebus/dottable_hash_spec.rb +137 -0
  29. data/spec/messagebus/message_spec.rb +93 -0
  30. data/spec/messagebus/producer_spec.rb +147 -0
  31. data/spec/messagebus/swarm/controller_spec.rb +73 -0
  32. data/spec/messagebus/validations_spec.rb +71 -0
  33. data/spec/spec_helper.rb +10 -0
  34. data/vendor/gems/stomp.rb +23 -0
  35. data/vendor/gems/stomp/client.rb +360 -0
  36. data/vendor/gems/stomp/connection.rb +583 -0
  37. data/vendor/gems/stomp/errors.rb +39 -0
  38. data/vendor/gems/stomp/ext/hash.rb +24 -0
  39. data/vendor/gems/stomp/message.rb +68 -0
  40. metadata +138 -0
@@ -0,0 +1,39 @@
1
+ module Stomp
2
+ module Error
3
+ class InvalidFormat < RuntimeError
4
+ def message
5
+ "Invalid message - invalid format"
6
+ end
7
+ end
8
+
9
+ class InvalidServerCommand < RuntimeError
10
+ def message
11
+ "Invalid command from server"
12
+ end
13
+ end
14
+
15
+ class InvalidMessageLength < RuntimeError
16
+ def message
17
+ "Invalid content length received"
18
+ end
19
+ end
20
+
21
+ class PacketParsingTimeout < RuntimeError
22
+ def message
23
+ "Packet parsing timeout"
24
+ end
25
+ end
26
+
27
+ class PacketReceiptTimeout < RuntimeError
28
+ def message
29
+ "Packet receiving timeout"
30
+ end
31
+ end
32
+
33
+ class MaxReconnectAttempts < RuntimeError
34
+ def message
35
+ "Maximum number of reconnection attempts reached"
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,24 @@
1
+ class ::Hash
2
+ def uncamelize_and_symbolize_keys
3
+ self.uncamelize_and_stringify_keys.symbolize_keys
4
+ end
5
+
6
+ def uncamelize_and_stringify_keys
7
+ uncamelized = {}
8
+ self.each_pair do |key, value|
9
+ new_key = key.to_s.split(/(?=[A-Z])/).join('_').downcase
10
+ uncamelized[new_key] = value
11
+ end
12
+
13
+ uncamelized
14
+ end
15
+
16
+ def symbolize_keys
17
+ symbolized = {}
18
+ self.each_pair do |key, value|
19
+ symbolized[key.to_sym] = value
20
+ end
21
+
22
+ symbolized
23
+ end unless self.method_defined?(:symbolize_keys)
24
+ end
@@ -0,0 +1,68 @@
1
+ module Stomp
2
+
3
+ # Container class for frames, misnamed technically
4
+ class Message
5
+ attr_accessor :command, :headers, :body, :original
6
+
7
+ @@allowed_commands = [ 'CONNECTED', 'MESSAGE', 'RECEIPT', 'ERROR' ]
8
+
9
+ def initialize(frame)
10
+ # p frame
11
+ # Set default empty values
12
+ self.command = ''
13
+ self.headers = {}
14
+ self.body = ''
15
+ self.original = frame
16
+ return self if is_blank?(frame)
17
+ # Figure out where individual parts of the frame begin and end.
18
+ command_index = frame.index("\n")
19
+ raise Stomp::Error::InvalidFormat, 'command index' unless command_index
20
+ #
21
+ headers_index = frame.index("\n\n", command_index+1)
22
+ raise Stomp::Error::InvalidFormat, 'headers index' unless headers_index
23
+ #
24
+ lastnull_index = frame.rindex("\0")
25
+ raise Stomp::Error::InvalidFormat, 'lastnull index' unless lastnull_index
26
+
27
+ # Extract working copies of each frame part
28
+ work_command = frame[0..command_index-1]
29
+ raise Stomp::Error::InvalidServerCommand, "invalid command: #{work_command.inspect}" unless @@allowed_commands.include?(work_command)
30
+ #
31
+ work_headers = frame[command_index+1..headers_index-1]
32
+ raise Stomp::Error::InvalidFormat, 'nil headers' unless work_headers
33
+ #
34
+ work_body = frame[headers_index+2..lastnull_index-1]
35
+ raise Stomp::Error::InvalidFormat, 'nil body' unless work_body
36
+ # Set the frame values
37
+ self.command = work_command
38
+ work_headers.split("\n").map do |value|
39
+ parsed_value = value.match /^([\w|-]*):(.*)$/
40
+ raise Stomp::Error::InvalidFormat, 'parsed header value' unless parsed_value
41
+ self.headers[parsed_value[1].strip] = parsed_value[2].strip if parsed_value
42
+ end
43
+
44
+ body_length = -1
45
+
46
+ if self.headers['content-length']
47
+ body_length = self.headers['content-length'].to_i
48
+ raise Stomp::Error::InvalidMessageLength if work_body.length != body_length
49
+ end
50
+ self.body = work_body[0..body_length]
51
+
52
+ end
53
+
54
+ def to_s
55
+ "<Stomp::Message headers=#{headers.inspect} body='#{body}' command='#{command}' >"
56
+ end
57
+
58
+ def empty?
59
+ is_blank?(command) && is_blank?(headers) && is_blank?(body)
60
+ end
61
+
62
+ private
63
+ def is_blank?(value)
64
+ value.nil? || (value.respond_to?(:empty?) && value.empty?)
65
+ end
66
+ end
67
+
68
+ end
metadata ADDED
@@ -0,0 +1,138 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mbus
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Pradeep Jawahar
8
+ - Lin Zhao
9
+ - Erik Weathers
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2013-08-19 00:00:00 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: json
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - &id003
22
+ - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: thrift
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "="
33
+ - !ruby/object:Gem::Version
34
+ version: 0.9.0
35
+ type: :runtime
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: rspec
39
+ prerelease: false
40
+ requirement: &id004 !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - *id003
43
+ type: :development
44
+ version_requirements: *id004
45
+ - !ruby/object:Gem::Dependency
46
+ name: simplecov
47
+ prerelease: false
48
+ requirement: &id005 !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - *id003
51
+ type: :development
52
+ version_requirements: *id005
53
+ description: Messagebus integration gem
54
+ email:
55
+ - pjawahar@groupon.com
56
+ - lin@groupon.com
57
+ - eweathers@groupon.com
58
+ executables:
59
+ - messagebus_swarm
60
+ extensions: []
61
+
62
+ extra_rdoc_files: []
63
+
64
+ files:
65
+ - bin/messagebus_swarm
66
+ - bin/console
67
+ - lib/messagebus.rb
68
+ - lib/messagebus/custom_errors.rb
69
+ - lib/messagebus/version.rb
70
+ - lib/messagebus/cluster_map.rb
71
+ - lib/messagebus/connection.rb
72
+ - lib/messagebus/message.rb
73
+ - lib/messagebus/consumer.rb
74
+ - lib/messagebus/swarm/controller.rb
75
+ - lib/messagebus/swarm/drone.rb
76
+ - lib/messagebus/swarm/drone/logging_worker.rb
77
+ - lib/messagebus/messagebus_types.rb
78
+ - lib/messagebus/error_status.rb
79
+ - lib/messagebus/dottable_hash.rb
80
+ - lib/messagebus/validations.rb
81
+ - lib/messagebus/producer.rb
82
+ - lib/messagebus/client.rb
83
+ - lib/messagebus/logger.rb
84
+ - lib/messagebus/swarm.rb
85
+ - vendor/gems/stomp/connection.rb
86
+ - vendor/gems/stomp/message.rb
87
+ - vendor/gems/stomp/ext/hash.rb
88
+ - vendor/gems/stomp/errors.rb
89
+ - vendor/gems/stomp/client.rb
90
+ - vendor/gems/stomp.rb
91
+ - README.mediawiki
92
+ - Rakefile
93
+ - messagebus.gemspec
94
+ - spec/spec_helper.rb
95
+ - spec/messagebus/consumer_spec.rb
96
+ - spec/messagebus/swarm/controller_spec.rb
97
+ - spec/messagebus/message_spec.rb
98
+ - spec/messagebus/dottable_hash_spec.rb
99
+ - spec/messagebus/cluster_map_spec.rb
100
+ - spec/messagebus/validations_spec.rb
101
+ - spec/messagebus/producer_spec.rb
102
+ - spec/messagebus/client_spec.rb
103
+ homepage: https://github.com/groupon/Message-Bus
104
+ licenses:
105
+ - BSD
106
+ metadata: {}
107
+
108
+ post_install_message:
109
+ rdoc_options: []
110
+
111
+ require_paths:
112
+ - vendor/gems
113
+ - lib
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - *id003
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: 1.3.6
122
+ requirements: []
123
+
124
+ rubyforge_project:
125
+ rubygems_version: 2.0.7
126
+ signing_key:
127
+ specification_version: 4
128
+ summary: Messagebus Client
129
+ test_files:
130
+ - spec/spec_helper.rb
131
+ - spec/messagebus/consumer_spec.rb
132
+ - spec/messagebus/swarm/controller_spec.rb
133
+ - spec/messagebus/message_spec.rb
134
+ - spec/messagebus/dottable_hash_spec.rb
135
+ - spec/messagebus/cluster_map_spec.rb
136
+ - spec/messagebus/validations_spec.rb
137
+ - spec/messagebus/producer_spec.rb
138
+ - spec/messagebus/client_spec.rb