orientdb 0.0.2-jruby → 0.0.4-jruby
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +11 -1
- data/Rakefile +8 -0
- data/bin/orientdb_console +16 -0
- data/lib/orientdb.rb +2 -2
- data/lib/orientdb/database.rb +72 -91
- data/lib/orientdb/database_pool.rb +5 -12
- data/lib/orientdb/document.rb +44 -59
- data/lib/orientdb/oclass.rb +77 -87
- data/lib/orientdb/schema.rb +6 -0
- data/lib/orientdb/user.rb +2 -13
- data/lib/orientdb/version.rb +2 -2
- data/orientdb.gemspec +1 -0
- data/spec/orientdb_spec.rb +31 -0
- data/spec/spec.opts +7 -0
- data/spec/spec_helper.rb +25 -0
- metadata +20 -4
- data/lib/orientdb/proxy_mixin.rb +0 -65
data/Gemfile.lock
CHANGED
@@ -1,14 +1,23 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
orientdb (0.0.
|
4
|
+
orientdb (0.0.2-java)
|
5
5
|
hashie
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: http://rubygems.org/
|
9
9
|
specs:
|
10
10
|
awesome_print (0.2.1)
|
11
|
+
diff-lcs (1.1.2)
|
11
12
|
hashie (0.4.0)
|
13
|
+
rspec (2.1.0)
|
14
|
+
rspec-core (~> 2.1.0)
|
15
|
+
rspec-expectations (~> 2.1.0)
|
16
|
+
rspec-mocks (~> 2.1.0)
|
17
|
+
rspec-core (2.1.0)
|
18
|
+
rspec-expectations (2.1.0)
|
19
|
+
diff-lcs (~> 1.1.2)
|
20
|
+
rspec-mocks (2.1.0)
|
12
21
|
|
13
22
|
PLATFORMS
|
14
23
|
java
|
@@ -18,3 +27,4 @@ DEPENDENCIES
|
|
18
27
|
bundler (>= 1.0.0)
|
19
28
|
hashie
|
20
29
|
orientdb!
|
30
|
+
rspec (>= 2.1)
|
data/Rakefile
CHANGED
data/bin/orientdb_console
CHANGED
@@ -1,6 +1,22 @@
|
|
1
1
|
#!/usr/bin/env jruby
|
2
2
|
require File.expand_path(File.dirname(__FILE__) + "/../lib/orientdb")
|
3
3
|
|
4
|
+
if ARGV.include?('test:db')
|
5
|
+
GEM_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
6
|
+
TEMP_DIR = Dir.pwd + '/tmp'
|
7
|
+
|
8
|
+
TEST_DB_PATH = "#{TEMP_DIR}/databases/db_#{rand(999) + 1}"
|
9
|
+
|
10
|
+
puts ">> GEM_ROOT : #{GEM_ROOT}"
|
11
|
+
puts ">> TEST_DB PATH : #{TEST_DB_PATH}"
|
12
|
+
|
13
|
+
require 'fileutils'
|
14
|
+
FileUtils.mkdir_p TEST_DB_PATH
|
15
|
+
@db = OrientDB::Database.new("local:#{TEST_DB_PATH}/test").create
|
16
|
+
end
|
17
|
+
|
18
|
+
include OrientDB
|
19
|
+
|
4
20
|
require 'irb'
|
5
21
|
ARGV.clear
|
6
22
|
IRB.start(__FILE__)
|
data/lib/orientdb.rb
CHANGED
@@ -6,7 +6,7 @@ $: << File.expand_path('../../jars/', __FILE__)
|
|
6
6
|
require 'java'
|
7
7
|
require 'orientdb-client-0.9.23'
|
8
8
|
|
9
|
-
|
9
|
+
module OrientDB
|
10
10
|
|
11
11
|
def self.const_missing(missing)
|
12
12
|
puts "[#{name}:const_missing] #{missing}"
|
@@ -17,8 +17,8 @@ end
|
|
17
17
|
|
18
18
|
require 'orientdb/ext'
|
19
19
|
require 'orientdb/version'
|
20
|
-
require 'orientdb/proxy_mixin'
|
21
20
|
require 'orientdb/user'
|
21
|
+
require 'orientdb/schema'
|
22
22
|
require 'orientdb/database'
|
23
23
|
require 'orientdb/document'
|
24
24
|
require 'orientdb/oclass'
|
data/lib/orientdb/database.rb
CHANGED
@@ -1,123 +1,104 @@
|
|
1
|
-
|
1
|
+
module OrientDB
|
2
2
|
|
3
|
-
|
3
|
+
Database = com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx
|
4
4
|
|
5
|
-
KLASS = com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx
|
6
|
-
|
7
|
-
Record = com.orientechnologies.orient.core.record.ORecord
|
8
|
-
Schema = com.orientechnologies.orient.core.metadata.schema.OSchema
|
9
5
|
SQLQuery = com.orientechnologies.orient.core.sql.query.OSQLSynchQuery
|
10
6
|
|
11
|
-
|
12
|
-
@proxy_object = KLASS.new database_url
|
13
|
-
end
|
7
|
+
class Database
|
14
8
|
|
15
|
-
|
16
|
-
|
17
|
-
|
9
|
+
def auth(username, password)
|
10
|
+
open username, password
|
11
|
+
end
|
18
12
|
|
19
|
-
|
20
|
-
User.from_ouser proxy_object.getUser
|
21
|
-
end
|
13
|
+
alias_method :native_query, :query
|
22
14
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
15
|
+
def query(sql_query = nil)
|
16
|
+
sql_query = prepare_sql_query sql_query
|
17
|
+
native_query sql_query
|
18
|
+
end
|
27
19
|
|
28
|
-
|
20
|
+
alias :find :query
|
29
21
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
22
|
+
def first(sql_query = nil)
|
23
|
+
sql_query = prepare_sql_query sql_query
|
24
|
+
query(sql_query).setLimit(1).map { |x| x }.first
|
25
|
+
end
|
34
26
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
27
|
+
def prepare_sql_query(sql_query)
|
28
|
+
return if sql_query.nil?
|
29
|
+
case sql_query
|
30
|
+
when SQLQuery
|
31
|
+
sql_query
|
32
|
+
when String
|
33
|
+
SQLQuery.new sql_query
|
34
|
+
when Hash
|
35
|
+
SQLQuery.new sql_query_from_hash(sql_query)
|
36
|
+
else
|
37
|
+
raise "Unknown query type"
|
38
|
+
end
|
46
39
|
end
|
47
|
-
end
|
48
40
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
41
|
+
def sql_query_from_hash(options = {})
|
42
|
+
klass_name = options.delete :class
|
43
|
+
raise "Missing class name" unless klass_name
|
44
|
+
columns = options.delete(:columns) || '*'
|
45
|
+
order = options.delete :order
|
46
|
+
order_sql = order ? " ORDER BY #{order}" : ''
|
47
|
+
fields = options.map do |field, value|
|
48
|
+
cmp = '='
|
49
|
+
if value.is_a?(String)
|
50
|
+
value = "'" + value + "'"
|
51
|
+
cmp = 'LIKE' if value.index('%')
|
52
|
+
end
|
53
|
+
"#{field} #{cmp} #{value}"
|
60
54
|
end
|
61
|
-
"#{
|
55
|
+
"SELECT #{columns} FROM #{klass_name} WHERE #{fields.join(' AND ')}#{order_sql}"
|
62
56
|
end
|
63
|
-
"SELECT #{columns} FROM #{klass_name} WHERE #{fields.join(' AND ')}#{order_sql}"
|
64
|
-
end
|
65
57
|
|
66
|
-
|
67
|
-
|
68
|
-
|
58
|
+
def schema
|
59
|
+
metadata.schema
|
60
|
+
end
|
69
61
|
|
70
|
-
|
71
|
-
|
72
|
-
|
62
|
+
def get_class(klass_name)
|
63
|
+
schema.get_class klass_name.to_s
|
64
|
+
end
|
73
65
|
|
74
|
-
|
75
|
-
|
76
|
-
|
66
|
+
def create_class(klass_name, fields = {})
|
67
|
+
OrientDB::OClass.create self, klass_name.to_s, fields
|
68
|
+
end
|
77
69
|
|
78
|
-
|
79
|
-
|
80
|
-
yield OrientDB::Document.new(record)
|
70
|
+
def get_or_create_class(klass_name)
|
71
|
+
get_class(klass_name) || create_class(klass_name)
|
81
72
|
end
|
82
|
-
end
|
83
73
|
|
84
|
-
|
85
|
-
proxy_object.browseClass(klass_name.to_s).map { |x| OrientDB::Document.new x }
|
86
|
-
end
|
74
|
+
alias :each_in_class :browseClass
|
87
75
|
|
88
|
-
|
89
|
-
|
90
|
-
yield OrientDB::Document.new(record)
|
76
|
+
def all_in_class(klass_name)
|
77
|
+
browse_class(klass_name.to_s).map
|
91
78
|
end
|
92
|
-
end
|
93
79
|
|
94
|
-
|
95
|
-
proxy_object.browseCluster(cluster_name.to_s).map { |x| OrientDB::Document.new x }
|
96
|
-
end
|
80
|
+
alias :each_in_cluster :browseCluster
|
97
81
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
end
|
82
|
+
def all_in_cluster(cluster_name)
|
83
|
+
browse_cluster(cluster_name.to_s).map
|
84
|
+
end
|
102
85
|
|
103
|
-
|
104
|
-
get_class(klass_name) || OrientDB::OClass.create(klass_name)
|
105
|
-
end
|
86
|
+
class << self
|
106
87
|
|
107
|
-
|
88
|
+
def create(database_url)
|
89
|
+
obj = new(database_url)
|
90
|
+
obj.create
|
91
|
+
obj
|
92
|
+
end
|
108
93
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
94
|
+
def connect(database_url, username, password)
|
95
|
+
obj = new(database_url)
|
96
|
+
obj.auth(username, password)
|
97
|
+
obj
|
98
|
+
end
|
114
99
|
|
115
|
-
def connect(database_url, username, password)
|
116
|
-
obj = new(database_url)
|
117
|
-
obj.auth(username, password)
|
118
|
-
obj
|
119
100
|
end
|
120
|
-
|
121
101
|
end
|
122
102
|
|
103
|
+
|
123
104
|
end
|
@@ -1,18 +1,11 @@
|
|
1
|
-
|
1
|
+
module OrientDB
|
2
2
|
|
3
|
-
|
3
|
+
DatabasePool = com.orientechnologies.orient.core.db.document.ODatabaseDocumentPool
|
4
4
|
|
5
|
-
|
5
|
+
class DatabasePool
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
class << self
|
12
|
-
|
13
|
-
def connect(database_url, username, password)
|
14
|
-
obj = new database_url, username, password
|
15
|
-
obj
|
7
|
+
def initialize(database_url, username, password)
|
8
|
+
self.class.global.acquire database_url, username, password
|
16
9
|
end
|
17
10
|
|
18
11
|
end
|
data/lib/orientdb/document.rb
CHANGED
@@ -1,76 +1,61 @@
|
|
1
|
-
|
1
|
+
module OrientDB
|
2
2
|
|
3
|
-
|
3
|
+
Document = com.orientechnologies.orient.core.record.impl.ODocument
|
4
4
|
|
5
|
-
|
5
|
+
class Document
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
@proxy_object = args.first
|
10
|
-
else
|
11
|
-
db, klass_name = args[0], args[1]
|
12
|
-
fields = args[2] || {}
|
13
|
-
if db && klass_name
|
14
|
-
@proxy_object = KLASS.new db.proxy_object, klass_name
|
15
|
-
fields.each do |name, value|
|
16
|
-
self[name] = value
|
17
|
-
end
|
18
|
-
else
|
19
|
-
@proxy_object = KLASS.new
|
20
|
-
end
|
7
|
+
def values
|
8
|
+
field_names.map { |field_name| [field_name, self[field_name]] }
|
21
9
|
end
|
22
|
-
end
|
23
10
|
|
24
|
-
|
25
|
-
proxy_object.fieldNames.map{|field_name| [field_name, self[field_name]] }
|
26
|
-
end
|
11
|
+
alias :db :database
|
27
12
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
# def save
|
33
|
-
# db.save proxy_object
|
34
|
-
# end
|
13
|
+
def [](field_name)
|
14
|
+
field field_name.to_s
|
15
|
+
end
|
35
16
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
value
|
40
|
-
end
|
17
|
+
def []=(field_name, value)
|
18
|
+
field field_name.to_s, value
|
19
|
+
end
|
41
20
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
21
|
+
def method_missing(method_name, *args, &blk)
|
22
|
+
return self[method_name] if contains_field(method_name.to_s)
|
23
|
+
match = method_name.to_s.match(/(.*?)([?=!]?)$/)
|
24
|
+
case match[2]
|
25
|
+
when "="
|
26
|
+
self[match[1]] = args.first
|
27
|
+
when "?"
|
28
|
+
!!self[match[1]]
|
29
|
+
else
|
30
|
+
super
|
31
|
+
end
|
32
|
+
end
|
47
33
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
case match[2]
|
52
|
-
when "="
|
53
|
-
self[match[1]] = args.first
|
54
|
-
when "?"
|
55
|
-
!!self[match[1]]
|
56
|
-
else
|
57
|
-
super
|
34
|
+
def inspect
|
35
|
+
props = values.map { |k, v| "#{k}:#{v}" }.join(' ')
|
36
|
+
%{#<OrientDB::Document:#{get_class_name}#{props.empty? ? '' : ' ' + props}>}
|
58
37
|
end
|
59
|
-
end
|
60
38
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
end
|
39
|
+
alias :to_s :inspect
|
40
|
+
|
41
|
+
class << self
|
65
42
|
|
66
|
-
|
43
|
+
alias_method :native_new, :new
|
67
44
|
|
68
|
-
|
45
|
+
def new(db, klass_name, fields = {})
|
46
|
+
obj = native_new db, klass_name
|
47
|
+
fields.each do |name, value|
|
48
|
+
obj.field name, value
|
49
|
+
end
|
50
|
+
obj
|
51
|
+
end
|
52
|
+
|
53
|
+
def create(db, klass_name, fields = {})
|
54
|
+
obj = new db, klass_name, fields
|
55
|
+
obj.save
|
56
|
+
obj
|
57
|
+
end
|
69
58
|
|
70
|
-
def create(db, klass_name, fields = {})
|
71
|
-
obj = new(db, klass_name, fields)
|
72
|
-
obj.save
|
73
|
-
obj
|
74
59
|
end
|
75
60
|
|
76
61
|
end
|
data/lib/orientdb/oclass.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
|
1
|
+
module OrientDB
|
2
2
|
|
3
|
-
include OrientDB::ProxyMixin
|
4
3
|
|
5
|
-
|
4
|
+
OClass = com.orientechnologies.orient.core.metadata.schema.OClass
|
6
5
|
|
7
|
-
SchemaType = com.orientechnologies.orient.core.metadata.schema.OType
|
6
|
+
# SchemaType = com.orientechnologies.orient.core.metadata.schema.OType
|
8
7
|
ClusterType = com.orientechnologies.orient.core.storage.OStorage::CLUSTER_TYPE
|
9
8
|
IndexType = com.orientechnologies.orient.core.metadata.schema.OProperty::INDEX_TYPE
|
10
9
|
|
10
|
+
|
11
11
|
FIELD_TYPES = {
|
12
12
|
:binary => "BINARY",
|
13
13
|
:bool => "BOOLEAN",
|
@@ -36,110 +36,100 @@ class OrientDB::OClass
|
|
36
36
|
h
|
37
37
|
end
|
38
38
|
|
39
|
-
STORAGE_TYPES = %w{ LOGICAL MEMORY PHYSICAL }.inject({})
|
40
|
-
|
41
|
-
h
|
42
|
-
end
|
39
|
+
STORAGE_TYPES = %w{ LOGICAL MEMORY PHYSICAL }.inject({}) { |h, s| h[s.downcase.to_sym] = ClusterType.const_get s; h }
|
40
|
+
INDEX_TYPES = %w{ FULLTEXT NOT_UNIQUE UNIQUE }.inject({}) { |h, s| h[s.downcase.to_sym] = IndexType.const_get s; h }
|
43
41
|
|
44
|
-
|
45
|
-
h[s.downcase.to_sym] = IndexType.const_get s
|
46
|
-
h
|
47
|
-
end
|
42
|
+
class OClass
|
48
43
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
44
|
+
def add(property_name, type)
|
45
|
+
property_name = property_name.to_s
|
46
|
+
if exists_property(property_name)
|
47
|
+
puts "We already have that property name [#{property_name}]"
|
48
|
+
return false
|
49
|
+
end
|
56
50
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
51
|
+
case type
|
52
|
+
when Symbol
|
53
|
+
create_property property_name, FIELD_TYPES[type]
|
54
|
+
when OrientDB::OClass
|
55
|
+
create_property property_name, FIELD_TYPES[:link], type
|
56
|
+
when Array
|
57
|
+
type[0] = FIELD_TYPES[type[0]] if type[0].is_a?(Symbol)
|
58
|
+
create_property property_name, *type
|
59
|
+
when Hash
|
60
|
+
raise "Missing property type for [#{property_name}]" unless type[:type]
|
61
|
+
if type[:type].is_a?(OrientDB::OClass)
|
62
|
+
prop = create_property property_name, FIELD_TYPES[:link], type[:type]
|
63
|
+
else
|
64
|
+
prop = create_property property_name, FIELD_TYPES[type[:type]]
|
65
|
+
end
|
66
|
+
prop.set_min type[:min].to_s unless type[:min].nil?
|
67
|
+
prop.set_max type[:max].to_s unless type[:max].nil?
|
68
|
+
prop.set_mandatory !!type[:mandatory] unless type[:mandatory].nil?
|
69
|
+
prop.set_not_null type[:not_null] unless type[:not_null].nil?
|
70
|
+
unless type[:index].nil?
|
71
|
+
index_type = type[:index] == true ? INDEX_TYPES[:not_unique] : INDEX_TYPES[type[:index]]
|
72
|
+
prop.createIndex index_type
|
73
|
+
end
|
74
|
+
else
|
75
|
+
puts "ERROR! Unknown type [ #{property_name} | #{type} : #{type.class.name} ]"
|
76
|
+
end
|
77
|
+
self
|
62
78
|
end
|
63
79
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
when OrientDB::OClass
|
68
|
-
proxy_object.createProperty property_name, FIELD_TYPES[:link], type.proxy_object
|
69
|
-
when Array
|
70
|
-
type[0] = FIELD_TYPES[type[0]] if type[0].is_a?(Symbol)
|
71
|
-
proxy_object.createProperty property_name, *type
|
72
|
-
when Hash
|
73
|
-
type[:type] = FIELD_TYPES[:link] if type[:type].is_a?(Symbol)
|
74
|
-
prop = proxy_object.createProperty property_name, type[:type]
|
75
|
-
prop.setMin(type[:min]) unless type[:min].nil?
|
76
|
-
prop.setMax(type[:max]) unless type[:max].nil?
|
77
|
-
prop.setMandatory(!!type[:mandatory]) unless type[:mandatory].nil?
|
78
|
-
prop.setNotNull(type[:not_null]) unless type[:not_null].nil?
|
79
|
-
unless type[:index].nil?
|
80
|
-
index_type = type[:index] == true ? INDEX_TYPES[:not_unique] : INDEX_TYPES[type[:index]]
|
81
|
-
prop.createIndex index_type
|
82
|
-
end
|
83
|
-
else
|
84
|
-
puts "ERROR! Unknown type [ #{property_name} | #{type} : #{type.class.name} ]"
|
80
|
+
def [](property_name)
|
81
|
+
property_name = property_name.to_s
|
82
|
+
exists_property(property_name) ? get_property(property_name) : nil
|
85
83
|
end
|
86
|
-
self
|
87
|
-
end
|
88
84
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
end
|
93
|
-
|
94
|
-
def db
|
95
|
-
proxy_object.getDocument.getDatabase
|
96
|
-
end
|
85
|
+
def db
|
86
|
+
document.database
|
87
|
+
end
|
97
88
|
|
98
|
-
|
99
|
-
|
100
|
-
|
89
|
+
def schema
|
90
|
+
db.metadata.schema
|
91
|
+
end
|
101
92
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
93
|
+
def inspect
|
94
|
+
props = properties.map { |x| "#{x.name}:#{x.type.to_s.downcase}" }.join(' ')
|
95
|
+
%{#<OrientDB::OClass:#{name}#{props.empty? ? '' : ' ' + props}>}
|
96
|
+
end
|
106
97
|
|
107
|
-
|
108
|
-
props = properties.map { |x| "#{x.getName}:#{x.getType.to_s.downcase}" }.join(' ')
|
109
|
-
%{#<OrientDB::OClass:#{name}#{props.empty? ? '' : ' ' + props}>}
|
110
|
-
end
|
98
|
+
alias :to_s :inspect
|
111
99
|
|
112
|
-
alias :to_s :inspect
|
113
100
|
|
114
|
-
|
101
|
+
class << self
|
115
102
|
|
116
|
-
|
117
|
-
|
118
|
-
|
103
|
+
def create(db, name, fields = {})
|
104
|
+
name = name.to_s
|
105
|
+
add_cluster = fields.delete :add_cluster
|
106
|
+
add_cluster = true if add_cluster.nil?
|
119
107
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
super_klass = fields.delete :super
|
128
|
-
klass.setSuperClass(super_klass) if super_klass
|
129
|
-
db.schema.save
|
108
|
+
if add_cluster
|
109
|
+
cluster = db.storage.add_cluster name.downcase, STORAGE_TYPES[:physical]
|
110
|
+
klass = db.schema.create_class name, cluster
|
111
|
+
else
|
112
|
+
klass = db.schema.create_class name
|
113
|
+
end
|
130
114
|
|
131
|
-
|
115
|
+
super_klass = fields.delete :super
|
116
|
+
super_klass = db.get_class(super_klass.to_s) unless super_klass.is_a?(OrientDB::OClass)
|
117
|
+
klass.set_super_class super_klass if super_klass
|
118
|
+
db.schema.save
|
132
119
|
|
133
|
-
|
134
|
-
|
135
|
-
|
120
|
+
unless fields.empty?
|
121
|
+
fields.each do |property_name, type|
|
122
|
+
klass.add property_name, type
|
123
|
+
end
|
124
|
+
db.schema.save
|
136
125
|
end
|
137
|
-
|
126
|
+
|
127
|
+
klass
|
138
128
|
end
|
139
129
|
|
140
|
-
obj
|
141
130
|
end
|
142
131
|
|
143
132
|
end
|
144
133
|
|
134
|
+
|
145
135
|
end
|
data/lib/orientdb/user.rb
CHANGED
@@ -1,16 +1,5 @@
|
|
1
|
-
|
1
|
+
module OrientDB
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
KLASS = com.orientechnologies.orient.core.metadata.security.OUser
|
6
|
-
|
7
|
-
def initialize
|
8
|
-
@proxy_object = KLASS.new
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.from_ouser(ouser)
|
12
|
-
obj = new
|
13
|
-
obj.instance_variable_set "@proxy_object", ouser
|
14
|
-
end
|
3
|
+
User = com.orientechnologies.orient.core.metadata.security.OUser
|
15
4
|
|
16
5
|
end
|
data/lib/orientdb/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = "0.0.
|
1
|
+
module OrientDB
|
2
|
+
VERSION = "0.0.4"
|
3
3
|
end
|
data/orientdb.gemspec
CHANGED
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.add_dependency "hashie"
|
18
18
|
s.add_development_dependency "bundler", ">= 1.0.0"
|
19
19
|
s.add_development_dependency "awesome_print"
|
20
|
+
s.add_development_dependency "rspec", ">= 2.1"
|
20
21
|
|
21
22
|
s.files = `git ls-files`.split("\n")
|
22
23
|
s.test_files = Dir["test/test*.rb"]
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path("../spec_helper", __FILE__)
|
2
|
+
|
3
|
+
describe "OrientDB" do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@db = OrientDB::Database.new("local:#{TEST_DB_PATH}/test").create
|
7
|
+
@person_class = @db.create_class :person, :name => :string
|
8
|
+
@customer_class = @db.create_class :customer, :super => @person_class
|
9
|
+
@product_class = @db.create_class :product, :sku => :string, :title => :string, :price => :float
|
10
|
+
@line_class = @db.create_class :invoice_line, :product => @product_class, :quantity => :int, :price => :float
|
11
|
+
@invoice_class = @db.create_class :invoice,
|
12
|
+
:number => {:type => :int, :mandatory => true, :index => true},
|
13
|
+
:customer => {:type => @customer_class, :not_null => true},
|
14
|
+
:sold_on => :date,
|
15
|
+
:total => {:type => :float, :min => 0.01, :max => 100_000.0},
|
16
|
+
:lines => :embedded_list
|
17
|
+
end
|
18
|
+
|
19
|
+
after :all do
|
20
|
+
@db.close
|
21
|
+
# puts "Removing files in #{TEMP_DIR}/databases/*"
|
22
|
+
# FileUtils.rm_rf "#{TEMP_DIR}/databases/test"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should create a valid database" do
|
26
|
+
puts "Creating db #{@db_path}..."
|
27
|
+
@db.should be_a_kind_of OrientDB::Database
|
28
|
+
@db.name.should == "test"
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
unless defined?(SPEC_HELPER_LOADED)
|
2
|
+
|
3
|
+
GEM_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
4
|
+
LIB_ROOT = GEM_ROOT + '/lib'
|
5
|
+
SPEC_ROOT = GEM_ROOT + '/spec'
|
6
|
+
TEMP_DIR = SPEC_ROOT + '/tmp'
|
7
|
+
|
8
|
+
TEST_DB_PATH = "#{TEMP_DIR}/databases/db_#{rand(999) + 1}"
|
9
|
+
|
10
|
+
puts ">> GEM_ROOT : #{GEM_ROOT}"
|
11
|
+
puts ">> TEST_DB PATH : #{TEST_DB_PATH}"
|
12
|
+
|
13
|
+
$LOAD_PATH.unshift(LIB_ROOT) unless $LOAD_PATH.include?(LIB_ROOT)
|
14
|
+
|
15
|
+
require 'orientdb'
|
16
|
+
require 'spec'
|
17
|
+
require 'fileutils'
|
18
|
+
|
19
|
+
FileUtils.mkdir_p TEST_DB_PATH
|
20
|
+
|
21
|
+
Spec::Runner.configure do |config|
|
22
|
+
end
|
23
|
+
|
24
|
+
SPEC_HELPER_LOADED = true
|
25
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
10
10
|
platform: jruby
|
11
11
|
authors:
|
12
12
|
- Adrian Madrid
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-11-
|
17
|
+
date: 2010-11-12 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -55,6 +55,19 @@ dependencies:
|
|
55
55
|
version: "0"
|
56
56
|
type: :development
|
57
57
|
version_requirements: *id003
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: rspec
|
60
|
+
prerelease: false
|
61
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
segments:
|
66
|
+
- 2
|
67
|
+
- 1
|
68
|
+
version: "2.1"
|
69
|
+
type: :development
|
70
|
+
version_requirements: *id004
|
58
71
|
description: JRuby wrapper for OrientDB
|
59
72
|
email:
|
60
73
|
- aemadrid@gmail.com
|
@@ -84,10 +97,13 @@ files:
|
|
84
97
|
- lib/orientdb/document.rb
|
85
98
|
- lib/orientdb/ext.rb
|
86
99
|
- lib/orientdb/oclass.rb
|
87
|
-
- lib/orientdb/
|
100
|
+
- lib/orientdb/schema.rb
|
88
101
|
- lib/orientdb/user.rb
|
89
102
|
- lib/orientdb/version.rb
|
90
103
|
- orientdb.gemspec
|
104
|
+
- spec/orientdb_spec.rb
|
105
|
+
- spec/spec.opts
|
106
|
+
- spec/spec_helper.rb
|
91
107
|
has_rdoc: true
|
92
108
|
homepage: http://rubygems.org/gems/orientdb
|
93
109
|
licenses: []
|
data/lib/orientdb/proxy_mixin.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
class OrientDB
|
2
|
-
module ProxyMixin
|
3
|
-
|
4
|
-
def self.included(base)
|
5
|
-
base.extend ClassMethods
|
6
|
-
end
|
7
|
-
|
8
|
-
attr_reader :proxy_object
|
9
|
-
|
10
|
-
def respond_to?(meth)
|
11
|
-
proxy_object.respond_to?(meth) || super
|
12
|
-
end
|
13
|
-
|
14
|
-
def method_missing(meth, *args, &blk)
|
15
|
-
if proxy_object.respond_to? meth
|
16
|
-
puts "mm : #{meth}"
|
17
|
-
proxy_object.send meth, *args, &blk
|
18
|
-
else
|
19
|
-
super
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
alias_method :decorator_methods, :methods
|
24
|
-
|
25
|
-
def methods
|
26
|
-
(decorator_methods + proxy_object.methods).uniq
|
27
|
-
end
|
28
|
-
|
29
|
-
module ClassMethods
|
30
|
-
|
31
|
-
def proxy_method(aliased_name, real_name = nil)
|
32
|
-
real_name ||= aliased_name
|
33
|
-
class_eval %{def #{aliased_name}(*args) puts "pm : #{real_name}"; proxy_object.send :#{real_name}, *args end}
|
34
|
-
end
|
35
|
-
|
36
|
-
def proxy_methods(*args)
|
37
|
-
args.each { |arg| proxy_method *arg }
|
38
|
-
end
|
39
|
-
|
40
|
-
def proxy_accessor(aliased_name, real_name = nil)
|
41
|
-
real_name ||= aliased_name
|
42
|
-
aliased_name = aliased_name.to_s
|
43
|
-
if aliased_name[-1, 1] == '?'
|
44
|
-
class_eval %{def #{aliased_name[0..-2]}() puts "pa : #{real_name}"; proxy_object.send :is_#{real_name}? end}
|
45
|
-
class_eval %{def #{aliased_name}() puts "pa : #{real_name}"; proxy_object.send :is_#{real_name}? end}
|
46
|
-
class_eval %{def #{aliased_name[0..-2]}=(v) puts "pa : #{real_name}"; proxy_object.send :set_#{real_name}, v end}
|
47
|
-
else
|
48
|
-
class_eval %{def #{aliased_name}() puts "pa : #{real_name}"; proxy_object.send :get_#{real_name}? end}
|
49
|
-
class_eval %{def #{aliased_name}=(v) puts "pa : #{real_name}"; proxy_object.send :set_#{real_name}, v end}
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def proxy_accessors(*args)
|
54
|
-
args.each { |arg| proxy_accessor *arg }
|
55
|
-
end
|
56
|
-
|
57
|
-
def self.const_missing(missing)
|
58
|
-
puts "[#{name}:const_missing] #{missing}"
|
59
|
-
super
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
65
|
-
end
|