datamapper 0.3.2 → 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +0 -0
- data/Manifest.txt +5 -0
- data/README.txt +11 -0
- data/Rakefile +70 -0
- data/lib/datamapper.rb +8 -0
- metadata +152 -319
- data/CHANGELOG +0 -145
- data/FAQ +0 -96
- data/MIT-LICENSE +0 -22
- data/QUICKLINKS +0 -12
- data/README +0 -105
- data/environment.rb +0 -62
- data/example.rb +0 -156
- data/lib/data_mapper.rb +0 -88
- data/lib/data_mapper/adapters/abstract_adapter.rb +0 -43
- data/lib/data_mapper/adapters/data_object_adapter.rb +0 -480
- data/lib/data_mapper/adapters/mysql_adapter.rb +0 -72
- data/lib/data_mapper/adapters/postgresql_adapter.rb +0 -258
- data/lib/data_mapper/adapters/sql/coersion.rb +0 -134
- data/lib/data_mapper/adapters/sql/commands/load_command.rb +0 -545
- data/lib/data_mapper/adapters/sql/mappings/associations_set.rb +0 -34
- data/lib/data_mapper/adapters/sql/mappings/column.rb +0 -279
- data/lib/data_mapper/adapters/sql/mappings/conditions.rb +0 -172
- data/lib/data_mapper/adapters/sql/mappings/schema.rb +0 -60
- data/lib/data_mapper/adapters/sql/mappings/table.rb +0 -459
- data/lib/data_mapper/adapters/sql/quoting.rb +0 -24
- data/lib/data_mapper/adapters/sqlite3_adapter.rb +0 -159
- data/lib/data_mapper/associations.rb +0 -106
- data/lib/data_mapper/associations/belongs_to_association.rb +0 -160
- data/lib/data_mapper/associations/has_and_belongs_to_many_association.rb +0 -437
- data/lib/data_mapper/associations/has_many_association.rb +0 -283
- data/lib/data_mapper/associations/has_n_association.rb +0 -143
- data/lib/data_mapper/associations/reference.rb +0 -47
- data/lib/data_mapper/attributes.rb +0 -73
- data/lib/data_mapper/auto_migrations.rb +0 -36
- data/lib/data_mapper/base.rb +0 -17
- data/lib/data_mapper/callbacks.rb +0 -107
- data/lib/data_mapper/context.rb +0 -112
- data/lib/data_mapper/database.rb +0 -234
- data/lib/data_mapper/dependency_queue.rb +0 -28
- data/lib/data_mapper/embedded_value.rb +0 -145
- data/lib/data_mapper/identity_map.rb +0 -47
- data/lib/data_mapper/is/tree.rb +0 -121
- data/lib/data_mapper/migration.rb +0 -155
- data/lib/data_mapper/persistence.rb +0 -852
- data/lib/data_mapper/property.rb +0 -310
- data/lib/data_mapper/query.rb +0 -164
- data/lib/data_mapper/support/blank.rb +0 -35
- data/lib/data_mapper/support/connection_pool.rb +0 -117
- data/lib/data_mapper/support/enumerable.rb +0 -35
- data/lib/data_mapper/support/errors.rb +0 -16
- data/lib/data_mapper/support/inflector.rb +0 -265
- data/lib/data_mapper/support/object.rb +0 -54
- data/lib/data_mapper/support/serialization.rb +0 -96
- data/lib/data_mapper/support/silence.rb +0 -10
- data/lib/data_mapper/support/string.rb +0 -72
- data/lib/data_mapper/support/struct.rb +0 -7
- data/lib/data_mapper/support/symbol.rb +0 -82
- data/lib/data_mapper/support/typed_set.rb +0 -65
- data/lib/data_mapper/types/base.rb +0 -44
- data/lib/data_mapper/types/string.rb +0 -34
- data/lib/data_mapper/validatable_extensions/errors.rb +0 -12
- data/lib/data_mapper/validatable_extensions/macros.rb +0 -7
- data/lib/data_mapper/validatable_extensions/validatable_instance_methods.rb +0 -62
- data/lib/data_mapper/validatable_extensions/validation_base.rb +0 -18
- data/lib/data_mapper/validatable_extensions/validations/formats/email.rb +0 -43
- data/lib/data_mapper/validatable_extensions/validations/validates_acceptance_of.rb +0 -7
- data/lib/data_mapper/validatable_extensions/validations/validates_confirmation_of.rb +0 -7
- data/lib/data_mapper/validatable_extensions/validations/validates_each.rb +0 -7
- data/lib/data_mapper/validatable_extensions/validations/validates_format_of.rb +0 -28
- data/lib/data_mapper/validatable_extensions/validations/validates_length_of.rb +0 -15
- data/lib/data_mapper/validatable_extensions/validations/validates_numericality_of.rb +0 -7
- data/lib/data_mapper/validatable_extensions/validations/validates_presence_of.rb +0 -7
- data/lib/data_mapper/validatable_extensions/validations/validates_true_for.rb +0 -7
- data/lib/data_mapper/validatable_extensions/validations/validates_uniqueness_of.rb +0 -40
- data/lib/data_mapper/validations.rb +0 -20
- data/lib/data_mapper/validations/number_validator.rb +0 -40
- data/lib/data_mapper/validations/string_validator.rb +0 -20
- data/lib/data_mapper/validations/validator.rb +0 -13
- data/performance.rb +0 -307
- data/plugins/can_has_sphinx/LICENSE +0 -23
- data/plugins/can_has_sphinx/README +0 -4
- data/plugins/can_has_sphinx/REVISION +0 -1
- data/plugins/can_has_sphinx/Rakefile +0 -22
- data/plugins/can_has_sphinx/init.rb +0 -1
- data/plugins/can_has_sphinx/install.rb +0 -1
- data/plugins/can_has_sphinx/lib/acts_as_sphinx.rb +0 -123
- data/plugins/can_has_sphinx/lib/sphinx.rb +0 -460
- data/plugins/can_has_sphinx/scripts/sphinx.sh +0 -47
- data/plugins/can_has_sphinx/tasks/acts_as_sphinx_tasks.rake +0 -41
- data/profile_data_mapper.rb +0 -40
- data/rakefile.rb +0 -159
- data/spec/acts_as_tree_spec.rb +0 -67
- data/spec/adapters/data_object_adapter_spec.rb +0 -31
- data/spec/associations/belongs_to_association_spec.rb +0 -98
- data/spec/associations/has_and_belongs_to_many_association_spec.rb +0 -377
- data/spec/associations/has_many_association_spec.rb +0 -337
- data/spec/attributes_spec.rb +0 -52
- data/spec/auto_migrations_spec.rb +0 -101
- data/spec/callbacks_spec.rb +0 -186
- data/spec/can_has_sphinx.rb +0 -5
- data/spec/coersion_spec.rb +0 -41
- data/spec/column_spec.rb +0 -114
- data/spec/count_command_spec.rb +0 -45
- data/spec/database_spec.rb +0 -18
- data/spec/dataobjects_spec.rb +0 -27
- data/spec/delete_command_spec.rb +0 -11
- data/spec/dependency_spec.rb +0 -29
- data/spec/embedded_value_spec.rb +0 -161
- data/spec/fixtures/animals.yaml +0 -33
- data/spec/fixtures/animals_exhibits.yaml +0 -2
- data/spec/fixtures/careers.yaml +0 -5
- data/spec/fixtures/comments.yaml +0 -1
- data/spec/fixtures/exhibits.yaml +0 -90
- data/spec/fixtures/fruit.yaml +0 -6
- data/spec/fixtures/people.yaml +0 -37
- data/spec/fixtures/posts.yaml +0 -3
- data/spec/fixtures/projects.yaml +0 -13
- data/spec/fixtures/sections.yaml +0 -5
- data/spec/fixtures/serializers.yaml +0 -6
- data/spec/fixtures/tasks.yaml +0 -6
- data/spec/fixtures/tasks_tasks.yaml +0 -2
- data/spec/fixtures/tomatoes.yaml +0 -1
- data/spec/fixtures/users.yaml +0 -1
- data/spec/fixtures/zoos.yaml +0 -24
- data/spec/is_a_tree_spec.rb +0 -149
- data/spec/legacy_spec.rb +0 -16
- data/spec/load_command_spec.rb +0 -322
- data/spec/magic_columns_spec.rb +0 -26
- data/spec/migration_spec.rb +0 -267
- data/spec/mock_adapter.rb +0 -20
- data/spec/models/animal.rb +0 -12
- data/spec/models/candidate.rb +0 -8
- data/spec/models/career.rb +0 -7
- data/spec/models/chain.rb +0 -8
- data/spec/models/comment.rb +0 -6
- data/spec/models/exhibit.rb +0 -14
- data/spec/models/fence.rb +0 -7
- data/spec/models/fruit.rb +0 -8
- data/spec/models/job.rb +0 -8
- data/spec/models/person.rb +0 -30
- data/spec/models/post.rb +0 -14
- data/spec/models/project.rb +0 -41
- data/spec/models/sales_person.rb +0 -5
- data/spec/models/section.rb +0 -8
- data/spec/models/serializer.rb +0 -5
- data/spec/models/task.rb +0 -9
- data/spec/models/tomato.rb +0 -27
- data/spec/models/user.rb +0 -12
- data/spec/models/zoo.rb +0 -13
- data/spec/natural_key_spec.rb +0 -36
- data/spec/paranoia_spec.rb +0 -38
- data/spec/persistence_spec.rb +0 -479
- data/spec/postgres_spec.rb +0 -96
- data/spec/property_spec.rb +0 -151
- data/spec/query_spec.rb +0 -77
- data/spec/save_command_spec.rb +0 -94
- data/spec/schema_spec.rb +0 -8
- data/spec/serialize_spec.rb +0 -19
- data/spec/single_table_inheritance_spec.rb +0 -43
- data/spec/spec_helper.rb +0 -45
- data/spec/support/blank_spec.rb +0 -8
- data/spec/support/inflector_spec.rb +0 -41
- data/spec/support/object_spec.rb +0 -9
- data/spec/support/serialization_spec.rb +0 -61
- data/spec/support/silence_spec.rb +0 -15
- data/spec/support/string_spec.rb +0 -7
- data/spec/support/struct_spec.rb +0 -12
- data/spec/support/typed_set_spec.rb +0 -66
- data/spec/symbolic_operators_spec.rb +0 -27
- data/spec/table_spec.rb +0 -79
- data/spec/types/string.rb +0 -81
- data/spec/validates_confirmation_of_spec.rb +0 -55
- data/spec/validates_format_of_spec.rb +0 -78
- data/spec/validates_length_of_spec.rb +0 -117
- data/spec/validates_uniqueness_of_spec.rb +0 -92
- data/spec/validations/number_validator.rb +0 -59
- data/spec/validations/string_validator.rb +0 -14
- data/spec/validations_spec.rb +0 -141
- data/tasks/fixtures.rb +0 -53
data/spec/postgres_spec.rb
DELETED
@@ -1,96 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
-
|
3
|
-
# Only run these specs when the ADAPTER env-variable is set to 'postgresql'
|
4
|
-
# You will probably need to set the DATABASE and USERNAME vars as well.
|
5
|
-
if ENV['ADAPTER'] == 'postgresql'
|
6
|
-
|
7
|
-
describe DataMapper::Adapters::PostgresqlAdapter::Mappings::Column do
|
8
|
-
before(:all) do
|
9
|
-
@mappings = DataMapper::Adapters::PostgresqlAdapter::Mappings
|
10
|
-
@table = @mappings::Table.new(database(:mock).adapter, "Zebu")
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should be able to set check-constraints on columns" do
|
14
|
-
column = @mappings::Column.new(database(:mock).adapter, @table, :age,
|
15
|
-
:integer, 1, { :check => "age > 18"})
|
16
|
-
column.to_long_form.should match(/CHECK \(age > 18\)/)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should not set varchar length if none is specified" do
|
20
|
-
column = @mappings::Column.new(database(:mock).adapter, @table,
|
21
|
-
:varchar_len_test, :string, 1, { })
|
22
|
-
column.size.should == nil
|
23
|
-
column.to_long_form.should match(/.varchar_len_test. varchar/)
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should set varchar length when it is specified" do
|
27
|
-
column = @mappings::Column.new(database(:mock).adapter, @table,
|
28
|
-
:varchar_len_test, :string, 1, { :length => 100 })
|
29
|
-
column.size.should == 100
|
30
|
-
column.to_long_form.should match(/.varchar_len_test. varchar\(100\)/)
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should accept :size as alternative to :length" do
|
34
|
-
column = @mappings::Column.new(database(:mock).adapter, @table,
|
35
|
-
:varchar_len_test, :string, 1, { :size => 100 })
|
36
|
-
column.size.should == 100
|
37
|
-
column.to_long_form.should match(/.varchar_len_test. varchar\(100\)/)
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should have size of nil when length of integer is specified" do
|
41
|
-
column = @mappings::Column.new(database(:mock).adapter, @table,
|
42
|
-
:integer_len_test, :integer, 1, { :length => 1 })
|
43
|
-
column.size.should == nil
|
44
|
-
column.to_long_form.should match(/.integer_len_test./)
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should have size of nil when length of integer is not specified, overriding the default" do
|
48
|
-
column = @mappings::Column.new(database(:mock).adapter, @table,
|
49
|
-
:integer_len_test, :integer, 1)
|
50
|
-
column.size.should == nil
|
51
|
-
column.to_long_form.should match(/.integer_len_test./)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe DataMapper::Adapters::PostgresqlAdapter::Mappings::Table do
|
56
|
-
|
57
|
-
before(:all) do
|
58
|
-
class Cage #< DataMapper::Base # please do not remove this
|
59
|
-
include DataMapper::Base
|
60
|
-
|
61
|
-
set_table_name "cages"
|
62
|
-
property :name, :string
|
63
|
-
end
|
64
|
-
|
65
|
-
class CageInSchema #< DataMapper::Base # please do not remove this
|
66
|
-
include DataMapper::Base
|
67
|
-
|
68
|
-
set_table_name "my_schema.cages"
|
69
|
-
property :name, :string
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
it "should return a quoted table name for a simple table" do
|
74
|
-
table_sql = database.adapter.table(Cage).to_sql
|
75
|
-
table_sql.should == "\"cages\""
|
76
|
-
end
|
77
|
-
|
78
|
-
it "should return a quoted schema and table name for a table which specifies a schema" do
|
79
|
-
table_sql = database.adapter.table(CageInSchema).to_sql
|
80
|
-
table_sql.should == "\"my_schema\".\"cages\""
|
81
|
-
end
|
82
|
-
|
83
|
-
it "should search only the specified schema if qualified" do
|
84
|
-
database.save(Cage)
|
85
|
-
database.adapter.table(CageInSchema).exists?.should == false
|
86
|
-
database.save(CageInSchema)
|
87
|
-
database.adapter.table(CageInSchema).exists?.should == true
|
88
|
-
end
|
89
|
-
|
90
|
-
after do
|
91
|
-
database.adapter.execute("DROP SCHEMA my_schema CASCADE") rescue nil
|
92
|
-
end
|
93
|
-
|
94
|
-
end
|
95
|
-
|
96
|
-
end
|
data/spec/property_spec.rb
DELETED
@@ -1,151 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
-
|
3
|
-
describe DataMapper::Property do
|
4
|
-
|
5
|
-
before(:all) do
|
6
|
-
@property = Zoo.properties.find { |property| property.name == :notes }
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should map a column" do
|
10
|
-
@property.column.should eql(database.table(Zoo)[:notes])
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should determine lazyness" do
|
14
|
-
@property.should be_lazy
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should determine protection level" do
|
18
|
-
@property.reader_visibility.should == :public
|
19
|
-
@property.writer_visibility.should == :public
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should return instance variable name" do
|
23
|
-
@property.instance_variable_name.should == database.table(Zoo)[:notes].instance_variable_name
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should add a validates_presence_of for not-null properties" do
|
27
|
-
class NullableZoo #< DataMapper::Base # please do not remove this
|
28
|
-
include DataMapper::Persistence
|
29
|
-
|
30
|
-
property :name, :string, :nullable => false, :default => "Zoo"
|
31
|
-
end
|
32
|
-
zoo = NullableZoo.new
|
33
|
-
zoo.valid?.should == false
|
34
|
-
zoo.name = "Content"
|
35
|
-
zoo.valid?.should == true
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should add a validates_length_of for maximum size" do
|
39
|
-
class SizableZoo #< DataMapper::Base # please do not remove this
|
40
|
-
include DataMapper::Persistence
|
41
|
-
property :name, :string, :length => 50
|
42
|
-
end
|
43
|
-
zoo = SizableZoo.new(:name => "San Diego" * 100)
|
44
|
-
zoo.valid?.should == false
|
45
|
-
zoo.name = "San Diego"
|
46
|
-
zoo.valid?.should == true
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should add a validates_length_of for a range" do
|
50
|
-
class RangableZoo #< DataMapper::Base # please do not remove this
|
51
|
-
include DataMapper::Persistence
|
52
|
-
property :name, :string, :length => 2..255
|
53
|
-
end
|
54
|
-
zoo = RangableZoo.new(:name => "A")
|
55
|
-
zoo.valid?.should == false
|
56
|
-
zoo.name = "Zoo"
|
57
|
-
zoo.valid?.should == true
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should add a validates_format_of if you pass a format option" do
|
61
|
-
class FormatableUser
|
62
|
-
include DataMapper::Persistence
|
63
|
-
property :email, :string, :format => :email_address
|
64
|
-
end
|
65
|
-
user = FormatableUser.new(:email => "incomplete_email")
|
66
|
-
user.valid?.should == false
|
67
|
-
user.email = "complete_email@anonymous.com"
|
68
|
-
user.valid?.should == true
|
69
|
-
end
|
70
|
-
|
71
|
-
it "should not add a validates_presence_of for not-null properties if auto valdations are disabled" do
|
72
|
-
class NullableZoo #< DataMapper::Base # please do not remove this
|
73
|
-
include DataMapper::Persistence
|
74
|
-
property :name, :string, :nullable => false, :default => "Zoo", :auto_validation => false
|
75
|
-
end
|
76
|
-
zoo = NullableZoo.new
|
77
|
-
zoo.errors.empty?.should == true
|
78
|
-
end
|
79
|
-
|
80
|
-
it "should not add a validates_length_of if auto validations are disabled" do
|
81
|
-
class SizableZoo #< DataMapper::Base # please do not remove this
|
82
|
-
include DataMapper::Persistence
|
83
|
-
property :name, :string, :length => 50, :auto_validation => false
|
84
|
-
end
|
85
|
-
zoo = SizableZoo.new(:name => "San Diego" * 100)
|
86
|
-
zoo.errors.empty?.should == true
|
87
|
-
end
|
88
|
-
|
89
|
-
it "should not add a validates_format_of if you pass a format option if auto validations are disabled" do
|
90
|
-
class FormatableUser
|
91
|
-
include DataMapper::Persistence
|
92
|
-
property :email, :string, :format => :email_address, :auto_validation => false
|
93
|
-
end
|
94
|
-
user = FormatableUser.new(:email => "incomplete_email")
|
95
|
-
user.errors.empty?.should == true
|
96
|
-
end
|
97
|
-
|
98
|
-
it "should raise ArgumentError for unsupported types" do
|
99
|
-
lambda {
|
100
|
-
class PersistentFailure #< DataMapper::Base # please do not remove this
|
101
|
-
include DataMapper::Persistence
|
102
|
-
property :created_at, :timestamp
|
103
|
-
end
|
104
|
-
}.should raise_error(ArgumentError)
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
describe DataMapper::Adapters::Sql::Mappings do
|
109
|
-
|
110
|
-
it "should return the same Table instance for two objects mapped to the same database table" do
|
111
|
-
# Refers to the same Table instance
|
112
|
-
database.table(Person) == database.table(SalesPerson)
|
113
|
-
end
|
114
|
-
|
115
|
-
it "should have one super-set of total mapped columns" do
|
116
|
-
# Refers to the mapped columns
|
117
|
-
database.table(Person).columns == database.table(SalesPerson).columns
|
118
|
-
end
|
119
|
-
|
120
|
-
it "should have one set of columns that represents the actual database" do
|
121
|
-
# Refers to the actual columns in the database, which may/are-likely-to-be different
|
122
|
-
# than the mapped columns, sometimes just because your models are dealing with
|
123
|
-
# a legacy database where not every column is mapped to the new model, so this
|
124
|
-
# is expected.
|
125
|
-
database.table(Person).send(:database_columns) == database.table(SalesPerson).send(:database_columns)
|
126
|
-
end
|
127
|
-
|
128
|
-
it "should have two different sets of mapped properties that point to subsets of the Table columns" do
|
129
|
-
# pending("This one still needs some love to pass.")
|
130
|
-
table = database.table(Person)
|
131
|
-
|
132
|
-
# Every property's column should be represented in the Table's column mappings.
|
133
|
-
Person.properties.each do |property|
|
134
|
-
table.columns.should include(property.column)
|
135
|
-
end
|
136
|
-
|
137
|
-
# For both models in the STI setup...
|
138
|
-
SalesPerson.properties.each do |property|
|
139
|
-
database.table(SalesPerson).columns.should include(property.column)
|
140
|
-
end
|
141
|
-
|
142
|
-
# Even though Person's properties are fewer than a SalesPerson's
|
143
|
-
Person.properties.size.should_not eql(SalesPerson.properties.size)
|
144
|
-
|
145
|
-
# And Person's properties should be a subset of a SalesPerson's
|
146
|
-
Person.properties.each do |property|
|
147
|
-
SalesPerson.properties.map(&:column).should include(property.column)
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
end
|
data/spec/query_spec.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
-
|
3
|
-
# * you have some crazy finder options... ie: Zoo, :name => 'bob', :include => :exhibits
|
4
|
-
#
|
5
|
-
# * you want to turn this into SQL.
|
6
|
-
#
|
7
|
-
# * you want to execute this SQL...
|
8
|
-
#
|
9
|
-
# * you want to load objects from the results, which means you have to know what columns in the results map to what objects
|
10
|
-
#
|
11
|
-
# * some values in the results will have no corresponding objects, theyll be indicators of other behaviour that should take place
|
12
|
-
# ie: the values for a m:n join table will tell you how to bind the associated objects together, or...
|
13
|
-
# the :type column will tell you what type to instantiate
|
14
|
-
#
|
15
|
-
#
|
16
|
-
# So... the Query class should basically take the options from step 1, give you the SQL in step 2,
|
17
|
-
# allow you to handle step 3, and expose types/result-set mappings to load objects by for step 4.
|
18
|
-
# step 5 should be handled in the DataObjectAdapter
|
19
|
-
describe DataMapper::Query do
|
20
|
-
|
21
|
-
it "should generate the correct queries for the given options" do
|
22
|
-
query = DataMapper::Query.new(database(:mock).adapter, Zoo, :name => 'bob')
|
23
|
-
query.to_sql.should == "SELECT `id`, `name`, `updated_at` FROM `zoos` WHERE (`name` = ?)"
|
24
|
-
query.parameters.should == ['bob']
|
25
|
-
|
26
|
-
query = DataMapper::Query.new(database(:mock).adapter, Animal, :name => 'bob')
|
27
|
-
query.to_sql.should == "SELECT `id`, `name`, `nice` FROM `animals` WHERE (`name` = ?)"
|
28
|
-
query.parameters.should == ['bob']
|
29
|
-
|
30
|
-
query = DataMapper::Query.new(database(:mock).adapter, Project)
|
31
|
-
query.to_sql.should == "SELECT `id`, `title`, `description`, `deleted_at` FROM `projects` WHERE (`deleted_at` IS NULL OR `deleted_at` > NOW())"
|
32
|
-
query.parameters.should be_empty
|
33
|
-
end
|
34
|
-
|
35
|
-
it "should use the include option for lazily-loaded columns" do
|
36
|
-
query = DataMapper::Query.new(database(:mock).adapter, Zoo, :include => :notes)
|
37
|
-
query.to_sql.should == "SELECT `id`, `name`, `notes`, `updated_at` FROM `zoos`"
|
38
|
-
query.parameters.should be_empty
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should generate the correct join query" do
|
42
|
-
query = DataMapper::Query.new(database(:mock).adapter, Zoo, :include => [:exhibits])
|
43
|
-
query.to_sql.should == <<-EOS.compress_lines
|
44
|
-
SELECT `zoos`.`id`, `zoos`.`name`, `zoos`.`updated_at`, `exhibits`.`id`, `exhibits`.`name`, `exhibits`.`zoo_id`
|
45
|
-
FROM `zoos`
|
46
|
-
JOIN `exhibits` ON `exhibits`.`zoo_id` = `zoos`.`id`
|
47
|
-
EOS
|
48
|
-
|
49
|
-
query = DataMapper::Query.new(database(:mock).adapter, Zoo, :include => [:exhibits], :name => ['bob', 'sam'])
|
50
|
-
query.to_sql.should == <<-EOS.compress_lines
|
51
|
-
SELECT `zoos`.`id`, `zoos`.`name`, `zoos`.`updated_at`, `exhibits`.`id`, `exhibits`.`name`, `exhibits`.`zoo_id`
|
52
|
-
FROM `zoos`
|
53
|
-
JOIN `exhibits` ON `exhibits`.`zoo_id` = `zoos`.`id`
|
54
|
-
WHERE (`zoos`.`name` IN ?)
|
55
|
-
EOS
|
56
|
-
query.parameters.should == [['bob', 'sam']]
|
57
|
-
end
|
58
|
-
|
59
|
-
it "should be forgiving with options that require Arrays" do
|
60
|
-
|
61
|
-
query = DataMapper::Query.new(database(:mock).adapter, Zoo, :conditions => ["`name` = ?", 'bob'])
|
62
|
-
query.to_sql.should == "SELECT `id`, `name`, `updated_at` FROM `zoos` WHERE (`name` = ?)"
|
63
|
-
query.parameters.should == ['bob']
|
64
|
-
|
65
|
-
query = DataMapper::Query.new(database(:mock).adapter, Zoo, :conditions => "`name` = 'bob'")
|
66
|
-
query.to_sql.should == "SELECT `id`, `name`, `updated_at` FROM `zoos` WHERE (`name` = 'bob')"
|
67
|
-
query.parameters.should be_empty
|
68
|
-
|
69
|
-
query = DataMapper::Query.new(database(:mock).adapter, Zoo, :include => :exhibits)
|
70
|
-
query.to_sql.should == <<-EOS.compress_lines
|
71
|
-
SELECT `zoos`.`id`, `zoos`.`name`, `zoos`.`updated_at`, `exhibits`.`id`, `exhibits`.`name`, `exhibits`.`zoo_id`
|
72
|
-
FROM `zoos`
|
73
|
-
JOIN `exhibits` ON `exhibits`.`zoo_id` = `zoos`.`id`
|
74
|
-
EOS
|
75
|
-
end
|
76
|
-
|
77
|
-
end
|
data/spec/save_command_spec.rb
DELETED
@@ -1,94 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
-
|
3
|
-
describe "Save Commands" do
|
4
|
-
|
5
|
-
before(:all) do
|
6
|
-
fixtures(:zoos)
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should create a new row" do
|
10
|
-
total = Zoo.all.length
|
11
|
-
Zoo.create({ :name => 'bob' })
|
12
|
-
zoo = Zoo.first(:name => 'bob')
|
13
|
-
zoo.name.should == 'bob'
|
14
|
-
Zoo.all.length.should == total+1
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should update an existing row" do
|
18
|
-
dallas = Zoo.first(:name => 'Dallas')
|
19
|
-
dallas.name = 'bob'
|
20
|
-
dallas.save
|
21
|
-
dallas.name = 'Dallas'
|
22
|
-
dallas.save
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should be able to read other attributes after a record is created" do
|
26
|
-
zoo = Zoo.create({ :name => 'bob' })
|
27
|
-
zoo.notes.should == nil
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should stamp association on save" do
|
31
|
-
database do
|
32
|
-
dallas = Zoo.first(:name => 'Dallas')
|
33
|
-
dallas.exhibits << Exhibit.new(:name => 'Flying Monkeys')
|
34
|
-
dallas.save
|
35
|
-
Exhibit.first(:name => 'Flying Monkeys').zoo.should == dallas
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
it "should return success of save call, not status of query execution" do
|
40
|
-
# pending "http://wm.lighthouseapp.com/projects/4819/tickets/54-save-should-return-success"
|
41
|
-
Exhibit.first.save.should be_true
|
42
|
-
end
|
43
|
-
|
44
|
-
it "should be invalid if invalid associations are loaded" do
|
45
|
-
miami = Zoo.first(:name => 'Miami')
|
46
|
-
fish_fancy = Exhibit.new
|
47
|
-
miami.exhibits << fish_fancy
|
48
|
-
miami.should_not be_valid
|
49
|
-
fish_fancy.name = 'Fish Fancy'
|
50
|
-
fish_fancy.should be_valid
|
51
|
-
miami.should be_valid
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should retrieve it's id on creation if the key is auto-incrementing so it can be successively updated" do
|
55
|
-
database do # Use the same Session so the reference-equality checks will pass.
|
56
|
-
mary = Animal::create(:name => 'Mary')
|
57
|
-
mary.name = 'Jane'
|
58
|
-
# Without retrieving the id during creation, the following #save call would fail,
|
59
|
-
# because we wouldn't know what id to update.
|
60
|
-
mary.save.should == true
|
61
|
-
jane = Animal.first(:name => 'Jane')
|
62
|
-
mary.should == jane
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should not be dirty if there are no attributes to update" do
|
67
|
-
bob = Animal.new
|
68
|
-
bob.should_not be_dirty
|
69
|
-
bob.name = 'bob'
|
70
|
-
bob.dirty_attributes.should == { :name => 'bob' }
|
71
|
-
bob.should be_dirty
|
72
|
-
end
|
73
|
-
|
74
|
-
it "should not persist invalid objects" do
|
75
|
-
zoo = Zoo.create(:notes => "I'm invalid!")
|
76
|
-
zoo.should_not be_valid
|
77
|
-
zoo.should be_new_record
|
78
|
-
end
|
79
|
-
|
80
|
-
it "should create a Project with a \"Main\" Section" do
|
81
|
-
database do
|
82
|
-
project = Project::create(:title => 'Test')
|
83
|
-
project.sections.first.should == Section.first
|
84
|
-
project.sections.first.should be_a_kind_of(Section)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
it "save! should raise an error if validation failed" do
|
89
|
-
# pending "http://wm.lighthouseapp.com/projects/4819/tickets/29-dm-context-write"
|
90
|
-
empty = Zoo.new
|
91
|
-
lambda { empty.save! }.should raise_error(DataMapper::ValidationError)
|
92
|
-
end
|
93
|
-
|
94
|
-
end
|
data/spec/schema_spec.rb
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
-
|
3
|
-
describe DataMapper::Adapters::Sql::Mappings::Schema do
|
4
|
-
it "should return all tables from the database schema" do
|
5
|
-
database.adapter.schema.database_tables.size.should == Dir[File.dirname(__FILE__) + '/fixtures/*'].size
|
6
|
-
database.adapter.schema.database_tables.each { |table| table.should be_a_kind_of( DataMapper::Adapters::Sql::Mappings::Table ) }
|
7
|
-
end
|
8
|
-
end
|
data/spec/serialize_spec.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
-
|
3
|
-
describe('An AR serialize implementation') do
|
4
|
-
|
5
|
-
it 'should instatiate, save, (clear and load) the original objects' do
|
6
|
-
test_data = { :first => 1, :second => "dos", :third => 3.0 }
|
7
|
-
|
8
|
-
srlzr1 = Serializer.new(:content => test_data)
|
9
|
-
srlzr1.content.should == test_data
|
10
|
-
|
11
|
-
srlzr1.save
|
12
|
-
srlzr1.content.should == test_data
|
13
|
-
|
14
|
-
srlzr1 = nil
|
15
|
-
srlzr2 = Serializer.first
|
16
|
-
srlzr2.content.should == test_data
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|