module ActiveOrient
  module Init

=begin
Connects to an OrientDB-Server

A sample configuration:

  	 config_file = File.expand_path('../../config/connect.yml', __FILE__)
  	 if config_file.present?
  		 connectyml  = YAML.load_file( config_file )[:orientdb]
  	 else
  		puts "config/connect.yml not found or misconfigurated"
  		Kernel.exit
  	 end

  	 ActiveOrient::Init.connect  database: database,
						server:  connectyml[:server],
						port:    2480,
						user:   connectyml[:admin][:user], 
						password: connectyml[:admin][:pass] 


We are setting up Base-classes E and V which is required for a proper initialisation
and allocate the logger.

No other class is loaded.

This has to be done in subsequent calls of 
	 ao = ActiveOrient::OrientDB.new 
	

returns the active OrientDB-Instance


=end
		def self.connect **defaults
				define_namespace  namespace: :object 
				ActiveOrient::OrientDB.configure_logger defaults[:logger]
        ao = ActiveOrient::OrientDB.new  defaults.merge preallocate: false
				ao.create_class 'E'
				ao.create_class 'V'
				ao  # return client instance
		end
=begin
Parameters: 
 yml: hash from config.yml , 
 namespace: Class to use as Namespace

A custom Constant can be provided via Block

i.e.
  configyml =  YAML.load_file (...)  # with an entry "namespace:" 
  ActiveOrient.Init.define_namespace yml: configyml 
  #or
  ActiveOrient.Init.define_namespace namespace: :self | :object | :active_orient
	#or
	module IBi; end # first declare the Module-Const
  # then assign to the namespace
  ActiveOrient.Init.define_namespace { IB } 
		
=end
    def self.define_namespace(  yml: {}, namespace: nil )
      n =  namespace.presence || yml[:namespace].presence || :object
			ActiveOrient::Model.namespace = if block_given?
																				yield
																			else
																				case n
																				when :self
																					ActiveOrient::Model
																				when :object
																					Object
																				when :active_orient
																					ActiveOrient
																				end
																			end
		end # define namespace
  end # module Init
end  # module ActiveOrient