active-orient 0.42 → 0.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/Gemfile +13 -5
- data/Guardfile +12 -4
- data/README.md +67 -280
- data/VERSION +1 -1
- data/active-orient.gemspec +6 -5
- data/bin/active-orient-0.6.gem +0 -0
- data/bin/active-orient-console +85 -0
- data/config/boot.rb +72 -1
- data/config/config.yml +10 -0
- data/config/connect.yml +9 -4
- data/examples/books.rb +92 -40
- data/examples/streets.rb +89 -85
- data/examples/test_commands.rb +97 -0
- data/examples/test_commands_2.rb +59 -0
- data/examples/test_commands_3.rb +55 -0
- data/examples/test_commands_4.rb +33 -0
- data/examples/time_graph.md +162 -0
- data/lib/active-orient.rb +75 -9
- data/lib/base.rb +238 -169
- data/lib/base_properties.rb +68 -60
- data/lib/class_utils.rb +226 -0
- data/lib/database_utils.rb +98 -0
- data/lib/init.rb +79 -0
- data/lib/java-api.rb +442 -0
- data/lib/jdbc.rb +211 -0
- data/lib/model/custom.rb +26 -0
- data/lib/model/edge.rb +70 -0
- data/lib/model/model.rb +134 -0
- data/lib/model/the_class.rb +607 -0
- data/lib/model/the_record.rb +266 -0
- data/lib/model/vertex.rb +236 -0
- data/lib/orientdb_private.rb +48 -0
- data/lib/other.rb +371 -0
- data/lib/railtie.rb +68 -0
- data/lib/rest/change.rb +147 -0
- data/lib/rest/create.rb +279 -0
- data/lib/rest/delete.rb +134 -0
- data/lib/rest/operations.rb +211 -0
- data/lib/rest/read.rb +171 -0
- data/lib/rest/rest.rb +112 -0
- data/lib/rest_disabled.rb +24 -0
- data/lib/support/logging.rb +38 -0
- data/lib/support/orient.rb +196 -0
- data/lib/support/orientquery.rb +469 -0
- data/rails.md +154 -0
- data/rails/activeorient.rb +32 -0
- data/rails/config.yml +10 -0
- data/rails/connect.yml +17 -0
- metadata +65 -24
- data/active-orient-0.4.gem +0 -0
- data/active-orient-0.41.gem +0 -0
- data/lib/model.rb +0 -468
- data/lib/orient.rb +0 -98
- data/lib/query.rb +0 -88
- data/lib/rest.rb +0 -1059
- data/lib/support.rb +0 -372
- data/test.rb +0 -4
- data/usecase.md +0 -91
data/lib/base_properties.rb
CHANGED
@@ -1,87 +1,96 @@
|
|
1
1
|
require 'active_model'
|
2
2
|
require 'active_support/concern'
|
3
|
-
require 'active_support/hash_with_indifferent_access'
|
3
|
+
#require 'active_support/hash_with_indifferent_access'
|
4
4
|
|
5
5
|
module ActiveOrient
|
6
|
-
|
7
|
-
# Module adds prop Macro and
|
8
6
|
module BaseProperties
|
9
7
|
extend ActiveSupport::Concern
|
10
8
|
|
11
|
-
|
9
|
+
# Default presentation of ActiveOrient::Model-Objects
|
12
10
|
|
13
|
-
# Default presentation
|
14
11
|
def to_human
|
15
12
|
"<#{self.class.to_s.demodulize}: " + content_attributes.map do |attr, value|
|
16
|
-
|
17
|
-
|
13
|
+
v= case value
|
14
|
+
when ActiveOrient::Model
|
15
|
+
"< #{self.class.to_.demodulize} : #{value.rrid} >"
|
16
|
+
when OrientSupport::Array
|
17
|
+
value.rrid #.to_human #.map(&:to_human).join("::")
|
18
|
+
else
|
19
|
+
value.from_orient
|
20
|
+
end
|
21
|
+
"%s : %s" % [ attr, v] unless v.nil?
|
22
|
+
end.compact.sort.join(', ') + ">".gsub('"' , ' ')
|
18
23
|
end
|
19
24
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
25
|
+
# Comparison support
|
26
|
+
|
27
|
+
def content_attributes # :nodoc:
|
28
|
+
# HashWithIndifferentAccess[attributes.reject do |(attr, _)|
|
29
|
+
Hash[attributes.reject do |(attr, _)|
|
30
|
+
attr.to_s =~ /(_count)\z/ || attr.to_s =~ /^in_/ || attr.to_s =~ /^out_/ || [:created_at, :updated_at, :type, :id, :order_id, :contract_id].include?(attr.to_sym)
|
26
31
|
end]
|
27
32
|
end
|
28
33
|
|
29
|
-
|
30
|
-
|
31
|
-
|
34
|
+
# return a string ready to include as embedded document
|
35
|
+
def embedded
|
36
|
+
{ "@type" => 'd', "@class" => self.class.ref_name }
|
37
|
+
.merge(content_attributes)
|
38
|
+
.map{|y,x| z=''; z << y.to_s << ': ' << x.to_or.to_s }.join(' ,')
|
39
|
+
|
40
|
+
end
|
32
41
|
|
33
|
-
|
42
|
+
# Update nil attributes from given Hash or model
|
43
|
+
|
44
|
+
def update_missing attrs # :nodoc:
|
45
|
+
attrs = attrs.content_attributes unless attrs.kind_of?(Hash)
|
46
|
+
attrs.each{|attr, val| send "#{attr}=", val if send(attr).blank?}
|
34
47
|
self # for chaining
|
35
48
|
end
|
36
49
|
|
37
|
-
|
38
|
-
|
50
|
+
# Default Model comparison
|
51
|
+
|
52
|
+
def == other # :nodoc:
|
39
53
|
case other
|
40
54
|
when String # Probably a link or a rid
|
41
|
-
|
55
|
+
"##{rid}" == other || rid == other
|
42
56
|
when ActiveOrient::Model
|
43
|
-
|
57
|
+
rid == other.rid
|
44
58
|
else
|
45
|
-
content_attributes.keys.inject(true)
|
46
|
-
res && other.respond_to?(key) && (send(key) == other.send(key))
|
59
|
+
content_attributes.keys.inject(true){ |res, key|
|
60
|
+
res && other.respond_to?(key) && (send(key) == other.send(key))
|
61
|
+
}
|
47
62
|
end
|
48
63
|
end
|
49
64
|
|
50
|
-
|
65
|
+
# Default attributes support
|
51
66
|
|
52
67
|
def default_attributes
|
53
|
-
|
54
|
-
|
55
|
-
}
|
68
|
+
{}
|
69
|
+
#{:created_at => DateTime.now }
|
56
70
|
end
|
57
71
|
|
58
|
-
def set_attribute_defaults
|
72
|
+
def set_attribute_defaults # :nodoc:
|
59
73
|
default_attributes.each do |key, val|
|
60
74
|
self.send("#{key}=", val) if self.send(key).nil?
|
61
|
-
# self.send("#{key}=", val) if self[key].nil? # Problems with association defaults
|
62
75
|
end
|
63
76
|
end
|
64
77
|
|
65
78
|
included do
|
66
|
-
|
67
79
|
after_initialize :set_attribute_defaults
|
68
80
|
|
69
|
-
|
81
|
+
# Class macros
|
70
82
|
|
71
|
-
def self.prop *properties
|
83
|
+
def self.prop *properties # :nodoc:
|
72
84
|
prop_hash = properties.last.is_a?(Hash) ? properties.pop : {}
|
73
|
-
|
74
85
|
properties.each { |names| define_property names, nil }
|
75
86
|
prop_hash.each { |names, type| define_property names, type }
|
76
87
|
end
|
77
88
|
|
78
|
-
def self.define_property names, body
|
89
|
+
def self.define_property names, body # :nodoc:
|
79
90
|
aliases = [names].flatten
|
80
91
|
name = aliases.shift
|
81
92
|
instance_eval do
|
82
|
-
|
83
93
|
define_property_methods name, body
|
84
|
-
|
85
94
|
aliases.each do |ali|
|
86
95
|
alias_method "#{ali}", name
|
87
96
|
alias_method "#{ali}=", "#{name}="
|
@@ -89,8 +98,7 @@ module ActiveOrient
|
|
89
98
|
end
|
90
99
|
end
|
91
100
|
|
92
|
-
def self.define_property_methods name, body={}
|
93
|
-
#p name, body
|
101
|
+
def self.define_property_methods name, body={} # :nodoc:
|
94
102
|
case body
|
95
103
|
when '' # default getter and setter
|
96
104
|
define_property_methods name
|
@@ -102,25 +110,26 @@ module ActiveOrient
|
|
102
110
|
:validate => body[2]
|
103
111
|
|
104
112
|
when Hash # recursion base case
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
113
|
+
# puts "NAME: "+name.to_s
|
114
|
+
# puts "BODY::"+body.inspect
|
115
|
+
getter = case # Define getter
|
116
|
+
when body[:get].respond_to?(:call)
|
117
|
+
body[:get]
|
118
|
+
when body[:get]
|
119
|
+
proc{self[name].send "to_#{body[:get]}"}
|
120
|
+
else
|
121
|
+
proc{self[name]}
|
122
|
+
end
|
123
|
+
define_method name, &getter if getter
|
124
|
+
setter = case # Define setter
|
125
|
+
when body[:set].respond_to?(:call)
|
126
|
+
body[:set]
|
127
|
+
when body[:set]
|
128
|
+
proc{|value| self[name] = value.send "to_#{body[:set]}"}
|
129
|
+
else
|
130
|
+
proc{|value| self[name] = value} # p name, value;
|
131
|
+
end
|
132
|
+
define_method "#{name}=", &setter if setter
|
124
133
|
|
125
134
|
# Define validator(s)
|
126
135
|
[body[:validate]].flatten.compact.each do |validator|
|
@@ -132,16 +141,15 @@ module ActiveOrient
|
|
132
141
|
end
|
133
142
|
end
|
134
143
|
|
135
|
-
|
144
|
+
# todo define self[:name] accessors for :virtual and :flag properties
|
136
145
|
|
137
146
|
else # setter given
|
138
147
|
define_property_methods name, :set => body, :get => body
|
139
148
|
end
|
140
149
|
end
|
141
150
|
|
142
|
-
# Timestamps in lightweight models
|
143
151
|
unless defined?(ActiveRecord::Base) && ancestors.include?(ActiveRecord::Base)
|
144
|
-
prop :created_at
|
152
|
+
prop :created_at #, :updated_at
|
145
153
|
end
|
146
154
|
|
147
155
|
end # included
|
data/lib/class_utils.rb
ADDED
@@ -0,0 +1,226 @@
|
|
1
|
+
module ClassUtils
|
2
|
+
# ClassUitils is included in Rest- and Java-Api-classes
|
3
|
+
|
4
|
+
=begin
|
5
|
+
Returns a valid database-class name, nil if the class does not exists
|
6
|
+
=end
|
7
|
+
|
8
|
+
def classname name_or_class # :nodoc:
|
9
|
+
name = case name_or_class
|
10
|
+
when ActiveOrient::Model
|
11
|
+
name_or_class.class.ref_name
|
12
|
+
when Class
|
13
|
+
ActiveOrient.database_classes.key(name_or_class)
|
14
|
+
else
|
15
|
+
if ActiveOrient.database_classes.has_key?( name_or_class.to_s )
|
16
|
+
name_or_class
|
17
|
+
else
|
18
|
+
logger.progname = 'ClassUtils#Classname'
|
19
|
+
logger.warn{ "Classname #{name_or_class.inspect} ://: #{name} not present in #{ActiveOrient.database}" }
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
def allocate_class_in_ruby db_classname, &b
|
25
|
+
# retrieve the superclass recursively
|
26
|
+
|
27
|
+
unless ActiveOrient.database_classes[ db_classname ].is_a? Class
|
28
|
+
|
29
|
+
s = get_db_superclass( db_classname )
|
30
|
+
superclass = if s.present? # get the superclass recusivly
|
31
|
+
allocate_class_in_ruby( s, &b )
|
32
|
+
else
|
33
|
+
ActiveOrient::Model
|
34
|
+
end
|
35
|
+
# superclass is nil, if allocate_class_in_ruby is recursivley
|
36
|
+
# called and the superclass was not established
|
37
|
+
if superclass.nil?
|
38
|
+
ActiveOrient.database_classes[ db_classname ] = "Superclass model file missing"
|
39
|
+
return
|
40
|
+
end
|
41
|
+
reduced_classname = superclass.namespace_prefix.present? ? db_classname.split( superclass.namespace_prefix ).last : db_classname
|
42
|
+
classname = superclass.naming_convention( reduced_classname )
|
43
|
+
|
44
|
+
the_class = if !( ActiveOrient::Model.namespace.send :const_defined?, classname, false )
|
45
|
+
ActiveOrient::Model.namespace.send( :const_set, classname, Class.new( superclass ) )
|
46
|
+
elsif ActiveOrient::Model.namespace.send( :const_get, classname).ancestors.include?( ActiveOrient::Model )
|
47
|
+
ActiveOrient::Model.namespace.send( :const_get, classname)
|
48
|
+
else
|
49
|
+
t= ActiveOrient::Model.send :const_set, classname, Class.new( superclass )
|
50
|
+
logger.warn{ "Unable to allocate class #{classname} in Namespace #{ActiveOrient::Model.namespace}"}
|
51
|
+
logger.warn{ "Allocation took place with namespace ActiveOrient::Model" }
|
52
|
+
t
|
53
|
+
end
|
54
|
+
the_class.ref_name = db_classname
|
55
|
+
keep_the_dataset = block_given? ? yield( the_class ) : true
|
56
|
+
if keep_the_dataset
|
57
|
+
ActiveOrient.database_classes[db_classname] = the_class
|
58
|
+
the_class.ref_name = db_classname
|
59
|
+
the_class # return the generated class
|
60
|
+
else
|
61
|
+
unless ["E","V"].include? classname # never remove Base-Classes!
|
62
|
+
base_classname = the_class.to_s.split("::").last.to_sym
|
63
|
+
|
64
|
+
if ActiveOrient::Model.namespace.send( :const_defined? , classname)
|
65
|
+
ActiveOrient::Model.namespace.send( :remove_const, classname )
|
66
|
+
else
|
67
|
+
ActiveOrient::Model.send( :remove_const, classname)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
nil # return-value
|
71
|
+
end
|
72
|
+
else
|
73
|
+
# return previosly allocated ruby-class
|
74
|
+
ActiveOrient.database_classes[db_classname]
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
=begin
|
79
|
+
create a single class and provide properties as well
|
80
|
+
|
81
|
+
ORD.create_class( the_class_name as String or Symbol (nessesary) ,
|
82
|
+
properties: a Hash with property- and Index-descriptions (optional)) do
|
83
|
+
{ superclass: The name of the superclass as String or Symbol ,
|
84
|
+
abstract: true|false
|
85
|
+
}
|
86
|
+
end
|
87
|
+
|
88
|
+
or
|
89
|
+
|
90
|
+
ORD.create_class( class1, class2 ... ) { Superclass }
|
91
|
+
|
92
|
+
ORD.create_class( class ) { {superclass: the_superclass_name, abstract: true_or_false } }
|
93
|
+
|
94
|
+
ORD.create_class class
|
95
|
+
|
96
|
+
=end
|
97
|
+
def create_class( *class_names, properties: nil, &b )
|
98
|
+
|
99
|
+
|
100
|
+
if block_given?
|
101
|
+
the_block = yield
|
102
|
+
superclass, abstract = if the_block.is_a? Class
|
103
|
+
[ the_block, nil ]
|
104
|
+
elsif the_block.is_a?(String) || the_block.is_a?(Symbol)
|
105
|
+
[ ActiveOrient.database_classes[the_block] , nil ]
|
106
|
+
elsif the_block.is_a?(Hash)
|
107
|
+
[ ActiveOrient.database_classes[the_block[:superclass]],
|
108
|
+
ActiveOrient.database_classes[the_block[:abstract]] ]
|
109
|
+
end
|
110
|
+
end
|
111
|
+
superclass = superclass.presence || ActiveOrient::Model
|
112
|
+
|
113
|
+
|
114
|
+
r= class_names.map do | the_class_name |
|
115
|
+
the_class_name = superclass.namespace_prefix + the_class_name.to_s
|
116
|
+
|
117
|
+
## lookup the database_classes-Hash
|
118
|
+
if ActiveOrient.database_classes[the_class_name].is_a?(Class)
|
119
|
+
ActiveOrient.database_classes[the_class_name]
|
120
|
+
else
|
121
|
+
if superclass =="" || superclass.ref_name == ""
|
122
|
+
create_this_class the_class_name
|
123
|
+
else
|
124
|
+
create_this_class( the_class_name ) do
|
125
|
+
if the_block.is_a?(Hash)
|
126
|
+
the_block[:superclass] = superclass.ref_name
|
127
|
+
the_block
|
128
|
+
else
|
129
|
+
{ superclass: superclass.ref_name }
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
database_classes # update_class_array
|
134
|
+
create_properties( the_name , properties ) if properties.present?
|
135
|
+
allocate_class_in_ruby( the_class_name ) do |that_class|
|
136
|
+
keep_the_dataset = true
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
r.size==1 ? r.pop : r # return a single class or an array of created classes
|
141
|
+
end
|
142
|
+
|
143
|
+
=begin
|
144
|
+
Creates one or more vertex-classes and allocates the provided properties to each class.
|
145
|
+
|
146
|
+
ORD.create_vertex_class :a
|
147
|
+
=> A
|
148
|
+
ORD.create_vertex_class :a, :b, :c
|
149
|
+
=> [A, B, C]
|
150
|
+
=end
|
151
|
+
|
152
|
+
def create_vertex_class *name, properties: nil
|
153
|
+
r= name.map{|n| create_class( n, properties: properties){ V } }
|
154
|
+
r.size == 1 ? r.pop : r
|
155
|
+
end
|
156
|
+
=begin
|
157
|
+
Creates one or more edge-classes and allocates the provided properties to each class.
|
158
|
+
=end
|
159
|
+
|
160
|
+
def create_edge_class *name, properties: nil
|
161
|
+
r = name.map{|n| create_class( n.to_s, properties: properties){ E } }
|
162
|
+
r.size == 1 ? r.pop : r # returns the created classes as array if multible classes are provided
|
163
|
+
end
|
164
|
+
=begin
|
165
|
+
|
166
|
+
creates a vertex
|
167
|
+
|
168
|
+
=end
|
169
|
+
def create_vertex( o_class, attributes:{} )
|
170
|
+
|
171
|
+
begin
|
172
|
+
response = execute(transaction: false, tolerated_error_code: /found duplicated key/) do
|
173
|
+
"CREATE VERTEX #{classname(o_class)} CONTENT #{attributes.to_orient.to_json}"
|
174
|
+
end
|
175
|
+
if response.is_a?(Array) && response.size == 1
|
176
|
+
response.pop # RETURN_VALUE
|
177
|
+
else
|
178
|
+
response # return value (the normal case)
|
179
|
+
end
|
180
|
+
rescue ArgumentError => e
|
181
|
+
puts "CreateVertex:ArgumentError "
|
182
|
+
puts e.inspect
|
183
|
+
end # begin
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
=begin
|
188
|
+
Deletes the specified vertices and unloads referenced edges from the cache
|
189
|
+
=end
|
190
|
+
def delete_vertex *vertex
|
191
|
+
create_command = -> do
|
192
|
+
{ type: "cmd",
|
193
|
+
language: 'sql',
|
194
|
+
command: "DELETE VERTEX #{vertex.map{|x| x.to_orient }.join(',')} "
|
195
|
+
}
|
196
|
+
end
|
197
|
+
|
198
|
+
vertex.each{|v| v.edges.each{| e | remove_record_from_hash e} }
|
199
|
+
execute{ create_command[] }
|
200
|
+
end
|
201
|
+
|
202
|
+
=begin
|
203
|
+
Deletes the specified edges and unloads referenced vertices from the cache
|
204
|
+
=end
|
205
|
+
def delete_edge *edge
|
206
|
+
create_command = -> do
|
207
|
+
{ type: "cmd",
|
208
|
+
language: 'sql',
|
209
|
+
command: "DELETE EDGE #{edge.map{|x| x.to_orient }.join(',')} "
|
210
|
+
}
|
211
|
+
end
|
212
|
+
|
213
|
+
edge.each do |r|
|
214
|
+
[r.in, r.out].each{| e | remove_record_from_hash e}
|
215
|
+
remove_record_from_hash r
|
216
|
+
end
|
217
|
+
execute{ create_command[] }
|
218
|
+
end
|
219
|
+
|
220
|
+
private
|
221
|
+
def remove_record_from_hash r
|
222
|
+
obj= ActiveOrient::Base.get_rid(r.rid) unless r.nil?
|
223
|
+
ActiveOrient::Base.remove_rid( obj ) unless obj.nil?
|
224
|
+
end
|
225
|
+
|
226
|
+
end # module
|
@@ -0,0 +1,98 @@
|
|
1
|
+
module DatabaseUtils
|
2
|
+
=begin
|
3
|
+
returns the classes set by OrientDB
|
4
|
+
|
5
|
+
Parameter:
|
6
|
+
abstract: true|false
|
7
|
+
|
8
|
+
if abstract: true is given, only basic classes (Abstact-Classes) are returend
|
9
|
+
=end
|
10
|
+
def system_classes abstract: false
|
11
|
+
|
12
|
+
basic= [ "ORestricted", "OSchedule", "OTriggered", "OSequence"]
|
13
|
+
## "ORid" dropped in V2.2
|
14
|
+
extended = ["OIdentity","ORole", "OUser", "OFunction", "_studio"]
|
15
|
+
v3 = ["OGeometryCollection", "OLineString", "OMultiLineString", "OMultiPoint", "OMultiPolygon",
|
16
|
+
"OPoint", "OPolygon", "ORectangle", "OShape"] ## added in Orentdb 3.0
|
17
|
+
if abstract
|
18
|
+
basic
|
19
|
+
else
|
20
|
+
basic + extended + v3
|
21
|
+
end
|
22
|
+
end
|
23
|
+
=begin
|
24
|
+
Returns the class_hierachy
|
25
|
+
|
26
|
+
To fetch all Vertices:
|
27
|
+
class_hieararchy(base_class: 'V').flatten
|
28
|
+
To fetch all Edges:
|
29
|
+
class_hierarchy(base_class: 'E').flatten
|
30
|
+
--
|
31
|
+
notice:
|
32
|
+
To retrieve the class hierarchy from Objects avoid calling `ORD.classname (obj)`, because it depends on class_hierarchy.
|
33
|
+
=end
|
34
|
+
|
35
|
+
def class_hierarchy base_class: '', system_classes: nil
|
36
|
+
@actual_class_hash = get_classes('name', 'superClass') #if requery || @all_classes.blank?
|
37
|
+
fv = ->( s ) { @actual_class_hash.find_all{|x| x['superClass']== s}.map{|v| v['name']} }
|
38
|
+
fx = ->( v ) { fv[v.strip].map{|x| ar = fx[x]; ar.empty? ? x : [x, ar]} }
|
39
|
+
if system_classes.present?
|
40
|
+
fx[ base_class.to_s ]
|
41
|
+
else
|
42
|
+
fx[ base_class.to_s ] - system_classes() - [ ["OIdentity", ["ORole", "OUser"]]] - [ ["OShape",["OGeometryCollection","OLineString", "OMultiLineString", "OMultiPoint", "OMultiPolygon", "OPoint", "OPolygon", "ORectangle"] ] ]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
=begin
|
48
|
+
Returns an array with all names of the classes of the database. Uses a cached version if possible.
|
49
|
+
|
50
|
+
Parameters: system_classes: false|true, requery: false|true
|
51
|
+
=end
|
52
|
+
|
53
|
+
def database_classes system_classes: nil, requery: false
|
54
|
+
class_hierarchy system_classes: system_classes #requery: true
|
55
|
+
all_classes = get_classes('name').map(&:values).sort.flatten
|
56
|
+
all_user_classes = all_classes - system_classes()
|
57
|
+
|
58
|
+
all_user_classes.each{|x| ActiveOrient.database_classes[x] = "unset" unless ActiveOrient.database_classes.has_key?(x) }
|
59
|
+
|
60
|
+
ActiveOrient.database_classes.keys # return an array of database-classnames
|
61
|
+
end
|
62
|
+
|
63
|
+
=begin
|
64
|
+
Service-Method for Model#OrientdbClass
|
65
|
+
=end
|
66
|
+
|
67
|
+
def get_db_superclass name #:nodoc:
|
68
|
+
@actual_class_hash = get_classes( 'name', 'superClass') if @actual_class_hash.nil?
|
69
|
+
z= @actual_class_hash.find{|x,y| x['name'] == name.to_s }
|
70
|
+
z['superClass'] unless z.nil?
|
71
|
+
end
|
72
|
+
|
73
|
+
=begin
|
74
|
+
preallocate classes reads any class from the @classes-Array and allocates adequat Ruby-Objects
|
75
|
+
=end
|
76
|
+
def preallocate_classes from_model_dir= nil # :nodoc:
|
77
|
+
# always scan for E+V model-file and include
|
78
|
+
[E,V].each{|y| y.require_model_file(from_model_dir) }
|
79
|
+
|
80
|
+
ActiveOrient.database_classes.each do | db_name, the_class |
|
81
|
+
allocate_class_in_ruby( db_name ) do |detected_class|
|
82
|
+
keep_the_dataset = true
|
83
|
+
# keep the class if it is already noted in database_classes
|
84
|
+
if ![E,V].include?(detected_class) &&
|
85
|
+
!ActiveOrient.database_classes.key( detected_class) &&
|
86
|
+
!detected_class.require_model_file(from_model_dir) &&
|
87
|
+
!ActiveOrient::Model.keep_models_without_file
|
88
|
+
|
89
|
+
logger.info{ "#{detected_class.name} --> Class NOT allocated"}
|
90
|
+
ActiveOrient.database_classes[ detected_class.ref_name ] = "no model file"
|
91
|
+
keep_the_dataset = false
|
92
|
+
end
|
93
|
+
keep_the_dataset # return_value
|
94
|
+
end # block
|
95
|
+
end # each iteration
|
96
|
+
end # def
|
97
|
+
|
98
|
+
end # module
|