datamapper 0.3.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (180) hide show
  1. data/History.txt +0 -0
  2. data/Manifest.txt +5 -0
  3. data/README.txt +11 -0
  4. data/Rakefile +70 -0
  5. data/lib/datamapper.rb +8 -0
  6. metadata +152 -319
  7. data/CHANGELOG +0 -145
  8. data/FAQ +0 -96
  9. data/MIT-LICENSE +0 -22
  10. data/QUICKLINKS +0 -12
  11. data/README +0 -105
  12. data/environment.rb +0 -62
  13. data/example.rb +0 -156
  14. data/lib/data_mapper.rb +0 -88
  15. data/lib/data_mapper/adapters/abstract_adapter.rb +0 -43
  16. data/lib/data_mapper/adapters/data_object_adapter.rb +0 -480
  17. data/lib/data_mapper/adapters/mysql_adapter.rb +0 -72
  18. data/lib/data_mapper/adapters/postgresql_adapter.rb +0 -258
  19. data/lib/data_mapper/adapters/sql/coersion.rb +0 -134
  20. data/lib/data_mapper/adapters/sql/commands/load_command.rb +0 -545
  21. data/lib/data_mapper/adapters/sql/mappings/associations_set.rb +0 -34
  22. data/lib/data_mapper/adapters/sql/mappings/column.rb +0 -279
  23. data/lib/data_mapper/adapters/sql/mappings/conditions.rb +0 -172
  24. data/lib/data_mapper/adapters/sql/mappings/schema.rb +0 -60
  25. data/lib/data_mapper/adapters/sql/mappings/table.rb +0 -459
  26. data/lib/data_mapper/adapters/sql/quoting.rb +0 -24
  27. data/lib/data_mapper/adapters/sqlite3_adapter.rb +0 -159
  28. data/lib/data_mapper/associations.rb +0 -106
  29. data/lib/data_mapper/associations/belongs_to_association.rb +0 -160
  30. data/lib/data_mapper/associations/has_and_belongs_to_many_association.rb +0 -437
  31. data/lib/data_mapper/associations/has_many_association.rb +0 -283
  32. data/lib/data_mapper/associations/has_n_association.rb +0 -143
  33. data/lib/data_mapper/associations/reference.rb +0 -47
  34. data/lib/data_mapper/attributes.rb +0 -73
  35. data/lib/data_mapper/auto_migrations.rb +0 -36
  36. data/lib/data_mapper/base.rb +0 -17
  37. data/lib/data_mapper/callbacks.rb +0 -107
  38. data/lib/data_mapper/context.rb +0 -112
  39. data/lib/data_mapper/database.rb +0 -234
  40. data/lib/data_mapper/dependency_queue.rb +0 -28
  41. data/lib/data_mapper/embedded_value.rb +0 -145
  42. data/lib/data_mapper/identity_map.rb +0 -47
  43. data/lib/data_mapper/is/tree.rb +0 -121
  44. data/lib/data_mapper/migration.rb +0 -155
  45. data/lib/data_mapper/persistence.rb +0 -852
  46. data/lib/data_mapper/property.rb +0 -310
  47. data/lib/data_mapper/query.rb +0 -164
  48. data/lib/data_mapper/support/blank.rb +0 -35
  49. data/lib/data_mapper/support/connection_pool.rb +0 -117
  50. data/lib/data_mapper/support/enumerable.rb +0 -35
  51. data/lib/data_mapper/support/errors.rb +0 -16
  52. data/lib/data_mapper/support/inflector.rb +0 -265
  53. data/lib/data_mapper/support/object.rb +0 -54
  54. data/lib/data_mapper/support/serialization.rb +0 -96
  55. data/lib/data_mapper/support/silence.rb +0 -10
  56. data/lib/data_mapper/support/string.rb +0 -72
  57. data/lib/data_mapper/support/struct.rb +0 -7
  58. data/lib/data_mapper/support/symbol.rb +0 -82
  59. data/lib/data_mapper/support/typed_set.rb +0 -65
  60. data/lib/data_mapper/types/base.rb +0 -44
  61. data/lib/data_mapper/types/string.rb +0 -34
  62. data/lib/data_mapper/validatable_extensions/errors.rb +0 -12
  63. data/lib/data_mapper/validatable_extensions/macros.rb +0 -7
  64. data/lib/data_mapper/validatable_extensions/validatable_instance_methods.rb +0 -62
  65. data/lib/data_mapper/validatable_extensions/validation_base.rb +0 -18
  66. data/lib/data_mapper/validatable_extensions/validations/formats/email.rb +0 -43
  67. data/lib/data_mapper/validatable_extensions/validations/validates_acceptance_of.rb +0 -7
  68. data/lib/data_mapper/validatable_extensions/validations/validates_confirmation_of.rb +0 -7
  69. data/lib/data_mapper/validatable_extensions/validations/validates_each.rb +0 -7
  70. data/lib/data_mapper/validatable_extensions/validations/validates_format_of.rb +0 -28
  71. data/lib/data_mapper/validatable_extensions/validations/validates_length_of.rb +0 -15
  72. data/lib/data_mapper/validatable_extensions/validations/validates_numericality_of.rb +0 -7
  73. data/lib/data_mapper/validatable_extensions/validations/validates_presence_of.rb +0 -7
  74. data/lib/data_mapper/validatable_extensions/validations/validates_true_for.rb +0 -7
  75. data/lib/data_mapper/validatable_extensions/validations/validates_uniqueness_of.rb +0 -40
  76. data/lib/data_mapper/validations.rb +0 -20
  77. data/lib/data_mapper/validations/number_validator.rb +0 -40
  78. data/lib/data_mapper/validations/string_validator.rb +0 -20
  79. data/lib/data_mapper/validations/validator.rb +0 -13
  80. data/performance.rb +0 -307
  81. data/plugins/can_has_sphinx/LICENSE +0 -23
  82. data/plugins/can_has_sphinx/README +0 -4
  83. data/plugins/can_has_sphinx/REVISION +0 -1
  84. data/plugins/can_has_sphinx/Rakefile +0 -22
  85. data/plugins/can_has_sphinx/init.rb +0 -1
  86. data/plugins/can_has_sphinx/install.rb +0 -1
  87. data/plugins/can_has_sphinx/lib/acts_as_sphinx.rb +0 -123
  88. data/plugins/can_has_sphinx/lib/sphinx.rb +0 -460
  89. data/plugins/can_has_sphinx/scripts/sphinx.sh +0 -47
  90. data/plugins/can_has_sphinx/tasks/acts_as_sphinx_tasks.rake +0 -41
  91. data/profile_data_mapper.rb +0 -40
  92. data/rakefile.rb +0 -159
  93. data/spec/acts_as_tree_spec.rb +0 -67
  94. data/spec/adapters/data_object_adapter_spec.rb +0 -31
  95. data/spec/associations/belongs_to_association_spec.rb +0 -98
  96. data/spec/associations/has_and_belongs_to_many_association_spec.rb +0 -377
  97. data/spec/associations/has_many_association_spec.rb +0 -337
  98. data/spec/attributes_spec.rb +0 -52
  99. data/spec/auto_migrations_spec.rb +0 -101
  100. data/spec/callbacks_spec.rb +0 -186
  101. data/spec/can_has_sphinx.rb +0 -5
  102. data/spec/coersion_spec.rb +0 -41
  103. data/spec/column_spec.rb +0 -114
  104. data/spec/count_command_spec.rb +0 -45
  105. data/spec/database_spec.rb +0 -18
  106. data/spec/dataobjects_spec.rb +0 -27
  107. data/spec/delete_command_spec.rb +0 -11
  108. data/spec/dependency_spec.rb +0 -29
  109. data/spec/embedded_value_spec.rb +0 -161
  110. data/spec/fixtures/animals.yaml +0 -33
  111. data/spec/fixtures/animals_exhibits.yaml +0 -2
  112. data/spec/fixtures/careers.yaml +0 -5
  113. data/spec/fixtures/comments.yaml +0 -1
  114. data/spec/fixtures/exhibits.yaml +0 -90
  115. data/spec/fixtures/fruit.yaml +0 -6
  116. data/spec/fixtures/people.yaml +0 -37
  117. data/spec/fixtures/posts.yaml +0 -3
  118. data/spec/fixtures/projects.yaml +0 -13
  119. data/spec/fixtures/sections.yaml +0 -5
  120. data/spec/fixtures/serializers.yaml +0 -6
  121. data/spec/fixtures/tasks.yaml +0 -6
  122. data/spec/fixtures/tasks_tasks.yaml +0 -2
  123. data/spec/fixtures/tomatoes.yaml +0 -1
  124. data/spec/fixtures/users.yaml +0 -1
  125. data/spec/fixtures/zoos.yaml +0 -24
  126. data/spec/is_a_tree_spec.rb +0 -149
  127. data/spec/legacy_spec.rb +0 -16
  128. data/spec/load_command_spec.rb +0 -322
  129. data/spec/magic_columns_spec.rb +0 -26
  130. data/spec/migration_spec.rb +0 -267
  131. data/spec/mock_adapter.rb +0 -20
  132. data/spec/models/animal.rb +0 -12
  133. data/spec/models/candidate.rb +0 -8
  134. data/spec/models/career.rb +0 -7
  135. data/spec/models/chain.rb +0 -8
  136. data/spec/models/comment.rb +0 -6
  137. data/spec/models/exhibit.rb +0 -14
  138. data/spec/models/fence.rb +0 -7
  139. data/spec/models/fruit.rb +0 -8
  140. data/spec/models/job.rb +0 -8
  141. data/spec/models/person.rb +0 -30
  142. data/spec/models/post.rb +0 -14
  143. data/spec/models/project.rb +0 -41
  144. data/spec/models/sales_person.rb +0 -5
  145. data/spec/models/section.rb +0 -8
  146. data/spec/models/serializer.rb +0 -5
  147. data/spec/models/task.rb +0 -9
  148. data/spec/models/tomato.rb +0 -27
  149. data/spec/models/user.rb +0 -12
  150. data/spec/models/zoo.rb +0 -13
  151. data/spec/natural_key_spec.rb +0 -36
  152. data/spec/paranoia_spec.rb +0 -38
  153. data/spec/persistence_spec.rb +0 -479
  154. data/spec/postgres_spec.rb +0 -96
  155. data/spec/property_spec.rb +0 -151
  156. data/spec/query_spec.rb +0 -77
  157. data/spec/save_command_spec.rb +0 -94
  158. data/spec/schema_spec.rb +0 -8
  159. data/spec/serialize_spec.rb +0 -19
  160. data/spec/single_table_inheritance_spec.rb +0 -43
  161. data/spec/spec_helper.rb +0 -45
  162. data/spec/support/blank_spec.rb +0 -8
  163. data/spec/support/inflector_spec.rb +0 -41
  164. data/spec/support/object_spec.rb +0 -9
  165. data/spec/support/serialization_spec.rb +0 -61
  166. data/spec/support/silence_spec.rb +0 -15
  167. data/spec/support/string_spec.rb +0 -7
  168. data/spec/support/struct_spec.rb +0 -12
  169. data/spec/support/typed_set_spec.rb +0 -66
  170. data/spec/symbolic_operators_spec.rb +0 -27
  171. data/spec/table_spec.rb +0 -79
  172. data/spec/types/string.rb +0 -81
  173. data/spec/validates_confirmation_of_spec.rb +0 -55
  174. data/spec/validates_format_of_spec.rb +0 -78
  175. data/spec/validates_length_of_spec.rb +0 -117
  176. data/spec/validates_uniqueness_of_spec.rb +0 -92
  177. data/spec/validations/number_validator.rb +0 -59
  178. data/spec/validations/string_validator.rb +0 -14
  179. data/spec/validations_spec.rb +0 -141
  180. data/tasks/fixtures.rb +0 -53
