Sha256: de3bf43bd1df9274d7e2223b9262150f234503956257e54b15de2afa4d12d4c0
Contents?: true
Size: 1.43 KB
Versions: 2
Compression:
Stored size: 1.43 KB
Contents
require 'adapter/asserts' require 'adapter/defaults' require 'adapter/exceptions' module Adapter extend self extend Asserts # Stores the definitions for each adapter by name def definitions @definitions ||= {} end def define(name, mod=nil, &block) definition_module = Module.new definition_module.send(:include, Defaults) definition_module.send(:include, mod) unless mod.nil? definition_module.send(:include, Module.new(&block)) if block_given? assert_valid_module(definition_module) adapters.delete(name.to_sym) definitions[name.to_sym] = definition_module end # Memoizes adapter instances based on their definitions def adapters @adapters ||= {} end def [](name) assert_valid_adapter(name) adapters[name.to_sym] ||= get_adapter_instance(name) end private def get_adapter_instance(name) Class.new do attr_reader :client, :options def initialize(client, options={}) @client = client @options = options end include Adapter.definitions[name.to_sym] alias_method :get, :read alias_method :set, :write alias_method :[], :read alias_method :[]=, :write alias_method :get_multiple, :read_multiple def eql?(other) self.class.eql?(other.class) && client == other.client end alias == eql? class_eval "def name; :#{name} end" end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
adapter-0.6.3 | lib/adapter.rb |
adapter-0.6.2 | lib/adapter.rb |