mumukit-nuntius 0.3.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 ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NWYxYWYxYzViYTVlMjczOTg4ZDBmY2ZmNmM5YjE0ZjgwODAxODU2YQ==
5
+ data.tar.gz: !binary |-
6
+ ZmMxM2JkMzI3NWU2NTllODEwZmYwZDI1OGFiMjYxOGUwM2NlMDhkOA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ OGNiMmFmMTE3MzAzMzdkMTU0N2ViNTA4MjkxOWNiMDMyMzk2OTBkMTZkM2Q1
10
+ ZGMxYWFmOTQ0N2ViMGQ4ZDU5YmNkOTNiMDlhYmUyNmVhZjAwODFlMDM3YjE2
11
+ YmVhOGI5NTcxMDEwNTUyMzVjOTFmZDBjMTMwMjIwODhjZGQ1NzY=
12
+ data.tar.gz: !binary |-
13
+ MmNkYmQyZjBkNzg4ZmI2MDY2MDc4M2E3MWI2ZTBhMDI1M2Y1NzlmYTExZTUw
14
+ ODMzNGI3YmYzZDhiZTA5NWUzYWI1NjgwOTMyMGIxZTRiZGExOTQ2YTAwOWE2
15
+ Y2FlNmY3NDU3ZmQyYTcyZTRmMTMxZDQwMzA5MWJhNDBjZjRmYWE=
@@ -0,0 +1,19 @@
1
+ require 'active_support/all'
2
+
3
+ require 'bunny'
4
+ require 'logger'
5
+
6
+
7
+ module Mumukit
8
+ module Nuntius
9
+ Logger = ::Logger.new('nuntius.log')
10
+ end
11
+ end
12
+
13
+ require 'mumukit/nuntius/version'
14
+ require 'mumukit/nuntius/connection'
15
+ require 'mumukit/nuntius/channel'
16
+ require 'mumukit/nuntius/publisher'
17
+ require 'mumukit/nuntius/consumer'
18
+ require 'mumukit/nuntius/command_consumer'
19
+
@@ -0,0 +1,7 @@
1
+ class Bunny::Channel
2
+
3
+ def persistent_publish(data, queue_name)
4
+ default_exchange.publish(data, :routing_key => queue_name, persistent: true)
5
+ end
6
+
7
+ end
@@ -0,0 +1,21 @@
1
+ module Mumukit::Nuntius::CommandConsumer
2
+
3
+ class << self
4
+
5
+ def start(name)
6
+ Mumukit::Nuntius::Consumer.start "#{name}-commands" do |_delivery_info, _properties, body|
7
+ begin
8
+ choose_command(name, body['type']).execute!(body['data'])
9
+ rescue NameError => e
10
+ logger.info "Command #{name}-#{type} does not exists."
11
+ rescue => e
12
+ logger.info "Failed to proccess #{choose_command(name, type)}, error was: #{e}"
13
+ end
14
+ end
15
+ end
16
+
17
+ def choose_command(name, type)
18
+ "#{name.capitalize}::Command::#{type}".constantize
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ class Mumukit::Nuntius::Connection
2
+
3
+ class << self
4
+
5
+ def config
6
+ @config ||= YAML.load(ERB.new(File.read(File.expand_path '../../../../config/rabbit.yml', __FILE__)).result).
7
+ with_indifferent_access[ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development']
8
+ end
9
+
10
+ def start(queue_name)
11
+ connection = Bunny.new(host: config[:host], user: config[:user], password: config[:password])
12
+ channel = connection.start.create_channel
13
+ queue = channel.queue(queue_name, durable: true)
14
+ [connection, channel, queue]
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,38 @@
1
+ module Mumukit::Nuntius::Consumer
2
+
3
+ class << self
4
+
5
+ def start(queue_name, &block)
6
+ Mumukit::Nuntius::Logger.info "Attaching to queue #{queue_name}"
7
+
8
+ connection, channel, queue = Mumukit::Nuntius::Connection.start(queue_name)
9
+ channel.prefetch(1)
10
+
11
+ begin
12
+ subscribe queue, channel, &block
13
+ rescue Interrupt => _
14
+ Mumukit::Nuntius::Logger.info "Leaving queue #{queue_name}"
15
+
16
+ channel.close
17
+ connection.close
18
+ end
19
+ end
20
+
21
+ def subscribe(queue, channel, &block)
22
+ Mumukit::Nuntius::Logger.debug "Subscribed to queue #{queue}"
23
+
24
+ queue.subscribe(:manual_ack => true, :block => true) do |delivery_info, properties, body|
25
+ Mumukit::Nuntius::Logger.debug "Processing message #{body}"
26
+
27
+ begin
28
+ block.call delivery_info, properties, JSON.parse(body)
29
+ channel.ack(delivery_info.delivery_tag)
30
+ rescue => e
31
+ Mumukit::Nuntius::Logger.warn "Failed to read body: #{e.message} \n #{e.backtrace}"
32
+ channel.persistent_publish(body, delivery_info.routing_key)
33
+ channel.nack(delivery_info.delivery_tag, requeue: true)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,20 @@
1
+ module Mumukit::Nuntius::Publisher
2
+
3
+ class << self
4
+
5
+ def publish(queue_name, data)
6
+ connection, channel, queue = Mumukit::Nuntius::Connection.start(queue_name)
7
+ channel.persistent_publish(data.to_json, queue_name)
8
+ connection.close
9
+ end
10
+
11
+ def method_missing(name, *args, &block)
12
+ if name.to_s.starts_with? 'publish_'
13
+ queue_name = name.to_s.split('publish_').last
14
+ publish queue_name, *args
15
+ else
16
+ super
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ module Mumukit
2
+ module Nuntius
3
+ VERSION = '0.3.0'
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,121 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mumukit-nuntius
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ platform: ruby
6
+ authors:
7
+ - Agustin Pina
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-09-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '2'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '4.1'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '4.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bunny
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '2.3'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '2.3'
83
+ description:
84
+ email:
85
+ - agus@mumuki.org
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - lib/mumukit/nuntius.rb
91
+ - lib/mumukit/nuntius/channel.rb
92
+ - lib/mumukit/nuntius/command_consumer.rb
93
+ - lib/mumukit/nuntius/connection.rb
94
+ - lib/mumukit/nuntius/consumer.rb
95
+ - lib/mumukit/nuntius/publisher.rb
96
+ - lib/mumukit/nuntius/version.rb
97
+ homepage: http://github.com/mumuki/mumukit-auth
98
+ licenses:
99
+ - MIT
100
+ metadata: {}
101
+ post_install_message:
102
+ rdoc_options: []
103
+ require_paths:
104
+ - lib
105
+ required_ruby_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ! '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ requirements: []
116
+ rubyforge_project:
117
+ rubygems_version: 2.4.5
118
+ signing_key:
119
+ specification_version: 4
120
+ summary: Library for working with rabbit queues
121
+ test_files: []