datamapper-dm-core 0.9.11 → 0.10.0

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.
Files changed (192) hide show
  1. data/.autotest +17 -14
  2. data/.gitignore +3 -1
  3. data/FAQ +6 -5
  4. data/History.txt +5 -39
  5. data/Manifest.txt +67 -76
  6. data/QUICKLINKS +1 -1
  7. data/README.txt +21 -15
  8. data/Rakefile +16 -15
  9. data/SPECS +2 -29
  10. data/TODO +1 -1
  11. data/dm-core.gemspec +11 -15
  12. data/lib/dm-core/adapters/abstract_adapter.rb +182 -185
  13. data/lib/dm-core/adapters/data_objects_adapter.rb +482 -534
  14. data/lib/dm-core/adapters/in_memory_adapter.rb +90 -69
  15. data/lib/dm-core/adapters/mysql_adapter.rb +22 -115
  16. data/lib/dm-core/adapters/oracle_adapter.rb +249 -0
  17. data/lib/dm-core/adapters/postgres_adapter.rb +7 -173
  18. data/lib/dm-core/adapters/sqlite3_adapter.rb +4 -97
  19. data/lib/dm-core/adapters/yaml_adapter.rb +116 -0
  20. data/lib/dm-core/adapters.rb +135 -16
  21. data/lib/dm-core/associations/many_to_many.rb +372 -90
  22. data/lib/dm-core/associations/many_to_one.rb +220 -73
  23. data/lib/dm-core/associations/one_to_many.rb +319 -255
  24. data/lib/dm-core/associations/one_to_one.rb +66 -53
  25. data/lib/dm-core/associations/relationship.rb +560 -158
  26. data/lib/dm-core/collection.rb +1104 -381
  27. data/lib/dm-core/core_ext/kernel.rb +12 -0
  28. data/lib/dm-core/core_ext/symbol.rb +10 -0
  29. data/lib/dm-core/identity_map.rb +4 -34
  30. data/lib/dm-core/migrations.rb +1283 -0
  31. data/lib/dm-core/model/descendant_set.rb +81 -0
  32. data/lib/dm-core/model/hook.rb +45 -0
  33. data/lib/dm-core/model/is.rb +32 -0
  34. data/lib/dm-core/model/property.rb +248 -0
  35. data/lib/dm-core/model/relationship.rb +335 -0
  36. data/lib/dm-core/model/scope.rb +90 -0
  37. data/lib/dm-core/model.rb +570 -369
  38. data/lib/dm-core/property.rb +753 -280
  39. data/lib/dm-core/property_set.rb +141 -98
  40. data/lib/dm-core/query/conditions/comparison.rb +814 -0
  41. data/lib/dm-core/query/conditions/operation.rb +247 -0
  42. data/lib/dm-core/query/direction.rb +43 -0
  43. data/lib/dm-core/query/operator.rb +42 -0
  44. data/lib/dm-core/query/path.rb +102 -0
  45. data/lib/dm-core/query/sort.rb +45 -0
  46. data/lib/dm-core/query.rb +974 -492
  47. data/lib/dm-core/repository.rb +147 -107
  48. data/lib/dm-core/resource.rb +644 -429
  49. data/lib/dm-core/spec/adapter_shared_spec.rb +294 -0
  50. data/lib/dm-core/spec/data_objects_adapter_shared_spec.rb +106 -0
  51. data/lib/dm-core/support/chainable.rb +20 -0
  52. data/lib/dm-core/support/deprecate.rb +12 -0
  53. data/lib/dm-core/support/equalizer.rb +23 -0
  54. data/lib/dm-core/support/logger.rb +13 -0
  55. data/lib/dm-core/{naming_conventions.rb → support/naming_conventions.rb} +6 -6
  56. data/lib/dm-core/transaction.rb +333 -92
  57. data/lib/dm-core/type.rb +98 -60
  58. data/lib/dm-core/types/boolean.rb +1 -1
  59. data/lib/dm-core/types/discriminator.rb +34 -20
  60. data/lib/dm-core/types/object.rb +7 -4
  61. data/lib/dm-core/types/paranoid_boolean.rb +11 -9
  62. data/lib/dm-core/types/paranoid_datetime.rb +11 -9
  63. data/lib/dm-core/types/serial.rb +3 -3
  64. data/lib/dm-core/types/text.rb +3 -4
  65. data/lib/dm-core/version.rb +1 -1
  66. data/lib/dm-core.rb +106 -110
  67. data/script/performance.rb +102 -109
  68. data/script/profile.rb +169 -38
  69. data/spec/lib/adapter_helpers.rb +105 -0
  70. data/spec/lib/collection_helpers.rb +18 -0
  71. data/spec/lib/counter_adapter.rb +34 -0
  72. data/spec/lib/pending_helpers.rb +27 -0
  73. data/spec/lib/rspec_immediate_feedback_formatter.rb +53 -0
  74. data/spec/public/associations/many_to_many_spec.rb +193 -0
  75. data/spec/public/associations/many_to_one_spec.rb +73 -0
  76. data/spec/public/associations/one_to_many_spec.rb +77 -0
  77. data/spec/public/associations/one_to_one_spec.rb +156 -0
  78. data/spec/public/collection_spec.rb +65 -0
  79. data/spec/public/model/relationship_spec.rb +924 -0
  80. data/spec/public/model_spec.rb +159 -0
  81. data/spec/public/property_spec.rb +829 -0
  82. data/spec/public/resource_spec.rb +71 -0
  83. data/spec/public/sel_spec.rb +44 -0
  84. data/spec/public/setup_spec.rb +145 -0
  85. data/spec/public/shared/association_collection_shared_spec.rb +317 -0
  86. data/spec/public/shared/collection_shared_spec.rb +1723 -0
  87. data/spec/public/shared/finder_shared_spec.rb +1619 -0
  88. data/spec/public/shared/resource_shared_spec.rb +924 -0
  89. data/spec/public/shared/sel_shared_spec.rb +112 -0
  90. data/spec/public/transaction_spec.rb +129 -0
  91. data/spec/public/types/discriminator_spec.rb +130 -0
  92. data/spec/semipublic/adapters/abstract_adapter_spec.rb +30 -0
  93. data/spec/semipublic/adapters/in_memory_adapter_spec.rb +12 -0
  94. data/spec/semipublic/adapters/mysql_adapter_spec.rb +17 -0
  95. data/spec/semipublic/adapters/oracle_adapter_spec.rb +194 -0
  96. data/spec/semipublic/adapters/postgres_adapter_spec.rb +17 -0
  97. data/spec/semipublic/adapters/sqlite3_adapter_spec.rb +17 -0
  98. data/spec/semipublic/adapters/yaml_adapter_spec.rb +12 -0
  99. data/spec/semipublic/associations/many_to_one_spec.rb +53 -0
  100. data/spec/semipublic/associations/relationship_spec.rb +194 -0
  101. data/spec/semipublic/associations_spec.rb +177 -0
  102. data/spec/semipublic/collection_spec.rb +142 -0
  103. data/spec/semipublic/property_spec.rb +61 -0
  104. data/spec/semipublic/query/conditions_spec.rb +528 -0
  105. data/spec/semipublic/query/path_spec.rb +443 -0
  106. data/spec/semipublic/query_spec.rb +2626 -0
  107. data/spec/semipublic/resource_spec.rb +47 -0
  108. data/spec/semipublic/shared/resource_shared_spec.rb +126 -0
  109. data/spec/spec.opts +3 -1
  110. data/spec/spec_helper.rb +80 -57
  111. data/tasks/ci.rb +19 -31
  112. data/tasks/dm.rb +43 -48
  113. data/tasks/doc.rb +8 -11
  114. data/tasks/gemspec.rb +5 -5
  115. data/tasks/hoe.rb +15 -16
  116. data/tasks/install.rb +8 -10
  117. metadata +72 -93
  118. data/lib/dm-core/associations/relationship_chain.rb +0 -81
  119. data/lib/dm-core/associations.rb +0 -207
  120. data/lib/dm-core/auto_migrations.rb +0 -105
  121. data/lib/dm-core/dependency_queue.rb +0 -32
  122. data/lib/dm-core/hook.rb +0 -11
  123. data/lib/dm-core/is.rb +0 -16
  124. data/lib/dm-core/logger.rb +0 -232
  125. data/lib/dm-core/migrations/destructive_migrations.rb +0 -17
  126. data/lib/dm-core/migrator.rb +0 -29
  127. data/lib/dm-core/scope.rb +0 -58
  128. data/lib/dm-core/support/array.rb +0 -13
  129. data/lib/dm-core/support/assertions.rb +0 -8
  130. data/lib/dm-core/support/errors.rb +0 -23
  131. data/lib/dm-core/support/kernel.rb +0 -11
  132. data/lib/dm-core/support/symbol.rb +0 -41
  133. data/lib/dm-core/support.rb +0 -7
  134. data/lib/dm-core/type_map.rb +0 -80
  135. data/lib/dm-core/types.rb +0 -19
  136. data/script/all +0 -4
  137. data/spec/integration/association_spec.rb +0 -1382
  138. data/spec/integration/association_through_spec.rb +0 -203
  139. data/spec/integration/associations/many_to_many_spec.rb +0 -449
  140. data/spec/integration/associations/many_to_one_spec.rb +0 -163
  141. data/spec/integration/associations/one_to_many_spec.rb +0 -188
  142. data/spec/integration/auto_migrations_spec.rb +0 -413
  143. data/spec/integration/collection_spec.rb +0 -1073
  144. data/spec/integration/data_objects_adapter_spec.rb +0 -32
  145. data/spec/integration/dependency_queue_spec.rb +0 -46
  146. data/spec/integration/model_spec.rb +0 -197
  147. data/spec/integration/mysql_adapter_spec.rb +0 -85
  148. data/spec/integration/postgres_adapter_spec.rb +0 -731
  149. data/spec/integration/property_spec.rb +0 -253
  150. data/spec/integration/query_spec.rb +0 -514
  151. data/spec/integration/repository_spec.rb +0 -61
  152. data/spec/integration/resource_spec.rb +0 -513
  153. data/spec/integration/sqlite3_adapter_spec.rb +0 -352
  154. data/spec/integration/sti_spec.rb +0 -273
  155. data/spec/integration/strategic_eager_loading_spec.rb +0 -156
  156. data/spec/integration/transaction_spec.rb +0 -75
  157. data/spec/integration/type_spec.rb +0 -275
  158. data/spec/lib/logging_helper.rb +0 -18
  159. data/spec/lib/mock_adapter.rb +0 -27
  160. data/spec/lib/model_loader.rb +0 -100
  161. data/spec/lib/publicize_methods.rb +0 -28
  162. data/spec/models/content.rb +0 -16
  163. data/spec/models/vehicles.rb +0 -34
  164. data/spec/models/zoo.rb +0 -48
  165. data/spec/unit/adapters/abstract_adapter_spec.rb +0 -133
  166. data/spec/unit/adapters/adapter_shared_spec.rb +0 -15
  167. data/spec/unit/adapters/data_objects_adapter_spec.rb +0 -632
  168. data/spec/unit/adapters/in_memory_adapter_spec.rb +0 -98
  169. data/spec/unit/adapters/postgres_adapter_spec.rb +0 -133
  170. data/spec/unit/associations/many_to_many_spec.rb +0 -32
  171. data/spec/unit/associations/many_to_one_spec.rb +0 -159
  172. data/spec/unit/associations/one_to_many_spec.rb +0 -393
  173. data/spec/unit/associations/one_to_one_spec.rb +0 -7
  174. data/spec/unit/associations/relationship_spec.rb +0 -71
  175. data/spec/unit/associations_spec.rb +0 -242
  176. data/spec/unit/auto_migrations_spec.rb +0 -111
  177. data/spec/unit/collection_spec.rb +0 -182
  178. data/spec/unit/data_mapper_spec.rb +0 -35
  179. data/spec/unit/identity_map_spec.rb +0 -126
  180. data/spec/unit/is_spec.rb +0 -80
  181. data/spec/unit/migrator_spec.rb +0 -33
  182. data/spec/unit/model_spec.rb +0 -321
  183. data/spec/unit/naming_conventions_spec.rb +0 -36
  184. data/spec/unit/property_set_spec.rb +0 -90
  185. data/spec/unit/property_spec.rb +0 -753
  186. data/spec/unit/query_spec.rb +0 -571
  187. data/spec/unit/repository_spec.rb +0 -93
  188. data/spec/unit/resource_spec.rb +0 -649
  189. data/spec/unit/scope_spec.rb +0 -142
  190. data/spec/unit/transaction_spec.rb +0 -493
  191. data/spec/unit/type_map_spec.rb +0 -114
  192. data/spec/unit/type_spec.rb +0 -119
