active-orient 0.5 → 0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +3 -2
- data/README.md +78 -35
- data/VERSION +1 -1
- data/active-orient.gemspec +4 -4
- data/bin/active-orient-console +8 -5
- data/config/boot.rb +2 -4
- data/config/config.yml +1 -1
- data/config/connect.yml +2 -2
- data/examples/time_graph.md +162 -0
- data/gratefuldeadconcerts.md +94 -0
- data/lib/active-orient.rb +4 -2
- data/lib/base.rb +53 -20
- data/lib/base_properties.rb +2 -3
- data/lib/class_utils.rb +3 -4
- data/lib/database_utils.rb +14 -5
- data/lib/init.rb +11 -1
- data/lib/model/edge.rb +12 -10
- data/lib/model/model.rb +17 -3
- data/lib/model/the_class.rb +60 -40
- data/lib/model/the_record.rb +63 -51
- data/lib/model/vertex.rb +114 -10
- data/lib/orient.rb +24 -33
- data/lib/orientdb_private.rb +31 -31
- data/lib/other.rb +55 -5
- data/lib/rest/change.rb +17 -4
- data/lib/rest/create.rb +38 -24
- data/lib/rest/delete.rb +3 -2
- data/lib/rest/operations.rb +37 -27
- data/lib/rest/read.rb +2 -2
- data/lib/rest/rest.rb +4 -3
- data/lib/support.rb +17 -16
- data/linkmap.md +75 -0
- data/namespace.md +111 -0
- data/rails.md +125 -0
- data/rails/activeorient.rb +53 -0
- data/{examples/time_graph/config → rails}/config.yml +3 -1
- data/{examples/time_graph/config → rails}/connect.yml +2 -2
- data/usecase_oo.md +3 -1
- metadata +21 -38
- data/examples/createTime.rb +0 -91
- data/examples/time_graph/Gemfile +0 -21
- data/examples/time_graph/Guardfile +0 -26
- data/examples/time_graph/README.md +0 -129
- data/examples/time_graph/bin/active-orient-console +0 -35
- data/examples/time_graph/config/boot.rb +0 -119
- data/examples/time_graph/config/init_db.rb +0 -59
- data/examples/time_graph/createTime.rb +0 -51
- data/examples/time_graph/lib/createTime.rb +0 -82
- data/examples/time_graph/model/day_of.rb +0 -3
- data/examples/time_graph/model/e.rb +0 -6
- data/examples/time_graph/model/edge.rb +0 -53
- data/examples/time_graph/model/monat.rb +0 -19
- data/examples/time_graph/model/stunde.rb +0 -16
- data/examples/time_graph/model/tag.rb +0 -29
- data/examples/time_graph/model/time_base.rb +0 -6
- data/examples/time_graph/model/time_of.rb +0 -4
- data/examples/time_graph/model/v.rb +0 -3
- data/examples/time_graph/model/vertex.rb +0 -32
- data/examples/time_graph/spec/lib/create_time_spec.rb +0 -50
- data/examples/time_graph/spec/rest_helper.rb +0 -37
- data/examples/time_graph/spec/spec_helper.rb +0 -46
- data/usecase.md +0 -104
@@ -1,51 +0,0 @@
|
|
1
|
-
#require 'time'
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
class CreateTime
|
6
|
-
class << self # singleton class
|
7
|
-
def populate_month year = Date.today.year, month = Date.today.month
|
8
|
-
timestamp = DateTime.new year, month,1
|
9
|
-
if Monat.where( :value => month ).blank?
|
10
|
-
der_monat= Monat.create value_string: timestamp.strftime("%B"), value: timestamp.month.to_i
|
11
|
-
last_month_day = (DateTime.new( year, month+1, 1)-1).day rescue 31 # rescue covers month > 12
|
12
|
-
(0 .. last_month_day ).each do | tag |
|
13
|
-
der_tag = Tag.create value_string: "March #{timestamp.day}", value: tag
|
14
|
-
print der_tag.value.to_s + " > "
|
15
|
-
( 0 .. 23 ).each do | stunde |
|
16
|
-
die_stunde = Stunde.create value_string: "March #{timestamp.day} #{timestamp.hour}:00", value: stunde
|
17
|
-
print die_stunde.value.to_s + " .. "
|
18
|
-
TIME_OF.create_edge from: der_tag, to: die_stunde
|
19
|
-
timestamp += Rational(1,24) # + 1 hour
|
20
|
-
end
|
21
|
-
print "\n"
|
22
|
-
DAY_OF.create_edge from: der_monat, to: der_tag
|
23
|
-
end
|
24
|
-
else
|
25
|
-
"Month #{timestamp.strftime("%B %Y ") } exists "
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end # class
|
30
|
-
|
31
|
-
## here we start if the file is called from the command-lind
|
32
|
-
if $0 == __FILE__
|
33
|
-
require './config/boot'
|
34
|
-
ActiveOrient::OrientSetup.init_database # --> config/init_db
|
35
|
-
CreateTime.populate_month
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
puts "Features of the DateTime Graph"
|
40
|
-
puts '-' * 40
|
41
|
-
puts
|
42
|
-
puts "Allocated Month => Monat.first.value :" + Monat.first.value.to_s
|
43
|
-
puts
|
44
|
-
puts "Adressing Days => Monat.first.tag[2].value:" + Monat.first.tag[2].value.to_s
|
45
|
-
puts
|
46
|
-
puts "Adressing Hours => Monat.first.tag[2].stunde[4].value :" + Monat.first.tag[5].stunde[4].value.to_s
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
@@ -1,82 +0,0 @@
|
|
1
|
-
#require 'time'
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
class CreateTime
|
6
|
-
class << self # singleton class
|
7
|
-
## simple version: connecting vertices as they are created
|
8
|
-
def pop_month year = Date.today.year, month = Date.today.month
|
9
|
-
timestamp = DateTime.new year, month,1
|
10
|
-
if Monat.where( :value => month ).blank?
|
11
|
-
der_monat= Monat.create value_string: timestamp.strftime("%B"), value: timestamp.month.to_i
|
12
|
-
last_month_day = (DateTime.new( year, month+1, 1)-1).day rescue 31 # rescue covers month > 12
|
13
|
-
(0 .. last_month_day ).each do | tag |
|
14
|
-
der_tag = Tag.create value_string: "March #{timestamp.day}", value: tag
|
15
|
-
print der_tag.value.to_s + " > "
|
16
|
-
( 0 .. 23 ).each do | stunde |
|
17
|
-
die_stunde = Stunde.create value_string: "March #{timestamp.day} #{timestamp.hour}:00", value: stunde
|
18
|
-
print die_stunde.value.to_s + " .. "
|
19
|
-
TIME_OF.create_edge from: der_tag, to: die_stunde
|
20
|
-
timestamp += Rational(1,24) # + 1 hour
|
21
|
-
end
|
22
|
-
print "\n"
|
23
|
-
DAY_OF.create_edge from: der_monat, to: der_tag
|
24
|
-
end
|
25
|
-
else
|
26
|
-
"Month #{timestamp.strftime("%B %Y ") } exists "
|
27
|
-
end
|
28
|
-
end
|
29
|
-
## we populate the graph with a 1:n-Layer
|
30
|
-
# month --> n[day --> n[hour] ]
|
31
|
-
# thus creating edges is providing a static :from-vertex to numerous :to-vertices
|
32
|
-
# the to:vertices are first created and fenced in an array. Then all edges are created at once.
|
33
|
-
# In Rest-Mode this is much quicker.
|
34
|
-
def populate_month year = Date.today.year, month = Date.today.month
|
35
|
-
timestamp = DateTime.new year, month,1
|
36
|
-
days = []
|
37
|
-
if Monat.where( :value => month ).blank?
|
38
|
-
der_monat= Monat.create value_string: timestamp.strftime("%B"), value: timestamp.month.to_i
|
39
|
-
last_month_day = (DateTime.new( year, month+1, 1)-1).day rescue 31 # rescue covers month > 12
|
40
|
-
(0 .. last_month_day ).each do | tag |
|
41
|
-
der_tag = Tag.create value_string: "March #{timestamp.day}", value: tag
|
42
|
-
edges = []
|
43
|
-
( 0 .. 23 ).each do | stunde |
|
44
|
-
edges << Stunde.create( value_string: "March #{timestamp.day} #{timestamp.hour}:00", value: stunde)
|
45
|
-
timestamp += Rational(1,24) # + 1 hour
|
46
|
-
end
|
47
|
-
## insert all edges of the day as batch (in rest-mode)
|
48
|
-
TIME_OF.create from: der_tag, to: edges
|
49
|
-
days << der_tag
|
50
|
-
end
|
51
|
-
DAY_OF.create from: der_monat, to: days
|
52
|
-
else
|
53
|
-
"Month #{timestamp.strftime("%B %Y ") } exists "
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end # class
|
58
|
-
|
59
|
-
## here we start if the file is called from the command-lind
|
60
|
-
if $0 == __FILE__
|
61
|
-
require './config/boot'
|
62
|
-
ActiveOrient::OrientSetup.init_database # --> config/init_db
|
63
|
-
CreateTime.populate_month
|
64
|
-
|
65
|
-
|
66
|
-
print "\n" * 4
|
67
|
-
puts '-' * 40
|
68
|
-
puts "Features of the DateTime Graph"
|
69
|
-
puts '-' * 40
|
70
|
-
puts
|
71
|
-
puts "Allocated Month => Monat.first.value:\t\t" + Monat.first.value.to_s
|
72
|
-
puts
|
73
|
-
puts "Adressing Days => Monat.first.tag[2].value:\t" + Monat.first.tag[2].value.to_s
|
74
|
-
puts
|
75
|
-
puts "Display Date => Monat.first.tag[13].datum:\t"+ Monat.first.tag[13].datum.to_s
|
76
|
-
|
77
|
-
puts "Display next Date => Monat.first.tag[13].next.datum:\t"+ Monat.first.tag[13].next.datum.to_s
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
# to do
|
2
|
-
# instead of creating a class, use a module which is included on startup
|
3
|
-
# then, after specifying the namespace and before autoaccolating the database-classes create the proper E-Base-class and include this stuff
|
4
|
-
class E < ActiveOrient::Model
|
5
|
-
## link to the library-class
|
6
|
-
class << self
|
7
|
-
=begin
|
8
|
-
establish contrains on Edges
|
9
|
-
|
10
|
-
Edges are uniq!
|
11
|
-
|
12
|
-
Creates individual indices for child-classes if applied to the class itself.
|
13
|
-
=end
|
14
|
-
def uniq_index
|
15
|
-
create_property :in, type: :link, linked_class: :V
|
16
|
-
create_property :out, type: :link, linked_class: :V
|
17
|
-
create_index "#{self.name}_idx", on: [ :in, :out ]
|
18
|
-
end
|
19
|
-
=begin
|
20
|
-
Instantiate a new Edge between two Vertices
|
21
|
-
|
22
|
-
The parameters »from« **or** »to« can take a list of model-records. Then subsequent edges are created.
|
23
|
-
|
24
|
-
:call-seq:
|
25
|
-
Model.create from:, to:, attributes:{}
|
26
|
-
=end
|
27
|
-
|
28
|
-
|
29
|
-
def create **keyword_arguments
|
30
|
-
new_edge = db.create_edge self, **keyword_arguments
|
31
|
-
new_edge = new_edge.pop if new_edge.is_a?( Array) && new_edge.size == 1
|
32
|
-
# vertices must be reloaded
|
33
|
-
|
34
|
-
new_edge # returns the created edge (or an array of created edges
|
35
|
-
end
|
36
|
-
|
37
|
-
# to do
|
38
|
-
# def delete
|
39
|
-
# delete an edge (as class method)
|
40
|
-
# and
|
41
|
-
# def remove
|
42
|
-
# delete an edge (as instance method)
|
43
|
-
#
|
44
|
-
def delete where: attributes
|
45
|
-
puts "work in progress"
|
46
|
-
end
|
47
|
-
|
48
|
-
# remove works on record-level
|
49
|
-
end
|
50
|
-
def remove
|
51
|
-
db.delete_edge self
|
52
|
-
end
|
53
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
#ActiveOrient::Model.orientdb_class name: 'time_base', superclass: 'V'
|
2
|
-
class Monat < TimeBase
|
3
|
-
def der_tag d
|
4
|
-
# d=d-1
|
5
|
-
d >0 && d<31 ? out_day_of[d].in : nil
|
6
|
-
end
|
7
|
-
|
8
|
-
# returns an array of days
|
9
|
-
# thus enables the use as
|
10
|
-
# Monat[9].tag[9]
|
11
|
-
def tag
|
12
|
-
out_day_of.in
|
13
|
-
end
|
14
|
-
|
15
|
-
# returns the specified edge
|
16
|
-
# i.e. Monat[9]
|
17
|
-
#
|
18
|
-
|
19
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
class Stunde < TimeBase
|
2
|
-
|
3
|
-
def tag
|
4
|
-
in_time_of.out
|
5
|
-
end
|
6
|
-
|
7
|
-
def datum
|
8
|
-
month = in_time_of.out.in_day_of.out.value
|
9
|
-
day = in_time_of.out.value
|
10
|
-
"#{day.first}.#{month.flatten.first}.#{Date.today.year} #{value}:00"
|
11
|
-
end
|
12
|
-
def next
|
13
|
-
puts value.inspect
|
14
|
-
in_day_of.out.first.tag( value + 1 )
|
15
|
-
end
|
16
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
#ActiveOrient::Model.orientdb_class name: 'time_base', superclass: 'V'
|
2
|
-
class Tag < TimeBase
|
3
|
-
def monat
|
4
|
-
in_day_of.out.value_string.first
|
5
|
-
end
|
6
|
-
|
7
|
-
def die_stunde h
|
8
|
-
h.to_i >0 && h.to_i<31 ? out_time_of[h].in : nil
|
9
|
-
end
|
10
|
-
|
11
|
-
|
12
|
-
def stunde
|
13
|
-
out_time_of.in
|
14
|
-
end
|
15
|
-
|
16
|
-
def monat
|
17
|
-
in_day_of.out.first
|
18
|
-
end
|
19
|
-
def next
|
20
|
-
monat.tag[ value + 1 ]
|
21
|
-
end
|
22
|
-
def prev
|
23
|
-
monat.tag[ value - 1 ]
|
24
|
-
end
|
25
|
-
|
26
|
-
def datum
|
27
|
-
"#{ value}.#{monat.value}.#{Date.today.year}"
|
28
|
-
end
|
29
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
class V < ActiveOrient::Model
|
2
|
-
## link to the library-class
|
3
|
-
# create
|
4
|
-
# seems not to be nessesary as its identically to the universal create
|
5
|
-
|
6
|
-
|
7
|
-
# to do
|
8
|
-
|
9
|
-
# def delete
|
10
|
-
# delete an edge (as class method)
|
11
|
-
# and
|
12
|
-
# def remove
|
13
|
-
# delete an edge (as instance method)
|
14
|
-
|
15
|
-
def edges kind=:all # :all, :in, :out
|
16
|
-
expression = case kind
|
17
|
-
when :all
|
18
|
-
/^in|^out/
|
19
|
-
when :in
|
20
|
-
/^in/
|
21
|
-
when :out
|
22
|
-
/^out/
|
23
|
-
end
|
24
|
-
edges = attributes.keys.find_all{ |x| x =~ expression }
|
25
|
-
edges.map{|x| attributes[x]}.flatten
|
26
|
-
end
|
27
|
-
|
28
|
-
def remove
|
29
|
-
db.delete_vertex self
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'rest_helper'
|
3
|
-
|
4
|
-
describe CreateTime do
|
5
|
-
before( :all ) do
|
6
|
-
reset_database
|
7
|
-
ActiveOrient::OrientSetup.init_database
|
8
|
-
end
|
9
|
-
context "check environment" do
|
10
|
-
it "nessesary classes are allocated" do
|
11
|
-
[ Monat, Tag, Stunde ].each do | klass |
|
12
|
-
expect( klass.superclass).to eq TimeBase
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context "populate" do
|
18
|
-
before( :all ) do
|
19
|
-
CreateTime.populate_month
|
20
|
-
end
|
21
|
-
let( :month){ Date.today.month }
|
22
|
-
|
23
|
-
it "The actual Month is used" do
|
24
|
-
expect( Monat.count ).to eq 1
|
25
|
-
expect( Monat.first.value ).to eq Date.today.month
|
26
|
-
end
|
27
|
-
|
28
|
-
it "The actual Month has several days" do
|
29
|
-
expect( Monat.first.tag.count ).to be >= 28
|
30
|
-
end
|
31
|
-
|
32
|
-
it "Address a specific day", focus: true do
|
33
|
-
|
34
|
-
expect( Monat[month].tag[5].value ).to eq 5
|
35
|
-
end
|
36
|
-
|
37
|
-
it "Address a specific hour" do
|
38
|
-
expect( Monat[month].tag[5].value ).to eq 5
|
39
|
-
expect( Monat[month].tag[7].stunde[5].value ).to eq 5
|
40
|
-
end
|
41
|
-
it "Switch to the next hour" do
|
42
|
-
|
43
|
-
expect( Monat[month].tag[7].stunde[5].next.value ).to eq 6
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# deletes the working database and recreates it
|
2
|
-
# reassignes ORD and DB
|
3
|
-
def reset_database
|
4
|
-
db = ActiveOrient.database
|
5
|
-
|
6
|
-
# ORD.database_classes.reverse.each do | klass_name |
|
7
|
-
# klass = ActiveOrient::Model.orientdb_class name: klass_name
|
8
|
-
# klass.delete_class rescue nil
|
9
|
-
# end
|
10
|
-
ORD.delete_database database: db
|
11
|
-
Object.send :remove_const, :ORD
|
12
|
-
Object.send :remove_const, :DB
|
13
|
-
ActiveOrient.database = db
|
14
|
-
Object.send :const_set, :ORD, ActiveOrient::OrientDB.new( preallocate: true )
|
15
|
-
if OrientDB::UsingJava
|
16
|
-
Object.send :const_set, :DB, ActiveOrient::API.new( preallocate: false)
|
17
|
-
else
|
18
|
-
Object.send :const_set, :DB, ActiveOrient::OrientDB.new( preallocate: true )
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
|
23
|
-
shared_examples_for 'correct allocated classes' do |input|
|
24
|
-
it "has allocated all classes" do
|
25
|
-
case input
|
26
|
-
when Array
|
27
|
-
input.each{|y| expect( ORD.database_classes ).to include ORD.classname(y) }
|
28
|
-
expect( classes ).to have( input.size ).items
|
29
|
-
when Hash
|
30
|
-
else
|
31
|
-
expect( classes ).to be_kind_of ActiveOrient::Model
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
|
@@ -1,46 +0,0 @@
|
|
1
|
-
ARGV << 'test'
|
2
|
-
@do_not_preallocate = true
|
3
|
-
require './config/boot'
|
4
|
-
#bundler/setup'
|
5
|
-
require 'rspec'
|
6
|
-
require 'rspec/its'
|
7
|
-
require 'rspec/collection_matchers'
|
8
|
-
require 'yaml'
|
9
|
-
require 'active_support'
|
10
|
-
project_root = File.expand_path('../..', __FILE__)
|
11
|
-
#require 'my_spec_helper'
|
12
|
-
|
13
|
-
unless defined?(SPEC_HELPER_LOADED)
|
14
|
-
SPEC_HELPER_LOADED = true
|
15
|
-
RSpec.configure do |config|
|
16
|
-
config.mock_with :rspec
|
17
|
-
config.color = true
|
18
|
-
# ermöglicht die Einschränkung der zu testenden Specs
|
19
|
-
# durch >>it "irgendwas", :focus => true do <<
|
20
|
-
config.filter_run :focus => true
|
21
|
-
config.run_all_when_everything_filtered = true
|
22
|
-
config.order = 'defined' # "random"
|
23
|
-
end
|
24
|
-
|
25
|
-
RSpec.shared_context 'private', private: true do
|
26
|
-
|
27
|
-
before :all do
|
28
|
-
described_class.class_eval do
|
29
|
-
@original_private_instance_methods = private_instance_methods
|
30
|
-
public *@original_private_instance_methods
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
after :all do
|
35
|
-
described_class.class_eval do
|
36
|
-
private *@original_private_instance_methods
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
|
-
else
|
42
|
-
puts "*** ---- *** \n"*3
|
43
|
-
puts "Reusing rspec configuration "
|
44
|
-
puts "*** ---- *** \n"*3
|
45
|
-
end
|
46
|
-
#require 'model_helper'
|