orientdb4r 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +14 -10
- data/lib/orientdb4r/client.rb +6 -4
- data/lib/orientdb4r/rest/client.rb +26 -5
- data/lib/orientdb4r/utils.rb +0 -24
- data/lib/orientdb4r/version.rb +1 -0
- data/test/test_database.rb +28 -7
- data/test/test_dmo.rb +11 -4
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -13,6 +13,9 @@ see Wiki page for more sample at https://github.com/veny/orientdb4r/wiki
|
|
13
13
|
|
14
14
|
client = Orientdb4r.client # equivalent for :host => 'localhost', :port => 2480, :ssl => false
|
15
15
|
|
16
|
+
client.database_exists? :database => 'temp', :user => 'admin', :password => 'admin'
|
17
|
+
=> true
|
18
|
+
|
16
19
|
client.connect :database => 'temp', :user => 'admin', :password => 'admin'
|
17
20
|
|
18
21
|
client.create_class(CLASS) do |c|
|
@@ -28,22 +31,22 @@ see Wiki page for more sample at https://github.com/veny/orientdb4r/wiki
|
|
28
31
|
end
|
29
32
|
|
30
33
|
puts client.query "SELECT FROM #{CLASS}"
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
34
|
+
=> {"@type"=>"d", "@rid"=>"#6:0", "@version"=>0, "@class"=>"myclass", "prop1"=>1, "prop2"=>"text1", "users"=>["#4:0"]}
|
35
|
+
=> {"@type"=>"d", "@rid"=>"#6:1", "@version"=>0, "@class"=>"myclass", "prop1"=>2, "prop2"=>"text2", "users"=>["#4:0"]}
|
36
|
+
=> {"@type"=>"d", "@rid"=>"#6:2", "@version"=>0, "@class"=>"myclass", "prop1"=>3, "prop2"=>"text3", "users"=>[]}
|
37
|
+
=> {"@type"=>"d", "@rid"=>"#6:3", "@version"=>0, "@class"=>"myclass", "prop1"=>4, "prop2"=>"text4", "users"=>[]}
|
38
|
+
=> {"@type"=>"d", "@rid"=>"#6:4", "@version"=>0, "@class"=>"myclass", "prop1"=>5, "prop2"=>"text5", "users"=>[]}
|
36
39
|
|
37
40
|
puts client.query "SELECT count(*) FROM #{CLASS}"
|
38
|
-
|
41
|
+
=> {"@type"=>"d", "@version"=>0, "count"=>5, "@fieldTypes"=>"count=l"}
|
39
42
|
|
40
43
|
puts client.query "SELECT max(prop1) FROM #{CLASS}"
|
41
|
-
|
44
|
+
=> {"@type"=>"d", "@version"=>0, "max"=>5}
|
42
45
|
|
43
46
|
puts client.query "TRAVERSE any() FROM (SELECT FROM #{CLASS} WHERE prop1 = 1)"
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
+
=> {"@type"=>"d", "@rid"=>"#6:0", "@version"=>0, "@class"=>"myclass", "prop1"=>1, "prop2"=>"text1", "users"=>["#4:0"]}
|
48
|
+
=> {"@type"=>"d", "@rid"=>"#4:0", "@version"=>0, "@class"=>"OUser", "name"=>"admin", "password"=>"{SHA-256}8C6976E5B5410415BDE908BD4DEE15DFB167A9C873FC4BB8A81F6F2AB448A918", "status"=>"ACTIVE", "roles"=>["#3:0"]}
|
49
|
+
=> {"@type"=>"d", "@rid"=>"#3:0", "@version"=>0, "@class"=>"ORole", "name"=>"admin", "mode"=>1, "rules"=>{}, "@fieldTypes"=>"mode=b"}
|
47
50
|
|
48
51
|
|
49
52
|
client.drop_class CLASS
|
@@ -72,6 +75,7 @@ see Wiki page for more sample at https://github.com/veny/orientdb4r/wiki
|
|
72
75
|
Tested on
|
73
76
|
* Ruby 1.9.3
|
74
77
|
* OrientDB 1.0.0
|
78
|
+
* OrientDB 1.0.1
|
75
79
|
* OrientDB 1.1.0-SNAPSHOT r5913+
|
76
80
|
|
77
81
|
== TESTS
|
data/lib/orientdb4r/client.rb
CHANGED
@@ -62,17 +62,19 @@ module Orientdb4r
|
|
62
62
|
|
63
63
|
###
|
64
64
|
# Retrieves all the information about a database.
|
65
|
-
|
65
|
+
# Client has not to be connected to see databases suitable to connect.
|
66
|
+
def get_database(options)
|
66
67
|
raise NotImplementedError, 'this should be overridden by concrete client'
|
67
68
|
end
|
68
69
|
|
69
70
|
|
70
71
|
###
|
71
72
|
# Checks existence of a given database.
|
72
|
-
|
73
|
+
# Client has not to be connected to see databases suitable to connect.
|
74
|
+
def database_exists?(options)
|
73
75
|
rslt = true
|
74
76
|
begin
|
75
|
-
get_database
|
77
|
+
get_database options
|
76
78
|
rescue NotFoundError
|
77
79
|
rslt = false
|
78
80
|
end
|
@@ -84,7 +86,7 @@ module Orientdb4r
|
|
84
86
|
|
85
87
|
###
|
86
88
|
# Executes a query against the database.
|
87
|
-
def query(sql)
|
89
|
+
def query(sql, options)
|
88
90
|
raise NotImplementedError, 'this should be overridden by concrete client'
|
89
91
|
end
|
90
92
|
|
@@ -6,7 +6,9 @@ module Orientdb4r
|
|
6
6
|
# Name of cookie that represents a session.
|
7
7
|
SESSION_COOKIE_NAME = 'OSESSIONID'
|
8
8
|
|
9
|
-
before [:
|
9
|
+
before [:query, :command], :assert_connected
|
10
|
+
before [:create_class, :get_class, :drop_class, :create_property], :assert_connected
|
11
|
+
before [:create_document, :get_document, :update_document, :delete_document], :assert_connected
|
10
12
|
around [:query, :command], :time_around
|
11
13
|
|
12
14
|
attr_reader :host, :port, :ssl, :user, :password, :database, :session_id
|
@@ -130,9 +132,23 @@ module Orientdb4r
|
|
130
132
|
end
|
131
133
|
|
132
134
|
|
133
|
-
def get_database(
|
135
|
+
def get_database(options=nil) #:nodoc:
|
136
|
+
raise ArgumentError, 'options have to be a Hash' if !options.nil? and !options.kind_of? Hash
|
137
|
+
|
138
|
+
if options.nil?
|
139
|
+
# use values from connect
|
140
|
+
raise ConnectionError, 'client has to be connected if no params' unless connected?
|
141
|
+
options = { :database => database, :user => user, :password => password }
|
142
|
+
end
|
143
|
+
|
144
|
+
options_pattern = { :database => :mandatory, :user => :optional, :password => :optional }
|
145
|
+
verify_options(options, options_pattern)
|
146
|
+
|
147
|
+
u = options.include?(:user) ? options[:user] : user
|
148
|
+
p = options.include?(:password) ? options[:password] : password
|
149
|
+
resource = ::RestClient::Resource.new(url, :user => u, :password => p)
|
134
150
|
begin
|
135
|
-
response =
|
151
|
+
response = resource["database/#{options[:database]}"].get
|
136
152
|
rescue
|
137
153
|
raise NotFoundError
|
138
154
|
end
|
@@ -142,10 +158,15 @@ module Orientdb4r
|
|
142
158
|
|
143
159
|
# ---------------------------------------------------------------------- SQL
|
144
160
|
|
145
|
-
def query(sql) #:nodoc:
|
161
|
+
def query(sql, options=nil) #:nodoc:
|
146
162
|
raise ArgumentError, 'query is blank' if blank? sql
|
147
163
|
|
148
|
-
|
164
|
+
options_pattern = { :limit => :optional }
|
165
|
+
verify_options(options, options_pattern) unless options.nil?
|
166
|
+
|
167
|
+
limit = ''
|
168
|
+
limit = "/#{options[:limit]}" if !options.nil? and options.include?(:limit)
|
169
|
+
response = @resource["query/#{@database}/sql/#{CGI::escape(sql)}#{limit}"].get
|
149
170
|
entries = process_response(response)
|
150
171
|
rslt = entries['result']
|
151
172
|
# mixin all document entries (they have '@class' attribute)
|
data/lib/orientdb4r/utils.rb
CHANGED
@@ -78,30 +78,6 @@ module Orientdb4r
|
|
78
78
|
|
79
79
|
end # Proxy
|
80
80
|
|
81
|
-
|
82
|
-
class DataGenerator
|
83
|
-
|
84
|
-
def initialize
|
85
|
-
@words = IO.readlines('/usr/share/dict/words')
|
86
|
-
0.upto(@words.size - 1) do |i|
|
87
|
-
word = @words[i]
|
88
|
-
word.strip!
|
89
|
-
idx = word.index("'")
|
90
|
-
word = word[0..(idx - 1)] unless idx.nil?
|
91
|
-
@words[i] = word
|
92
|
-
end
|
93
|
-
@words.uniq
|
94
|
-
Orientdb4r::logger.info "DataGenerator: #{@words.size} words"
|
95
|
-
end
|
96
|
-
|
97
|
-
###
|
98
|
-
# Gets a random word.
|
99
|
-
def word
|
100
|
-
@words[rand(@words.size)]
|
101
|
-
end
|
102
|
-
|
103
|
-
end # DataGenerator
|
104
|
-
|
105
81
|
end # Utils
|
106
82
|
|
107
83
|
|
data/lib/orientdb4r/version.rb
CHANGED
@@ -2,6 +2,7 @@ module Orientdb4r
|
|
2
2
|
|
3
3
|
# Version history.
|
4
4
|
VERSION_HISTORY = [
|
5
|
+
['0.2.6', '2012-07-03', "BF #8, BF #6"],
|
5
6
|
['0.2.5', '2012-07-01', "Added 'get_database' into database CRUD"],
|
6
7
|
# v-- https://groups.google.com/forum/?fromgroups#!topic/orient-database/5MAMCvFavTc
|
7
8
|
['0.2.4', '2012-06-26', "Added session management"],
|
data/test/test_database.rb
CHANGED
@@ -95,20 +95,25 @@ class TestDatabase < Test::Unit::TestCase
|
|
95
95
|
###
|
96
96
|
# GET DATABASE
|
97
97
|
def test_get_database
|
98
|
+
# not connected
|
99
|
+
assert_nothing_thrown do @client.get_database :database => 'temp', :user => 'admin', :password => 'admin' ; end
|
100
|
+
assert_raise Orientdb4r::ConnectionError do @client.get_database; end
|
101
|
+
# connected
|
98
102
|
@client.connect :database => 'temp', :user => 'admin', :password => 'admin'
|
99
|
-
assert_nothing_thrown do @client.get_database
|
103
|
+
assert_nothing_thrown do @client.get_database; end # gets info about connected DB
|
100
104
|
|
101
|
-
rslt = @client.get_database
|
105
|
+
rslt = @client.get_database
|
102
106
|
assert_not_nil rslt
|
103
107
|
assert_instance_of Hash, rslt
|
104
108
|
assert rslt.include? 'classes'
|
105
|
-
assert @client.database_exists?('temp')
|
109
|
+
assert @client.database_exists?(:database => 'temp', :user => 'admin', :password => 'admin')
|
110
|
+
assert @client.database_exists?(:database => 'temp') # use credentials of logged in user
|
106
111
|
|
107
112
|
# bad databases
|
108
|
-
assert_raise Orientdb4r::NotFoundError do @client.get_database 'UnknownDB'; end
|
109
|
-
assert_raise Orientdb4r::NotFoundError do @client.get_database 'temp/admin'; end
|
110
|
-
assert !@client.database_exists?('UnknownDB')
|
111
|
-
assert !@client.database_exists?('temp/admin')
|
113
|
+
assert_raise Orientdb4r::NotFoundError do @client.get_database :database => 'UnknownDB'; end
|
114
|
+
assert_raise Orientdb4r::NotFoundError do @client.get_database :database => 'temp/admin'; end
|
115
|
+
assert !@client.database_exists?(:database => 'UnknownDB')
|
116
|
+
assert !@client.database_exists?(:database => 'temp/admin')
|
112
117
|
end
|
113
118
|
|
114
119
|
|
@@ -126,4 +131,20 @@ class TestDatabase < Test::Unit::TestCase
|
|
126
131
|
assert_not_nil rslt['connections']
|
127
132
|
end
|
128
133
|
|
134
|
+
|
135
|
+
###
|
136
|
+
# Test of :assert_connected before advice.
|
137
|
+
def test_assert_connected
|
138
|
+
assert_raise Orientdb4r::ConnectionError do @client.query 'SELECT FROM OUser'; end
|
139
|
+
assert_raise Orientdb4r::ConnectionError do @client.query "INSERT INTO OUser(name) VALUES('x')"; end
|
140
|
+
assert_raise Orientdb4r::ConnectionError do @client.create_class 'x'; end
|
141
|
+
assert_raise Orientdb4r::ConnectionError do @client.create_property 'x', 'prop', :boolean; end
|
142
|
+
assert_raise Orientdb4r::ConnectionError do @client.get_class 'x'; end
|
143
|
+
assert_raise Orientdb4r::ConnectionError do @client.drop_class 'x'; end
|
144
|
+
assert_raise Orientdb4r::ConnectionError do @client.create_document({ '@class' => 'x', :prop => 1 }); end
|
145
|
+
assert_raise Orientdb4r::ConnectionError do @client.get_document('#1:0'); end
|
146
|
+
assert_raise Orientdb4r::ConnectionError do @client.update_document({}); end
|
147
|
+
assert_raise Orientdb4r::ConnectionError do @client.delete_document('#1:0'); end
|
148
|
+
end
|
149
|
+
|
129
150
|
end
|
data/test/test_dmo.rb
CHANGED
@@ -14,6 +14,7 @@ class TestDmo < Test::Unit::TestCase
|
|
14
14
|
def setup
|
15
15
|
@client = Orientdb4r.client
|
16
16
|
@client.connect :database => DB, :user => 'admin', :password => 'admin'
|
17
|
+
@client.drop_class(CLASS) # just to be sure if the previous test failed
|
17
18
|
@client.create_class(CLASS) do |c|
|
18
19
|
c.property 'prop1', :integer
|
19
20
|
c.property 'prop2', :string, :mandatory => true, :notnull => :true, :min => 1, :max => 99
|
@@ -56,21 +57,27 @@ class TestDmo < Test::Unit::TestCase
|
|
56
57
|
###
|
57
58
|
# SELECT
|
58
59
|
def test_query
|
59
|
-
1.upto(
|
60
|
+
1.upto(25) do |i|
|
60
61
|
@client.command "INSERT INTO #{CLASS} (prop1, prop2, friends) VALUES (#{i}, 'string#{i}', [#{@admin['@rid']}])"
|
61
62
|
end
|
62
63
|
|
63
64
|
entries = @client.query("SELECT FROM #{CLASS}")
|
65
|
+
assert_not_nil entries
|
64
66
|
assert_instance_of Array, entries
|
65
|
-
assert_equal
|
67
|
+
assert_equal 20, entries.size # 20 is default limit
|
66
68
|
entries.each { |doc| assert doc.kind_of? Orientdb4r::DocumentMetadata }
|
69
|
+
# limit
|
70
|
+
assert_equal 5, @client.query("SELECT FROM #{CLASS} LIMIT 5").size
|
71
|
+
entries = @client.query "SELECT FROM #{CLASS}", :limit => 100
|
72
|
+
assert_equal 25, entries.size
|
73
|
+
assert_raise ArgumentError do @client.query "SELECT FROM #{CLASS}", :unknown => 100; end
|
67
74
|
|
68
75
|
assert_equal 1, @client.query("SELECT FROM #{CLASS} WHERE prop1 = 1").size
|
69
|
-
assert_equal 0, @client.query("SELECT FROM #{CLASS} WHERE prop1 =
|
76
|
+
assert_equal 0, @client.query("SELECT FROM #{CLASS} WHERE prop1 = -1").size
|
70
77
|
# graph
|
71
78
|
rid = @client.query("SELECT FROM #{CLASS} WHERE prop1 = 1")[0]['@rid']
|
72
79
|
gr = @client.query("SELECT FROM (TRAVERSE * FROM #{rid})")
|
73
|
-
assert_equal 3, gr.size #
|
80
|
+
assert_equal 3, gr.size # entries: testing, OUser, ORole
|
74
81
|
assert_equal 1, gr.select { |e| e if e['@class'] == CLASS }.size
|
75
82
|
assert_equal 1, gr.select { |e| e if e['@class'] == 'OUser' }.size
|
76
83
|
assert_equal 1, gr.select { |e| e if e['@class'] == 'ORole' }.size
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: orientdb4r
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|