Module: DatabaseUtils

Included in:
ActiveOrient::API, ActiveOrient::OrientDB
Defined in:
lib/database_utils.rb

Instance Method Summary collapse

Instance Method Details

#class_hierarchy(base_class: '', system_classes: nil) ⇒ Object

Returns the class_hierachy

To fetch all Vertices use:
 class_hiearchie(base_class: 'V').flatten
To fetch all Edges uses:
 class_hierachy(base_class: 'E').flatten

To retrieve the class hierarchy from Objects avoid calling classname,  because it depends on class_hierarchy.


29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/database_utils.rb', line 29

def class_hierarchy base_class: '',  system_classes: nil
  @actual_class_hash = get_classes('name', 'superClass') #if requery || @all_classes.blank?
  def fv s   # :nodoc:
  @actual_class_hash.find_all{|x| x['superClass']== s}.map{|v| v['name']}
  end

  def fx v # :nodoc:
    fv(v.strip).map{|x| ar = fx(x); ar.empty? ? x : [x, ar]}
  end
  complete_hierarchy = fx base_class.to_s
  complete_hierarchy - system_classes()  - [ ["OIdentity", ["ORole", "OUser"]]] unless system_classes
end

#create_edge_class(*name, properties: nil) ⇒ Object



66
67
68
69
70
71
72
# File 'lib/database_utils.rb', line 66

def create_edge_class *name,  properties: nil
  # not nessesary. In V 2.2m E+V are present after creation of a database
  #create_class( :E ) unless database_classes.include? "E"  
  r = name.map{|n| create_class( n, properties: properties){ :E  } }
  @actual_class_hash = get_classes( 'name', 'superClass')
  r.size == 1 ? r.pop : r  # returns the created classes as array if multible classes are provided
end

#create_vertex_class(*name, properties: nil) ⇒ Object



59
60
61
62
63
64
# File 'lib/database_utils.rb', line 59

def create_vertex_class *name, properties: nil 
#    create_class( :V ) unless database_classes.include? "V"
  r= name.map{|n| create_class( n, properties: properties){ :V } }
  @actual_class_hash = get_classes( 'name', 'superClass')
 r.size == 1 ? r.pop : r
end

#database_classes(system_classes: nil, requery: false) ⇒ Object

Returns an array with all names of the classes of the database

caches the result.
Parameters: include_system_classes: false|true, requery: false|true


49
50
51
52
53
54
55
56
57
# File 'lib/database_utils.rb', line 49

def database_classes system_classes: nil, requery: false
  requery = true if ActiveOrient.database_classes.blank?
  if requery
    class_hierarchy system_classes: system_classes #requery: true
    all_classes = get_classes('name').map(&:values).sort.flatten
    ActiveOrient.database_classes = system_classes.present? ? all_classes : all_classes - system_classes()
  end
  ActiveOrient.database_classes
end

#fv(s) ⇒ Object

:nodoc:



31
32
33
# File 'lib/database_utils.rb', line 31

def fv s   # :nodoc:
    @actual_class_hash.find_all{|x| x['superClass']== s}.map{|v| v['name']}
end

#fx(v) ⇒ Object

:nodoc:



35
36
37
# File 'lib/database_utils.rb', line 35

def fx v # :nodoc:
 fv(v.strip).map{|x| ar = fx(x); ar.empty? ? x : [x, ar]}
end

#get_db_superclass(name) ⇒ Object

Service-Method for Model#OrientdbClass



78
79
80
81
82
83
# File 'lib/database_utils.rb', line 78

def get_db_superclass name
  @actual_class_hash = get_classes( 'name', 'superClass') if @actual_class_hash.nil? 
 z= @actual_class_hash.find{|x,y|  x['name'] == name.to_s }
 z['superClass'] unless z.nil?

end

#preallocate_classes(from_model_dir = nil) ⇒ Object

preallocate classes reads any class from the @classes-Array and allocates adequat Ruby-Objects



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/database_utils.rb', line 88

def preallocate_classes from_model_dir= nil
  #  first fetch all non-system-classes
#    io = class_hierarchy 
 # allocate them and call require_model_file on each model
   # if something goes wrong, allocate_classes_in_ruby returns nil, thus compact prevents
   # from calling NilClass.require_model_file
   all_classes = allocate_classes_in_ruby(class_hierarchy).flatten.compact
   classes_with_model_files = all_classes.map do |x| 
     success = x.require_model_file(from_model_dir) 
     if ActiveOrient::Model.keep_models_without_file.nil? && success.nil? && ![E,V].include?(x)
logger.info{ "Database-Class #{x.name} is not asseccible, model file is missing "}
      x.delete_class :only_ruby_space
     end
     success # return_value
   end

end

#system_classes(abstract: false) ⇒ Object

returns the classes set by OrientDB Parameter: abstract: true|false if abstract: true is given, only basic classes (Abstact-Classes) are returend



7
8
9
10
11
12
13
14
15
16
17
# File 'lib/database_utils.rb', line 7

def system_classes abstract: false

    basic=   [  "ORestricted", "OSchedule", "OTriggered", "OSequence"]
  ## "ORid" dropped in V2.2
  extended = ["OIdentity","ORole",  "OUser", "OFunction", "_studio"]
    if abstract
    basic
  else
    basic + extended
  end
end