orientdb-ar 0.0.2-jruby
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/.gemspec +85 -0
- data/.gitignore +26 -0
- data/LICENSE +20 -0
- data/README.rdoc +17 -0
- data/Rakefile +58 -0
- data/VERSION +1 -0
- data/bin/orientdbar_console +32 -0
- data/lib/model/attributes.rb +78 -0
- data/lib/model/base.rb +250 -0
- data/lib/model/conversion.rb +17 -0
- data/lib/model/embedded.rb +83 -0
- data/lib/model/validations.rb +11 -0
- data/lib/orientdb-ar.rb +9 -0
- data/orientdb-ar.gemspec +80 -0
- data/spec/base_spec.rb +7 -0
- data/spec/dirty_spec.rb +33 -0
- data/spec/lint_behavior.rb +69 -0
- data/spec/lint_spec.rb +55 -0
- data/spec/model_spec.rb +45 -0
- data/spec/models/address.rb +7 -0
- data/spec/models/customer.rb +5 -0
- data/spec/models/flo_admin.rb +7 -0
- data/spec/models/person.rb +6 -0
- data/spec/models/simple_person.rb +5 -0
- data/spec/serialization_spec.rb +23 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +47 -0
- metadata +145 -0
data/.document
ADDED
data/.gemspec
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = nil
|
8
|
+
s.version = "0.0.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Adrian Madrid"]
|
12
|
+
s.date = %q{2011-01-14}
|
13
|
+
s.default_executable = %q{orientdbar_console}
|
14
|
+
s.description = %q{TODO: longer description of your gem}
|
15
|
+
s.email = %q{aemadrid@gmail.com}
|
16
|
+
s.executables = ["orientdbar_console"]
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"LICENSE",
|
19
|
+
"README.rdoc"
|
20
|
+
]
|
21
|
+
s.files = [
|
22
|
+
".document",
|
23
|
+
".gemspec",
|
24
|
+
"LICENSE",
|
25
|
+
"README.rdoc",
|
26
|
+
"Rakefile",
|
27
|
+
"VERSION",
|
28
|
+
"bin/orientdbar_console",
|
29
|
+
"lib/model/attributes.rb",
|
30
|
+
"lib/model/base.rb",
|
31
|
+
"lib/model/conversion.rb",
|
32
|
+
"lib/model/embedded.rb",
|
33
|
+
"lib/model/validations.rb",
|
34
|
+
"lib/orientdb-ar.rb",
|
35
|
+
"orientdb-ar.gemspec",
|
36
|
+
"spec/base_spec.rb",
|
37
|
+
"spec/dirty_spec.rb",
|
38
|
+
"spec/lint_behavior.rb",
|
39
|
+
"spec/lint_spec.rb",
|
40
|
+
"spec/model_spec.rb",
|
41
|
+
"spec/models/address.rb",
|
42
|
+
"spec/models/customer.rb",
|
43
|
+
"spec/models/flo_admin.rb",
|
44
|
+
"spec/models/person.rb",
|
45
|
+
"spec/models/simple_person.rb",
|
46
|
+
"spec/serialization_spec.rb",
|
47
|
+
"spec/spec.opts",
|
48
|
+
"spec/spec_helper.rb"
|
49
|
+
]
|
50
|
+
s.homepage = %q{http://github.com/aemadrid/orientdb-ar}
|
51
|
+
s.require_paths = ["lib"]
|
52
|
+
s.rubygems_version = %q{1.3.6}
|
53
|
+
s.summary = %q{TODO: one-line summary of your gem}
|
54
|
+
s.test_files = [
|
55
|
+
"spec/base_spec.rb",
|
56
|
+
"spec/dirty_spec.rb",
|
57
|
+
"spec/lint_behavior.rb",
|
58
|
+
"spec/lint_spec.rb",
|
59
|
+
"spec/model_spec.rb",
|
60
|
+
"spec/models/address.rb",
|
61
|
+
"spec/models/customer.rb",
|
62
|
+
"spec/models/flo_admin.rb",
|
63
|
+
"spec/models/person.rb",
|
64
|
+
"spec/models/simple_person.rb",
|
65
|
+
"spec/serialization_spec.rb",
|
66
|
+
"spec/spec_helper.rb"
|
67
|
+
]
|
68
|
+
|
69
|
+
if s.respond_to? :specification_version then
|
70
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
71
|
+
s.specification_version = 3
|
72
|
+
|
73
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
74
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
75
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
76
|
+
else
|
77
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
78
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
79
|
+
end
|
80
|
+
else
|
81
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
82
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
data/.gitignore
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
## MAC OS
|
2
|
+
.DS_Store
|
3
|
+
|
4
|
+
## TEXTMATE
|
5
|
+
*.tmproj
|
6
|
+
tmtags
|
7
|
+
|
8
|
+
## EMACS
|
9
|
+
*~
|
10
|
+
\#*
|
11
|
+
.\#*
|
12
|
+
|
13
|
+
## VIM
|
14
|
+
*.swp
|
15
|
+
|
16
|
+
## RUBYMINE
|
17
|
+
.idea
|
18
|
+
|
19
|
+
## PROJECT::GENERAL
|
20
|
+
coverage
|
21
|
+
rdoc
|
22
|
+
pkg
|
23
|
+
tmp
|
24
|
+
.rvmrc
|
25
|
+
|
26
|
+
## PROJECT::SPECIFIC
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Adrian Madrid
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
= orientdb-ar
|
2
|
+
|
3
|
+
Description goes here.
|
4
|
+
|
5
|
+
== Note on Patches/Pull Requests
|
6
|
+
|
7
|
+
* Fork the project.
|
8
|
+
* Make your feature addition or bug fix.
|
9
|
+
* Add tests for it. This is important so I don't break it in a
|
10
|
+
future version unintentionally.
|
11
|
+
* Commit, do not mess with rakefile, version, or history.
|
12
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
13
|
+
* Send me a pull request. Bonus points for topic branches.
|
14
|
+
|
15
|
+
== Copyright
|
16
|
+
|
17
|
+
Copyright (c) 2011 Adrian Madrid. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
5
|
+
|
6
|
+
begin
|
7
|
+
require 'jeweler'
|
8
|
+
Jeweler::Tasks.new do |gem|
|
9
|
+
gem.name = "orientdb-ar"
|
10
|
+
gem.platform = "jruby"
|
11
|
+
gem.authors = ["Adrian Madrid"]
|
12
|
+
gem.email = ["aemadrid@gmail.com"]
|
13
|
+
gem.homepage = "http://rubygems.org/gems/orientdb"
|
14
|
+
gem.summary = "ActiveRecord-like persistency through OrientDB in JRuby"
|
15
|
+
gem.description = "Active Model wrappers to persist Ruby objects under OrientDB in JRuby."
|
16
|
+
|
17
|
+
gem.required_rubygems_version = ">= 1.3.6"
|
18
|
+
gem.rubyforge_project = "orientdb-ar"
|
19
|
+
|
20
|
+
gem.add_dependency "orientdb", "0.0.10"
|
21
|
+
gem.add_dependency "activemodel", ">= 3.0.3"
|
22
|
+
gem.add_development_dependency "awesome_print"
|
23
|
+
gem.add_development_dependency "rspec", ">= 2.4"
|
24
|
+
|
25
|
+
gem.files = `git ls-files`.split("\n")
|
26
|
+
gem.test_files = Dir["test/test*.rb"]
|
27
|
+
gem.executables = `git ls-files`.split("\n").map { |f| f =~ /^bin\/(.*)/ ? $1 : nil }.compact
|
28
|
+
gem.require_path = 'lib'
|
29
|
+
end
|
30
|
+
Jeweler::GemcutterTasks.new
|
31
|
+
rescue LoadError
|
32
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
33
|
+
end
|
34
|
+
|
35
|
+
require 'rspec/core/rake_task'
|
36
|
+
RSpec::Core::RakeTask.new(:spec)
|
37
|
+
|
38
|
+
desc "Run all examples using rcov"
|
39
|
+
RSpec::Core::RakeTask.new :rcov => :cleanup_rcov_files do |t|
|
40
|
+
t.rcov = true
|
41
|
+
t.rcov_opts = %[-Ilib -Ispec --exclude "spec/*,gems/*" --text-report --sort coverage --aggregate coverage.data]
|
42
|
+
end
|
43
|
+
|
44
|
+
task :cleanup_rcov_files do
|
45
|
+
rm_rf 'coverage.data'
|
46
|
+
end
|
47
|
+
|
48
|
+
task :spec => :check_dependencies
|
49
|
+
|
50
|
+
task :default => :spec
|
51
|
+
|
52
|
+
require 'rake/rdoctask'
|
53
|
+
Rake::RDocTask.new do |rdoc|
|
54
|
+
rdoc.rdoc_dir = 'rdoc'
|
55
|
+
rdoc.title = "orientdb #{version}"
|
56
|
+
rdoc.rdoc_files.include('README*')
|
57
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
58
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.2
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env jruby
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + "/../lib/orientdb-ar")
|
3
|
+
|
4
|
+
if ARGV.include?('test:db')
|
5
|
+
GEM_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
6
|
+
SPEC_ROOT = GEM_ROOT + '/spec'
|
7
|
+
TEMP_DIR = File.expand_path Dir.pwd + '/tmp'
|
8
|
+
|
9
|
+
TEST_DB_PATH = "#{TEMP_DIR}/databases/db_#{rand(999) + 1}"
|
10
|
+
|
11
|
+
puts ">> GEM_ROOT : #{GEM_ROOT}"
|
12
|
+
puts ">> TEST_DB PATH : #{TEST_DB_PATH}"
|
13
|
+
|
14
|
+
require 'fileutils'
|
15
|
+
puts ">> Removing tmp directory #{TEMP_DIR} ..."
|
16
|
+
FileUtils.remove_dir TEMP_DIR + '/databases', true
|
17
|
+
puts ">> Creating OrientDB test database ..."
|
18
|
+
FileUtils.mkdir_p TEST_DB_PATH
|
19
|
+
OrientDB::AR::Base.connection = OrientDB::Database.new("local:#{TEST_DB_PATH}/test").create
|
20
|
+
DB = OrientDB::AR::Base.connection
|
21
|
+
puts ">> Connection : #{OrientDB::AR::Base.connection}"
|
22
|
+
|
23
|
+
require SPEC_ROOT + '/models/person'
|
24
|
+
require SPEC_ROOT + '/models/simple_person'
|
25
|
+
require SPEC_ROOT + '/models/address'
|
26
|
+
require SPEC_ROOT + '/models/customer'
|
27
|
+
require SPEC_ROOT + '/models/flo_admin'
|
28
|
+
end
|
29
|
+
|
30
|
+
require 'irb'
|
31
|
+
ARGV.clear
|
32
|
+
IRB.start(__FILE__)
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
2
|
+
|
3
|
+
module OrientDB::AR
|
4
|
+
module Attributes
|
5
|
+
|
6
|
+
def attribute_names
|
7
|
+
schema_names = self.class.fields.keys.map { |x| x.to_s }
|
8
|
+
(schema_names + @odocument.field_names.map).uniq
|
9
|
+
end
|
10
|
+
|
11
|
+
def attributes
|
12
|
+
attribute_names.inject({}) { |h, attr| h[attr.to_s] = self[attr]; h }
|
13
|
+
end
|
14
|
+
|
15
|
+
def [](attr)
|
16
|
+
res = @odocument[attr]
|
17
|
+
res.respond_to?(:jruby_value) ? res.jruby_value : res
|
18
|
+
end
|
19
|
+
|
20
|
+
def []=(attr, value)
|
21
|
+
old_value = self[attr]
|
22
|
+
return old_value if value == old_value
|
23
|
+
attribute_will_change!(attr)
|
24
|
+
@odocument[attr] = value
|
25
|
+
end
|
26
|
+
|
27
|
+
def changed?
|
28
|
+
!changed_attributes.empty?
|
29
|
+
end
|
30
|
+
|
31
|
+
def changed
|
32
|
+
changed_attributes.keys
|
33
|
+
end
|
34
|
+
|
35
|
+
def changes
|
36
|
+
changed.inject(HashWithIndifferentAccess.new) { |h, attr| h[attr] = attribute_change(attr); h }
|
37
|
+
end
|
38
|
+
|
39
|
+
def previous_changes
|
40
|
+
@previously_changed
|
41
|
+
end
|
42
|
+
|
43
|
+
def changed_attributes
|
44
|
+
@changed_attributes ||= HashWithIndifferentAccess.new
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def attribute_changed?(attr)
|
50
|
+
changed_attributes.include?(attr)
|
51
|
+
end
|
52
|
+
|
53
|
+
def attribute_change(attr)
|
54
|
+
[changed_attributes[attr], @odocument[attr]] if attribute_changed?(attr)
|
55
|
+
end
|
56
|
+
|
57
|
+
def attribute_was(attr)
|
58
|
+
attribute_changed?(attr) ? changed_attributes[attr] : @odocument[attr]
|
59
|
+
end
|
60
|
+
|
61
|
+
def attribute_will_change!(attr)
|
62
|
+
return if attribute_changed?(attr)
|
63
|
+
|
64
|
+
begin
|
65
|
+
value = @odocument[attr]
|
66
|
+
value = value.duplicable? ? value.clone : value
|
67
|
+
rescue TypeError, NoMethodError
|
68
|
+
end
|
69
|
+
|
70
|
+
changed_attributes[attr] = value
|
71
|
+
end
|
72
|
+
|
73
|
+
def reset_attribute!(attr)
|
74
|
+
@odocument[attr] = changed_attributes[attr] if attribute_changed?(attr)
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
data/lib/model/base.rb
ADDED
@@ -0,0 +1,250 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'active_model'
|
3
|
+
require 'active_support/core_ext/class/attribute_accessors'
|
4
|
+
require 'active_support/core_ext/kernel'
|
5
|
+
require 'active_support/core_ext/class/attribute'
|
6
|
+
require 'orientdb'
|
7
|
+
|
8
|
+
require 'model/conversion'
|
9
|
+
require 'model/attributes'
|
10
|
+
require 'model/validations'
|
11
|
+
|
12
|
+
class OrientDB::AR::Base
|
13
|
+
include ActiveModel::AttributeMethods
|
14
|
+
include Comparable
|
15
|
+
|
16
|
+
extend ActiveModel::Translation
|
17
|
+
extend ActiveModel::Callbacks
|
18
|
+
|
19
|
+
include OrientDB::AR::Attributes
|
20
|
+
include OrientDB::AR::Conversion
|
21
|
+
include OrientDB::AR::Validations
|
22
|
+
|
23
|
+
include ActiveModel::Serializers::JSON
|
24
|
+
include ActiveModel::Serializers::Xml
|
25
|
+
|
26
|
+
define_model_callbacks :save, :delete
|
27
|
+
|
28
|
+
class_attribute :connection
|
29
|
+
|
30
|
+
class_inheritable_hash :fields
|
31
|
+
self.fields = ActiveSupport::OrderedHash.new
|
32
|
+
|
33
|
+
attr_reader :odocument
|
34
|
+
|
35
|
+
def initialize(fields = {})
|
36
|
+
@odocument = self.class.new_document fields
|
37
|
+
@changed_attributes = {}
|
38
|
+
@errors = ActiveModel::Errors.new(self)
|
39
|
+
end
|
40
|
+
|
41
|
+
def field?(name)
|
42
|
+
res = @odocument.field?(name)
|
43
|
+
res
|
44
|
+
end
|
45
|
+
|
46
|
+
def respond_to?(method_name)
|
47
|
+
# Simple field value lookup
|
48
|
+
return true if field?(method_name)
|
49
|
+
# Dirty
|
50
|
+
return true if method_name.to_s =~ /(\w*)(_changed\?|_change|_will_change!|_was)$/ && field?($1)
|
51
|
+
# Setter
|
52
|
+
return true if method_name.to_s =~ /(.*?)=$/
|
53
|
+
# Boolean
|
54
|
+
return true if method_name.to_s =~ /(.*?)?$/ && field?($1)
|
55
|
+
# Unknown pattern
|
56
|
+
super
|
57
|
+
end
|
58
|
+
|
59
|
+
def method_missing(method_name, *args, &blk)
|
60
|
+
# Simple field value lookup
|
61
|
+
return self[method_name] if field?(method_name)
|
62
|
+
# Dirty
|
63
|
+
if method_name.to_s =~ /(\w*)(_changed\?|_change|_will_change!|_was)$/ && field?($1)
|
64
|
+
__send__("attribute#{$2}", $1)
|
65
|
+
# Setter
|
66
|
+
elsif method_name.to_s =~ /(.*?)=$/
|
67
|
+
self[$1] = args.first
|
68
|
+
# Boolean
|
69
|
+
elsif method_name.to_s =~ /(.*?)?$/ && field?($1)
|
70
|
+
!!self[$1]
|
71
|
+
# Unknown pattern
|
72
|
+
else
|
73
|
+
super
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def save
|
78
|
+
_run_save_callbacks do
|
79
|
+
@odocument.save
|
80
|
+
@saved = true
|
81
|
+
@previously_changed = @changed_attributes
|
82
|
+
@changed_attributes.clear
|
83
|
+
end
|
84
|
+
true
|
85
|
+
end
|
86
|
+
|
87
|
+
def delete
|
88
|
+
_run_delete_callbacks do
|
89
|
+
@odocument.delete
|
90
|
+
@deleted = true
|
91
|
+
end
|
92
|
+
true
|
93
|
+
end
|
94
|
+
|
95
|
+
def saved?
|
96
|
+
@saved || @odocument.rid != '-1:-1'
|
97
|
+
end
|
98
|
+
|
99
|
+
def deleted?
|
100
|
+
@deleted ||= false
|
101
|
+
end
|
102
|
+
|
103
|
+
def persisted?
|
104
|
+
saved? && !deleted?
|
105
|
+
end
|
106
|
+
|
107
|
+
def inspect
|
108
|
+
attrs = attributes.map { |k, v| "#{k}:#{v.inspect}" }.join(' ')
|
109
|
+
super_klass = self.class.descends_from_base? ? '' : "(#{self.class.superclass.name})"
|
110
|
+
%{#<#{self.class.name}#{super_klass}:#{@odocument.rid} #{attrs}>}
|
111
|
+
end
|
112
|
+
|
113
|
+
alias :to_s :inspect
|
114
|
+
|
115
|
+
def <=>(other)
|
116
|
+
to_s <=> other.to_s
|
117
|
+
end
|
118
|
+
|
119
|
+
class << self
|
120
|
+
|
121
|
+
attr_writer :oclass_name
|
122
|
+
|
123
|
+
def oclass_name
|
124
|
+
@oclass_name ||= name.to_s
|
125
|
+
end
|
126
|
+
|
127
|
+
def oclass
|
128
|
+
unless defined?(@oclass)
|
129
|
+
options = {}
|
130
|
+
unless descends_from_base?
|
131
|
+
super_oclass = superclass.oclass
|
132
|
+
options[:super] = super_oclass
|
133
|
+
options[:use_cluster] = super_oclass.cluster_ids.first
|
134
|
+
end
|
135
|
+
@oclass = connection.get_or_create_class oclass_name, options
|
136
|
+
end
|
137
|
+
@oclass
|
138
|
+
end
|
139
|
+
|
140
|
+
def field(name, type, options = {})
|
141
|
+
name = name.to_sym
|
142
|
+
if fields.key? name
|
143
|
+
puts "Already defined field [#{name}]"
|
144
|
+
else
|
145
|
+
fields[name] = {:type => type}.update options
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def descends_from_base?
|
150
|
+
superclass && superclass == OrientDB::AR::Base
|
151
|
+
end
|
152
|
+
|
153
|
+
def schema!
|
154
|
+
fields.each do |field, options|
|
155
|
+
oclass.add field, options[:type], options.except(:type)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
def new_document(fields = {})
|
160
|
+
oclass
|
161
|
+
OrientDB::Document.new connection, oclass_name, fields
|
162
|
+
end
|
163
|
+
|
164
|
+
def create(fields = {})
|
165
|
+
obj = new fields
|
166
|
+
obj.save
|
167
|
+
obj
|
168
|
+
end
|
169
|
+
|
170
|
+
def select(*args)
|
171
|
+
OrientDB::AR::Query.new(self).select(*args)
|
172
|
+
end
|
173
|
+
|
174
|
+
alias :columns :select
|
175
|
+
|
176
|
+
def where(*args)
|
177
|
+
OrientDB::AR::Query.new(self).where(*args)
|
178
|
+
end
|
179
|
+
|
180
|
+
def order(*args)
|
181
|
+
OrientDB::AR::Query.new(self).order(*args)
|
182
|
+
end
|
183
|
+
|
184
|
+
def limit(max_records)
|
185
|
+
OrientDB::AR::Query.new(self).limit(max_records)
|
186
|
+
end
|
187
|
+
|
188
|
+
def range(lower_rid, upper_rid = nil)
|
189
|
+
OrientDB::AR::Query.new(self).range(lower_rid, upper_rid)
|
190
|
+
end
|
191
|
+
|
192
|
+
def all(conditions = {})
|
193
|
+
OrientDB::AR::Query.new(self).where(conditions).all
|
194
|
+
end
|
195
|
+
|
196
|
+
def first(conditions = {})
|
197
|
+
OrientDB::AR::Query.new(self).where(conditions).first
|
198
|
+
end
|
199
|
+
|
200
|
+
def clear
|
201
|
+
oclass.truncate
|
202
|
+
end
|
203
|
+
|
204
|
+
def new_from_doc(doc)
|
205
|
+
klass = doc.getClassName.constantize
|
206
|
+
obj = klass.new
|
207
|
+
obj.instance_variable_set "@odocument", doc
|
208
|
+
obj
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
end
|
213
|
+
|
214
|
+
class OrientDB::AR::Query
|
215
|
+
|
216
|
+
attr_accessor :model, :query
|
217
|
+
|
218
|
+
def initialize(model, query = OrientDB::SQL::Query.new)
|
219
|
+
@model, @query = model, query
|
220
|
+
@query.from model.name
|
221
|
+
end
|
222
|
+
|
223
|
+
%w{ select select! where where! and or and_not or_not order order! limit limit! range range! }.each do |name|
|
224
|
+
define_method(name) do |*args|
|
225
|
+
query.send name, *args
|
226
|
+
self
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
def all
|
231
|
+
model.connection.query(query).map { |doc| model.new_from_doc doc }
|
232
|
+
end
|
233
|
+
|
234
|
+
def first
|
235
|
+
model.new_from_doc model.connection.first(query)
|
236
|
+
end
|
237
|
+
|
238
|
+
def results
|
239
|
+
model.connection.query(query).map
|
240
|
+
end
|
241
|
+
|
242
|
+
def inspect
|
243
|
+
%{#<OrientDB::AR::Query:#{model.name} query="#{query.to_s}">}
|
244
|
+
end
|
245
|
+
|
246
|
+
alias :to_s :inspect
|
247
|
+
|
248
|
+
end
|
249
|
+
|
250
|
+
OrientDB::AR::Base.include_root_in_json = false
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'model/attributes'
|
2
|
+
require 'model/validations'
|
3
|
+
|
4
|
+
class OrientDB::AR::Embedded
|
5
|
+
extend ActiveModel::Translation
|
6
|
+
|
7
|
+
include OrientDB::AR::Attributes
|
8
|
+
include OrientDB::AR::Conversion
|
9
|
+
include OrientDB::AR::Validations
|
10
|
+
|
11
|
+
def initialize(fields = {})
|
12
|
+
@odocument = self.class.new_document fields
|
13
|
+
@changed_attributes = {}
|
14
|
+
@errors = ActiveModel::Errors.new(self)
|
15
|
+
end
|
16
|
+
|
17
|
+
def field?(name)
|
18
|
+
@odocument.field?(name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def respond_to?(method_name)
|
22
|
+
# Simple field value lookup
|
23
|
+
return true if field?(method_name)
|
24
|
+
# Dirty
|
25
|
+
return true if method_name.to_s =~ /(\w*)(_changed\?|_change|_will_change!|_was)$/ && field?($1)
|
26
|
+
# Setter
|
27
|
+
return true if method_name.to_s =~ /(.*?)=$/
|
28
|
+
# Boolean
|
29
|
+
return true if method_name.to_s =~ /(.*?)?$/ && field?($1)
|
30
|
+
# Unknown pattern
|
31
|
+
super
|
32
|
+
end
|
33
|
+
|
34
|
+
def method_missing(method_name, *args, &blk)
|
35
|
+
# Simple field value lookup
|
36
|
+
return self[method_name] if field?(method_name)
|
37
|
+
# Dirty
|
38
|
+
if method_name.to_s =~ /(\w*)(_changed\?|_change|_will_change!|_was)$/ && field?($1)
|
39
|
+
__send__("attribute#{$2}", $1)
|
40
|
+
# Setter
|
41
|
+
elsif method_name.to_s =~ /(.*?)=$/
|
42
|
+
self[$1] = args.first
|
43
|
+
# Boolean
|
44
|
+
elsif method_name.to_s =~ /(.*?)?$/ && field?($1)
|
45
|
+
!!self[$1]
|
46
|
+
# Unknown pattern
|
47
|
+
else
|
48
|
+
super
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class << self
|
53
|
+
|
54
|
+
attr_writer :oclass_name
|
55
|
+
|
56
|
+
def oclass_name
|
57
|
+
@oclass_name ||= name.downcase.gsub('::', '_')
|
58
|
+
end
|
59
|
+
|
60
|
+
def oclass
|
61
|
+
@oclass ||= connection.get_or_create_class oclass_name
|
62
|
+
end
|
63
|
+
|
64
|
+
def fields
|
65
|
+
@fields ||= ActiveSupport::OrderedHash.new
|
66
|
+
end
|
67
|
+
|
68
|
+
def field(name, type, options = {})
|
69
|
+
name = name.to_sym
|
70
|
+
if fields.key? name
|
71
|
+
puts "Already defined field [#{name}]"
|
72
|
+
else
|
73
|
+
fields[name] = {:type => type}.update options
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def new_document(fields = {})
|
78
|
+
oclass
|
79
|
+
OrientDB::Document.new connection, oclass_name, fields
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
end
|
data/lib/orientdb-ar.rb
ADDED
data/orientdb-ar.gemspec
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{orientdb-ar}
|
8
|
+
s.version = "0.0.2"
|
9
|
+
s.platform = %q{jruby}
|
10
|
+
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.3.6") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.authors = ["Adrian Madrid"]
|
13
|
+
s.date = %q{2011-01-17}
|
14
|
+
s.default_executable = %q{orientdbar_console}
|
15
|
+
s.description = %q{Active Model wrappers to persist Ruby objects under OrientDB in JRuby.}
|
16
|
+
s.email = ["aemadrid@gmail.com"]
|
17
|
+
s.executables = ["orientdbar_console"]
|
18
|
+
s.extra_rdoc_files = [
|
19
|
+
"LICENSE",
|
20
|
+
"README.rdoc"
|
21
|
+
]
|
22
|
+
s.files = [
|
23
|
+
".document",
|
24
|
+
".gemspec",
|
25
|
+
".gitignore",
|
26
|
+
"LICENSE",
|
27
|
+
"README.rdoc",
|
28
|
+
"Rakefile",
|
29
|
+
"VERSION",
|
30
|
+
"bin/orientdbar_console",
|
31
|
+
"lib/model/attributes.rb",
|
32
|
+
"lib/model/base.rb",
|
33
|
+
"lib/model/conversion.rb",
|
34
|
+
"lib/model/embedded.rb",
|
35
|
+
"lib/model/validations.rb",
|
36
|
+
"lib/orientdb-ar.rb",
|
37
|
+
"orientdb-ar.gemspec",
|
38
|
+
"spec/base_spec.rb",
|
39
|
+
"spec/dirty_spec.rb",
|
40
|
+
"spec/lint_behavior.rb",
|
41
|
+
"spec/lint_spec.rb",
|
42
|
+
"spec/model_spec.rb",
|
43
|
+
"spec/models/address.rb",
|
44
|
+
"spec/models/customer.rb",
|
45
|
+
"spec/models/flo_admin.rb",
|
46
|
+
"spec/models/person.rb",
|
47
|
+
"spec/models/simple_person.rb",
|
48
|
+
"spec/serialization_spec.rb",
|
49
|
+
"spec/spec.opts",
|
50
|
+
"spec/spec_helper.rb"
|
51
|
+
]
|
52
|
+
s.homepage = %q{http://rubygems.org/gems/orientdb}
|
53
|
+
s.require_paths = ["lib"]
|
54
|
+
s.rubyforge_project = %q{orientdb-ar}
|
55
|
+
s.rubygems_version = %q{1.3.6}
|
56
|
+
s.summary = %q{ActiveRecord-like persistency through OrientDB in JRuby}
|
57
|
+
|
58
|
+
if s.respond_to? :specification_version then
|
59
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
60
|
+
s.specification_version = 3
|
61
|
+
|
62
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
63
|
+
s.add_runtime_dependency(%q<orientdb>, ["= 0.0.10"])
|
64
|
+
s.add_runtime_dependency(%q<activemodel>, [">= 3.0.3"])
|
65
|
+
s.add_development_dependency(%q<awesome_print>, [">= 0"])
|
66
|
+
s.add_development_dependency(%q<rspec>, [">= 2.4"])
|
67
|
+
else
|
68
|
+
s.add_dependency(%q<orientdb>, ["= 0.0.10"])
|
69
|
+
s.add_dependency(%q<activemodel>, [">= 3.0.3"])
|
70
|
+
s.add_dependency(%q<awesome_print>, [">= 0"])
|
71
|
+
s.add_dependency(%q<rspec>, [">= 2.4"])
|
72
|
+
end
|
73
|
+
else
|
74
|
+
s.add_dependency(%q<orientdb>, ["= 0.0.10"])
|
75
|
+
s.add_dependency(%q<activemodel>, [">= 3.0.3"])
|
76
|
+
s.add_dependency(%q<awesome_print>, [">= 0"])
|
77
|
+
s.add_dependency(%q<rspec>, [">= 2.4"])
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
data/spec/base_spec.rb
ADDED
data/spec/dirty_spec.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe "ActiveModel" do
|
4
|
+
|
5
|
+
describe "Dirty" do
|
6
|
+
|
7
|
+
it "should comply" do
|
8
|
+
@person = Person.create :name => "Uncle Bob", :age => 45
|
9
|
+
@person.changed?.should == false
|
10
|
+
|
11
|
+
@person.name = 'Bob'
|
12
|
+
@person.changed?.should == true
|
13
|
+
@person.name_changed?.should == true
|
14
|
+
@person.name_was.should == 'Uncle Bob'
|
15
|
+
@person.name_change.should == ['Uncle Bob', 'Bob']
|
16
|
+
@person.name = 'Bill'
|
17
|
+
@person.name_change.should == ['Uncle Bob', 'Bill']
|
18
|
+
|
19
|
+
@person.save
|
20
|
+
@person.changed?.should == false
|
21
|
+
@person.name_changed?.should == false
|
22
|
+
|
23
|
+
@person.name = 'Bill'
|
24
|
+
@person.name_changed?.should == false
|
25
|
+
@person.name_change.should == nil
|
26
|
+
|
27
|
+
@person.name = 'Bob'
|
28
|
+
@person.changed.should == ['name']
|
29
|
+
@person.changes.should == {'name' => ['Bill', 'Bob']}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# Stolen from https://github.com/sinefunc/rspec-rails-matchers/raw/master/lib/rspec_rails_matchers/behavior/lint.rb
|
2
|
+
|
3
|
+
module RspecRailsMatchers
|
4
|
+
module Behavior
|
5
|
+
module Lint
|
6
|
+
share_as :AnActiveModel do
|
7
|
+
def be_a_boolean
|
8
|
+
Rspec::Matchers::Matcher.new :be_a_boolean do
|
9
|
+
match do |value|
|
10
|
+
[ true, false ].include?( value )
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it { should respond_to(:to_model) }
|
16
|
+
it { should respond_to(:to_key) }
|
17
|
+
it { should respond_to(:to_param) }
|
18
|
+
|
19
|
+
it { should respond_to(:valid?) }
|
20
|
+
its(:valid?) { should be_a_boolean }
|
21
|
+
|
22
|
+
it { should respond_to(:persisted?) }
|
23
|
+
its(:persisted?) { should be_a_boolean }
|
24
|
+
|
25
|
+
its(:class) { should respond_to(:model_name) }
|
26
|
+
|
27
|
+
context "the model name" do
|
28
|
+
def subject
|
29
|
+
super.class.model_name
|
30
|
+
end
|
31
|
+
|
32
|
+
it { should be_kind_of(String) }
|
33
|
+
its(:human) { should be_kind_of(String) }
|
34
|
+
its(:partial_path) { should be_kind_of(String) }
|
35
|
+
its(:singular) { should be_kind_of(String) }
|
36
|
+
its(:plural) { should be_kind_of(String) }
|
37
|
+
end
|
38
|
+
|
39
|
+
context "when its not persisted" do
|
40
|
+
def subject
|
41
|
+
obj = super.dup
|
42
|
+
obj.stub!(:persisted?).and_return(false)
|
43
|
+
obj
|
44
|
+
end
|
45
|
+
|
46
|
+
its(:to_key) { should be_nil }
|
47
|
+
its(:to_param) { should be_nil }
|
48
|
+
end
|
49
|
+
|
50
|
+
it { should respond_to(:errors) }
|
51
|
+
|
52
|
+
context "errors" do
|
53
|
+
def subject
|
54
|
+
super.errors
|
55
|
+
end
|
56
|
+
|
57
|
+
it { should respond_to(:[]) }
|
58
|
+
it { should respond_to(:full_messages) }
|
59
|
+
|
60
|
+
context "[:hello]" do
|
61
|
+
it { subject[:hello].should be_an_instance_of(Array) }
|
62
|
+
|
63
|
+
its(:full_messages) { should be_an_instance_of(Array) }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/spec/lint_spec.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe "ActiveModel" do
|
4
|
+
|
5
|
+
describe Person do
|
6
|
+
it_should_behave_like AnActiveModel
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "Dirty" do
|
10
|
+
|
11
|
+
it "should comply" do
|
12
|
+
@person = Person.create :name => "Uncle Bob", :age => 45
|
13
|
+
@person.changed?.should == false
|
14
|
+
|
15
|
+
@person.name = 'Bob'
|
16
|
+
@person.changed?.should == true
|
17
|
+
@person.name_changed?.should == true
|
18
|
+
@person.name_was.should == 'Uncle Bob'
|
19
|
+
@person.name_change.should == ['Uncle Bob', 'Bob']
|
20
|
+
@person.name = 'Bill'
|
21
|
+
@person.name_change.should == ['Uncle Bob', 'Bill']
|
22
|
+
|
23
|
+
@person.save
|
24
|
+
@person.changed?.should == false
|
25
|
+
@person.name_changed?.should == false
|
26
|
+
|
27
|
+
@person.name = 'Bill'
|
28
|
+
@person.name_changed?.should == false
|
29
|
+
@person.name_change.should == nil
|
30
|
+
|
31
|
+
@person.name = 'Bob'
|
32
|
+
@person.changed.should == ['name']
|
33
|
+
@person.changes.should == {'name' => ['Bill', 'Bob']}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "Serialization" do
|
38
|
+
|
39
|
+
it "should comply" do
|
40
|
+
@person = SimplePerson.new
|
41
|
+
@person.serializable_hash.should == {"name" => nil}
|
42
|
+
@person.as_json.should == {"name" => nil}
|
43
|
+
@person.to_json.should == %{{"name":null}}
|
44
|
+
@person.to_xml.should == "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<simple-person>\n <name type=\"yaml\" nil=\"true\"></name>\n</simple-person>\n"
|
45
|
+
|
46
|
+
@person.name = "Bob"
|
47
|
+
@person.serializable_hash.should == {"name" => "Bob"}
|
48
|
+
@person.as_json.should == {"name" => "Bob"}
|
49
|
+
@person.to_json.should == %{{"name":"Bob"}}
|
50
|
+
@person.to_xml.should == "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<simple-person>\n <name>Bob</name>\n</simple-person>\n"
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
data/spec/model_spec.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe "Model" do
|
4
|
+
it "should have a valid connection" do
|
5
|
+
Person.connection.should be_a_kind_of OrientDB::Database
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should have the right schema" do
|
9
|
+
Person.new.should be_a_kind_of Person
|
10
|
+
Person.oclass_name.should == 'Person'
|
11
|
+
Person.fields.keys.should == [:name, :age, :tags]
|
12
|
+
Person.fields[:name].should == {:type => :string, :not_null => true}
|
13
|
+
Person.fields[:age].should == {:type => :int}
|
14
|
+
Person.fields[:tags].should == {:type => [:list, :string]}
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should create working models" do
|
18
|
+
p = Person.create :name => "Tester Testing", :age => 45, :tags => %w{ tech_support rocks }
|
19
|
+
|
20
|
+
p.name.should == "Tester Testing"
|
21
|
+
p.age.should == 45
|
22
|
+
p.tags.should == %w{ tech_support rocks }
|
23
|
+
|
24
|
+
p2 = Person.first :name => "Tester Testing"
|
25
|
+
p2.name.should == p.name
|
26
|
+
p2.age.should == p.age
|
27
|
+
p2.tags.map.should == p.tags
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should find models" do
|
31
|
+
OrientDB::SQL.monkey_patch! Symbol
|
32
|
+
Person.clear
|
33
|
+
|
34
|
+
p1 = Person.create :name => "Hans Solo", :age => 38, :tags => %w{ fighter pilot }
|
35
|
+
p2 = Person.create :name => "Yoda", :age => 387, :tags => %w{ genius jedi }
|
36
|
+
p3 = Person.create :name => "Luke Skywalker", :age => 28, :tags => %w{ jedi fighter pilot }
|
37
|
+
p4 = Person.create :name => "Princess Leia", :age => 28, :tags => %w{ fighter royalty }
|
38
|
+
p5 = Person.create :name => "Chewbaca", :age => 53, :tags => %w{ fighter brave hairy }
|
39
|
+
|
40
|
+
Person.where(:name.like('%w%')).all.should == [p3, p5]
|
41
|
+
Person.where(:age.gt(28), :age.lt(75)).all.should == [p1, p5]
|
42
|
+
Person.where("'jedi' IN tags").all.should == [p2, p3]
|
43
|
+
Person.where("'fighter' IN tags", :age.lte(28)).order(:name.desc).all.first.should == p4
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe "ActiveModel" do
|
4
|
+
|
5
|
+
describe "Serialization" do
|
6
|
+
|
7
|
+
it "should comply" do
|
8
|
+
@person = SimplePerson.new
|
9
|
+
@person.serializable_hash.should == {"name" => nil}
|
10
|
+
@person.as_json.should == {"name" => nil}
|
11
|
+
@person.to_json.should == %{{"name":null}}
|
12
|
+
@person.to_xml.should == "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<simple-person>\n <name type=\"yaml\" nil=\"true\"></name>\n</simple-person>\n"
|
13
|
+
|
14
|
+
@person.name = "Bob"
|
15
|
+
@person.serializable_hash.should == {"name" => "Bob"}
|
16
|
+
@person.as_json.should == {"name" => "Bob"}
|
17
|
+
@person.to_json.should == %{{"name":"Bob"}}
|
18
|
+
@person.to_xml.should == "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<simple-person>\n <name>Bob</name>\n</simple-person>\n"
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,47 @@
|
|
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 = GEM_ROOT + '/tmp'
|
7
|
+
|
8
|
+
puts ">> GEM_ROOT : #{GEM_ROOT}"
|
9
|
+
|
10
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
11
|
+
$LOAD_PATH.unshift(LIB_ROOT) unless $LOAD_PATH.include?(LIB_ROOT)
|
12
|
+
|
13
|
+
require 'orientdb-ar'
|
14
|
+
require 'rspec'
|
15
|
+
#require 'rspec/autorun'
|
16
|
+
require 'fileutils'
|
17
|
+
|
18
|
+
TEST_DB_PATH = "#{TEMP_DIR}/test/db_#{rand(999) + 1}"
|
19
|
+
puts ">> TEST_DB PATH : #{TEST_DB_PATH}"
|
20
|
+
|
21
|
+
require 'fileutils'
|
22
|
+
puts ">> Removing tmp directory #{TEMP_DIR} ..."
|
23
|
+
FileUtils.remove_dir TEMP_DIR + '/test', true
|
24
|
+
puts ">> Creating OrientDB database..."
|
25
|
+
FileUtils.mkdir_p TEST_DB_PATH
|
26
|
+
OrientDB::AR::Base.connection = OrientDB::Database.new("local:#{TEST_DB_PATH}/test").create
|
27
|
+
puts ">> Connection : #{OrientDB::AR::Base.connection}"
|
28
|
+
|
29
|
+
require SPEC_ROOT + '/models/person'
|
30
|
+
require SPEC_ROOT + '/models/simple_person'
|
31
|
+
require SPEC_ROOT + '/models/address'
|
32
|
+
require SPEC_ROOT + '/models/customer'
|
33
|
+
|
34
|
+
require SPEC_ROOT + '/lint_behavior'
|
35
|
+
|
36
|
+
module Helpers
|
37
|
+
end
|
38
|
+
|
39
|
+
RSpec.configure do |config|
|
40
|
+
config.include Helpers
|
41
|
+
config.include RspecRailsMatchers::Behavior::Lint
|
42
|
+
|
43
|
+
config.color_enabled = true
|
44
|
+
end
|
45
|
+
|
46
|
+
SPEC_HELPER_LOADED = true
|
47
|
+
end
|
metadata
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: orientdb-ar
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
|
+
platform: jruby
|
11
|
+
authors:
|
12
|
+
- Adrian Madrid
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-01-17 00:00:00 -07:00
|
18
|
+
default_executable: orientdbar_console
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: orientdb
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 0
|
30
|
+
- 10
|
31
|
+
version: 0.0.10
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: activemodel
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 3
|
43
|
+
- 0
|
44
|
+
- 3
|
45
|
+
version: 3.0.3
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: awesome_print
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
version: "0"
|
58
|
+
type: :development
|
59
|
+
version_requirements: *id003
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: rspec
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
segments:
|
68
|
+
- 2
|
69
|
+
- 4
|
70
|
+
version: "2.4"
|
71
|
+
type: :development
|
72
|
+
version_requirements: *id004
|
73
|
+
description: Active Model wrappers to persist Ruby objects under OrientDB in JRuby.
|
74
|
+
email:
|
75
|
+
- aemadrid@gmail.com
|
76
|
+
executables:
|
77
|
+
- orientdbar_console
|
78
|
+
extensions: []
|
79
|
+
|
80
|
+
extra_rdoc_files:
|
81
|
+
- LICENSE
|
82
|
+
- README.rdoc
|
83
|
+
files:
|
84
|
+
- .document
|
85
|
+
- .gemspec
|
86
|
+
- .gitignore
|
87
|
+
- LICENSE
|
88
|
+
- README.rdoc
|
89
|
+
- Rakefile
|
90
|
+
- VERSION
|
91
|
+
- bin/orientdbar_console
|
92
|
+
- lib/model/attributes.rb
|
93
|
+
- lib/model/base.rb
|
94
|
+
- lib/model/conversion.rb
|
95
|
+
- lib/model/embedded.rb
|
96
|
+
- lib/model/validations.rb
|
97
|
+
- lib/orientdb-ar.rb
|
98
|
+
- orientdb-ar.gemspec
|
99
|
+
- spec/base_spec.rb
|
100
|
+
- spec/dirty_spec.rb
|
101
|
+
- spec/lint_behavior.rb
|
102
|
+
- spec/lint_spec.rb
|
103
|
+
- spec/model_spec.rb
|
104
|
+
- spec/models/address.rb
|
105
|
+
- spec/models/customer.rb
|
106
|
+
- spec/models/flo_admin.rb
|
107
|
+
- spec/models/person.rb
|
108
|
+
- spec/models/simple_person.rb
|
109
|
+
- spec/serialization_spec.rb
|
110
|
+
- spec/spec.opts
|
111
|
+
- spec/spec_helper.rb
|
112
|
+
has_rdoc: true
|
113
|
+
homepage: http://rubygems.org/gems/orientdb
|
114
|
+
licenses: []
|
115
|
+
|
116
|
+
post_install_message:
|
117
|
+
rdoc_options: []
|
118
|
+
|
119
|
+
require_paths:
|
120
|
+
- lib
|
121
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
segments:
|
126
|
+
- 0
|
127
|
+
version: "0"
|
128
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
segments:
|
133
|
+
- 1
|
134
|
+
- 3
|
135
|
+
- 6
|
136
|
+
version: 1.3.6
|
137
|
+
requirements: []
|
138
|
+
|
139
|
+
rubyforge_project: orientdb-ar
|
140
|
+
rubygems_version: 1.3.6
|
141
|
+
signing_key:
|
142
|
+
specification_version: 3
|
143
|
+
summary: ActiveRecord-like persistency through OrientDB in JRuby
|
144
|
+
test_files: []
|
145
|
+
|