orientdb4r 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d475ea55280ea01281cefdee2731f1441d141095
4
+ data.tar.gz: 59f012f6c7a58d90af9650a9c27a85a691a65c74
5
+ SHA512:
6
+ metadata.gz: 2f0fb1f707050138c665237b963d64001b60ffcc460f6c6ded6009d2e2675977d504e225472399ad8ab66863adf54b68fce83df7f3687e2b2cfe3a0a6d98fd31
7
+ data.tar.gz: b6b538be7c8c18eb4352bec64be2b33979522f432e0a2e007d6abbb88c8eb3bf1ad654c5c7255c4d9f18f4069422c3967ff2d626b516128fa15ead84d324ae94
data/README.rdoc CHANGED
@@ -1,4 +1,11 @@
1
- = orientdb4r - Ruby binding for Orient DB
1
+
2
+ _ _ _ _ _ _
3
+ ___ _ __(_) ___ _ __ | |_ __| | |__ | || | _ __
4
+ / _ \| '__| |/ _ \ '_ \| __/ _` | '_ \| || |_| '__|
5
+ | (_) | | | | __/ | | | || (_| | |_) |__ _| |
6
+ \___/|_| |_|\___|_| |_|\__\__,_|_.__/ |_| |_|
7
+
8
+ = Ruby binding for Orient DB
2
9
 
3
10
  A Ruby client for the NoSQL Graph/Document database Orient DB (http://orientdb.org).
4
11
 
@@ -9,14 +16,19 @@ see Wiki page for more sample at https://github.com/veny/orientdb4r/wiki
9
16
 
10
17
  require 'orientdb4r'
11
18
 
19
+ DB = 'foo'
12
20
  CLASS = 'myclass'
13
21
 
14
22
  client = Orientdb4r.client # equivalent for :host => 'localhost', :port => 2480, :ssl => false
15
23
 
16
- client.database_exists? :database => 'temp', :user => 'admin', :password => 'admin'
17
- => true
24
+ client.database_exists? :database => DB, :user => 'admin', :password => 'admin'
25
+ => false
26
+
27
+ client.create_database :database => DB, :type => :memory, :user => 'root', :password => 'root'
28
+ => false
18
29
 
19
- client.connect :database => 'temp', :user => 'admin', :password => 'admin'
30
+ client.connect :database => DB, :user => 'admin', :password => 'admin'
31
+ => true
20
32
 
21
33
  unless client.class_exists? CLASS
22
34
  client.create_class(CLASS) do |c|
@@ -53,7 +65,7 @@ see Wiki page for more sample at https://github.com/veny/orientdb4r/wiki
53
65
 
54
66
  client.drop_class CLASS
55
67
  client.disconnect
56
-
68
+ => ["401 Unauthorized: Logged out", 401]
57
69
 
58
70
  == INSTALL
59
71
 
@@ -72,19 +84,21 @@ see Wiki page for more sample at https://github.com/veny/orientdb4r/wiki
72
84
 
73
85
  == REQUIREMENTS
74
86
 
75
- Tested on
76
- * Ruby 1.9.3
77
- * OrientDB 1.0.0
78
- * OrientDB 1.0.1
79
- * OrientDB 1.1.0-SNAPSHOT r5913+
87
+ * Ruby 1.9.x+
88
+ * OrientDB 1.0.x-1.3.x for *v0.3.x*
89
+ * OrientDB 1.4.0+ for *v0.4.x*
80
90
 
81
91
  == TESTS
82
- In order to run the tests you only need to:
83
92
 
84
- cd /path/to/repository
85
- rake test
86
93
 
87
- Start an instance of OrientDB (on localhost with default web port 2480 and 'admin/admin' account) before running.
94
+ > cd /path/to/repository
95
+ > rake db:setup4test # to create the temp DB which doesn't seem to be a default since v1.5
96
+ > rake test
97
+
98
+ Make sure before starting the tests:
99
+ * database server is running on localhost:2480
100
+ * there is a root account with username=root and password=root
101
+
88
102
 
89
103
  == AUTHOR
90
104
 
data/Rakefile CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'rake/testtask'
2
+ require 'rest_client'
2
3
 
3
4
  Rake::TestTask.new do |t|
4
5
  t.libs << 'test'
@@ -6,3 +7,36 @@ end
6
7
 
7
8
  desc "Run tests"
8
9
  task :default => :test
10
+
11
+ namespace :db do
12
+
13
+ DB_HOST = 'localhost'
14
+ DB_PORT = 2480
15
+ DB_NAME = 'temp'
16
+ DB_ROOT_USER = 'root'
17
+ DB_ROOT_PASS = 'root'
18
+
19
+ desc 'Check whether a test DB exists and create if not'
20
+ task :setup4test do
21
+ found = true
22
+ begin
23
+ ::RestClient::Request.new({:url=>"http://#{DB_HOST}:#{DB_PORT}/database/#{DB_NAME}", :method=>:get, :user=>DB_ROOT_USER, :password=>DB_ROOT_PASS}).execute
24
+ rescue Errno::ECONNREFUSED
25
+ fail "server seems to be closed, not running on #{DB_HOST}:#{DB_PORT}?"
26
+ rescue ::RestClient::Unauthorized
27
+ # this is expected reaction if DB does not exist
28
+ puts 'DB does NOT exist -> create'
29
+ found = false
30
+ rescue ::RestClient::Exception => e
31
+ fail "unexpected failure: #{e}"
32
+ end
33
+
34
+ if found
35
+ puts 'DB already exists'
36
+ else
37
+ ::RestClient::Request.new({:url=>"http://#{DB_HOST}:#{DB_PORT}/database/#{DB_NAME}/memory", :method=>:post, :user=>DB_ROOT_USER, :password=>DB_ROOT_PASS}).execute
38
+ puts 'DB created'
39
+ end
40
+ end
41
+
42
+ end
data/changelog.txt CHANGED
@@ -1,6 +1,15 @@
1
+ 0.4.0 2013-08-14
2
+ - Closes gap between this driver and OrientDb v1.4.0+ which introduced some changes on REST API (connect & create_document).
3
+ - No more backward compatible with OrientDb v1.3.x and lesser.
4
+ - Enhancement #20 : Method 'compare_versions' accepts a block now
5
+ - Bug Fix #25
6
+
7
+
8
+
1
9
  0.3.3 2012-12-16
2
10
  - Enhancement #18 : Added 'abstract' option into creating a new class
3
11
  - Enhancement #19 : Added GET - List Databases
12
+ - Bug Fix #22
4
13
 
5
14
  0.3.2 2012-11-02
6
15
  - Enhancement #13 : configurable User-Agent request header
@@ -11,10 +20,12 @@
11
20
  - Bug Fix #14, #15
12
21
 
13
22
  0.3.0 2012-08-01
14
- - introduced support for cluster of distributed servers
23
+ - Introduces support for cluster of distributed servers.
15
24
  - initial strategies for load balancing: sequence, round robin
16
25
  - Keep-Alive feature: Excon HTTP library is fully working
17
26
 
27
+
28
+
18
29
  0.2.10 2012-07-21
19
30
  - experimental support for Excon HTTP library with Keep-Alive connection
20
31
 
data/lib/orientdb4r.rb CHANGED
@@ -8,20 +8,21 @@ require 'orientdb4r/version'
8
8
  # This module represents the entry point for using the Ruby OrientDB client.
9
9
  module Orientdb4r
10
10
 
11
- autoload :Utils, 'orientdb4r/utils'
12
- autoload :Client, 'orientdb4r/client'
13
- autoload :RestClient, 'orientdb4r/rest/client'
14
- autoload :BinClient, 'orientdb4r/bin/client'
15
- autoload :Rid, 'orientdb4r/rid'
16
- autoload :HashExtension, 'orientdb4r/rest/model'
17
- autoload :OClass, 'orientdb4r/rest/model'
18
- autoload :ChainedError, 'orientdb4r/chained_error'
19
- autoload :Node, 'orientdb4r/node'
20
- autoload :RestNode, 'orientdb4r/rest/node'
21
- autoload :RestClientNode, 'orientdb4r/rest/restclient_node'
22
- autoload :ExconNode, 'orientdb4r/rest/excon_node'
23
- autoload :Sequence, 'orientdb4r/load_balancing'
24
- autoload :RoundRobin, 'orientdb4r/load_balancing'
11
+ autoload :Utils, 'orientdb4r/utils'
12
+ autoload :Client, 'orientdb4r/client'
13
+ autoload :RestClient, 'orientdb4r/rest/client'
14
+ autoload :BinClient, 'orientdb4r/bin/client'
15
+ autoload :Rid, 'orientdb4r/rid'
16
+ autoload :HashExtension, 'orientdb4r/rest/model'
17
+ autoload :OClass, 'orientdb4r/rest/model'
18
+ autoload :ChainedError, 'orientdb4r/chained_error'
19
+ autoload :Node, 'orientdb4r/node'
20
+ autoload :RestNode, 'orientdb4r/rest/node'
21
+ autoload :RestClientNode, 'orientdb4r/rest/restclient_node'
22
+ autoload :ExconNode, 'orientdb4r/rest/excon_node'
23
+ autoload :Sequence, 'orientdb4r/load_balancing'
24
+ autoload :RoundRobin, 'orientdb4r/load_balancing'
25
+ autoload :DocumentMetadata, 'orientdb4r/rest/model'
25
26
 
26
27
 
27
28
  class << self
@@ -3,16 +3,11 @@ module Orientdb4r
3
3
  class Client
4
4
  include Utils
5
5
 
6
- # Server version used if no concrete version identified.
7
- DEFAULT_SERVER_VERSION = '1.0.0--'
8
-
9
- # # Regexp to validate format of providet version.
6
+ # # Regexp to validate format of provided version.
10
7
  SERVER_VERSION_PATTERN = /^\d+\.\d+\.\d+[-SNAPHOT]*$/
11
8
 
12
9
  # connection parameters
13
10
  attr_reader :user, :password, :database
14
- # version loaded from server
15
- attr_reader :server_version
16
11
  # type of connection library [:restclient, :excon]
17
12
  attr_reader :connection_library
18
13
  # type of load balancing [:sequence, :round_robin]
@@ -112,7 +107,22 @@ module Orientdb4r
112
107
  # Retrieves the available databases.
113
108
  # That is protected by the resource "server.listDatabases"
114
109
  # that by default is assigned to the guest (anonymous) user in orientdb-server-config.xml.
115
- def list_databases()
110
+ def list_databases(options)
111
+ raise NotImplementedError, 'this should be overridden by concrete client'
112
+ end
113
+
114
+
115
+ ###
116
+ # Exports a gzip file that contains the database JSON export.
117
+ # Returns name of stored file.
118
+ def export(options)
119
+ raise NotImplementedError, 'this should be overridden by concrete client'
120
+ end
121
+
122
+
123
+ ###
124
+ # Imports a database from an uploaded JSON text file.
125
+ def import(options)
116
126
  raise NotImplementedError, 'this should be overridden by concrete client'
117
127
  end
118
128
 
@@ -147,15 +157,7 @@ module Orientdb4r
147
157
  sql = "CREATE CLASS #{name}"
148
158
  sql << " EXTENDS #{options[:extends]}" if options.include? :extends
149
159
  sql << " CLUSTER #{options[:cluster]}" if options.include? :cluster
150
- # abstract (TODO should be block)
151
- bigger_1_2 = (compare_versions(server_version, '1.2.0') > 0)
152
- if options.include?(:abstract)
153
- if bigger_1_2
154
- sql << ' ABSTRACT'
155
- else
156
- Orientdb4r::logger.warn("abstract class not supported in OrientDB version #{compare_versions}")
157
- end
158
- end
160
+ sql << ' ABSTRACT' if options.include?(:abstract)
159
161
 
160
162
  drop_class name if options[:force]
161
163
 
@@ -202,7 +204,8 @@ module Orientdb4r
202
204
  rslt = true
203
205
  begin
204
206
  get_class name
205
- rescue OrientdbError
207
+ rescue OrientdbError => e
208
+ raise e if e.is_a? ConnectionError and e.message == 'not connected' # workaround for AOP2 (unable to decorate already existing methods)
206
209
  rslt = false
207
210
  end
208
211
  rslt
@@ -212,15 +215,14 @@ module Orientdb4r
212
215
  ###
213
216
  # Removes a class from the schema.
214
217
  def drop_class(name, options={})
215
- raise ArgumentError, "class name is blank" if blank?(name)
218
+ raise ArgumentError, 'class name is blank' if blank?(name)
216
219
 
217
220
  # :mode=>:strict forbids to drop a class that is a super class for other one
218
221
  opt_pattern = { :mode => :nil }
219
222
  verify_options(options, opt_pattern)
220
223
  if :strict == options[:mode]
221
- response = call_server(:method => :get, :uri => "connect/#{@database}") # TODO there cannot be REST
222
- connect_info = process_response response
223
- children = connect_info['classes'].select { |i| i['superClass'] == name }
224
+ response = get_database
225
+ children = response['classes'].select { |i| i['superClass'] == name }
224
226
  unless children.empty?
225
227
  raise OrientdbError, "class is super-class, cannot be deleted, name=#{name}"
226
228
  end
@@ -264,7 +266,9 @@ module Orientdb4r
264
266
 
265
267
  ###
266
268
  # Create a new document.
267
- # Returns the Record-id assigned.
269
+ # Returns the Record-id assigned for OrientDB version <= 1.3.x
270
+ # and the whole new document for version >= 1.4.x
271
+ # (see https://groups.google.com/forum/?fromgroups=#!topic/orient-database/UJGAXYpHDmo for more info).
268
272
  def create_document(doc)
269
273
  raise NotImplementedError, 'this should be overridden by concrete client'
270
274
  end
@@ -5,7 +5,7 @@ module Orientdb4r
5
5
 
6
6
 
7
7
  before [:query, :command], :assert_connected
8
- before [:create_class, :get_class, :drop_class, :create_property], :assert_connected
8
+ before [:create_class, :get_class, :class_exists?, :drop_class, :create_property], :assert_connected
9
9
  before [:create_document, :get_document, :update_document, :delete_document], :assert_connected
10
10
  around [:query, :command], :time_around
11
11
 
@@ -88,33 +88,24 @@ module Orientdb4r
88
88
 
89
89
  @nodes.each { |node| node.cleanup } # destroy all used session <= problem in 1.3.0-SNAPSHOT
90
90
  begin
91
- response = call_server(:method => :get, :uri => "connect/#{@database}")
91
+ http_response = call_server(:method => :get, :uri => "connect/#{@database}")
92
92
  rescue
93
93
  @connected = false
94
- @server_version = nil
95
94
  @user = nil
96
95
  @password = nil
97
96
  @database = nil
98
97
  @nodes.each { |node| node.cleanup }
99
98
  raise ConnectionError
100
99
  end
101
- rslt = process_response response
102
- decorate_classes_with_model(rslt['classes'])
103
100
 
104
- # try to read server version
105
- if rslt.include? 'server'
106
- @server_version = rslt['server']['version']
107
- else
108
- @server_version = DEFAULT_SERVER_VERSION
109
- end
110
- unless server_version =~ SERVER_VERSION_PATTERN
111
- Orientdb4r::logger.warn "bad version format, version=#{server_version}"
112
- @server_version = DEFAULT_SERVER_VERSION
113
- end
101
+ rslt = process_response http_response
102
+ # no metadata in connect v1.4.0+
103
+ # https://groups.google.com/forum/?fromgroups=#!topic/orient-database/R0VoOfIyDng
104
+ #decorate_classes_with_model(rslt['classes']) unless rslt['classes'].nil?
114
105
 
115
- Orientdb4r::logger.info "successfully connected to server, version=#{server_version}"
106
+ Orientdb4r::logger.info "successfully connected to server, code=#{rslt.code}"
116
107
  @connected = true
117
- rslt
108
+ @connected
118
109
  end
119
110
 
120
111
 
@@ -128,7 +119,6 @@ module Orientdb4r
128
119
  # It always returns 401 because some browsers intercept this and avoid to reuse the same session again.
129
120
  ensure
130
121
  @connected = false
131
- @server_version = nil
132
122
  @user = nil
133
123
  @password = nil
134
124
  @database = nil
@@ -158,12 +148,12 @@ module Orientdb4r
158
148
 
159
149
  def create_database(options) #:nodoc:
160
150
  options_pattern = {
161
- :database => :mandatory, :type => 'memory',
151
+ :database => :mandatory, :type => :memory,
162
152
  :user => :optional, :password => :optional
163
153
  }
164
154
  verify_and_sanitize_options(options, options_pattern)
165
155
 
166
- params = { :method => :post, :uri => "database/#{options[:database]}/#{options[:type]}" }
156
+ params = { :method => :post, :uri => "database/#{options[:database]}/#{options[:type].to_s}" }
167
157
  params[:no_session] = true # out of existing session which represents an already done authentication
168
158
 
169
159
  # additional authentication allowed, overriden in 'call_server' if not defined
@@ -198,7 +188,9 @@ module Orientdb4r
198
188
  response = call_server params
199
189
 
200
190
  # NotFoundError cannot be raised - no way how to recognize from 401 bad auth
201
- process_response(response)
191
+ rslt = process_response response
192
+ decorate_classes_with_model(rslt['classes']) unless rslt['classes'].nil?
193
+ rslt
202
194
  end
203
195
 
204
196
 
@@ -220,12 +212,61 @@ module Orientdb4r
220
212
  end
221
213
 
222
214
 
223
- def list_databases() #:nodoc:
224
- response = call_server :method => :get, :uri => 'listDatabases', :no_session => true
215
+ #> curl --user root:root http://localhost:2480/listDatabases
216
+ def list_databases(options=nil) #:nodoc:
217
+ verify_and_sanitize_options(options, { :user => :optional, :password => :optional })
218
+
219
+ params = { :method => :get, :uri => 'listDatabases', :no_session => true }
220
+ # additional authentication allowed, overriden in 'call_server' if not defined
221
+ params[:user] = options[:user] if options.include? :user
222
+ params[:password] = options[:password] if options.include? :password
223
+
224
+ response = call_server params
225
225
  rslt = process_response(response)
226
226
  rslt['databases']
227
227
  end
228
228
 
229
+
230
+ def export(options=nil) #:nodoc:
231
+ raise ArgumentError, 'options have to be a Hash' if !options.nil? and !options.kind_of? Hash
232
+
233
+ if options.nil? or (!options.nil? and options[:database].nil?)
234
+ # use database from connect
235
+ raise ConnectionError, 'client has to be connected if no database given' unless connected?
236
+ options = {} if options.nil?
237
+ options[:database] = database
238
+ end
239
+
240
+ options_pattern = { :database => :mandatory, :user => :optional, :password => :optional, :file => :optional }
241
+ verify_options(options, options_pattern)
242
+
243
+ params = {:method => :get, :uri => "export/#{options[:database]}"}
244
+ params[:no_session] = true # out of existing session which represents an already done authentication
245
+
246
+ # additional authentication allowed, overriden in 'call_server' if not defined
247
+ params[:user] = options[:user] if options.include? :user
248
+ params[:password] = options[:password] if options.include? :password
249
+
250
+ response = call_server params
251
+ rslt = process_response(response)
252
+
253
+ filename = options[:file]
254
+ filename = response.headers[:content_disposition].split('filename=')[-1] if filename.nil?
255
+ File.open(filename, 'w') do |f|
256
+ f.write rslt
257
+ end
258
+
259
+ filename
260
+ end
261
+
262
+
263
+ def import(options=nil) #:nodoc:
264
+ raise NotImplementedError, 'not working via REST API, see here for more info: https://github.com/nuvolabase/orientdb/issues/1345'
265
+ # params = {:method => :post, :uri => 'import/'}
266
+ # response = call_server params
267
+ end
268
+
269
+
229
270
  # ---------------------------------------------------------------------- SQL
230
271
 
231
272
  def query(sql, options=nil) #:nodoc:
@@ -261,25 +302,12 @@ module Orientdb4r
261
302
  def get_class(name) #:nodoc:
262
303
  raise ArgumentError, "class name is blank" if blank?(name)
263
304
 
264
- if compare_versions(server_version, '1.1.0') >= 0
265
- response = call_server(:method => :get, :uri => "class/#{@database}/#{name}")
266
- rslt = process_response(response) do
267
- raise NotFoundError, 'class not found' if response.body =~ /Invalid class/
268
- end
269
-
270
- classes = [rslt]
271
- else
272
- # there is bug in REST API [v1.0.0, fixed in r5902], only data are returned
273
- # workaround - use metadate delivered by 'connect'
274
- response = call_server(:method => :get, :uri => "connect/#{@database}")
275
- connect_info = process_response(response) do
276
- raise NotFoundError, 'class not found' if response.body =~ /Invalid class/
277
- end
278
-
279
- classes = connect_info['classes'].select { |i| i['name'] == name }
280
- raise NotFoundError, "class not found, name=#{name}" unless 1 == classes.size
305
+ response = call_server(:method => :get, :uri => "class/#{@database}/#{name}")
306
+ rslt = process_response(response) do
307
+ raise NotFoundError, 'class not found' if response.body =~ /Invalid class/
281
308
  end
282
309
 
310
+ classes = [rslt]
283
311
  decorate_classes_with_model(classes)
284
312
  clazz = classes[0]
285
313
  clazz.extend Orientdb4r::HashExtension
@@ -298,13 +326,15 @@ module Orientdb4r
298
326
  # ----------------------------------------------------------------- DOCUMENT
299
327
 
300
328
  def create_document(doc) #:nodoc:
301
- response = call_server(:method => :post, :uri => "document/#{@database}", \
329
+ http_response = call_server(:method => :post, :uri => "document/#{@database}", \
302
330
  :content_type => 'application/json', :data => doc.to_json)
303
- srid = process_response(response) do
304
- raise DataError, 'validation problem' if response.body =~ /OValidationException/
331
+ resp = process_response(http_response) do
332
+ raise DataError, 'validation problem' if http_response.body =~ /OValidationException/
305
333
  end
306
334
 
307
- Rid.new srid
335
+ resp = ::JSON.parse(http_response.body) # workaround: https://groups.google.com/forum/?fromgroups=#!topic/orient-database/UJGAXYpHDmo
336
+ resp.extend Orientdb4r::DocumentMetadata
337
+ resp
308
338
  end
309
339
 
310
340
 
@@ -380,6 +410,8 @@ module Orientdb4r
380
410
  rslt = case
381
411
  when content_type.start_with?('text/plain')
382
412
  response.body
413
+ when content_type.start_with?('application/x-gzip')
414
+ response.body
383
415
  when content_type.start_with?('application/json')
384
416
  ::JSON.parse(response.body)
385
417
  else
@@ -59,8 +59,13 @@ module Orientdb4r
59
59
  firstv = /^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)/.match(first)[0]
60
60
  secondv = /^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)/.match(second)[0]
61
61
 
62
- return 0 if firstv == secondv
63
- return firstv > secondv ? 1 : -1
62
+ rslt = 0
63
+ rslt = 1 if firstv > secondv
64
+ rslt = -1 if firstv < secondv
65
+
66
+ yield rslt if block_given?
67
+
68
+ rslt
64
69
  end
65
70
 
66
71
  class Proxy
@@ -2,6 +2,7 @@ module Orientdb4r
2
2
 
3
3
  # Version history.
4
4
  VERSION_HISTORY = [
5
+ ['0.4.0', '2013-08-14', "Closed gap between this driver and OrientDB v1.4.0+; Enh #20, BF #25"],
5
6
  ['0.3.3', '2012-12-16', "Enh #18 ('abstract' option into creating a new class), Enh #19 (GET - List Databases)"],
6
7
  ['0.3.2', '2012-11-02', "Enh #13 (User-Agent), Enh #16 (configurable Recover Time in Load Balancing)"],
7
8
  ['0.3.1', '2012-08-27', "Timeout for reuse of dirty nodes in load balancing; BF #14, BF #15"],
data/test/test_client.rb CHANGED
@@ -46,9 +46,11 @@ class TestClient < Test::Unit::TestCase
46
46
  assert_instance_of Orientdb4r::RestClientNode, client.nodes[0]
47
47
 
48
48
  # excon
49
- client = Orientdb4r.client :connection_library => :excon, :instance => :new
50
- assert_equal :excon, client.connection_library
51
- assert_instance_of Orientdb4r::ExconNode, client.nodes[0]
49
+ if Gem::Specification::find_all_by_name('excon').any?
50
+ client = Orientdb4r.client :connection_library => :excon, :instance => :new
51
+ assert_equal :excon, client.connection_library
52
+ assert_instance_of Orientdb4r::ExconNode, client.nodes[0]
53
+ end
52
54
  end
53
55
 
54
56
  ###
@@ -68,17 +70,19 @@ class TestClient < Test::Unit::TestCase
68
70
  end
69
71
  RestClient.proxy = nil # restore no setting
70
72
 
71
- # no proxy - excon
72
- client = Orientdb4r.client :connection_library => :excon, :instance => :new
73
- assert_nil client.proxy
74
- assert_nil client.nodes[0].proxy
73
+ if Gem::Specification::find_all_by_name('excon').any?
74
+ # no proxy - excon
75
+ client = Orientdb4r.client :connection_library => :excon, :instance => :new
76
+ assert_nil client.proxy
77
+ assert_nil client.nodes[0].proxy
75
78
 
76
- # proxy - restclient
77
- client = Orientdb4r.client :connection_library => :excon, :proxy => PROXY_URL, :instance => :new
78
- assert_equal PROXY_URL, client.proxy
79
- assert_equal PROXY_URL, client.nodes[0].proxy
80
- assert_raise Orientdb4r::ConnectionError do
81
- client.connect :database => 'temp', :user => 'admin', :password => 'admin'
79
+ # proxy - excon
80
+ client = Orientdb4r.client :connection_library => :excon, :proxy => PROXY_URL, :instance => :new
81
+ assert_equal PROXY_URL, client.proxy
82
+ assert_equal PROXY_URL, client.nodes[0].proxy
83
+ assert_raise Orientdb4r::ConnectionError do
84
+ client.connect :database => 'temp', :user => 'admin', :password => 'admin'
85
+ end
82
86
  end
83
87
  end
84
88
 
@@ -2,15 +2,10 @@ require 'test/unit'
2
2
  require 'orientdb4r'
3
3
 
4
4
  ###
5
- # This class tests following operations:
6
- # * CONNECT
7
- # * DISCONNECT
8
- # * CREATE DATABASE
9
- # * GET DATABASE
10
- # * DELETE DATABASE
11
- # * SERVER info
5
+ # This class tests DB management.
12
6
  class TestDatabase < Test::Unit::TestCase
13
7
 
8
+ DB = 'temp'
14
9
  Orientdb4r::logger.level = Logger::DEBUG
15
10
 
16
11
  def setup
@@ -20,34 +15,32 @@ class TestDatabase < Test::Unit::TestCase
20
15
  ###
21
16
  # CONNECT
22
17
  def test_connect
23
- assert_nothing_thrown do @client.connect :database => 'temp', :user => 'admin', :password => 'admin'; end
24
- rslt = @client.connect :database => 'temp', :user => 'admin', :password => 'admin'
25
- assert_instance_of Hash, rslt
26
- assert rslt.size > 0
27
- assert rslt.include? 'classes'
18
+ assert_nothing_thrown do @client.connect :database => DB, :user => 'admin', :password => 'admin'; end
19
+ rslt = @client.connect :database => DB, :user => 'admin', :password => 'admin'
20
+ assert_instance_of TrueClass, rslt
28
21
 
29
22
  assert_equal 'admin', @client.user
30
23
  assert_equal 'admin', @client.password
31
- assert_equal 'temp', @client.database
32
- assert_not_nil @client.server_version
24
+ assert_equal DB, @client.database
33
25
 
34
26
  # connection refused
35
27
  client = Orientdb4r.client :port => 2840, :instance => :new
36
28
  assert_raise Orientdb4r::ConnectionError do
37
- client.connect :database => 'temp', :user => 'admin', :password => 'admin'
29
+ client.connect :database => DB, :user => 'admin', :password => 'admin'
38
30
  end
39
31
 
40
32
  # bad DB name
41
33
  assert_raise Orientdb4r::UnauthorizedError do
42
34
  @client.connect :database => 'unknown_db', :user => 'admin', :password => 'admin'
43
35
  end
44
- # bad DB name with '/' => wrong REST resource
45
- assert_raise Orientdb4r::ServerError do
46
- @client.connect :database => 'temp/temp', :user => 'admin', :password => 'admin'
47
- end
36
+ # !!! curl -v --user admin:adminX http://localhost:2480/connect/foo/bar
37
+ # # bad DB name with '/' => wrong REST resource
38
+ # assert_raise Orientdb4r::ServerError do
39
+ # @client.connect :database => 'temp/temp', :user => 'admin', :password => 'admin'
40
+ # end
48
41
  # bad credentials
49
42
  assert_raise Orientdb4r::UnauthorizedError do
50
- @client.connect :database => 'temp', :user => 'admin1', :password => 'admin'
43
+ @client.connect :database => DB, :user => 'admin1', :password => 'admin'
51
44
  end
52
45
 
53
46
  # clean up
@@ -58,7 +51,7 @@ class TestDatabase < Test::Unit::TestCase
58
51
  ###
59
52
  # DISCONNECT
60
53
  def test_disconnect
61
- @client.connect :database => 'temp', :user => 'admin', :password => 'admin'
54
+ @client.connect :database => DB, :user => 'admin', :password => 'admin'
62
55
  assert @client.connected?
63
56
  assert_nothing_thrown do @client.disconnect; end
64
57
  assert !@client.connected?
@@ -68,14 +61,12 @@ class TestDatabase < Test::Unit::TestCase
68
61
  assert_nil @client.user
69
62
  assert_nil @client.password
70
63
  assert_nil @client.database
71
- assert_nil @client.server_version
72
64
  end
73
65
 
74
66
 
75
67
  ###
76
68
  # CREATE DATABASE
77
- # Temporary disabled because of dependency to password of 'root' account
78
- def xtest_create_database
69
+ def test_create_database
79
70
  assert_nothing_thrown do
80
71
  @client.create_database :database => 'UniT', :user => 'root', :password => 'root'
81
72
  end
@@ -87,7 +78,7 @@ class TestDatabase < Test::Unit::TestCase
87
78
  @client.create_database :database => 'UniT', :user => 'root', :password => 'root'
88
79
  end
89
80
  # insufficient rights
90
- assert_raise Orientdb4r::OrientdbError do
81
+ assert_raise Orientdb4r::UnauthorizedError do
91
82
  @client.create_database :database => 'UniT1', :user => 'admin', :password => 'admin'
92
83
  end
93
84
 
@@ -104,16 +95,25 @@ class TestDatabase < Test::Unit::TestCase
104
95
  # GET DATABASE
105
96
  def test_get_database
106
97
  # not connected - allowed with additional authentication
107
- assert_nothing_thrown do @client.get_database :database => 'temp', :user => 'admin', :password => 'admin' ; end
98
+ assert_nothing_thrown do @client.get_database :database => DB, :user => 'admin', :password => 'admin' ; end
108
99
  assert_raise Orientdb4r::ConnectionError do @client.get_database; end
109
100
  # connected
110
- @client.connect :database => 'temp', :user => 'admin', :password => 'admin'
101
+ @client.connect :database => DB, :user => 'admin', :password => 'admin'
111
102
  assert_nothing_thrown do @client.get_database; end # gets info about connected DB
112
103
 
113
104
  rslt = @client.get_database
114
105
  assert_not_nil rslt
115
106
  assert_instance_of Hash, rslt
107
+ assert !rslt.empty?
108
+ # server
109
+ assert rslt.include? 'server'
110
+ assert_instance_of Hash, rslt['server']
111
+ assert !rslt['server'].empty?
112
+ assert rslt['server'].include? 'version'
113
+ # classes
116
114
  assert rslt.include? 'classes'
115
+ assert_instance_of Array, rslt['classes']
116
+ assert !rslt['classes'].empty?
117
117
 
118
118
  # bad databases
119
119
  assert_raise Orientdb4r::UnauthorizedError do @client.get_database :database => 'UnknownDB'; end
@@ -121,8 +121,8 @@ class TestDatabase < Test::Unit::TestCase
121
121
 
122
122
 
123
123
  # database_exists?
124
- assert @client.database_exists?(:database => 'temp', :user => 'admin', :password => 'admin')
125
- assert @client.database_exists?(:database => 'temp') # use credentials of logged in user
124
+ assert @client.database_exists?(:database => DB, :user => 'admin', :password => 'admin')
125
+ assert @client.database_exists?(:database => DB) # use credentials of logged in user
126
126
  assert !@client.database_exists?(:database => 'UnknownDB')
127
127
  assert !@client.database_exists?(:database => 'temp/admin')
128
128
  end
@@ -130,8 +130,7 @@ class TestDatabase < Test::Unit::TestCase
130
130
 
131
131
  ###
132
132
  # DELETE DATABASE
133
- # Temporary disabled because of dependency to password of 'root' account
134
- def xtest_delete_database
133
+ def test_delete_database
135
134
  @client.create_database :database => 'UniT', :user => 'root', :password => 'root'
136
135
 
137
136
  # deleting non-existing DB
@@ -139,7 +138,7 @@ class TestDatabase < Test::Unit::TestCase
139
138
  @client.delete_database :database => 'UniT1', :user => 'root', :password => 'root'
140
139
  end
141
140
  # insufficient rights
142
- assert_raise Orientdb4r::OrientdbError do
141
+ assert_raise Orientdb4r::UnauthorizedError do
143
142
  @client.delete_database :database => 'UniT', :user => 'admin', :password => 'admin'
144
143
  end
145
144
 
@@ -151,7 +150,6 @@ class TestDatabase < Test::Unit::TestCase
151
150
 
152
151
  ###
153
152
  # SERVER info
154
- # Temporary disabled because of dependency to password of 'root' account
155
153
  def xtest_server
156
154
  # admin/admin has not 'server.info' resource access in standard installation
157
155
  assert_raise Orientdb4r::OrientdbError do @client.server :user => 'admin', :password => 'admin'; end
@@ -168,11 +166,11 @@ class TestDatabase < Test::Unit::TestCase
168
166
  # GET List Databases
169
167
  # Retrieves the available databases.
170
168
  def test_list_databases
171
- dbs = @client.list_databases
169
+ dbs = @client.list_databases :user => 'root', :password => 'root'
172
170
  assert_not_nil dbs
173
171
  assert_instance_of Array, dbs
174
172
  assert !dbs.empty?
175
- assert dbs.include? 'temp'
173
+ assert dbs.include? DB
176
174
  end
177
175
 
178
176
 
@@ -183,6 +181,7 @@ class TestDatabase < Test::Unit::TestCase
183
181
  assert_raise Orientdb4r::ConnectionError do @client.query "INSERT INTO OUser(name) VALUES('x')"; end
184
182
  #BF #21 assert_raise Orientdb4r::ConnectionError do @client.create_class 'x'; end
185
183
  assert_raise Orientdb4r::ConnectionError do @client.create_property 'x', 'prop', :boolean; end
184
+ assert_raise Orientdb4r::ConnectionError do @client.class_exists? 'x'; end
186
185
  assert_raise Orientdb4r::ConnectionError do @client.get_class 'x'; end
187
186
  assert_raise Orientdb4r::ConnectionError do @client.drop_class 'x'; end
188
187
  assert_raise Orientdb4r::ConnectionError do @client.create_document({ '@class' => 'x', :prop => 1 }); end
@@ -197,7 +196,7 @@ class TestDatabase < Test::Unit::TestCase
197
196
  def test_session_id
198
197
  client = Orientdb4r.client :instance => :new
199
198
  assert_nil client.nodes[0].session_id
200
- client.connect :database => 'temp', :user => 'admin', :password => 'admin'
199
+ client.connect :database => DB, :user => 'admin', :password => 'admin'
201
200
  session_id = client.nodes[0].session_id
202
201
  assert_not_nil session_id
203
202
  client.query 'SELECT count(*) FROM OUser'
@@ -208,4 +207,40 @@ class TestDatabase < Test::Unit::TestCase
208
207
  assert_nil client.nodes[0].session_id
209
208
  end
210
209
 
210
+
211
+ ###
212
+ # EXPORT
213
+ def test_export
214
+ client = Orientdb4r.client :instance => :new
215
+
216
+ # export of connected database
217
+ client.connect :database => DB, :user => 'admin', :password => 'admin'
218
+ rslt = client.export
219
+ assert File.exist? './temp.gz'
220
+ assert File.file? './temp.gz'
221
+ assert 'temp.gz', rslt
222
+ File.delete './temp.gz'
223
+
224
+ # export with given file
225
+ given_filename = "#{Dir.tmpdir}/TEMP.gz"
226
+ client.export :file => given_filename
227
+ assert File.exist? given_filename
228
+ assert File.file? given_filename
229
+ assert given_filename, rslt
230
+
231
+ # explicit given DB
232
+ client.disconnect
233
+ assert_nothing_thrown do
234
+ client.export :database => DB, :user => 'admin', :password => 'admin', :file => given_filename
235
+ end
236
+ # unknow DB
237
+ assert_raise Orientdb4r::UnauthorizedError do
238
+ client.export :database => 'unknown', :user => 'admin', :password => 'admin'
239
+ end
240
+ # bad password
241
+ assert_raise Orientdb4r::UnauthorizedError do
242
+ client.export :database => DB, :user => 'admin', :password => 'unknown'
243
+ end
244
+ end
245
+
211
246
  end
data/test/test_ddo.rb CHANGED
@@ -109,8 +109,9 @@ class TestDdo < Test::Unit::TestCase
109
109
  assert_nothing_thrown do @client.drop_class(CLASS); end
110
110
  assert_raise Orientdb4r::NotFoundError do @client.get_class(CLASS); end # no info more
111
111
  # the class is not visible in class list delivered by connect
112
- rslt = @client.connect :database => DB, :user => 'admin', :password => 'admin'
113
- assert rslt['classes'].select { |i| i.name == CLASS }.empty?
112
+ db_info = @client.get_database
113
+ puts db_info['classes'].class
114
+ assert db_info['classes'].select { |i| i.name == CLASS }.empty?
114
115
 
115
116
  # CLASS extends super_class
116
117
  @client.create_class(CLASS, :extends => super_clazz);
data/test/test_dmo.rb CHANGED
@@ -102,8 +102,13 @@ class TestDmo < Test::Unit::TestCase
102
102
  assert_raise Orientdb4r::ServerError do
103
103
  @client.query 'xxx'
104
104
  end
105
- # record not found
106
- assert_raise Orientdb4r::NotFoundError do @client.query 'SELECT FROM #4:1111'; end
105
+ # record not found in existing cluster
106
+ entries = @client.query 'SELECT FROM #0:1111'
107
+ assert_not_nil entries
108
+ assert_instance_of Array, entries
109
+ assert entries.empty?
110
+ # try to find entry in a non-existing cluster
111
+ assert_raise Orientdb4r::ServerError do @client.query 'SELECT FROM #111:1111'; end
107
112
  # used for INSERT
108
113
  assert_raise Orientdb4r::ServerError do
109
114
  @client.query "INSERT INTO #{CLASS} (prop1, prop2, friends) VALUES (0, 'string0', [])"
@@ -31,26 +31,20 @@ class TestDocumentCrud < Test::Unit::TestCase
31
31
  # CREATE
32
32
  def test_create_document
33
33
  assert_nothing_thrown do @client.create_document( { '@class' => CLASS, 'prop1' => 99, 'prop2' => 'ipsum lorem' }); end
34
- rid = @client.create_document({ '@class' => CLASS, 'prop1' => 1, 'prop2' => 'text' })
35
- assert_instance_of Orientdb4r::Rid, rid
34
+ doc = @client.create_document({ '@class' => CLASS, 'prop1' => 1, 'prop2' => 'text' })
35
+ assert_instance_of Hash, doc
36
+ assert_not_nil doc.doc_rid
37
+ assert_instance_of Orientdb4r::Rid, doc.doc_rid
38
+ assert_equal CLASS, doc.doc_class
39
+ assert_equal 0, doc.doc_version
36
40
 
37
41
  # no effect if a define the version
38
- assert_nothing_thrown do
39
- @client.create_document({ '@class' => CLASS, '@version' => 2, 'prop1' => 1, 'prop2' => 'text' })
40
- end
41
- rid = @client.create_document({ '@class' => CLASS, 'prop1' => 1, 'prop2' => 'text' })
42
- doc = @client.get_document rid
43
- assert_equal CLASS, doc.doc_class
44
- assert_equal rid, doc.doc_rid
42
+ doc = @client.create_document({ '@class' => CLASS, '@version' => 2, 'prop1' => 1, 'prop2' => 'text' })
45
43
  assert_equal 0, doc.doc_version
46
44
 
47
45
  # no effect if an unknown class
48
- assert_nothing_thrown do
49
- @client.create_document({ '@class' => 'unknown_class', 'a' => 1, 'b' => 'text' })
50
- end
51
- rid = @client.create_document({ '@class' => 'unknown_class', 'a' => 11, 'b' => 'text1' })
52
- doc = @client.get_document rid
53
- assert_nil doc.doc_class
46
+ doc = @client.create_document({ '@class' => 'unknown_class', 'a' => 11, 'b' => 'text1' })
47
+ assert_equal 'unknown_class', doc.doc_class
54
48
  assert_equal 11, doc['a']
55
49
  assert_equal 'text1', doc['b']
56
50
  # or missing class
@@ -73,11 +67,11 @@ class TestDocumentCrud < Test::Unit::TestCase
73
67
  ###
74
68
  # GET
75
69
  def test_get_document
76
- rid = @client.create_document( { '@class' => CLASS, 'prop1' => 1, 'prop2' => 'text' })
70
+ created = @client.create_document( { '@class' => CLASS, 'prop1' => 1, 'prop2' => 'text' })
77
71
 
78
- doc = @client.get_document rid
72
+ doc = @client.get_document created.doc_rid
79
73
  assert_equal CLASS, doc.doc_class
80
- assert_equal rid, doc.doc_rid
74
+ assert_equal created.doc_rid, doc.doc_rid
81
75
  assert_equal 0, doc.doc_version
82
76
  assert_equal 'd', doc.doc_type
83
77
  assert_equal 1, doc['prop1']
@@ -86,7 +80,7 @@ class TestDocumentCrud < Test::Unit::TestCase
86
80
  assert doc.kind_of? Orientdb4r::DocumentMetadata
87
81
 
88
82
  # not existing RID
89
- rid1 = Orientdb4r::Rid.new("#{rid.cluster_id}:#{rid.document_id + 1}") # '#6:0' > '#6:1' or '#6:11' > '#6:12'
83
+ rid1 = Orientdb4r::Rid.new("#{created.doc_rid.cluster_id}:#{created.doc_rid.document_id + 1}") # '#6:0' > '#6:1' or '#6:11' > '#6:12'
90
84
  assert_raise Orientdb4r::NotFoundError do @client.get_document rid1; end
91
85
  # bad RID format
92
86
  assert_raise ArgumentError do @client.get_document('xx'); end
@@ -95,34 +89,34 @@ class TestDocumentCrud < Test::Unit::TestCase
95
89
  ###
96
90
  # UPDATE
97
91
  def test_update_document
98
- rid = @client.create_document( { '@class' => CLASS, 'prop1' => 1, 'prop2' => 'text' })
99
- doc = @client.get_document rid
92
+ created = @client.create_document( { '@class' => CLASS, 'prop1' => 1, 'prop2' => 'text' })
93
+ doc = @client.get_document created.doc_rid
100
94
 
101
95
  doc['prop1'] = 2
102
96
  doc['prop2'] = 'unit'
103
97
  assert_nothing_thrown do @client.update_document doc; end
104
- doc = @client.get_document rid
98
+ doc = @client.get_document created.doc_rid
105
99
  assert_equal 2, doc['prop1']
106
100
  assert_equal 'unit', doc['prop2']
107
101
 
108
102
  # bad version
109
- doc = @client.get_document rid
103
+ doc = @client.get_document created.doc_rid
110
104
  doc['prop1'] = 222 # a property has to be changed to server engine sees a difference
111
105
  doc['@version'] = 2
112
106
  assert_raise Orientdb4r::DataError do @client.update_document doc; end
113
107
 
114
108
  # class cannot be changed
115
- doc = @client.get_document rid
109
+ doc = @client.get_document created.doc_rid
116
110
  doc['@class'] = 'OUser'
117
111
  assert_nothing_thrown do @client.update_document doc; end
118
- assert_equal CLASS, @client.get_document(rid).doc_class
112
+ assert_equal CLASS, @client.get_document(created.doc_rid).doc_class
119
113
 
120
114
  # no mandatory property
121
- doc = @client.get_document rid
115
+ doc = @client.get_document created.doc_rid
122
116
  doc.delete 'prop2'
123
117
  assert_raise Orientdb4r::DataError do @client.update_document doc; end
124
118
  # notNull is null, or lesser/bigger
125
- doc = @client.get_document rid
119
+ doc = @client.get_document created.doc_rid
126
120
  doc['prop1'] = nil
127
121
  assert_raise Orientdb4r::DataError do @client.update_document doc; end
128
122
  end
@@ -131,18 +125,14 @@ class TestDocumentCrud < Test::Unit::TestCase
131
125
  ###
132
126
  # DELETE
133
127
  def test_delete_document
134
- rid = @client.create_document( { '@class' => CLASS, 'prop1' => 1, 'prop2' => 'text' })
135
- doc = @client.get_document rid
128
+ doc = @client.create_document( { '@class' => CLASS, 'prop1' => 1, 'prop2' => 'text' })
136
129
  assert_not_nil doc
137
130
 
138
- assert_nothing_thrown do @client.delete_document rid; end
139
- assert_raise Orientdb4r::NotFoundError do @client.get_document rid; end
131
+ assert_nothing_thrown do @client.delete_document doc.doc_rid; end
132
+ assert_raise Orientdb4r::NotFoundError do @client.get_document doc.doc_rid; end
140
133
 
141
134
  # already deleted
142
- # v1.1.0 allows call of DELETE on already deleted record (bug?!)
143
- if @client.compare_versions(@client.server_version, '1.1.0') < 0
144
- assert_raise Orientdb4r::NotFoundError do @client.delete_document rid; end
145
- end
135
+ assert_raise Orientdb4r::NotFoundError do @client.delete_document doc.doc_rid; end
146
136
 
147
137
  # not existing RID
148
138
  assert_raise Orientdb4r::NotFoundError do @client.delete_document '#4:1111'; end
data/test/test_utils.rb CHANGED
@@ -54,6 +54,15 @@ class TestUtils < Test::Unit::TestCase
54
54
  assert_equal -1, compare_versions('1.0.0', '1.0.1')
55
55
  assert_equal -1, compare_versions('1.0.0', '1.1.0')
56
56
  assert_equal -1, compare_versions('1.0.0', '2.0.0')
57
+
58
+ # test block
59
+ tmp = -100;
60
+ compare_versions('1.0.0', '1.0.0') { |comp| tmp = comp }
61
+ assert_equal 0, tmp
62
+ compare_versions('1.0.0', '2.0.0') { |comp| tmp = comp }
63
+ assert_equal -1, tmp
64
+ compare_versions('3.0.0', '2.0.0') { |comp| tmp = comp }
65
+ assert_equal 1, tmp
57
66
  end
58
67
 
59
68
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orientdb4r
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
5
- prerelease:
4
+ version: 0.4.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Vaclav Sykora
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-12-16 00:00:00.000000000 Z
11
+ date: 2013-08-14 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rest-client
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -75,28 +72,27 @@ files:
75
72
  - test/test_utils.rb
76
73
  homepage: http://github.com/veny/orientdb4r
77
74
  licenses: []
75
+ metadata: {}
78
76
  post_install_message:
79
77
  rdoc_options:
80
78
  - --charset=UTF-8
81
79
  require_paths:
82
80
  - lib
83
81
  required_ruby_version: !ruby/object:Gem::Requirement
84
- none: false
85
82
  requirements:
86
- - - ! '>='
83
+ - - '>='
87
84
  - !ruby/object:Gem::Version
88
85
  version: '0'
89
86
  required_rubygems_version: !ruby/object:Gem::Requirement
90
- none: false
91
87
  requirements:
92
- - - ! '>'
88
+ - - '>'
93
89
  - !ruby/object:Gem::Version
94
90
  version: 1.3.1
95
91
  requirements: []
96
92
  rubyforge_project:
97
- rubygems_version: 1.8.19
93
+ rubygems_version: 2.0.3
98
94
  signing_key:
99
- specification_version: 3
95
+ specification_version: 4
100
96
  summary: Ruby binding for Orient DB.
101
97
  test_files:
102
98
  - test/readme_sample.rb