talho/openphin

View on GitHub
app/models/service/base.rb

Summary

Maintainability
A
55 mins
Test Coverage
class Service::Base

  # Configuration is used to configure services. It should
  # be configured through a block. For example:
  #   Service::Sms.configure do |config|
  #     config.delivery_method = :deliver
  #   end
  #
  # You can also configure arbitrary options that a service supports
  # by storing them in the options hash. For example:
  #   Service::Sms.configure do |config|
  #     config.options[:sms_config] = YAML.load("sms_config.yml")
  #   end
  #
  # The two possible delivery options are :test and :deliver. The
  # :test delivery method should be used in the 'test' and 'cucumber'
  # environments. It will add a #deliveries method to the service
  # in which you can verify that messages are being delivered.
  # For example:
  #   Service::Sms.configure do |config|
  #     config.delivery_method = :test
  #   end
  #   
  #   # in test after a delivery is performed
  #   Service::Sms.deliveries # => array of delivered messages
  # 
  # The default delivery method is +deliver+
  PROVIDERS = {:swn => Service::Swn::Message, :talho => Service::Talho::Message}
  
  def self.dispatch message
    providers = []
    if message.Behavior && message.Behavior.Delivery
      providers = message.Behavior.Delivery.Providers.map(&:name).map(&:to_sym).uniq
      providers << message.Behavior.Delivery.defaultProvider.to_sym unless message.Behavior.Delivery.defaultProvider.blank?
    end
    providers = [:swn] if providers.blank?

    providers.each do |provider|
      if PROVIDERS[provider]
        provider_message = PROVIDERS[provider].new(:message => message)
        provider_message.deliver
      else
        LOGGER.warn "#{provider} is not a valid service provider"
      end
    end
  end
end