@@ -1,43 +0,0 @@
1
- require File.dirname(__FILE__) + "/spec_helper"
2
-
3
- describe 'Single Table Inheritance' do
4
-
5
- before(:all) do
6
- fixtures(:people)
7
- end
8
-
9
- it "should save and load the correct Type" do
10
- database do
11
- ted = SalesPerson.new(:name => 'Ted')
12
- ted.save
13
-
14
- clone = Person.first(:name => 'Ted')
15
- ted.should == clone
16
-
17
- clone.class.should eql(SalesPerson)
18
- end
19
-
20
- # Since we're not executing within the same database context
21
- # this is not the same object instance as the previous ones.
22
- clone2 = Person.first(:name => 'Ted')
23
-
24
- clone2.class.should eql(SalesPerson)
25
- end
26
-
27
- it "secondary database should inherit the same attributes" do
28
-
29
- database(:mock) do |db|
30
- db.table(SalesPerson)[:name].should_not be_nil
31
- end
32
-
33
- end
34
-
35
- it "should inherit the callbacks of the parent class" do
36
- database do
37
- adam = SalesPerson.new(:name => 'adam')
38
- adam.save
39
- adam.reload.notes.should eql("Lorem ipsum dolor sit amet")
40
- end
41
- end
42
-
43
- end
@@ -1,45 +0,0 @@
1
- require 'pp'
2
-
3
- ENV['LOG_NAME'] = 'spec'
4
- require File.dirname(__FILE__) + '/../environment'
5
-
6
- # Define a fixtures helper method to load up our test data.
7
- def fixtures(name)
8
- entry = YAML::load_file(File.dirname(__FILE__) + "/fixtures/#{name}.yaml")
9
- klass = begin
10
- Kernel::const_get(Inflector.classify(Inflector.singularize(name)))
11
- rescue
12
- nil
13
- end
14
-
15
- unless klass.nil?
16
- database.logger.debug { "AUTOMIGRATE: #{klass}" }
17
- klass.auto_migrate!
18
-
19
- (entry.kind_of?(Array) ? entry : [entry]).each do |hash|
20
- if hash['type']
21
- Object::const_get(hash['type'])::create(hash)
22
- else
23
- klass::create(hash)
24
- end
25
- end
26
- else
27
- table = database.table(name.to_s)
28
- table.create! true
29
- table.activate_associations!
30
-
31
- #pp database.schema
32
-
33
- (entry.kind_of?(Array) ? entry : [entry]).each do |hash|
34
- table.insert(hash)
35
- end
36
- end
37
- end
38
-
39
- def load_database
40
- Dir[File.dirname(__FILE__) + "/fixtures/*.yaml"].each do |path|
41
- fixtures(File::basename(path).sub(/\.yaml$/, ''))
42
- end
43
- end
44
-
45
- load_database
@@ -1,8 +0,0 @@
1
- require File.dirname(__FILE__) + "/../spec_helper"
2
-
3
- describe DataMapper::Support do
4
- it "should mark empty objects as blank" do
5
- [ nil, false, '', ' ', " \n\t \r ", [], {} ].each { |f| f.should be_blank }
6
- [ Object.new, true, 0, 1, 'a', [nil], { nil => 0 } ].each { |t| t.should_not be_blank }
7
- end
8
- end
@@ -1,41 +0,0 @@
1
- require File.dirname(__FILE__) + "/../spec_helper"
2
-
3
- describe Inflector do
4
- it "should camelize strings" do
5
- Inflector.camelize("data_mapper").should == "DataMapper"
6
- Inflector.camelize("data_mapper/support").should == "DataMapper::Support"
7
- end
8
-
9
- it "should pluralize strings" do
10
- Inflector.pluralize("post").should == "posts"
11
- Inflector.pluralize("octopus").should == "octopi"
12
- Inflector.pluralize("sheep").should == "sheep"
13
- Inflector.pluralize("word").should == "words"
14
- Inflector.pluralize("the blue mailman").should == "the blue mailmen"
15
- Inflector.pluralize("CamelOctopus").should == "CamelOctopi"
16
- end
17
-
18
- it "should singularize strings" do
19
- Inflector.singularize("posts").should == "post"
20
- Inflector.singularize("octopi").should == "octopus"
21
- Inflector.singularize("sheep").should == "sheep"
22
- Inflector.singularize("word").should == "word"
23
- Inflector.singularize("the blue mailmen").should == "the blue mailman"
24
- Inflector.singularize("CamelOctopi").should == "CamelOctopus"
25
- end
26
-
27
- it "should demodulize strings" do
28
- Inflector.demodulize("DataMapper::Support").should == "Support"
29
- end
30
-
31
- it "should create foreign keys from class names and key names" do
32
- Inflector.foreign_key("Animal").should == "animal_id"
33
- Inflector.foreign_key("Admin::Post").should == "post_id"
34
- Inflector.foreign_key("Animal", "name").should == "animal_name"
35
- end
36
-
37
- it "should constantize strings" do
38
- Inflector.constantize("Class").should == Class
39
- lambda { Inflector.constantize("asdf") }.should raise_error
40
- end
41
- end
@@ -1,9 +0,0 @@
1
- require File.dirname(__FILE__) + "/../spec_helper"
2
-
3
- describe DataMapper::Support::Object do
4
-
5
- it "should be able to get a recursive constant" do
6
- Object.recursive_const_get('DataMapper::Support::String').should == DataMapper::Support::String
7
- end
8
-
9
- end
@@ -1,61 +0,0 @@
1
- require File.dirname(__FILE__) + "/../spec_helper"
2
-
3
- describe DataMapper::Support::Serialization do
4
-
5
- before(:all) do
6
- fixtures(:animals)
7
- fixtures(:zoos)
8
- end
9
-
10
- it "should serialize to YAML" do
11
- Animal.first(:name => 'Frog').to_yaml.strip.should == <<-EOS.margin
12
- ---
13
- id: 1
14
- name: Frog
15
- notes: I am a Frog!
16
- nice: false
17
- EOS
18
- end
19
-
20
- it "should serialize to XML" do
21
- Animal.first(:name => 'Frog').to_xml.should == <<-EOS.compress_lines(false)
22
- <animal id="1">
23
- <name>Frog</name>
24
- <notes>I am a Frog!</notes>
25
- <nice>false</nice>
26
- </animal>
27
- EOS
28
-
29
- san_diego_zoo = Zoo.first(:name => 'San Diego')
30
- san_diego_zoo.to_xml.should == <<-EOS.compress_lines(false)
31
- <zoo id="2">
32
- <name>San Diego</name>
33
- <notes/>
34
- <updated_at>#{san_diego_zoo.updated_at.dup}</updated_at>
35
- </zoo>
36
- EOS
37
- end
38
-
39
- it "should serialize to JSON" do
40
-
41
- Animal.first(:name => 'Frog').to_json.should == <<-EOS.compress_lines
42
- {
43
- "id": 1,
44
- "name": "Frog",
45
- "notes": "I am a Frog!",
46
- "nice": false
47
- }
48
- EOS
49
-
50
- san_diego_zoo = Zoo.first(:name => 'San Diego')
51
- san_diego_zoo.to_json.should == <<-EOS.compress_lines
52
- {
53
- "id": 2,
54
- "name": "San Diego",
55
- "notes": null,
56
- "updated_at": #{san_diego_zoo.updated_at.dup.to_json}
57
- }
58
- EOS
59
- end
60
-
61
- end
@@ -1,15 +0,0 @@
1
- require File.dirname(__FILE__) + "/../spec_helper"
2
-
3
- describe "Kernel#silence_warnings" do
4
-
5
- it "should not warn" do
6
- $VERBOSE.should_not be_nil
7
-
8
- silence_warnings do
9
- $VERBOSE.should be_nil
10
- end
11
-
12
- $VERBOSE.should_not be_nil
13
- end
14
-
15
- end
@@ -1,7 +0,0 @@
1
- describe DataMapper::Support::String do
2
-
3
- it "should translate" do
4
- "%s is great!".t('DataMapper').should eql("DataMapper is great!")
5
- end
6
-
7
- end
@@ -1,12 +0,0 @@
1
- require File.dirname(__FILE__) + "/../spec_helper"
2
-
3
- describe Struct do
4
-
5
- it "should have attributes" do
6
-
7
- s = Struct.new(:name).new('bob')
8
- s.attributes.should == { :name => 'bob' }
9
-
10
- end
11
-
12
- end
@@ -1,66 +0,0 @@
1
- require File.dirname(__FILE__) + "/../spec_helper"
2
-
3
- describe DataMapper::Support::TypedSet do
4
-
5
- it "should accept objects of a defined type, and raise for others" do
6
-
7
- s = DataMapper::Support::TypedSet.new(Zoo, Animal)
8
-
9
- lambda do
10
- s << Zoo.new
11
- s.size.should == 1
12
- end.should_not raise_error(ArgumentError)
13
-
14
- lambda do
15
- s << Animal.new
16
- s.size.should == 2
17
- end.should_not raise_error(ArgumentError)
18
-
19
- lambda do
20
- s << Exhibit.new
21
- s.size.should == 2
22
- end.should raise_error(ArgumentError)
23
-
24
- end
25
-
26
- it "should be sorted" do
27
-
28
- s = DataMapper::Support::TypedSet.new(Numeric)
29
-
30
- s << 8
31
- s << 4
32
- s << 9
33
- s << 27
34
- s << 30
35
- s << 1
36
- s << 0
37
- s << 5
38
- s << 3
39
-
40
- s.entries.first.should eql(0)
41
- s.entries.last.should eql(30)
42
- end
43
-
44
- it "should respond to blank?" do
45
- s = DataMapper::Support::TypedSet.new(Numeric)
46
- s.should be_blank
47
-
48
- s << 4
49
- s.should_not be_blank
50
- end
51
-
52
- it "should return the combined entries for two sets" do
53
- a = DataMapper::Support::TypedSet.new(Numeric)
54
- b = DataMapper::Support::TypedSet.new(Numeric)
55
-
56
- a << 1 << 2 << 3
57
- b << 4 << 5 << 6 << 3
58
-
59
- c = (a + b)
60
- c.should have(6).entries
61
- c.entries.should == [ 1, 2, 3, 4, 5, 6 ]
62
-
63
- lambda { (c + nil) }.should_not raise_error
64
- end
65
-
66
- end
@@ -1,27 +0,0 @@
1
- require File.dirname(__FILE__) + "/spec_helper"
2
-
3
- describe Symbol::Operator do
4
-
5
- before(:all) do
6
- fixtures(:people)
7
- end
8
-
9
- it 'should use greater_than_or_equal_to to limit results' do
10
- Person.all(:age.gte => 28).size.should == 3
11
- end
12
-
13
- it 'use an Array for in-clauses' do
14
- family = Person.all(:id => [1, 2, 4])
15
- family[0].name.should == 'Sam'
16
- family[1].name.should == 'Amy'
17
- family[2].name.should == 'Josh'
18
- end
19
-
20
- it 'use "not" for not-equal operations' do
21
- Person.all(:name.not => 'Bob').size.should == 4
22
- end
23
-
24
- it 'age should not be nil' do
25
- Person.all(:age.not => nil).size.should == 5
26
- end
27
- end
@@ -1,79 +0,0 @@
1
- require File.dirname(__FILE__) + "/spec_helper"
2
-
3
- describe DataMapper::Adapters::Sql::Mappings::Table do
4
- it "should return all columns from the database" do
5
- table = database.adapter.schema.database_tables.detect{|table| table.name == "zoos"}
6
- columns = table.database_columns
7
- columns.size.should == database.schema[Zoo].columns.size
8
- columns.each { |column| column.should be_a_kind_of( DataMapper::Adapters::Sql::Mappings::Column ) }
9
- end
10
-
11
- it "should return the default for a column from the database" do
12
- table = database.adapter.schema.database_tables.detect{|table| table.name == "animals"}
13
- columns = table.database_columns
14
-
15
- column1 = columns.detect{|column| column.name == :name }
16
- column1.default.should == "No Name"
17
-
18
- column2 = columns.detect{|column| column.name == :nice }
19
- column2.default.should == nil
20
- end
21
-
22
- it "should return the nullability for a column from the database" do
23
- table = database.adapter.schema.database_tables.detect{|table| table.name == "animals"}
24
- columns = table.database_columns
25
-
26
- column1 = columns.detect{|column| column.name == :id }
27
- column1.nullable?.should be_false
28
-
29
- column2 = columns.detect{|column| column.name == :nice }
30
- column2.nullable?.should be_true
31
- end
32
-
33
- it "should create sql for composite unique indexes" do
34
- class Cage #< DataMapper::Base # please do not remove this
35
- include DataMapper::Persistence
36
-
37
- property :name, :string
38
- property :cage_id, :integer
39
-
40
- index [:name, :cage_id], :unique => true
41
- end
42
-
43
- index_sql = database.adapter.table(Cage).to_create_composite_index_sql
44
- index_sql[0].should match(/CREATE UNIQUE INDEX cages_name_cage_id_index/)
45
- end
46
-
47
- it "should create sql for composite indexes" do
48
- class Lion #< DataMapper::Base # please do not remove this
49
- include DataMapper::Persistence
50
-
51
- property :name, :string
52
- property :tamer_id, :integer
53
-
54
- index [:name, :tamer_id]
55
- end
56
-
57
- index_sql = database.adapter.table(Lion).to_create_composite_index_sql
58
- index_sql[0].should match(/CREATE INDEX lions_name_tamer_id_index/)
59
- end
60
-
61
- it "should create sql for multiple composite indexes" do
62
- class Course #< DataMapper::Base # please do not remove this
63
- include DataMapper::Persistence
64
-
65
- property :code, :string
66
- property :name, :string
67
- property :description, :text
68
- property :department_id, :integer
69
- property :professor_id, :integer
70
-
71
- index [:code, :name], :unique => true
72
- index [:department_id, :professor_id], :unique => true
73
- end
74
-
75
- index_sql = database.adapter.table(Course).to_create_composite_index_sql
76
- index_sql[0].should match(/CREATE UNIQUE INDEX courses_code_name_index/)
77
- index_sql[1].should match(/CREATE UNIQUE INDEX courses_department_id_professor_id_index/)
78
- end
79
- end
@@ -1,81 +0,0 @@
1
- require File.dirname(__FILE__) + "/../spec_helper"
2
-
3
- describe DataMapper::Types::String do
4
- it "should look like a String" do
5
- DataMapper::Types::String.new("duh").should be_a_kind_of(String)
6
- end
7
-
8
- it "should answer for :string" do
9
- DataMapper::Types::TYPE_MAP[:string].should == DataMapper::Types::String
10
- end
11
-
12
- it "should be ready to replace Strings" do
13
- DataMapper::Types::TYPE_MAP[String].should == DataMapper::Types::String
14
- end
15
-
16
- describe "with validations" do
17
-
18
- it "should catch length errors" do
19
- nval = mock("length validator")
20
- nval.should_receive(:<)
21
-
22
- DataMapper::Validations::NumberValidator.should_receive(:new).and_return(nval)
23
-
24
- class T < DataMapper::Types::String
25
- length < 25
26
- end
27
-
28
- inst = T.new("Whatever")
29
-
30
- nval.should_receive(:errors_for).with(inst.length).and_return(["error"])
31
-
32
- inst.should_not be_valid
33
- inst.errors.should have_exactly(1).item
34
- inst.errors[0].should == "error"
35
- end
36
-
37
- it "should catch match errors" do
38
- sval = mock("match validator")
39
- sval.should_receive(:matches)
40
-
41
- DataMapper::Validations::StringValidator.should_receive(:new).and_return(sval)
42
-
43
- class R < DataMapper::Types::String
44
- matches /aabb/
45
- end
46
-
47
- inst = R.new("Whatever")
48
-
49
- sval.should_receive(:errors_for).with(inst).and_return(["error"])
50
-
51
- inst.should_not be_valid
52
- inst.errors.should have_exactly(1).item
53
- inst.errors[0].should == "error"
54
- end
55
-
56
- it "should be valid" do
57
- nval = mock("length validator")
58
- nval.should_receive(:<)
59
-
60
- DataMapper::Validations::NumberValidator.should_receive(:new).and_return(nval)
61
-
62
- sval = mock("match validator")
63
- sval.should_receive(:matches)
64
-
65
- DataMapper::Validations::StringValidator.should_receive(:new).and_return(sval)
66
-
67
- class Q < DataMapper::Types::String
68
- length < 25
69
- matches /aabb/
70
- end
71
-
72
- inst = Q.new("Whatever")
73
-
74
- nval.should_receive(:errors_for).with(inst.length).and_return([])
75
- sval.should_receive(:errors_for).with(inst).and_return([])
76
-
77
- inst.should be_valid
78
- inst.errors.should be_empty
79
- end
80
- end
81
- end