esp-commons 0.2.8 → 0.2.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.