@@ -1,34 +0,0 @@
1
- # ==========================
2
- # Used for Association specs
3
- # ---
4
- # These models will probably
5
- # end up removed. So, I wouldn't
6
- # use this metaphor
7
- class Vehicle
8
- include DataMapper::Resource
9
-
10
- property :id, Serial
11
- property :name, String
12
-
13
- class << self
14
- attr_accessor :mock_relationship
15
- end
16
- end
17
-
18
- class Manufacturer
19
- include DataMapper::Resource
20
-
21
- property :id, Serial
22
- property :name, String
23
-
24
- class << self
25
- attr_accessor :mock_relationship
26
- end
27
- end
28
-
29
- class Supplier
30
- include DataMapper::Resource
31
-
32
- property :id, Serial
33
- property :name, String
34
- end
data/spec/models/zoo.rb DELETED
@@ -1,48 +0,0 @@
1
- class Zoo
2
- include DataMapper::Resource
3
-
4
- property :id, Serial
5
- property :name, String
6
- property :description, Text
7
- property :inception, DateTime
8
- property :open, Boolean, :default => false
9
- property :size, Integer
10
- property :mission, Text, :writer => :protected
11
-
12
- has n, :animals
13
-
14
- def to_s
15
- name
16
- end
17
- end
18
-
19
- class Species
20
- include DataMapper::Resource
21
-
22
- property :id, Serial
23
- property :name, String
24
- property :classification, String, :reader => :private
25
-
26
- has n, :animals
27
- end
28
-
29
- class Animal
30
- include DataMapper::Resource
31
-
32
- property :id, Serial
33
- property :name, String
34
-
35
- belongs_to :zoo
36
- belongs_to :species
37
- belongs_to :keeper
38
- end
39
-
40
- class Employee
41
- include DataMapper::Resource
42
-
43
- property :name, String, :key => true
44
- end
45
-
46
- class Keeper < Employee
47
- has n, :animals
48
- end
@@ -1,133 +0,0 @@
1
- require 'monitor'
2
- require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'spec_helper'))
3
- require File.expand_path(File.join(File.dirname(__FILE__), '..', 'adapters', 'adapter_shared_spec'))
4
-
5
- describe DataMapper::Adapters::AbstractAdapter do
6
-
7
- before do
8
- @adapter = DataMapper::Adapters::AbstractAdapter.new(:default, 'mock_uri_string')
9
- end
10
-
11
- it_should_behave_like 'a DataMapper Adapter'
12
-
13
- describe "when handling transactions" do
14
- before :each do
15
- @transaction = DataMapper::Transaction.new(@adapter)
16
- end
17
- it "should be able to push and pop transactions on the current stack" do
18
- @adapter.current_transaction.should == nil
19
- @adapter.within_transaction?.should == false
20
- @adapter.push_transaction(@transaction)
21
- @adapter.current_transaction.should == @transaction
22
- @adapter.within_transaction?.should == true
23
- @adapter.push_transaction(@transaction)
24
- @adapter.current_transaction.should == @transaction
25
- @adapter.within_transaction?.should == true
26
- @adapter.pop_transaction
27
- @adapter.current_transaction.should == @transaction
28
- @adapter.within_transaction?.should == true
29
- @adapter.pop_transaction
30
- @adapter.current_transaction.should == nil
31
- @adapter.within_transaction?.should == false
32
- end
33
- it "should let each Thread have its own transaction stack" do
34
- lock = Monitor.new
35
- transaction2 = DataMapper::Transaction.new(@adapter)
36
- @adapter.within_transaction?.should == false
37
- @adapter.current_transaction.should == nil
38
- @adapter.push_transaction(transaction2)
39
- @adapter.within_transaction?.should == true
40
- @adapter.current_transaction.should == transaction2
41
- lock.synchronize do
42
- Thread.new do
43
- @adapter.within_transaction?.should == false
44
- @adapter.current_transaction.should == nil
45
- @adapter.push_transaction(@transaction)
46
- @adapter.within_transaction?.should == true
47
- @adapter.current_transaction.should == @transaction
48
- lock.synchronize do
49
- @adapter.within_transaction?.should == true
50
- @adapter.current_transaction.should == @transaction
51
- @adapter.pop_transaction
52
- @adapter.within_transaction?.should == false
53
- @adapter.current_transaction.should == nil
54
- end
55
- end
56
- @adapter.within_transaction?.should == true
57
- @adapter.current_transaction.should == transaction2
58
- @adapter.pop_transaction
59
- @adapter.within_transaction?.should == false
60
- @adapter.current_transaction.should == nil
61
- end
62
- end
63
- end
64
-
65
- it "should raise NotImplementedError when #create is called" do
66
- lambda { @adapter.create([ :resource ]) }.should raise_error(NotImplementedError)
67
- end
68
-
69
- it "should raise NotImplementedError when #read_many is called" do
70
- lambda { @adapter.read_many(:query) }.should raise_error(NotImplementedError)
71
- end
72
-
73
- it "should raise NotImplementedError when #read_one is called" do
74
- lambda { @adapter.read_one(:query) }.should raise_error(NotImplementedError)
75
- end
76
-
77
- it "should raise NotImplementedError when #update is called" do
78
- lambda { @adapter.update(:attributes, :query) }.should raise_error(NotImplementedError)
79
- end
80
-
81
- it "should raise NotImplementedError when #delete is called" do
82
- lambda { @adapter.delete(:query) }.should raise_error(NotImplementedError)
83
- end
84
-
85
- it "should raise NotImplementedError when #upgrade_model_storage is called" do
86
- lambda { @adapter.upgrade_model_storage(:repository, :resource) }.should raise_error(NotImplementedError)
87
- end
88
-
89
- it "should raise NotImplementedError when #storage_exists? is called" do
90
- lambda { @adapter.storage_exists?("hehu") }.should raise_error(NotImplementedError)
91
- end
92
-
93
- it "should raise NotImplementedError when #create_model_storage is called" do
94
- lambda { @adapter.create_model_storage(:repository, :resource) }.should raise_error(NotImplementedError)
95
- end
96
-
97
- it "should raise NotImplementedError when #destroy_model_storage is called" do
98
- lambda { @adapter.destroy_model_storage(:repository, :resource) }.should raise_error(NotImplementedError)
99
- end
100
-
101
- it "should raise NotImplementedError when #alter_model_storage is called" do
102
- lambda { @adapter.alter_model_storage(:repository, :resource) }.should raise_error(NotImplementedError)
103
- end
104
-
105
- it "should raise NotImplementedError when #create_property_storage is called" do
106
- lambda { @adapter.create_property_storage(:repository, :property) }
107
- end
108
-
109
- it "should raise NotImplementedError when #destroy_property_storage is called" do
110
- lambda { @adapter.destroy_property_storage(:repository, :property) }
111
- end
112
-
113
- it "should raise NotImplementedError when #alter_property_storage is called" do
114
- lambda { @adapter.alter_property_storage(:repository, :property) }
115
- end
116
-
117
- it "should raise NotImplementedError when #transaction_primitive is called" do
118
- lambda { @adapter.transaction_primitive }.should raise_error(NotImplementedError)
119
- end
120
-
121
- it "should clean out dead threads from @transactions" do
122
- @adapter.instance_eval do @transactions end.size.should == 0
123
- t = Thread.new do
124
- @adapter.push_transaction("plur")
125
- end
126
- while t.alive?
127
- sleep 0.1
128
- end
129
- @adapter.instance_eval do @transactions end.size.should == 1
130
- @adapter.push_transaction("ploj")
131
- @adapter.instance_eval do @transactions end.size.should == 1
132
- end
133
- end
@@ -1,15 +0,0 @@
1
-
2
- describe "a DataMapper Adapter", :shared => true do
3
-
4
- it "should initialize the connection uri" do
5
- new_adapter = @adapter.class.new(:default, Addressable::URI.parse('some://uri/string'))
6
- new_adapter.instance_variable_get('@uri').to_s.should == Addressable::URI.parse('some://uri/string').to_s
7
- end
8
-
9
- %w{create read_many read_one update delete create_model_storage alter_model_storage destroy_model_storage create_property_storage alter_property_storage destroy_property_storage} .each do |meth|
10
- it "should have a #{meth} method" do
11
- @adapter.should respond_to(meth.intern)
12
- end
13
- end
14
-
15
- end