Module: ActiveCrew::Responders::FayeResponder
- Defined in:
- lib/active_crew/responders/faye_responder.rb
Overview
ActiveCrew Faye responder.
Defined Under Namespace
Classes: FayeResponderError
Constant Summary collapse
- MAX_RETRIES =
5
Class Method Summary collapse
-
.channel(invoker, options) ⇒ Object
Invoker channel name.
- .config ⇒ Object
- .config_path ⇒ Object
-
.header ⇒ Object
Faye request header.
-
.payload(name, invoker, options, model) ⇒ Object
Faye request payload.
- .request(message) ⇒ Object
-
.respond(name, invoker, options, model) ⇒ Object
Respond with faye Respond with faye.
-
.serialize(model, options = {}) ⇒ Object
Serialize payload.
- .serialize_invoker(invoker) ⇒ Object
- .status(model) ⇒ Object
- .url ⇒ Object
-
.validate(response) ⇒ Object
Validate faye response.
Class Method Details
.channel(invoker, options) ⇒ Object
Returns Invoker channel name.
38 39 40 |
# File 'lib/active_crew/responders/faye_responder.rb', line 38 def channel(invoker, ) [:channel] || "/#{invoker.class.to_s.underscore}/#{invoker.id}" end |
.config ⇒ Object
96 97 98 99 100 101 |
# File 'lib/active_crew/responders/faye_responder.rb', line 96 def config return @config if defined? @config @config = YAML.load(ERB.new(File.new(config_path).read).result)[Rails.env] @config = (@config || {}).symbolize_keys end |
.config_path ⇒ Object
103 104 105 |
# File 'lib/active_crew/responders/faye_responder.rb', line 103 def config_path File.join(Rails.root, 'config', 'faye.yml') end |
.header ⇒ Object
Returns Faye request header.
76 77 78 79 80 81 82 |
# File 'lib/active_crew/responders/faye_responder.rb', line 76 def header { 'Content-Type' => 'application/json', 'Pragma' => 'no-cache', 'X-Requested-With' => 'XMLHttpRequest' } end |
.payload(name, invoker, options, model) ⇒ Object
Returns Faye request payload.
43 44 45 46 47 48 49 50 51 |
# File 'lib/active_crew/responders/faye_responder.rb', line 43 def payload(name, invoker, , model) { invoker: serialize_invoker(invoker), session: [:session], command: name, status: status(model), response: serialize(model, ) } end |
.request(message) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/active_crew/responders/faye_responder.rb', line 21 def request() retries = 0 begin validate RestClient.post url, .to_json, header rescue FayeResponderError retries += 1 retry if retries < MAX_RETRIES Rails.logger.fatal "[#{self}] #{$ERROR_INFO.}" rescue Exception Rails.logger.fatal "[#{self}] #{$ERROR_INFO.}" end end |
.respond(name, invoker, options, model) ⇒ Object
Respond with faye Respond with faye
15 16 17 18 19 |
# File 'lib/active_crew/responders/faye_responder.rb', line 15 def respond(name, invoker, , model) request channel: channel(invoker, ), data: payload(name, invoker, , model), ext: { publish_key: config[:publish_key] } end |
.serialize(model, options = {}) ⇒ Object
Serialize payload
58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/active_crew/responders/faye_responder.rb', line 58 def serialize(model, = {}) return { base: model. } if model.is_a? CommandError if model.is_a?(Array) || !model.respond_to?(:errors) || model.errors.empty? # SerializableResource need only symbolize options = .slice(:serializer, :each_serializer).symbolize_keys resource = ActiveModelSerializers::SerializableResource.new model, resource.adapter.respond_to?(:serializable_hash) ? resource.serializable_hash : model else ActiveModelSerializers::SerializableResource.new(model.errors, root: 'errors').serializable_hash[:errors] end end |
.serialize_invoker(invoker) ⇒ Object
53 54 55 |
# File 'lib/active_crew/responders/faye_responder.rb', line 53 def serialize_invoker(invoker) serialize invoker, serializer: "#{invoker.class}::InvokerSerializer".constantize end |
.status(model) ⇒ Object
71 72 73 |
# File 'lib/active_crew/responders/faye_responder.rb', line 71 def status(model) !model.is_a?(CommandError) && (!model.respond_to?(:errors) || model.errors.empty?) ? :success : :failure end |
.url ⇒ Object
92 93 94 |
# File 'lib/active_crew/responders/faye_responder.rb', line 92 def url "#{config[:ssl] ? 'https' : 'http'}://#{config[:host]}/faye" end |
.validate(response) ⇒ Object
Validate faye response
85 86 87 88 89 90 |
# File 'lib/active_crew/responders/faye_responder.rb', line 85 def validate(response) fail FayeResponderError, response.code unless response.code == 200 response = JSON.parse(response)[0].symbolize_keys fail FayeResponderError, response[:error] unless response[:successful] end |