class Dossier::Client

Attributes

adapter[RW]
options[RW]

Public Class Methods

new(options) click to toggle source
# File lib/dossier/client.rb, line 8
def initialize(options)
  self.options = options.symbolize_keys
end

Public Instance Methods

dossier_adapter() click to toggle source
# File lib/dossier/client.rb, line 16
def dossier_adapter
  adapter_name = options.fetch(:dossier_adapter) { determine_adapter_name }
  "Dossier::Adapter::#{adapter_name.classify}".constantize
end

Private Instance Methods

determine_adapter_name() click to toggle source
# File lib/dossier/client.rb, line 23
def determine_adapter_name
  if options.has_key?(:connection)
    namespace_for(options[:connection].class)
  else
    guess_adapter_name
  end
end
guess_adapter_name() click to toggle source
# File lib/dossier/client.rb, line 35
    def guess_adapter_name
      return namespace_for(loaded_orms.first) if loaded_orms.length == 1

      message = <<-Must_be_one_of_them_newfangled_ones.strip_heredoc
        You didn't specify a dossier_adapter. If you had exactly one
        ORM loaded that Dossier knew about, it would try to choose an
        appropriate adapter, but you have #{loaded_orms.length}.
        Must_be_one_of_them_newfangled_ones
      message << "Specifically, Dossier found #{loaded_orms.join(', ')}" if loaded_orms.any?
      raise IndeterminableAdapter.new(message)
    end
loaded_orms() click to toggle source
# File lib/dossier/client.rb, line 47
def loaded_orms
  [].tap do |loaded_orms|
    loaded_orms << ActiveRecord::Base if defined?(ActiveRecord)
  end
end
namespace_for(klass) click to toggle source
# File lib/dossier/client.rb, line 31
def namespace_for(klass)
  klass.name.split('::').first.underscore
end