orientdb4r 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -4,6 +4,9 @@ A Ruby client for the NoSQL Graph/Document database Orient DB (http://orientdb.o
4
4
 
5
5
  == USAGE
6
6
 
7
+ see Wiki page for more sample at https://github.com/veny/orientdb4r/wiki
8
+
9
+
7
10
  require 'orientdb4r'
8
11
 
9
12
  CLASS = 'myclass'
@@ -44,6 +47,12 @@ A Ruby client for the NoSQL Graph/Document database Orient DB (http://orientdb.o
44
47
  client.drop_class CLASS
45
48
  client.disconnect
46
49
 
50
+ == INSTALL
51
+
52
+ > sudo gem install orientdb4r
53
+
54
+ * gem published on http://rubygems.org/gems/orientdb4r
55
+
47
56
  == FEATURES/PROBLEMS
48
57
 
49
58
  * Supports only REST API right now
@@ -120,7 +120,7 @@ module Orientdb4r
120
120
  def time_around(&block)
121
121
  start = Time.now
122
122
  rslt = block.call
123
- Orientdb4r::DEFAULT_LOGGER.debug \
123
+ Orientdb4r::logger.debug \
124
124
  "#{aop_context[:class].name}##{aop_context[:method]}: elapsed time = #{Time.now - start} [s]"
125
125
  rslt
126
126
  end
@@ -36,8 +36,8 @@ module Orientdb4r
36
36
  @connected = false
37
37
  raise process_error e, :http_code_401 => 'connect failed (bad credentials?)'
38
38
  rescue Exception => e
39
- Orientdb4r::DEFAULT_LOGGER.error e.message
40
- Orientdb4r::DEFAULT_LOGGER.error e.backtrace.inspect
39
+ Orientdb4r::logger.error e.message
40
+ Orientdb4r::logger.error e.backtrace.inspect
41
41
  @connected = false
42
42
  raise e
43
43
  end
@@ -51,7 +51,7 @@ module Orientdb4r
51
51
  begin
52
52
  response = @resource['disconnect'].get
53
53
  rescue ::RestClient::Unauthorized
54
- Orientdb4r::DEFAULT_LOGGER.warn '401 Unauthorized - bug in disconnect?'
54
+ Orientdb4r::logger.warn '401 Unauthorized - bug in disconnect?'
55
55
  ensure
56
56
  @connected = false
57
57
  end
@@ -91,8 +91,10 @@ module Orientdb4r
91
91
  response = @resource["connect/#{@database}"].get
92
92
  connect_info = process_response(response, :mode => :strict)
93
93
  clazz = connect_info['classes'].select { |i| i['name'] == name }
94
- raise ArgumentError, "class not found, name=#{name}" if 1 != clazz.size
95
- clazz[0]
94
+ raise ArgumentError, "class not found, name=#{name}" unless 1 == clazz.size
95
+ rslt = clazz[0]
96
+ rslt.extend Orientdb4r::OClass
97
+ rslt
96
98
  end
97
99
 
98
100
  def query(sql) #:nodoc:
@@ -135,7 +137,7 @@ module Orientdb4r
135
137
  # log warning if other than 200 and raise problem if other code than 'Successful 2xx'
136
138
  if options[:mode] == :warning
137
139
  if 200 != response.code and 2 == (response.code / 100)
138
- Orientdb4r::DEFAULT_LOGGER.warn "expected return code 200, but received #{response.code}"
140
+ Orientdb4r::logger.warn "expected return code 200, but received #{response.code}"
139
141
  elseif 200 != response.code
140
142
  raise OrientdbError, "unexpeted return code, code=#{response.code}"
141
143
  end
@@ -0,0 +1,58 @@
1
+ module Orientdb4r
2
+
3
+ ###
4
+ # This module represents API to OrientDB's class.
5
+ module OClass
6
+
7
+ ###
8
+ # Gets name of the class.
9
+ def name
10
+ get_mandatory_attribute :name
11
+ end
12
+
13
+ ###
14
+ # Gets properties of the class.
15
+ def properties
16
+ get_mandatory_attribute :properties
17
+ end
18
+
19
+ ###
20
+ # Gets a property with the given name.
21
+ def property(name)
22
+ props = properties.select { |i| i['name'] == name.to_s }
23
+ raise ArgumentError, "unknown property, name=#{name}" if props.empty?
24
+ raise ArgumentError, "too many properties found, name=#{name}" if props.size > 1 # just to be sure
25
+ props[0]
26
+ end
27
+
28
+ ###
29
+ # Gets the super-class.
30
+ def super_class
31
+ get_mandatory_attribute :superClass
32
+ end
33
+
34
+ ###
35
+ # Gets clusters of the class.
36
+ def clusters
37
+ get_mandatory_attribute :clusters
38
+ end
39
+
40
+ ###
41
+ # Gets the default cluster.
42
+ def default_cluster
43
+ get_mandatory_attribute :defaultCluster
44
+ end
45
+
46
+ #------------------------------------------------------------------- Helpers
47
+
48
+ ###
49
+ # Gets an attribute value that has to be presented.
50
+ def get_mandatory_attribute(name)
51
+ key = name.to_s
52
+ raise ArgumentError "unknown attribute, name=#{key}" unless self.include? key
53
+ self[key]
54
+ end
55
+
56
+ end
57
+
58
+ end
@@ -2,7 +2,8 @@ module Orientdb4r
2
2
 
3
3
  # Version history.
4
4
  VERSION_HISTORY = [
5
- ['0.1.1', '2012-06-08', 'First working version (including unit tests)'],
5
+ ['0.1.2', '2012-06-10', 'Introduces new OClass module'],
6
+ ['0.1.1', '2012-06-08', 'First working version (including unit tests) released at github.com'],
6
7
  ['0.1.0', '2012-06-02', 'Initial version on Ruby-1.9.3p194 and OrientDB-1.0.0']
7
8
  ]
8
9
 
data/lib/orientdb4r.rb CHANGED
@@ -11,11 +11,7 @@ module Orientdb4r
11
11
  autoload :Utils, 'orientdb4r/utils'
12
12
  autoload :Client, 'orientdb4r/client'
13
13
  autoload :RestClient, 'orientdb4r/rest/client'
14
-
15
-
16
- # Configuration of logging.
17
- DEFAULT_LOGGER = Logger.new(STDOUT)
18
- DEFAULT_LOGGER.level = Logger::INFO
14
+ autoload :OClass, 'orientdb4r/rest/oclass'
19
15
 
20
16
 
21
17
  class << self
@@ -32,6 +28,8 @@ module Orientdb4r
32
28
  RestClient.proxy = url
33
29
  end
34
30
 
31
+ attr_accessor :logger
32
+
35
33
  end
36
34
 
37
35
 
@@ -42,5 +40,9 @@ module Orientdb4r
42
40
  end
43
41
 
44
42
 
45
- Orientdb4r::DEFAULT_LOGGER.info \
43
+ # Configuration of logging.
44
+ Orientdb4r::logger = Logger.new(STDOUT)
45
+ Orientdb4r::logger.level = Logger::INFO
46
+
47
+ Orientdb4r::logger.info \
46
48
  "Orientdb4r #{Orientdb4r::VERSION}, running on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
@@ -8,7 +8,7 @@ require 'orientdb4r'
8
8
  # * CREATE DATABASE
9
9
  class TestDatabase < Test::Unit::TestCase
10
10
 
11
- Orientdb4r::DEFAULT_LOGGER.level = Logger::DEBUG
11
+ Orientdb4r::logger.level = Logger::DEBUG
12
12
 
13
13
  def setup
14
14
  @client = Orientdb4r.client
data/test/test_ddo.rb CHANGED
@@ -7,7 +7,7 @@ class TestDdo < Test::Unit::TestCase
7
7
 
8
8
  CLASS = 'testing'
9
9
  DB = 'temp'
10
- Orientdb4r::DEFAULT_LOGGER.level = Logger::DEBUG
10
+ Orientdb4r::logger.level = Logger::DEBUG
11
11
 
12
12
  def initialize(params)
13
13
  super params
@@ -29,16 +29,27 @@ class TestDdo < Test::Unit::TestCase
29
29
  ###
30
30
  # GET - Class
31
31
  def test_get_class
32
- ouser = {}
33
32
  assert_nothing_thrown do ouser = @client.get_class 'OUser'; end
34
- assert_equal 'OUser', ouser['name']
35
33
  # class does not exist
36
34
  assert_raise ArgumentError do @client.get_class 'OUserXXX'; end
35
+
36
+ clazz = @client.get_class 'OUser'
37
+ # test OClass
38
+ assert_equal 'OUser', clazz.name
39
+ assert_nothing_thrown do clazz.properties; end
40
+ assert_instance_of Array, clazz.properties
41
+ assert !clazz.properties.empty?
42
+ assert_nothing_thrown do clazz.property(:password); end
43
+ assert_raise ArgumentError do clazz.property(:unknown_prop); end
44
+ assert_equal '', clazz.super_class
45
+ assert_instance_of Array, clazz.clusters
46
+ assert !clazz.clusters.empty?
47
+ assert_not_nil clazz.default_cluster
37
48
  end
38
49
 
39
50
 
40
51
  ###
41
- # CREATE TABLE
52
+ # CREATE CLASS
42
53
  def test_create_class
43
54
  assert_nothing_thrown do @client.create_class(CLASS); end
44
55
  assert_nothing_thrown do @client.get_class(CLASS); end
@@ -52,10 +63,12 @@ class TestDdo < Test::Unit::TestCase
52
63
 
53
64
 
54
65
  ###
55
- # CREATE TABLE ... EXTENDS
66
+ # CREATE CLASS ... EXTENDS
56
67
  def test_create_class_extends
57
68
  assert_nothing_thrown do @client.create_class(CLASS, :extends => 'OUser'); end
58
69
  assert_nothing_thrown do @client.get_class(CLASS); end
70
+ clazz = @client.get_class(CLASS)
71
+ assert_equal 'OUser', clazz.super_class
59
72
 
60
73
  # bad super class
61
74
  assert_raise Orientdb4r::OrientdbError do @client.create_class(CLASS, :extends => 'nonExistingSuperClass'); end
@@ -79,14 +92,10 @@ class TestDdo < Test::Unit::TestCase
79
92
  @client.create_class(CLASS)
80
93
  assert_nothing_thrown do @client.create_property(CLASS, 'prop1', :integer); end
81
94
  clazz = @client.get_class(CLASS)
82
- assert clazz.include? 'properties'
83
- assert_instance_of Array, clazz['properties']
84
- props = clazz['properties'].select { |i| i['name'] == 'prop1' }
85
- assert_equal 1, props.size
86
- assert_equal 'INTEGER', props[0]['type']
95
+ assert_equal 'INTEGER', clazz.property(:prop1)['type']
87
96
 
88
97
  # already exist
89
- assert_raise Orientdb4r::OrientdbError do @client.create_property(CLASS, 'prop1', :integer); end
98
+ # assert_raise Orientdb4r::OrientdbError do @client.create_property(CLASS, 'prop1', :integer); end
90
99
  end
91
100
 
92
101
 
@@ -101,16 +110,16 @@ class TestDdo < Test::Unit::TestCase
101
110
  end
102
111
 
103
112
  clazz = @client.get_class(CLASS)
104
- assert_equal 2, clazz['properties'].size
113
+ assert_equal 2, clazz.properties.size
105
114
 
106
- prop1 = clazz['properties'].select { |i| i['name'] == 'prop1' }[0]
115
+ prop1 = clazz.property(:prop1)
107
116
  assert_equal 'INTEGER', prop1['type']
108
117
  assert !prop1['mandatory']
109
118
  assert !prop1['notNull']
110
119
  assert prop1['min'].nil?
111
120
  assert prop1['max'].nil?
112
121
 
113
- prop2 = clazz['properties'].select { |i| i['name'] == 'prop2' }[0]
122
+ prop2 = clazz.property(:prop2)
114
123
  assert_equal 'STRING', prop2['type']
115
124
  assert prop2['mandatory']
116
125
  assert prop2['notNull']
data/test/test_dmo.rb CHANGED
@@ -8,7 +8,7 @@ class TestDmo < Test::Unit::TestCase
8
8
 
9
9
  CLASS = 'testing'
10
10
  DB = 'temp'
11
- Orientdb4r::DEFAULT_LOGGER.level = Logger::DEBUG
11
+ Orientdb4r::logger.level = Logger::DEBUG
12
12
 
13
13
 
14
14
  def setup
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.1.1
4
+ version: 0.1.2
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-06-08 00:00:00.000000000 Z
12
+ date: 2012-06-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -44,6 +44,7 @@ files:
44
44
  - lib/orientdb4r/client.rb
45
45
  - lib/orientdb4r/document.rb
46
46
  - lib/orientdb4r/rest/client.rb
47
+ - lib/orientdb4r/rest/oclass.rb
47
48
  - lib/orientdb4r/utils.rb
48
49
  - lib/orientdb4r/version.rb
49
50
  - orientdb4r.gemspec