orm_adapter 0.0.1
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/.gitignore +6 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +115 -0
- data/History.txt +3 -0
- data/LICENSE +20 -0
- data/README.rdoc +31 -0
- data/Rakefile +39 -0
- data/VERSION.yml +4 -0
- data/lib/orm_adapter/adapters/active_record.rb +75 -0
- data/lib/orm_adapter/adapters/data_mapper.rb +47 -0
- data/lib/orm_adapter/adapters/mongoid.rb +59 -0
- data/lib/orm_adapter/base.rb +57 -0
- data/lib/orm_adapter/to_adapter.rb +8 -0
- data/lib/orm_adapter/version.rb +16 -0
- data/lib/orm_adapter.rb +19 -0
- data/orm_adapter.gemspec +65 -0
- data/spec/orm_adapter/adapters/active_record_spec.rb +149 -0
- data/spec/orm_adapter/adapters/data_mapper_spec.rb +119 -0
- data/spec/orm_adapter/adapters/mongoid_spec.rb +109 -0
- data/spec/orm_adapter_spec.rb +21 -0
- data/spec/spec_helper.rb +14 -0
- metadata +93 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
|
3
|
+
gem "yard"
|
4
|
+
|
5
|
+
group :test do
|
6
|
+
gem "activerecord", "~>3.0.0"
|
7
|
+
gem "mongoid", "~>2.0.0.beta.17"
|
8
|
+
gem "rspec", "~>2.0.0.beta.22"
|
9
|
+
gem "jeweler"
|
10
|
+
gem "rake"
|
11
|
+
gem "sqlite3-ruby"
|
12
|
+
gem "datamapper"
|
13
|
+
gem "dm-sqlite-adapter"
|
14
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
activemodel (3.0.0)
|
5
|
+
activesupport (= 3.0.0)
|
6
|
+
builder (~> 2.1.2)
|
7
|
+
i18n (~> 0.4.1)
|
8
|
+
activerecord (3.0.0)
|
9
|
+
activemodel (= 3.0.0)
|
10
|
+
activesupport (= 3.0.0)
|
11
|
+
arel (~> 1.0.0)
|
12
|
+
tzinfo (~> 0.3.23)
|
13
|
+
activesupport (3.0.0)
|
14
|
+
addressable (2.2.1)
|
15
|
+
arel (1.0.1)
|
16
|
+
activesupport (~> 3.0.0)
|
17
|
+
bson (1.0.9)
|
18
|
+
builder (2.1.2)
|
19
|
+
data_objects (0.10.2)
|
20
|
+
addressable (~> 2.1)
|
21
|
+
datamapper (1.0.2)
|
22
|
+
dm-aggregates (= 1.0.2)
|
23
|
+
dm-constraints (= 1.0.2)
|
24
|
+
dm-core (= 1.0.2)
|
25
|
+
dm-migrations (= 1.0.2)
|
26
|
+
dm-serializer (= 1.0.2)
|
27
|
+
dm-timestamps (= 1.0.2)
|
28
|
+
dm-transactions (= 1.0.2)
|
29
|
+
dm-types (= 1.0.2)
|
30
|
+
dm-validations (= 1.0.2)
|
31
|
+
diff-lcs (1.1.2)
|
32
|
+
dm-aggregates (1.0.2)
|
33
|
+
dm-core (~> 1.0.2)
|
34
|
+
dm-constraints (1.0.2)
|
35
|
+
dm-core (~> 1.0.2)
|
36
|
+
dm-migrations (~> 1.0.2)
|
37
|
+
dm-core (1.0.2)
|
38
|
+
addressable (~> 2.2)
|
39
|
+
extlib (~> 0.9.15)
|
40
|
+
dm-do-adapter (1.0.2)
|
41
|
+
data_objects (~> 0.10.2)
|
42
|
+
dm-core (~> 1.0.2)
|
43
|
+
dm-migrations (1.0.2)
|
44
|
+
dm-core (~> 1.0.2)
|
45
|
+
dm-serializer (1.0.2)
|
46
|
+
dm-core (~> 1.0.2)
|
47
|
+
fastercsv (~> 1.5.3)
|
48
|
+
json_pure (~> 1.4)
|
49
|
+
dm-sqlite-adapter (1.0.2)
|
50
|
+
dm-do-adapter (~> 1.0.2)
|
51
|
+
do_sqlite3 (~> 0.10.2)
|
52
|
+
dm-timestamps (1.0.2)
|
53
|
+
dm-core (~> 1.0.2)
|
54
|
+
dm-transactions (1.0.2)
|
55
|
+
dm-core (~> 1.0.2)
|
56
|
+
dm-types (1.0.2)
|
57
|
+
dm-core (~> 1.0.2)
|
58
|
+
fastercsv (~> 1.5.3)
|
59
|
+
json_pure (~> 1.4)
|
60
|
+
stringex (~> 1.1.0)
|
61
|
+
uuidtools (~> 2.1.1)
|
62
|
+
dm-validations (1.0.2)
|
63
|
+
dm-core (~> 1.0.2)
|
64
|
+
do_sqlite3 (0.10.2)
|
65
|
+
data_objects (= 0.10.2)
|
66
|
+
extlib (0.9.15)
|
67
|
+
fastercsv (1.5.3)
|
68
|
+
gemcutter (0.6.1)
|
69
|
+
git (1.2.5)
|
70
|
+
i18n (0.4.1)
|
71
|
+
jeweler (1.4.0)
|
72
|
+
gemcutter (>= 0.1.0)
|
73
|
+
git (>= 1.2.5)
|
74
|
+
rubyforge (>= 2.0.0)
|
75
|
+
json_pure (1.4.6)
|
76
|
+
mongo (1.0.9)
|
77
|
+
bson (>= 1.0.5)
|
78
|
+
mongoid (2.0.0.beta.19)
|
79
|
+
activemodel (~> 3.0)
|
80
|
+
mongo (= 1.0.9)
|
81
|
+
tzinfo (~> 0.3.22)
|
82
|
+
will_paginate (~> 3.0.pre)
|
83
|
+
rake (0.8.7)
|
84
|
+
rspec (2.0.0.beta.22)
|
85
|
+
rspec-core (= 2.0.0.beta.22)
|
86
|
+
rspec-expectations (= 2.0.0.beta.22)
|
87
|
+
rspec-mocks (= 2.0.0.beta.22)
|
88
|
+
rspec-core (2.0.0.beta.22)
|
89
|
+
rspec-expectations (2.0.0.beta.22)
|
90
|
+
diff-lcs (>= 1.1.2)
|
91
|
+
rspec-mocks (2.0.0.beta.22)
|
92
|
+
rspec-core (= 2.0.0.beta.22)
|
93
|
+
rspec-expectations (= 2.0.0.beta.22)
|
94
|
+
rubyforge (2.0.4)
|
95
|
+
json_pure (>= 1.1.7)
|
96
|
+
sqlite3-ruby (1.3.1)
|
97
|
+
stringex (1.1.0)
|
98
|
+
tzinfo (0.3.23)
|
99
|
+
uuidtools (2.1.1)
|
100
|
+
will_paginate (3.0.pre2)
|
101
|
+
yard (0.6.1)
|
102
|
+
|
103
|
+
PLATFORMS
|
104
|
+
ruby
|
105
|
+
|
106
|
+
DEPENDENCIES
|
107
|
+
activerecord (~> 3.0.0)
|
108
|
+
datamapper
|
109
|
+
dm-sqlite-adapter
|
110
|
+
jeweler
|
111
|
+
mongoid (~> 2.0.0.beta.17)
|
112
|
+
rake
|
113
|
+
rspec (~> 2.0.0.beta.22)
|
114
|
+
sqlite3-ruby
|
115
|
+
yard
|
data/History.txt
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 Ian White and José Valim
|
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,31 @@
|
|
1
|
+
= orm_adapter
|
2
|
+
|
3
|
+
Provides a single point of entry for popular ruby ORMs. Its target audience is gem authors who want to support more than one ORM.
|
4
|
+
|
5
|
+
Currently supported ORMs are ActiveRecord, DataMapper and MongoId.
|
6
|
+
|
7
|
+
|
8
|
+
== Example of use
|
9
|
+
|
10
|
+
require 'orm_adapter'
|
11
|
+
|
12
|
+
User # is it an ActiveRecord, DM Resource, or MongoId Document?
|
13
|
+
|
14
|
+
User.to_adapter.find_first :name => 'Fred' # we don't care!
|
15
|
+
|
16
|
+
user_model = User.to_adapter
|
17
|
+
user_model.get!(1) # find a record by id
|
18
|
+
user_model.find_first(:name => 'fred') # find first fred
|
19
|
+
user_model.find_all(:name => 'fred') # find all freds
|
20
|
+
user_model.create!(:name => 'fred') # create a fred
|
21
|
+
|
22
|
+
|
23
|
+
== History
|
24
|
+
|
25
|
+
|
26
|
+
orm_adapter is an extraction from {pickle}[http://github.com/ianwhite/pickle] by {Ian White}[http://github.com/ianwhite]. Pickle's orm adapter included work by {Daniel Neighman}[http://github.com/hassox] and {Josh Bassett}[http://github.com/nullobject]. {José Valim}[http://github.com/josevalim] suggested the extraction, and worked on the first release with Ian.
|
27
|
+
|
28
|
+
|
29
|
+
== Copyright
|
30
|
+
|
31
|
+
Copyright (c) 2010 Ian White and José Valim. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
require 'yard'
|
5
|
+
|
6
|
+
$:.unshift File.expand_path('lib')
|
7
|
+
require 'orm_adapter/version'
|
8
|
+
|
9
|
+
task :spec => :check_dependencies
|
10
|
+
task :default => :spec
|
11
|
+
|
12
|
+
desc "Run the specs"
|
13
|
+
RSpec::Core::RakeTask.new(:spec)
|
14
|
+
|
15
|
+
begin
|
16
|
+
require 'jeweler'
|
17
|
+
Jeweler::Tasks.new do |gem|
|
18
|
+
gem.name = "orm_adapter"
|
19
|
+
gem.version = OrmAdapter::Version::String
|
20
|
+
gem.summary = %Q{Provides a single point of entry for using basic features of ruby ORMs}
|
21
|
+
gem.description = %Q{Provides a single point of entry for using basic features of ruby ORMs}
|
22
|
+
gem.email = "ian.w.white@gmail.com"
|
23
|
+
gem.homepage = "http://github.com/ianwhite/orm_adapter"
|
24
|
+
gem.authors = ["Ian White", "Jose Valim"]
|
25
|
+
end
|
26
|
+
Jeweler::GemcutterTasks.new
|
27
|
+
|
28
|
+
namespace :release do
|
29
|
+
desc "release to github and gemcutter"
|
30
|
+
task :all => ['release', 'gemcutter:release']
|
31
|
+
end
|
32
|
+
|
33
|
+
rescue LoadError
|
34
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
35
|
+
end
|
36
|
+
|
37
|
+
YARD::Rake::YardocTask.new(:doc) do |t|
|
38
|
+
t.files = ['lib/**/*.rb', 'README.rdoc']
|
39
|
+
end
|
data/VERSION.yml
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
begin
|
2
|
+
require 'activerecord'
|
3
|
+
rescue LoadError
|
4
|
+
require 'active_record'
|
5
|
+
end
|
6
|
+
|
7
|
+
class ActiveRecord::Base
|
8
|
+
extend OrmAdapter::ToAdapter
|
9
|
+
|
10
|
+
class OrmAdapter < ::OrmAdapter::Base
|
11
|
+
|
12
|
+
# Do not consider these to be part of the class list
|
13
|
+
def self.except_classes
|
14
|
+
@@except_classes ||= [
|
15
|
+
"CGI::Session::ActiveRecordStore::Session",
|
16
|
+
"ActiveRecord::SessionStore::Session"
|
17
|
+
]
|
18
|
+
end
|
19
|
+
|
20
|
+
# Gets a list of the available models for this adapter
|
21
|
+
def self.model_classes
|
22
|
+
begin
|
23
|
+
klasses = ::ActiveRecord::Base.__send__(:descendants) # Rails 3
|
24
|
+
rescue
|
25
|
+
klasses = ::ActiveRecord::Base.__send__(:subclasses) # Rails 2
|
26
|
+
end
|
27
|
+
|
28
|
+
klasses.select do |klass|
|
29
|
+
!klass.abstract_class? && !except_classes.include?(klass.name)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Return list of column/property names
|
34
|
+
def column_names
|
35
|
+
klass.column_names
|
36
|
+
end
|
37
|
+
|
38
|
+
# Get an instance by id of the model
|
39
|
+
def get!(id)
|
40
|
+
klass.find(id)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Find the first instance matching conditions
|
44
|
+
def find_first(conditions)
|
45
|
+
klass.first :conditions => conditions_to_fields(conditions)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Find all models matching conditions
|
49
|
+
def find_all(conditions)
|
50
|
+
klass.all :conditions => conditions_to_fields(conditions)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Create a model using attributes
|
54
|
+
def create!(attributes)
|
55
|
+
klass.create!(attributes)
|
56
|
+
end
|
57
|
+
|
58
|
+
protected
|
59
|
+
|
60
|
+
# Introspects the klass to convert and objects in conditions into foreign key and type fields
|
61
|
+
def conditions_to_fields(conditions)
|
62
|
+
conditions.inject({}) do |fields, (key, value)|
|
63
|
+
if value.is_a?(ActiveRecord::Base) && klass.column_names.include?("#{key}_id")
|
64
|
+
if klass.column_names.include?("#{key}_type")
|
65
|
+
fields.merge("#{key}_id" => value.id, "#{key}_type" => value.class.base_class.name)
|
66
|
+
else
|
67
|
+
fields.merge("#{key}_id" => value.id)
|
68
|
+
end
|
69
|
+
else
|
70
|
+
fields.merge(key => value)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'dm-core'
|
2
|
+
|
3
|
+
module DataMapper
|
4
|
+
module Model
|
5
|
+
include OrmAdapter::ToAdapter
|
6
|
+
end
|
7
|
+
|
8
|
+
module Resource
|
9
|
+
class OrmAdapter < ::OrmAdapter::Base
|
10
|
+
|
11
|
+
# Do not consider these to be part of the class list
|
12
|
+
def self.except_classes
|
13
|
+
@@except_classes ||= []
|
14
|
+
end
|
15
|
+
|
16
|
+
# Gets a list of the available models for this adapter
|
17
|
+
def self.model_classes
|
18
|
+
::DataMapper::Model.descendants.to_a.select{|k| !except_classes.include?(k.name)}
|
19
|
+
end
|
20
|
+
|
21
|
+
# get a list of column names for a given class
|
22
|
+
def column_names
|
23
|
+
klass.properties.map(&:name)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Get an instance by id of the model
|
27
|
+
def get!(id)
|
28
|
+
klass.get!(id)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Find the first instance matching conditions
|
32
|
+
def find_first(conditions)
|
33
|
+
klass.first(conditions)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Find all models matching conditions
|
37
|
+
def find_all(conditions)
|
38
|
+
klass.all(conditions)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Create a model using attributes
|
42
|
+
def create!(attributes)
|
43
|
+
klass.create(attributes)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'mongoid'
|
2
|
+
|
3
|
+
module Mongoid
|
4
|
+
module Document
|
5
|
+
module ClassMethods
|
6
|
+
include OrmAdapter::ToAdapter
|
7
|
+
end
|
8
|
+
|
9
|
+
class OrmAdapter < ::OrmAdapter::Base
|
10
|
+
# Do not consider these to be part of the class list
|
11
|
+
def self.except_classes
|
12
|
+
@@except_classes ||= []
|
13
|
+
end
|
14
|
+
|
15
|
+
# Gets a list of the available models for this adapter
|
16
|
+
def self.model_classes
|
17
|
+
ObjectSpace.each_object(Class).to_a.select {|klass| klass.ancestors.include? Mongoid::Document}
|
18
|
+
end
|
19
|
+
|
20
|
+
# get a list of column names for a given class
|
21
|
+
def column_names
|
22
|
+
klass.fields.keys
|
23
|
+
end
|
24
|
+
|
25
|
+
# Get an instance by id of the model
|
26
|
+
def get!(id)
|
27
|
+
klass.find(id)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Find the first instance matching conditions
|
31
|
+
def find_first(conditions)
|
32
|
+
klass.first(:conditions => conditions_to_fields(conditions))
|
33
|
+
end
|
34
|
+
|
35
|
+
# Find all models matching conditions
|
36
|
+
def find_all(conditions)
|
37
|
+
klass.all(:conditions => conditions_to_fields(conditions))
|
38
|
+
end
|
39
|
+
|
40
|
+
# Create a model with given attributes
|
41
|
+
def create!(attributes)
|
42
|
+
klass.create!(attributes)
|
43
|
+
end
|
44
|
+
|
45
|
+
protected
|
46
|
+
|
47
|
+
# converts and documents to ids
|
48
|
+
def conditions_to_fields(conditions)
|
49
|
+
conditions.inject({}) do |fields, (key, value)|
|
50
|
+
if value.is_a?(Mongoid::Document) && klass.fields.keys.include?("#{key}_id")
|
51
|
+
fields.merge("#{key}_id" => value.id)
|
52
|
+
else
|
53
|
+
fields.merge(key => value)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module OrmAdapter
|
2
|
+
class Base
|
3
|
+
attr_reader :klass
|
4
|
+
|
5
|
+
# Your ORM adapter needs to inherit from this Base class and its adapter
|
6
|
+
# will be registered. To create an adapter you should create an inner
|
7
|
+
# constant "OrmAdapter" e.g. ActiveRecord::Base::OrmAdapter
|
8
|
+
#
|
9
|
+
# @see orm_adapters/active_record
|
10
|
+
# @see orm_adapters/datamapper
|
11
|
+
# @see orm_adapters/mongoid
|
12
|
+
def self.inherited(adapter)
|
13
|
+
OrmAdapter.adapters << adapter
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
# Gets a list of the available models for this adapter
|
18
|
+
def self.model_classes
|
19
|
+
raise NotImplementedError, "return a list of available models for this adapter"
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(klass)
|
23
|
+
@klass = klass
|
24
|
+
end
|
25
|
+
|
26
|
+
# Get a list of column/property/field names
|
27
|
+
def column_names
|
28
|
+
raise NotSupportedError
|
29
|
+
end
|
30
|
+
|
31
|
+
# Get an instance by id of the model
|
32
|
+
def get!(id)
|
33
|
+
raise NotSupportedError
|
34
|
+
end
|
35
|
+
|
36
|
+
# Find the first instance matching conditions
|
37
|
+
def find_first(conditions)
|
38
|
+
raise NotSupportedError
|
39
|
+
end
|
40
|
+
|
41
|
+
# Find all models matching conditions
|
42
|
+
def find_all(conditions)
|
43
|
+
raise NotSupportedError
|
44
|
+
end
|
45
|
+
|
46
|
+
# Create a model using attributes
|
47
|
+
def create!(attributes)
|
48
|
+
raise NotSupportedError
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class NotSupportedError < RuntimeError
|
53
|
+
def to_s
|
54
|
+
"method not supported by this orm adapter"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module OrmAdapter
|
4
|
+
module Version
|
5
|
+
Hash = YAML.load_file(File.dirname(__FILE__) + '/../../VERSION.yml')
|
6
|
+
Major = Hash[:major]
|
7
|
+
Minor = Hash[:minor]
|
8
|
+
Patch = Hash[:patch]
|
9
|
+
Build = Hash[:build]
|
10
|
+
String = "#{Major}.#{Minor}.#{Patch}#{".#{Build}" if Build}"
|
11
|
+
|
12
|
+
def self.to_s
|
13
|
+
String
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/orm_adapter.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'orm_adapter/base'
|
2
|
+
require 'orm_adapter/to_adapter'
|
3
|
+
require 'orm_adapter/version'
|
4
|
+
|
5
|
+
module OrmAdapter
|
6
|
+
# A collection of registered adapters
|
7
|
+
def self.adapters
|
8
|
+
@@adapters ||= []
|
9
|
+
end
|
10
|
+
|
11
|
+
# All model classes from all registered adapters
|
12
|
+
def self.model_classes
|
13
|
+
self.adapters.map { |a| a.model_classes }.flatten
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
require 'orm_adapter/adapters/active_record' if defined?(ActiveRecord::Base)
|
18
|
+
require 'orm_adapter/adapters/data_mapper' if defined?(DataMapper::Resource)
|
19
|
+
require 'orm_adapter/adapters/mongoid' if defined?(Mongoid::Document)
|
data/orm_adapter.gemspec
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{orm_adapter}
|
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 = ["Ian White", "Jose Valim"]
|
12
|
+
s.date = %q{2010-10-06}
|
13
|
+
s.description = %q{Provides a single point of entry for using basic features of ruby ORMs}
|
14
|
+
s.email = %q{ian.w.white@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".gitignore",
|
21
|
+
"Gemfile",
|
22
|
+
"Gemfile.lock",
|
23
|
+
"History.txt",
|
24
|
+
"LICENSE",
|
25
|
+
"README.rdoc",
|
26
|
+
"Rakefile",
|
27
|
+
"VERSION.yml",
|
28
|
+
"lib/orm_adapter.rb",
|
29
|
+
"lib/orm_adapter/adapters/active_record.rb",
|
30
|
+
"lib/orm_adapter/adapters/data_mapper.rb",
|
31
|
+
"lib/orm_adapter/adapters/mongoid.rb",
|
32
|
+
"lib/orm_adapter/base.rb",
|
33
|
+
"lib/orm_adapter/to_adapter.rb",
|
34
|
+
"lib/orm_adapter/version.rb",
|
35
|
+
"orm_adapter.gemspec",
|
36
|
+
"spec/orm_adapter/adapters/active_record_spec.rb",
|
37
|
+
"spec/orm_adapter/adapters/data_mapper_spec.rb",
|
38
|
+
"spec/orm_adapter/adapters/mongoid_spec.rb",
|
39
|
+
"spec/orm_adapter_spec.rb",
|
40
|
+
"spec/spec_helper.rb"
|
41
|
+
]
|
42
|
+
s.homepage = %q{http://github.com/ianwhite/orm_adapter}
|
43
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
44
|
+
s.require_paths = ["lib"]
|
45
|
+
s.rubygems_version = %q{1.3.7}
|
46
|
+
s.summary = %q{Provides a single point of entry for using basic features of ruby ORMs}
|
47
|
+
s.test_files = [
|
48
|
+
"spec/orm_adapter/adapters/active_record_spec.rb",
|
49
|
+
"spec/orm_adapter/adapters/data_mapper_spec.rb",
|
50
|
+
"spec/orm_adapter/adapters/mongoid_spec.rb",
|
51
|
+
"spec/orm_adapter_spec.rb",
|
52
|
+
"spec/spec_helper.rb"
|
53
|
+
]
|
54
|
+
|
55
|
+
if s.respond_to? :specification_version then
|
56
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
57
|
+
s.specification_version = 3
|
58
|
+
|
59
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
60
|
+
else
|
61
|
+
end
|
62
|
+
else
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
if !defined?(ActiveRecord::Base)
|
4
|
+
puts "** require 'active_record' to run the specs in #{__FILE__}"
|
5
|
+
else
|
6
|
+
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ":memory:")
|
7
|
+
|
8
|
+
ActiveRecord::Migration.suppress_messages do
|
9
|
+
ActiveRecord::Schema.define(:version => 0) do
|
10
|
+
create_table(:users, :force => true) {|t| t.string :name; t.belongs_to :site }
|
11
|
+
create_table(:sites, :force => true) {|t| t.string :name }
|
12
|
+
create_table(:notes, :force => true) {|t| t.belongs_to :owner, :polymorphic => true }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module ArOrmSpec
|
17
|
+
class User < ActiveRecord::Base
|
18
|
+
belongs_to :site, :class_name => "ArOrmSpec::Site"
|
19
|
+
has_many :ar_notes, :as => :owner
|
20
|
+
end
|
21
|
+
|
22
|
+
class Site < ActiveRecord::Base
|
23
|
+
has_many :users, :class_name => 'ArOrmSpec::User'
|
24
|
+
has_many :notes, :as => :owner, :class_name => 'ArOrmSpec::Note'
|
25
|
+
end
|
26
|
+
|
27
|
+
class AbstractNoteClass < ActiveRecord::Base
|
28
|
+
self.abstract_class = true
|
29
|
+
end
|
30
|
+
|
31
|
+
class Note < AbstractNoteClass
|
32
|
+
belongs_to :owner, :polymorphic => true
|
33
|
+
end
|
34
|
+
|
35
|
+
# here be the specs!
|
36
|
+
describe ActiveRecord::Base::OrmAdapter do
|
37
|
+
before do
|
38
|
+
User.delete_all
|
39
|
+
Note.delete_all
|
40
|
+
Site.delete_all
|
41
|
+
end
|
42
|
+
|
43
|
+
subject { ActiveRecord::Base::OrmAdapter }
|
44
|
+
|
45
|
+
specify "except_classes should return the names of active record session store classes" do
|
46
|
+
subject.except_classes.should == ["CGI::Session::ActiveRecordStore::Session", "ActiveRecord::SessionStore::Session"]
|
47
|
+
end
|
48
|
+
|
49
|
+
specify "model_classes should return all of the non abstract model classes (that are not in except_classes)" do
|
50
|
+
subject.model_classes.should == [User, Site, Note]
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "get!(id)" do
|
54
|
+
specify "should return the instance of klass with id if it exists" do
|
55
|
+
user = User.create!
|
56
|
+
User.to_adapter.get!(user.id).should == user
|
57
|
+
end
|
58
|
+
|
59
|
+
specify "should raise an error if the klass does not have an instance with that id" do
|
60
|
+
lambda { User.to_adapter.get!(1) }.should raise_error
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "find_first(klass, conditions)" do
|
65
|
+
specify "should return first model matching conditions, if it exists" do
|
66
|
+
user = User.create! :name => "Fred"
|
67
|
+
User.to_adapter.find_first(:name => "Fred").should == user
|
68
|
+
end
|
69
|
+
|
70
|
+
specify "should return nil if no conditions match" do
|
71
|
+
User.to_adapter.find_first(:name => "Betty").should == nil
|
72
|
+
end
|
73
|
+
|
74
|
+
specify "should handle belongs_to objects in attributes hash" do
|
75
|
+
site = Site.create!
|
76
|
+
user = User.create! :name => "Fred", :site => site
|
77
|
+
User.to_adapter.find_first(:site => site).should == user
|
78
|
+
end
|
79
|
+
|
80
|
+
specify "should handle belongs_to :polymorphic objects in attributes hash" do
|
81
|
+
site = Site.create!
|
82
|
+
note = Note.create! :owner => site
|
83
|
+
Note.to_adapter.find_first(:owner => site).should == note
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "find_all(klass, conditions)" do
|
88
|
+
specify "should return all models matching conditions" do
|
89
|
+
user1 = User.create! :name => "Fred"
|
90
|
+
user2 = User.create! :name => "Fred"
|
91
|
+
user3 = User.create! :name => "Betty"
|
92
|
+
User.to_adapter.find_all(:name => "Fred").should == [user1, user2]
|
93
|
+
end
|
94
|
+
|
95
|
+
specify "should return empty array if no conditions match" do
|
96
|
+
User.to_adapter.find_all(:name => "Betty").should == []
|
97
|
+
end
|
98
|
+
|
99
|
+
specify "should handle belongs_to objects in conditions hash" do
|
100
|
+
site1, site2 = Site.create!, Site.create!
|
101
|
+
user1, user2 = User.create!(:site => site1), User.create!(:site => site2)
|
102
|
+
User.to_adapter.find_all(:site => site1).should == [user1]
|
103
|
+
end
|
104
|
+
|
105
|
+
specify "should handle polymorphic belongs_to objects in conditions hash" do
|
106
|
+
site1, site2 = Site.create!, Site.create!
|
107
|
+
note1, note2 = site1.notes.create!, site2.notes.create!
|
108
|
+
Note.to_adapter.find_all(:owner => site1).should == [note1]
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe "create!(klass, attributes)" do
|
113
|
+
it "should create a model using the given attributes" do
|
114
|
+
User.to_adapter.create!(:name => "Fred")
|
115
|
+
User.last.name.should == "Fred"
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should raise error if the create fails" do
|
119
|
+
lambda { User.to_adapter.create!(:non_existent => true) }.should raise_error
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should handle belongs_to objects in attributes hash" do
|
123
|
+
site = Site.create!
|
124
|
+
User.to_adapter.create!(:site => site)
|
125
|
+
User.last.site.should == site
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should handle polymorphic belongs_to objects in attributes hash" do
|
129
|
+
site = Site.create!
|
130
|
+
Note.to_adapter.create!(:owner => site)
|
131
|
+
Note.last.owner.should == site
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should handle has_many objects in attributes hash" do
|
135
|
+
users = [User.create!, User.create!]
|
136
|
+
Site.to_adapter.create!(:users => users)
|
137
|
+
Site.last.users.should == users
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
describe "<model class>#to_adapter" do
|
142
|
+
it "should return an adapter instance for the receiver" do
|
143
|
+
User.to_adapter.should be_a(OrmAdapter::Base)
|
144
|
+
User.to_adapter.klass.should == User
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
if !defined?(DataMapper)
|
4
|
+
puts "** require 'dm-core' to run the specs in #{__FILE__}"
|
5
|
+
else
|
6
|
+
|
7
|
+
DataMapper.setup(:default, 'sqlite::memory:')
|
8
|
+
|
9
|
+
module DmOrmSpec
|
10
|
+
class User
|
11
|
+
include DataMapper::Resource
|
12
|
+
property :id, Serial
|
13
|
+
property :name, String
|
14
|
+
has n, :notes, :child_key => [:owner_id]
|
15
|
+
end
|
16
|
+
|
17
|
+
class Note
|
18
|
+
include DataMapper::Resource
|
19
|
+
property :id, Serial
|
20
|
+
property :body, String
|
21
|
+
belongs_to :owner, 'User'
|
22
|
+
end
|
23
|
+
|
24
|
+
require 'dm-migrations'
|
25
|
+
DataMapper.finalize
|
26
|
+
DataMapper.auto_migrate!
|
27
|
+
|
28
|
+
# here be the specs!
|
29
|
+
describe DataMapper::Resource::OrmAdapter do
|
30
|
+
before do
|
31
|
+
User.destroy
|
32
|
+
Note.destroy
|
33
|
+
end
|
34
|
+
|
35
|
+
subject { DataMapper::Resource::OrmAdapter }
|
36
|
+
|
37
|
+
specify "model_classes should return all of datamapper resources" do
|
38
|
+
subject.model_classes.should == [User, Note]
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "get!(klass, id)" do
|
42
|
+
specify "should return the instance of klass with id if it exists" do
|
43
|
+
user = User.create!
|
44
|
+
User.to_adapter.get!(user.id).should == user
|
45
|
+
end
|
46
|
+
|
47
|
+
specify "should raise an error if the klass does not have an instance with that id" do
|
48
|
+
lambda { User.to_adapter.get!(1) }.should raise_error
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "find_first(klass, conditions)" do
|
53
|
+
specify "should return first model matching conditions, if it exists" do
|
54
|
+
user = User.create! :name => "Fred"
|
55
|
+
User.to_adapter.find_first(:name => "Fred").should == user
|
56
|
+
end
|
57
|
+
|
58
|
+
specify "should return nil if no conditions match" do
|
59
|
+
User.to_adapter.find_first(:name => "Betty").should == nil
|
60
|
+
end
|
61
|
+
|
62
|
+
specify "should handle belongs_to objects in attributes hash" do
|
63
|
+
user = User.create!
|
64
|
+
note = Note.create! :owner => user
|
65
|
+
Note.to_adapter.find_first(:owner => user).should == note
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "find_all(klass, conditions)" do
|
70
|
+
specify "should return all models matching conditions" do
|
71
|
+
user1 = User.create! :name => "Fred"
|
72
|
+
user2 = User.create! :name => "Fred"
|
73
|
+
user3 = User.create! :name => "Betty"
|
74
|
+
User.to_adapter.find_all(:name => "Fred").should == [user1, user2]
|
75
|
+
end
|
76
|
+
|
77
|
+
specify "should return empty array if no conditions match" do
|
78
|
+
User.to_adapter.find_all(:name => "Betty").should == []
|
79
|
+
end
|
80
|
+
|
81
|
+
specify "should handle belongs_to objects in conditions hash" do
|
82
|
+
user1, user2 = User.create!, User.create!
|
83
|
+
note1, note2 = user1.notes.create!, user2.notes.create!
|
84
|
+
Note.to_adapter.find_all(:owner => user1).should == [note1]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "create!(klass, attributes)" do
|
89
|
+
it "should create a model using the given attributes" do
|
90
|
+
User.to_adapter.create!(:name => "Fred")
|
91
|
+
User.last.name.should == "Fred"
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should raise error if the create fails" do
|
95
|
+
lambda { subject.create!(:non_existent => true) }.should raise_error
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should handle belongs_to objects in attributes hash" do
|
99
|
+
user = User.create!
|
100
|
+
Note.to_adapter.create!(:owner => user)
|
101
|
+
Note.last.owner.should == user
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should handle has_many objects in attributes hash" do
|
105
|
+
notes = [Note.create!, Note.create!]
|
106
|
+
User.to_adapter.create!(:notes => notes)
|
107
|
+
User.last.notes.should == notes
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe "<model class>#to_adapter" do
|
112
|
+
it "should return an adapter instance for the receiver" do
|
113
|
+
User.to_adapter.should be_a(OrmAdapter::Base)
|
114
|
+
User.to_adapter.klass.should == User
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
if !defined?(Mongoid) || !(Mongo::Connection.new.db('orm_adapter_spec') rescue nil)
|
4
|
+
puts "** require 'mongoid' start mongod to run the specs in #{__FILE__}"
|
5
|
+
else
|
6
|
+
|
7
|
+
Mongoid.configure do |config|
|
8
|
+
config.master = Mongo::Connection.new.db('orm_adapter_spec')
|
9
|
+
end
|
10
|
+
|
11
|
+
module MongoidOrmSpec
|
12
|
+
class User
|
13
|
+
include Mongoid::Document
|
14
|
+
field :name
|
15
|
+
has_many_related :notes, :foreign_key => :owner_id, :class_name => 'MongoidOrmSpec::Note'
|
16
|
+
end
|
17
|
+
|
18
|
+
class Note
|
19
|
+
include Mongoid::Document
|
20
|
+
field :body, :default => "made by orm"
|
21
|
+
belongs_to_related :owner, :class_name => 'MongoidOrmSpec::User'
|
22
|
+
end
|
23
|
+
|
24
|
+
# here be the specs!
|
25
|
+
describe Mongoid::Document::OrmAdapter do
|
26
|
+
before do
|
27
|
+
User.delete_all
|
28
|
+
Note.delete_all
|
29
|
+
end
|
30
|
+
|
31
|
+
subject { Mongoid::Document::OrmAdapter }
|
32
|
+
|
33
|
+
specify "model_classes should return all of mongoid resources" do
|
34
|
+
(subject.model_classes & [User, Note]).to_set.should == [User, Note].to_set
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "get!(klass, id)" do
|
38
|
+
specify "should return the instance of klass with id if it exists" do
|
39
|
+
user = User.create!
|
40
|
+
User.to_adapter.get!(user.id).should == user
|
41
|
+
end
|
42
|
+
|
43
|
+
specify "should raise an error if the klass does not have an instance with that id" do
|
44
|
+
lambda { User.to_adapter.get!(1) }.should raise_error
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "find_first(klass, conditions)" do
|
49
|
+
specify "should return first model matching conditions, if it exists" do
|
50
|
+
user = User.create! :name => "Fred"
|
51
|
+
User.to_adapter.find_first(:name => "Fred").should == user
|
52
|
+
end
|
53
|
+
|
54
|
+
specify "should return nil if no conditions match" do
|
55
|
+
User.to_adapter.find_first(:name => "Betty").should == nil
|
56
|
+
end
|
57
|
+
|
58
|
+
specify "should handle belongs_to objects in attributes hash" do
|
59
|
+
user = User.create!
|
60
|
+
note = Note.create! :owner => user
|
61
|
+
Note.to_adapter.find_first(:owner => user).should == note
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "find_all(klass, conditions)" do
|
66
|
+
specify "should return all models matching conditions" do
|
67
|
+
user1 = User.create! :name => "Fred"
|
68
|
+
user2 = User.create! :name => "Fred"
|
69
|
+
user3 = User.create! :name => "Betty"
|
70
|
+
User.to_adapter.find_all(:name => "Fred").should == [user1, user2]
|
71
|
+
end
|
72
|
+
|
73
|
+
specify "should return empty array if no conditions match" do
|
74
|
+
User.to_adapter.find_all(:name => "Betty").should == []
|
75
|
+
end
|
76
|
+
|
77
|
+
specify "should handle belongs_to objects in conditions hash" do
|
78
|
+
user1, user2 = User.create!, User.create!
|
79
|
+
note1, note2 = Note.create!(:owner_id => user1.id), Note.create!(:owner_id => user2.id)
|
80
|
+
Note.to_adapter.find_all(:owner => user1).should == [note1]
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "create!(klass, attributes)" do
|
85
|
+
it "should create a model using the given attributes" do
|
86
|
+
User.to_adapter.create!(:name => "Fred")
|
87
|
+
User.last.name.should == "Fred"
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should raise error if the create fails" do
|
91
|
+
lambda { User.to_adapter.create!(foo) }.should raise_error
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should handle belongs_to objects in attributes hash" do
|
95
|
+
user = User.create!
|
96
|
+
Note.to_adapter.create!(:owner => user)
|
97
|
+
Note.last.owner.should == user
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "<model class>#to_adapter" do
|
102
|
+
it "should return an adapter instance for the receiver" do
|
103
|
+
User.to_adapter.should be_a(OrmAdapter::Base)
|
104
|
+
User.to_adapter.klass.should == User
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OrmAdapter do
|
4
|
+
subject { OrmAdapter }
|
5
|
+
|
6
|
+
describe "when a new adapter is created (by inheriting form OrmAdapter::Base)" do
|
7
|
+
let!(:adapter) { Class.new(OrmAdapter::Base) }
|
8
|
+
|
9
|
+
its(:adapters) { should include(adapter) }
|
10
|
+
|
11
|
+
describe "and the adapter has a model class" do
|
12
|
+
let(:model) { mock('model class') }
|
13
|
+
|
14
|
+
before { adapter.stub!(:model_classes).and_return([model]) }
|
15
|
+
|
16
|
+
its(:model_classes) { should include(model) }
|
17
|
+
end
|
18
|
+
|
19
|
+
after { OrmAdapter.adapters.delete(adapter) }
|
20
|
+
end
|
21
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rspec'
|
3
|
+
|
4
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
5
|
+
|
6
|
+
['dm-core', 'mongoid', 'active_record'].each do |orm|
|
7
|
+
begin
|
8
|
+
require orm
|
9
|
+
rescue LoadError
|
10
|
+
puts "#{orm} not available"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
require 'orm_adapter'
|
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: orm_adapter
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Ian White
|
14
|
+
- Jose Valim
|
15
|
+
autorequire:
|
16
|
+
bindir: bin
|
17
|
+
cert_chain: []
|
18
|
+
|
19
|
+
date: 2010-10-06 00:00:00 +01:00
|
20
|
+
default_executable:
|
21
|
+
dependencies: []
|
22
|
+
|
23
|
+
description: Provides a single point of entry for using basic features of ruby ORMs
|
24
|
+
email: ian.w.white@gmail.com
|
25
|
+
executables: []
|
26
|
+
|
27
|
+
extensions: []
|
28
|
+
|
29
|
+
extra_rdoc_files:
|
30
|
+
- LICENSE
|
31
|
+
- README.rdoc
|
32
|
+
files:
|
33
|
+
- .gitignore
|
34
|
+
- Gemfile
|
35
|
+
- Gemfile.lock
|
36
|
+
- History.txt
|
37
|
+
- LICENSE
|
38
|
+
- README.rdoc
|
39
|
+
- Rakefile
|
40
|
+
- VERSION.yml
|
41
|
+
- lib/orm_adapter.rb
|
42
|
+
- lib/orm_adapter/adapters/active_record.rb
|
43
|
+
- lib/orm_adapter/adapters/data_mapper.rb
|
44
|
+
- lib/orm_adapter/adapters/mongoid.rb
|
45
|
+
- lib/orm_adapter/base.rb
|
46
|
+
- lib/orm_adapter/to_adapter.rb
|
47
|
+
- lib/orm_adapter/version.rb
|
48
|
+
- orm_adapter.gemspec
|
49
|
+
- spec/orm_adapter/adapters/active_record_spec.rb
|
50
|
+
- spec/orm_adapter/adapters/data_mapper_spec.rb
|
51
|
+
- spec/orm_adapter/adapters/mongoid_spec.rb
|
52
|
+
- spec/orm_adapter_spec.rb
|
53
|
+
- spec/spec_helper.rb
|
54
|
+
has_rdoc: true
|
55
|
+
homepage: http://github.com/ianwhite/orm_adapter
|
56
|
+
licenses: []
|
57
|
+
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options:
|
60
|
+
- --charset=UTF-8
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
hash: 3
|
69
|
+
segments:
|
70
|
+
- 0
|
71
|
+
version: "0"
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
hash: 3
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
version: "0"
|
81
|
+
requirements: []
|
82
|
+
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 1.3.7
|
85
|
+
signing_key:
|
86
|
+
specification_version: 3
|
87
|
+
summary: Provides a single point of entry for using basic features of ruby ORMs
|
88
|
+
test_files:
|
89
|
+
- spec/orm_adapter/adapters/active_record_spec.rb
|
90
|
+
- spec/orm_adapter/adapters/data_mapper_spec.rb
|
91
|
+
- spec/orm_adapter/adapters/mongoid_spec.rb
|
92
|
+
- spec/orm_adapter_spec.rb
|
93
|
+
- spec/spec_helper.rb
|