vagas-orientdb4r 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +26 -0
  4. data/.travis.yml +18 -0
  5. data/Gemfile +9 -0
  6. data/LICENSE +202 -0
  7. data/README.rdoc +124 -0
  8. data/Rakefile +43 -0
  9. data/changelog.txt +60 -0
  10. data/ci/initialize-ci.sh +36 -0
  11. data/fstudy/design_v1.dia +0 -0
  12. data/fstudy/design_v1.png +0 -0
  13. data/fstudy/domain_model.dia +0 -0
  14. data/fstudy/domain_model.png +0 -0
  15. data/fstudy/flat_class_perf.rb +56 -0
  16. data/fstudy/sample1_object_diagram.dia +0 -0
  17. data/fstudy/sample1_object_diagram.png +0 -0
  18. data/fstudy/study_case.rb +87 -0
  19. data/fstudy/technical_feasibility.rb +256 -0
  20. data/lib/orientdb4r.rb +115 -0
  21. data/lib/orientdb4r/bin/client.rb +86 -0
  22. data/lib/orientdb4r/bin/connection.rb +29 -0
  23. data/lib/orientdb4r/bin/constants.rb +20 -0
  24. data/lib/orientdb4r/bin/io.rb +38 -0
  25. data/lib/orientdb4r/bin/protocol28.rb +101 -0
  26. data/lib/orientdb4r/bin/protocol_factory.rb +25 -0
  27. data/lib/orientdb4r/chained_error.rb +37 -0
  28. data/lib/orientdb4r/client.rb +364 -0
  29. data/lib/orientdb4r/load_balancing.rb +113 -0
  30. data/lib/orientdb4r/node.rb +42 -0
  31. data/lib/orientdb4r/rest/client.rb +517 -0
  32. data/lib/orientdb4r/rest/excon_node.rb +115 -0
  33. data/lib/orientdb4r/rest/model.rb +159 -0
  34. data/lib/orientdb4r/rest/node.rb +43 -0
  35. data/lib/orientdb4r/rest/restclient_node.rb +77 -0
  36. data/lib/orientdb4r/rid.rb +54 -0
  37. data/lib/orientdb4r/utils.rb +203 -0
  38. data/lib/orientdb4r/version.rb +39 -0
  39. data/orientdb4r.gemspec +37 -0
  40. data/test/bin/test_client.rb +21 -0
  41. data/test/readme_sample.rb +38 -0
  42. data/test/test_client.rb +93 -0
  43. data/test/test_database.rb +261 -0
  44. data/test/test_ddo.rb +237 -0
  45. data/test/test_dmo.rb +115 -0
  46. data/test/test_document_crud.rb +184 -0
  47. data/test/test_gremlin.rb +52 -0
  48. data/test/test_helper.rb +10 -0
  49. data/test/test_loadbalancing.rb +81 -0
  50. data/test/test_utils.rb +67 -0
  51. metadata +136 -0
