Module: Synapse::Rails::Providers

Defined in:
lib/synapse/rails/providers.rb,
lib/synapse/rails/providers/base.rb

Defined Under Namespace

Classes: Base

Class Method Summary collapse

Class Method Details

.for(service, params = {}) ⇒ Object



11
12
13
14
15
# 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') ⇒ Object



8
9
10
# File 'lib/synapse/rails/providers.rb', line 8

def provider service, function='common'
  @services
end

.use(service, params = {}) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 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