totoro 0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1b553012febde0452556b37f9d34c9213e7e482913b424164dbfeaba9d2f86cf
4
+ data.tar.gz: 45b37fb46a19d763c256b57c90137b684f0a893b9c5b7ca747e52107660ae960
5
+ SHA512:
6
+ metadata.gz: 29bd002e9f11ace735895ae09ca461d15517756e0a221e4e48ccc6b7e79793263b1abb8e5d5c611c2789dbc1c57e33d0f1e937b821cdd22467a6da71b6068cee
7
+ data.tar.gz: 2aca3e038690907aa3ab432834fdbe26e33f39a10b95eac8760197eecf2dfd15c35035ce45b0eee58fd08be71b3f2d4c2824967fe781e5021d21163520a474cb
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+ require 'totoro'
3
+ # You might want to change this
4
+ ENV['RAILS_ENV'] ||= 'development'
5
+
6
+ root = Dir.pwd
7
+ root = File.dirname(root) until File.exist?(File.join(root, 'config'))
8
+ Dir.chdir(root)
9
+
10
+ require File.join(root, 'config', 'environment')
11
+ Rails.logger = logger = Logger.new STDOUT
12
+ logger.level = Logger.const_get(Rails.configuration.log_level.to_s.upcase)
13
+
14
+ worker_class = ARGV[0]
15
+ logger.info 'Start to subscribe to Rabbitmq'
16
+ worker = Totoro::Config.get_worker worker_class
17
+ Totoro::Queue.subscribe(worker_class) do |delivery_info, metadata, payload|
18
+ logger.info "#{worker_class} Received: #{payload}"
19
+ payload_hash = JSON.parse(payload).with_indifferent_access
20
+ worker.process payload_hash, metadata, delivery_info
21
+ end
22
+
23
+ logger.info 'Listening to the Rabbitmq'
24
+ Totoro::Queue.channel.work_pool.join
@@ -0,0 +1,4 @@
1
+ require 'totoro/config'
2
+ require 'totoro/queue'
3
+ module Totoro
4
+ end
@@ -0,0 +1,27 @@
1
+ module Totoro
2
+ class Config
3
+ class <<self
4
+ def data
5
+ @data ||= Rails.application.config_for(:amqp).with_indifferent_access
6
+ end
7
+
8
+ def reset_data
9
+ @data = nil
10
+ end
11
+
12
+ def connect
13
+ data[:connect]
14
+ end
15
+
16
+ def queue(id)
17
+ name = data[:queue][id][:name]
18
+ settings = { durable: data[:queue][id][:durable] }
19
+ [name, settings]
20
+ end
21
+
22
+ def get_worker(worker_class)
23
+ ::Worker.const_get(worker_class.to_s.camelize).new
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,31 @@
1
+ module Totoro
2
+ class Queue
3
+ class <<self
4
+ def connection
5
+ @connection ||= Bunny.new(Totoro::Config.connect).tap(&:start)
6
+ end
7
+
8
+ def channel
9
+ @channel ||= connection.create_channel
10
+ end
11
+
12
+ def exchange
13
+ @exchanges ||= channel.default_exchange
14
+ end
15
+
16
+ # enqueue = publish to direct exchange
17
+ def enqueue(id, payload)
18
+ queue = channel.queue(*Totoro::Config.queue(id))
19
+ payload = JSON.dump payload
20
+ exchange.publish(payload, routing_key: queue.name)
21
+ end
22
+
23
+ def subscribe(id)
24
+ queue = channel.queue(*Totoro::Config.queue(id))
25
+ queue.subscribe do |delivery_info, metadata, payload|
26
+ yield(delivery_info, metadata, payload)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
Binary file
@@ -0,0 +1,17 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = %q{totoro}
3
+ s.version = '0.1.0'
4
+ s.authors = ["Shu hui"]
5
+ s.email = %q{shu.hui@blockchaintech.net.au}
6
+ s.homepage = "https://github.com/blockchaintech-au/totoro"
7
+ s.summary = %q{tool for rabbitmq}
8
+ s.description = %q{Enpower rabbitmq to make it configrable}
9
+
10
+ s.files = Dir['**/*'].keep_if { |file| File.file?(file) }
11
+ s.require_paths = ["lib"]
12
+ s.executables = ["totoro"]
13
+ s.license = "MIT"
14
+
15
+ s.add_runtime_dependency('rails', '>= 5.0.0')
16
+ s.add_runtime_dependency('bunny', '>= 2.9.0')
17
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: totoro
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Shu hui
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-04-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 5.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 5.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: bunny
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.9.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2.9.0
41
+ description: Enpower rabbitmq to make it configrable
42
+ email: shu.hui@blockchaintech.net.au
43
+ executables:
44
+ - totoro
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - bin/totoro
49
+ - lib/totoro.rb
50
+ - lib/totoro/config.rb
51
+ - lib/totoro/queue.rb
52
+ - totoro-0.0.8.gem
53
+ - totoro.gemspec
54
+ homepage: https://github.com/blockchaintech-au/totoro
55
+ licenses:
56
+ - MIT
57
+ metadata: {}
58
+ post_install_message:
59
+ rdoc_options: []
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ requirements: []
73
+ rubyforge_project:
74
+ rubygems_version: 2.7.3
75
+ signing_key:
76
+ specification_version: 4
77
+ summary: tool for rabbitmq
78
+ test_files: []