module Synapse::Rails::Providers

Public Class Methods

for(service, params={}) click to toggle source
# File lib/synapse/rails/providers.rb, line 11
def for service, params={}
  klass_name = "::Synapse::Rails::Providers::#{service.to_s.camelize}"
  params = params.with_indifferent_access.except(:if)
  Object.const_get(klass_name).new params
end
provider(service, function='common') click to toggle source
# File lib/synapse/rails/providers.rb, line 8
def provider service, function='common'
  @services
end
use(service, params={}) click to toggle source
# File lib/synapse/rails/providers.rb, line 16
def use service, params={}
  klass_name = "::Synapse::Rails::Providers::#{service.to_s.camelize}"
  return self.send(:for,service,params) if Object.const_defined?(klass_name)
  tester = params[:if] if params[:if].is_a? Proc
  tester = Proc.new { Object.const_defined? params[:if] } if [Symbol, Class].include? params[:if].class
  tester = Proc.new { true } if params[:if] == nil
  return unless tester.call
  build = true unless Object.const_defined? klass_name
  build = true unless Object.const_defined?(klass_name).respond_to? :synapse
  if build
    klass = Class.new(Base)
    klass.service = service
    klass.tester  = tester
    self.const_set(klass_name.split('::').last,klass)
  end
  self.send(:for,service,params)
end