@@ -0,0 +1,52 @@
1
+ require 'test_helper'
2
+
3
+ ###
4
+ # This class tests Data Manipulation Operarions.
5
+ class TestGremlin < Test::Unit::TestCase
6
+ include Orientdb4r::Utils
7
+
8
+ CLASS = 'testing'
9
+ DB = 'temp'
10
+
11
+ def setup
12
+ @client = Orientdb4r.client
13
+ @client.connect :database => DB, :user => 'admin', :password => 'admin'
14
+ @client.gremlin("g.V.has('@class','#{CLASS}').remove()")
15
+ @client.drop_class(CLASS) # just to be sure if the previous test failed
16
+ end
17
+
18
+ def teardown
19
+ # remove the testing class after each test
20
+ @client.gremlin("g.V.has('@class','#{CLASS}').remove()")
21
+ @client.drop_class(CLASS)
22
+ @client.disconnect
23
+ end
24
+
25
+ def test_gremlin
26
+
27
+ 1.upto(25) do |i|
28
+ result = @client.gremlin("g.addVertex('class:#{CLASS}', 'prop1', 1, 'prop2', 'string1')")
29
+ end
30
+
31
+ entries = @client.gremlin("g.V.has('@class','#{CLASS}')[0..<20]")
32
+ assert_not_nil entries
33
+ assert_instance_of Array, entries
34
+ assert_equal 20, entries.size # no limit20 is default limit
35
+ entries.each { |doc| assert doc.kind_of? Orientdb4r::DocumentMetadata }
36
+ entries.each { |doc| assert_instance_of Orientdb4r::Rid, doc.doc_rid }
37
+ # limit
38
+ assert_equal 5, @client.gremlin("g.V.has('@class', '#{CLASS}')[0..<5]").size
39
+ entries = @client.gremlin("g.V.has('@class', '#{CLASS}')[0..<100]")
40
+ assert_equal 25, entries.size
41
+
42
+ assert_equal 25, @client.gremlin("g.V.has('@class', '#{CLASS}').has('prop1', 1)").size
43
+ assert_equal 0, @client.gremlin("g.V.has('@class', '#{CLASS}').has('prop1', -1)").size
44
+
45
+ entries = @client.gremlin "g.v(0:1111)"
46
+ assert_not_nil entries
47
+ assert_instance_of Array, entries
48
+
49
+ assert entries.empty?
50
+ end
51
+
52
+ end
@@ -0,0 +1,10 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
4
+ require 'test/unit'
5
+
6
+ $: << File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
7
+ require 'orientdb4r'
8
+
9
+ Orientdb4r::logger.level = Logger::FATAL
10
+ DB_ROOT_PASS = ENV['ORIENTDB_ROOT_PASS'] || 'root'
@@ -0,0 +1,81 @@
1
+ require 'test_helper'
2
+
3
+ ###
4
+ # This class tests communication with OrientDB cluster and load balancing.
5
+ class TestLoadBalancing < Test::Unit::TestCase
6
+
7
+ ###
8
+ # Test default Sequence strategy.
9
+ def test_sequence_loadbalancing
10
+ client = Orientdb4r.client :nodes => [{}, {:port => 2481}], :instance => :new
11
+ assert_equal :sequence, client.load_balancing
12
+ lb_strategy = client.lb_strategy
13
+ assert_not_nil lb_strategy
14
+ assert_instance_of Orientdb4r::Sequence, lb_strategy
15
+ assert_equal 0, lb_strategy.node_index
16
+ assert_equal 0, lb_strategy.node_index
17
+ assert_equal client.nodes[0], client.nodes[client.lb_strategy.node_index]
18
+ assert_equal client.nodes[0], client.nodes[client.lb_strategy.node_index]
19
+ end
20
+
21
+ ###
22
+ # Test RoundRobin strategy.
23
+ def test_roundrobin_loadbalancing
24
+ client = Orientdb4r.client :nodes => [{}, {:port => 2481}], :load_balancing => :round_robin, :instance => :new
25
+ assert_equal :round_robin, client.load_balancing
26
+ lb_strategy = client.lb_strategy
27
+ assert_not_nil lb_strategy
28
+ assert_instance_of Orientdb4r::RoundRobin, lb_strategy
29
+ assert_equal 0, lb_strategy.node_index
30
+ assert_equal 1, lb_strategy.node_index
31
+ assert_equal 0, lb_strategy.node_index
32
+ assert_equal client.nodes[1], client.nodes[client.lb_strategy.node_index]
33
+ assert_equal client.nodes[0], client.nodes[client.lb_strategy.node_index]
34
+ assert_equal client.nodes[1], client.nodes[client.lb_strategy.node_index]
35
+ end
36
+
37
+ ###
38
+ # Tests variant reasons for LB failure.
39
+ def test_load_balancing_in_problems
40
+ # invalid port
41
+ client = Orientdb4r.client :port => 9999, :instance => :new
42
+ assert_raise Orientdb4r::ConnectionError do
43
+ client.connect :database => 'temp', :user => 'admin', :password => 'admin'
44
+ end
45
+ # opened port, but not REST
46
+ client = Orientdb4r.client :port => 2424, :instance => :new
47
+ assert_raise Orientdb4r::ConnectionError do
48
+ client.connect :database => 'temp', :user => 'admin', :password => 'admin'
49
+ end
50
+
51
+ # invalid ports - both
52
+ client = Orientdb4r.client :nodes => [{:port => 9998}, {:port => 9999}], :instance => :new
53
+ begin
54
+ client.connect :database => 'temp', :user => 'admin', :password => 'admin'
55
+ assert_equal 0, 1, "Orientdb4r::ConnectionError EXPECTED"
56
+ rescue Orientdb4r::ConnectionError => e
57
+ assert_equal 'all nodes failed to communicate with server!', e.message
58
+ end
59
+
60
+
61
+ # more nodes
62
+
63
+ # first node bad, second must work (sequence)
64
+ client = Orientdb4r.client :nodes => [{:port => 2481}, {}], :instance => :new
65
+ assert_nothing_thrown do # there has to be ERROR in log
66
+ client.connect :database => 'temp', :user => 'admin', :password => 'admin'
67
+ end
68
+ assert_equal 1, client.lb_strategy.bad_nodes.size
69
+ assert client.lb_strategy.bad_nodes.include? 0
70
+
71
+ # second node bad => second call has to be realized by first one (round robin)
72
+ client = Orientdb4r.client :nodes => [{}, {:port => 2481}], :load_balancing => :round_robin, :instance => :new
73
+ assert client.lb_strategy.bad_nodes.empty?
74
+ client.connect :database => 'temp', :user => 'admin', :password => 'admin'
75
+ assert client.lb_strategy.bad_nodes.empty?
76
+ client.query 'SELECT FROM OUser'
77
+ assert_equal 1, client.lb_strategy.bad_nodes.size
78
+ assert client.lb_strategy.bad_nodes.include? 1
79
+ end
80
+
81
+ end
@@ -0,0 +1,67 @@
1
+ require 'test_helper'
2
+
3
+ ###
4
+ # This class tests Utils methods.
5
+ class TestUtils < Test::Unit::TestCase
6
+ include Orientdb4r::Utils
7
+
8
+ def test_verify_options
9
+ opt_pattern = {:a => :mandatory, :b => :optional, :c => 'predefined', :d => [1, false]}
10
+ assert_nothing_thrown do verify_options({:a => 'A', :b => 'B', :c => 'C', :d => 1}, opt_pattern); end
11
+
12
+ # missing mandatory
13
+ assert_raise ArgumentError do verify_options({}, opt_pattern); end
14
+ # unknown key
15
+ assert_raise ArgumentError do verify_options({:a => 1, :z => 2}, opt_pattern); end
16
+ # value not in predefined set
17
+ assert_raise ArgumentError do verify_options({:a => 1, :d => 3}, opt_pattern); end
18
+ end
19
+
20
+ def test_verify_and_sanitize_options
21
+ opt_pattern = {:a => 'A', :b => 'B'}
22
+ options = {:a => 'X'}
23
+ verify_and_sanitize_options(options, opt_pattern)
24
+ assert_equal 2, options.size
25
+ assert_equal 'X', options[:a]
26
+ assert_equal 'B', options[:b]
27
+
28
+ # :optional cannot be set as default value
29
+ opt_pattern = {:a => :optional, :b => 'B'}
30
+ options = {}
31
+ verify_and_sanitize_options(options, opt_pattern)
32
+ assert_equal 1, options.size
33
+ assert !options.include?(:a)
34
+ assert_equal 'B', options[:b]
35
+ end
36
+
37
+ def test_compare_versions
38
+ assert_raise ArgumentError do compare_versions 'foo', 'bar'; end
39
+ assert_raise ArgumentError do compare_versions nil, 'bar'; end
40
+ assert_raise ArgumentError do compare_versions 'foo', nil; end
41
+ assert_raise ArgumentError do compare_versions '1.0.0', 'bar'; end
42
+ assert_raise ArgumentError do compare_versions 'foo', '1.0.0'; end
43
+ assert_nothing_thrown do compare_versions '1.0.0', '1.1.0'; end
44
+
45
+ assert_equal 0, compare_versions('1.0.0', '1.0.0')
46
+ assert_equal 0, compare_versions('1.2.0', '1.2.0')
47
+ assert_equal 0, compare_versions('1.2.3', '1.2.3')
48
+
49
+ assert_equal 1, compare_versions('1.0.1', '1.0.0')
50
+ assert_equal 1, compare_versions('1.1.0', '1.0.0')
51
+ assert_equal 1, compare_versions('2.0.0', '1.0.0')
52
+
53
+ assert_equal -1, compare_versions('1.0.0', '1.0.1')
54
+ assert_equal -1, compare_versions('1.0.0', '1.1.0')
55
+ assert_equal -1, compare_versions('1.0.0', '2.0.0')
56
+
57
+ # test block
58
+ tmp = -100;
59
+ compare_versions('1.0.0', '1.0.0') { |comp| tmp = comp }
60
+ assert_equal 0, tmp
61
+ compare_versions('1.0.0', '2.0.0') { |comp| tmp = comp }
62
+ assert_equal -1, tmp
63
+ compare_versions('3.0.0', '2.0.0') { |comp| tmp = comp }
64
+ assert_equal 1, tmp
65
+ end
66
+
67
+ end
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vagas-orientdb4r
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.2
5
+ platform: ruby
6
+ authors:
7
+ - Vaclav Sykora
8
+ - Ronie Uliana
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-09-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rest-client
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.7'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.7'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '10.3'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '10.3'
42
+ description: Orientdb4r provides a simple interface on top of OrientDB's RESTful HTTP
43
+ API (VAGAS.com version)
44
+ email: vaclav.sykora@gmail.com ronie.uliana@gmail.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files:
48
+ - LICENSE
49
+ - README.rdoc
50
+ files:
51
+ - ".coveralls.yml"
52
+ - ".gitignore"
53
+ - ".travis.yml"
54
+ - Gemfile
55
+ - LICENSE
56
+ - README.rdoc
57
+ - Rakefile
58
+ - changelog.txt
59
+ - ci/initialize-ci.sh
60
+ - fstudy/design_v1.dia
61
+ - fstudy/design_v1.png
62
+ - fstudy/domain_model.dia
63
+ - fstudy/domain_model.png
64
+ - fstudy/flat_class_perf.rb
65
+ - fstudy/sample1_object_diagram.dia
66
+ - fstudy/sample1_object_diagram.png
67
+ - fstudy/study_case.rb
68
+ - fstudy/technical_feasibility.rb
69
+ - lib/orientdb4r.rb
70
+ - lib/orientdb4r/bin/client.rb
71
+ - lib/orientdb4r/bin/connection.rb
72
+ - lib/orientdb4r/bin/constants.rb
73
+ - lib/orientdb4r/bin/io.rb
74
+ - lib/orientdb4r/bin/protocol28.rb
75
+ - lib/orientdb4r/bin/protocol_factory.rb
76
+ - lib/orientdb4r/chained_error.rb
77
+ - lib/orientdb4r/client.rb
78
+ - lib/orientdb4r/load_balancing.rb
79
+ - lib/orientdb4r/node.rb
80
+ - lib/orientdb4r/rest/client.rb
81
+ - lib/orientdb4r/rest/excon_node.rb
82
+ - lib/orientdb4r/rest/model.rb
83
+ - lib/orientdb4r/rest/node.rb
84
+ - lib/orientdb4r/rest/restclient_node.rb
85
+ - lib/orientdb4r/rid.rb
86
+ - lib/orientdb4r/utils.rb
87
+ - lib/orientdb4r/version.rb
88
+ - orientdb4r.gemspec
89
+ - test/bin/test_client.rb
90
+ - test/readme_sample.rb
91
+ - test/test_client.rb
92
+ - test/test_database.rb
93
+ - test/test_ddo.rb
94
+ - test/test_dmo.rb
95
+ - test/test_document_crud.rb
96
+ - test/test_gremlin.rb
97
+ - test/test_helper.rb
98
+ - test/test_loadbalancing.rb
99
+ - test/test_utils.rb
100
+ homepage: http://github.com/vagascom/orientdb4r
101
+ licenses:
102
+ - Apache License, v2.0
103
+ metadata: {}
104
+ post_install_message:
105
+ rdoc_options:
106
+ - "--charset=UTF-8"
107
+ require_paths:
108
+ - lib
109
+ required_ruby_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">"
117
+ - !ruby/object:Gem::Version
118
+ version: 1.3.1
119
+ requirements: []
120
+ rubyforge_project:
121
+ rubygems_version: 2.5.1
122
+ signing_key:
123
+ specification_version: 4
124
+ summary: Ruby binding for Orient DB.
125
+ test_files:
126
+ - test/bin/test_client.rb
127
+ - test/readme_sample.rb
128
+ - test/test_client.rb
129
+ - test/test_database.rb
130
+ - test/test_ddo.rb
131
+ - test/test_dmo.rb
132
+ - test/test_document_crud.rb
133
+ - test/test_gremlin.rb
134
+ - test/test_helper.rb
135
+ - test/test_loadbalancing.rb
136
+ - test/test_utils.rb