Sha256: 2d0b991675907b6b81ec536c7e07f5c46e7c0538c7be61d9d78cc476ede70f87
Contents?: true
Size: 1.54 KB
Versions: 2
Compression:
Stored size: 1.54 KB
Contents
module Sym module App module Password module Providers class << self attr_accessor :registry attr_accessor :providers attr_accessor :detected def register(provider_class) self.registry ||= {} registry[short_name(provider_class)] = provider_class self.providers ||= [] self.providers << provider_class end # Detect first instance that is "alive?" and return it. def detect self.detected ||= self.providers.inject(nil) do |instance, provider_class| instance || (p = provider_class.new; p.alive? ? p : nil) end end def provider(p = nil) provider_from_argument(p) || detect end private def short_name(klass) klass.name.gsub(/.*::(\w+)Provider/, '\1').downcase.to_sym end def provider_from_argument(p) case p when String, Symbol provider_class_name = "#{p.to_s.capitalize}Provider" Sym::App::Password::Providers.const_defined?(provider_class_name) ? Sym::App::Password::Providers.const_get(provider_class_name).new : nil end end end end end end end # Order is important — they are tried in this order for auto detect require 'sym/app/password/providers/memcached_provider' require 'sym/app/password/providers/drb_provider'
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
sym-2.2.1 | lib/sym/app/password/providers.rb |
sym-2.2.0 | lib/sym/app/password/providers.rb |