esp-commons 0.2.8 → 0.2.9

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.
@@ -4,7 +4,7 @@ module EspCommons
4
4
  class Engine < ::Rails::Engine
5
5
  isolate_namespace EspCommons
6
6
 
7
- config.autoload_paths << File.expand_path('../', __FILE__)
7
+ config.autoload_paths << File.expand_path('../lib/', __FILE__)
8
8
 
9
9
  config.before_configuration do
10
10
  Settings.define 'appeals.url', :env_var => 'APPEALS_URL'
@@ -6,7 +6,7 @@ class MessageMaker
6
6
 
7
7
  amqp_client.start
8
8
 
9
- exchange = amqp_client.exchange('esp.exchange', :type => :topic)
9
+ exchange = amqp_client.exchange('esp', :type => :topic)
10
10
 
11
11
  queue = amqp_client.queue(queue_name, :durable => true)
12
12
 
@@ -3,7 +3,7 @@ require 'curb'
3
3
  class Requester
4
4
  def initialize(url, headers_accept = nil)
5
5
  @response = Curl::Easy.perform(url) do |curl|
6
- curl.headers['Accept'] = headers_accept
6
+ curl.headers['Accept'] = headers_accept if headers_accept
7
7
  end
8
8
  end
9
9
 
@@ -20,7 +20,7 @@ class Requester
20
20
  end
21
21
 
22
22
  def response_body
23
- @response_body ||= response.body_str
23
+ @response_body ||= response.body_str.force_encoding 'UTF-8'
24
24
  end
25
25
 
26
26
  def response_hash
@@ -0,0 +1,56 @@
1
+ require 'amqp'
2
+
3
+ class Subscriber
4
+ def start
5
+ subscribers.each do |subscriber|
6
+ AMQP.start(Settings['amqp.url']) do |connection|
7
+ channel = AMQP::Channel.new(connection)
8
+ channel.prefetch(1)
9
+
10
+ exchange = channel.topic('esp')
11
+ queue = channel.queue(queue_name(subscriber), :durable => true)
12
+
13
+ queue.bind(exchange, :routing_key => '*')
14
+
15
+ Signal.trap("TERM") do
16
+ connection.close do
17
+ logger.info "#{subscriber.class} stopped"
18
+ EM.stop { exit }
19
+ end
20
+ end
21
+
22
+ queue.subscribe(:ack => true) do |header, message|
23
+ method = header.routing_key
24
+ if subscriber.respond_to?(method)
25
+ logger.debug("#{subscriber.class} receive #{method}: #{message}")
26
+ subscriber.send(method, message)
27
+ header.ack
28
+ else
29
+ logger.warn "#{subscriber.class} not respond to #{method}"
30
+ end
31
+ end
32
+
33
+ logger.info "#{subscriber.class} started"
34
+ end
35
+ end
36
+ end
37
+
38
+ def subscribers
39
+ Dir.glob("#{Rails.root}/lib/subscribers/*").map do |subscriber_path|
40
+ require subscriber_path
41
+ File.basename(subscriber_path, '.rb').classify.constantize.new
42
+ end
43
+ end
44
+
45
+ def logger
46
+ @@logger ||= ActiveSupport::BufferedLogger.new("#{Rails.root}/log/subscriber.log")
47
+ end
48
+
49
+ private
50
+ def queue_name(subscriber)
51
+ from = subscriber.class.name.sub(/Subscriber$/, '').underscore
52
+ to = Rails.application.class.name.sub('::Application', '').underscore
53
+
54
+ "esp.#{from}.#{to}"
55
+ end
56
+ end
@@ -1,3 +1,3 @@
1
1
  module EspCommons
2
- VERSION = "0.2.8"
2
+ VERSION = "0.2.9"
3
3
  end
@@ -1,7 +1,12 @@
1
1
  module EspCommons
2
2
  module Generators
3
3
  class InstallGenerator < Rails::Generators::Base
4
- source_root File.expand_path('..', __FILE__)
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ def create_scripts
7
+ copy_file 'script/subscriber'
8
+ chmod 'script/subscriber', 0755
9
+ end
5
10
  end
6
11
  end
7
12
  end
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path('../../config/environment', __FILE__)
4
+
5
+ dir = Rails.root.to_s
6
+
7
+ daemon_name = (dir.split('/')[-2..-1] << "daemon").join('-')
8
+
9
+ daemon_options = {
10
+ :multiple => false,
11
+ :dir_mode => :normal,
12
+ :dir => Rails.root.join('tmp', 'pids'),
13
+ :backtrace => true
14
+ }
15
+
16
+ Daemons.run_proc(daemon_name, daemon_options) do
17
+ if ARGV.include?('--')
18
+ ARGV.slice! 0..ARGV.index('--')
19
+ else
20
+ ARGV.clear
21
+ end
22
+
23
+ Dir.chdir dir
24
+
25
+ Subscriber.new.start
26
+ end
27
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: esp-commons
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.2.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-04-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: active_attr
16
- requirement: &14927960 !ruby/object:Gem::Requirement
16
+ requirement: &4143620 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *14927960
24
+ version_requirements: *4143620
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: curb
27
- requirement: &14927280 !ruby/object:Gem::Requirement
27
+ requirement: &4142600 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *14927280
35
+ version_requirements: *4142600
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: openteam-commons
38
- requirement: &14925220 !ruby/object:Gem::Requirement
38
+ requirement: &4141820 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *14925220
46
+ version_requirements: *4141820
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rails
49
- requirement: &14924400 !ruby/object:Gem::Requirement
49
+ requirement: &4141160 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *14924400
57
+ version_requirements: *4141160
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: sqlite3
60
- requirement: &14923640 !ruby/object:Gem::Requirement
60
+ requirement: &4233920 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *14923640
68
+ version_requirements: *4233920
69
69
  description: Description of EspCommons.
70
70
  email:
71
71
  - mail@openteam.ru
@@ -75,13 +75,15 @@ extra_rdoc_files: []
75
75
  files:
76
76
  - app/models/esp_commons/image.rb
77
77
  - config/locales/commons.ru.yml
78
+ - lib/esp-commons/lib/message_maker.rb
79
+ - lib/esp-commons/lib/subscriber.rb
80
+ - lib/esp-commons/lib/requester.rb
78
81
  - lib/esp-commons/engine.rb
79
- - lib/esp-commons/message_maker.rb
80
- - lib/esp-commons/requester.rb
81
82
  - lib/esp-commons/version.rb
82
83
  - lib/esp-commons.rb
83
- - lib/generators/esp_commons/install/config/schedule.rb
84
84
  - lib/generators/esp_commons/install/install_generator.rb
85
+ - lib/generators/esp_commons/install/templates/config/schedule.rb
86
+ - lib/generators/esp_commons/install/templates/script/subscriber
85
87
  - MIT-LICENSE
86
88
  - Rakefile
87
89
  - README.rdoc
@@ -99,7 +101,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
101
  version: '0'
100
102
  segments:
101
103
  - 0
102
- hash: 191960683962064822
104
+ hash: -3731403451187529304
103
105
  required_rubygems_version: !ruby/object:Gem::Requirement
104
106
  none: false
105
107
  requirements:
@@ -108,10 +110,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
110
  version: '0'
109
111
  segments:
110
112
  - 0
111
- hash: 191960683962064822
113
+ hash: -3731403451187529304
112
114
  requirements: []
113
115
  rubyforge_project:
114
- rubygems_version: 1.8.16
116
+ rubygems_version: 1.8.15
115
117
  signing_key:
116
118
  specification_version: 3
117
119
  summary: Summary of EspCommons.