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,143 +0,0 @@
1
- module DataMapper
2
-
3
- class ForeignKeyNotFoundError < StandardError; end
4
- class AssociationProtectedError < StandardError; end
5
-
6
- module Associations
7
-
8
- class HasNAssociation
9
-
10
- attr_reader :options
11
-
12
- OPTIONS = [
13
- :class,
14
- :class_name,
15
- :foreign_key,
16
- :dependent
17
- ]
18
-
19
- def initialize(klass, association_name, options)
20
- @constant = klass
21
- @adapter = database.adapter
22
- @table = @adapter.table(klass)
23
- @association_name = association_name.to_sym
24
- @options = options || Hash.new
25
-
26
- define_accessor(klass)
27
-
28
- Persistence::dependencies.add(associated_constant_name) do |klass|
29
- @foreign_key_column = associated_table[foreign_key_name]
30
-
31
- unless @foreign_key_column
32
- associated_constant.property(foreign_key_name, foreign_key_type)
33
-
34
- @foreign_key_column = associated_table[foreign_key_name]
35
-
36
- if @foreign_key_column.nil?
37
- raise ForeignKeyNotFoundError.new(<<-EOS.compress_lines)
38
- key_table => #{key_table.inspect},
39
- association_table => #{associated_table.inspect},
40
- association_name => #{name},
41
- foreign_key_name => #{foreign_key_name.inspect},
42
- foreign_key_type => #{foreign_key_type.inspect},
43
- constant => #{constant.inspect},
44
- associated_constant => #{associated_constant.inspect}
45
- EOS
46
- end
47
- end
48
- end
49
- end
50
-
51
- def name
52
- @association_name
53
- end
54
-
55
- def constant
56
- @constant
57
- end
58
-
59
- def associated_constant
60
- @associated_constant || @associated_constant = Kernel.const_get(associated_constant_name)
61
- end
62
-
63
- def associated_constant_name
64
- @associated_constant_name || begin
65
-
66
- if @options.has_key?(:class) || @options.has_key?(:class_name)
67
- @associated_constant_name = (@options[:class] || @options[:class_name])
68
-
69
- if @associated_constant_name.kind_of?(String)
70
- @associated_constant_name = Inflector.classify(@associated_constant_name)
71
- elsif @associated_constant_name.kind_of?(Class)
72
- @associated_constant_name = @associated_constant_name.name
73
- end
74
- else
75
- @associated_constant_name = Inflector.classify(@association_name)
76
- end
77
-
78
- @associated_constant_name
79
- end
80
-
81
- end
82
-
83
- def primary_key_column
84
- @primary_key_column || @primary_key_column = key_table.key
85
- end
86
-
87
- def foreign_key_column
88
- @foreign_key_column
89
- end
90
-
91
- def foreign_key_name
92
- @foreign_key_name || @foreign_key_name = (@options[:foreign_key] || key_table.default_foreign_key)
93
- end
94
-
95
- def foreign_key_type
96
- @foreign_key_type || @foreign_key_type = key_table.key.type
97
- end
98
-
99
- def key_table
100
- @key_table || @key_table = @adapter.table(constant)
101
- end
102
-
103
- def associated_table
104
- @association_table || @association_table = @adapter.table(associated_constant)
105
- end
106
-
107
- def associated_columns
108
- associated_table.columns.reject { |column| column.lazy? }
109
- end
110
-
111
- def complementary_association
112
- @complementary_association || begin
113
- @complementary_association = associated_table.associations.find do |mapping|
114
- mapping.is_a?(BelongsToAssociation) &&
115
- mapping.foreign_key_column == foreign_key_column &&
116
- mapping.key_table.name == key_table.name
117
- end
118
-
119
- if @complementary_association
120
- class << self
121
- attr_accessor :complementary_association
122
- end
123
- end
124
-
125
- return @complementary_association
126
- end
127
- end
128
-
129
- def finder_options
130
- @finder_options || @finder_options = @options.reject { |k,v| self.class::OPTIONS.include?(k) }
131
- end
132
-
133
- def to_sql
134
- "JOIN #{associated_table.to_sql} ON #{foreign_key_column.to_sql(true)} = #{primary_key_column.to_sql(true)}"
135
- end
136
-
137
- def activate!(force = false)
138
- foreign_key_column
139
- end
140
- end
141
-
142
- end
143
- end
@@ -1,47 +0,0 @@
1
- module DataMapper
2
-
3
- module Associations
4
-
5
- # Reference is an abstract-class providing the boiler-plate for
6
- # the association proxies (ie: HasManyAssociation::Set, or
7
- # HasOneAssociation::Instance)
8
- # The proxies need to access the defining Association instances
9
- # to obtain mapping information. This class provides convenient
10
- # access to said Association.
11
- #
12
- # EXAMPLE:
13
- # class Zoo
14
- # has_many :exhibits
15
- # end
16
- # The +has_many+ declaration instantiates a
17
- # DataMapper::Associations::HasManyAssociation and adds it to the
18
- # DataMapper::Adapters::Sql::Mappings::Table#associations array for
19
- # the Table representing Zoo.
20
- #
21
- # Zoo.new.exhibits
22
- # +exhibits+ above returns an instance of
23
- # DataMapper::Associations::HasManyAssociation::Set. This instance
24
- # needs to access the actual HasManyAssociation instance in order
25
- # to access the mapping information within. The DataMapper::Associations::Reference
26
- # abstract-class for the Set provides the Reference#association method in order to
27
- # provide easy access to this information.
28
- class Reference
29
-
30
- # +instance+ is a mapped object instance. ie: #<Zoo:0x123456 ...>
31
- # +association_name+ is the Symbol used to look up the Association
32
- # instance within the DataMapper::Adapters::Sql::Mappings::Table
33
- def initialize(instance, association_name)
34
- @instance, @association_name = instance, association_name.to_sym
35
- @instance.loaded_associations << self
36
- end
37
-
38
- # #association provides lazily initialized access to the declared
39
- # Association.
40
- def association
41
- @association || (@association = @instance.database_context.table(@instance.class).associations[@association_name])
42
- end
43
-
44
- end
45
- end
46
-
47
- end
@@ -1,73 +0,0 @@
1
- module DataMapper
2
-
3
- module Attributes
4
-
5
- def self.included(klass)
6
- klass.const_set('ATTRIBUTES', Set.new) unless klass.const_defined?('ATTRIBUTES')
7
- end
8
-
9
- def attributes
10
- __get_attributes(true)
11
- end
12
-
13
- # Mass-assign mapped fields.
14
- def attributes=(values_hash)
15
- __set_attributes(values_hash, true)
16
- end
17
-
18
- private
19
-
20
- def __method_defined?(name, public_only = true)
21
- if public_only
22
- self.class.public_method_defined?(name)
23
- else
24
- self.class.private_method_defined?(name) ||
25
- self.class.protected_method_defined?(name) ||
26
- self.class.public_method_defined?(name)
27
- end
28
- end
29
-
30
- def __get_attributes(public_only)
31
- pairs = {}
32
-
33
- self.class::ATTRIBUTES.each do |name|
34
- getter = if __method_defined?(name, public_only)
35
- name
36
- elsif __method_defined?(name.to_s.ensure_ends_with('?'), public_only)
37
- name.to_s.ensure_ends_with('?')
38
- else
39
- nil
40
- end
41
-
42
- if getter
43
- value = send(getter)
44
- pairs[name] = value.is_a?(Class) ? value.to_s : value
45
- end
46
- end
47
-
48
- pairs
49
- end
50
-
51
- def __set_attributes(values_hash, public_only)
52
- values_hash.each_pair do |k,v|
53
- setter_name = k.to_s.sub(/\?$/, '').ensure_ends_with('=')
54
- if __method_defined?(setter_name, public_only)
55
- send(setter_name, v)
56
- end
57
- end
58
-
59
- self
60
- end
61
-
62
- # return all attributes, regardless of their visibility
63
- def private_attributes
64
- __get_attributes(false)
65
- end
66
-
67
- # private method for setting any/all attribute values, regardless of visibility
68
- def private_attributes=(values_hash)
69
- __set_attributes(values_hash, false)
70
- end
71
- end
72
-
73
- end
@@ -1,36 +0,0 @@
1
- module DataMapper
2
- module AutoMigrations
3
- def auto_migrate!
4
- if self::subclasses.empty?
5
- table = database.table(self)
6
- table.activate_associations!
7
-
8
- table.create!(true)
9
- else
10
- schema = database.schema
11
- columns = self::subclasses.inject(schema[self].columns) do |span, subclass|
12
- span + schema[subclass].columns
13
- end
14
-
15
- table_name = schema[self].name.to_s
16
- table = schema[table_name]
17
- columns.each do |column|
18
- table.add_column(column.name, column.type, column.options)
19
- end
20
-
21
- table.activate_associations!
22
-
23
- return table.create!(true)
24
- end
25
- end
26
-
27
- private
28
- def create_table(table)
29
- raise NotImplementedError.new
30
- end
31
-
32
- def modify_table(table, columns)
33
- raise NotImplementedError.new
34
- end
35
- end
36
- end
@@ -1,17 +0,0 @@
1
- require 'data_mapper/persistence'
2
- require 'data_mapper/is/tree'
3
-
4
- module DataMapper
5
-
6
- class Base
7
- include DataMapper::Is::Tree
8
-
9
- def self.inherited(klass)
10
- klass.send(:include, DataMapper::Persistence)
11
- end
12
-
13
- def self.auto_migrate!
14
- DataMapper::Persistence.auto_migrate!
15
- end
16
- end
17
- end
@@ -1,107 +0,0 @@
1
- module DataMapper
2
-
3
- # CallbacksHelper adds a class-method ClassMethods#callbacks
4
- # when included in a class, and defines short-cut class-methods to
5
- # add delegates to callbacks for the built-in Callbacks::EVENTS.
6
- module CallbacksHelper
7
-
8
- # The ::included callback extends the included class with a
9
- # ::callbacks method, and sets up helper methods for the standard
10
- # events declared in Callbacks::EVENTS.
11
- def self.included(base)
12
- base.extend(ClassMethods)
13
-
14
- # Declare helpers for the standard EVENTS
15
- Callbacks::EVENTS.each do |name|
16
- base.class_eval <<-EOS
17
- def self.#{name}(string = nil, &block)
18
- if string.nil?
19
- callbacks.add(:#{name}, block)
20
- else
21
- callbacks.add(:#{name}, string)
22
- end
23
- end
24
- EOS
25
- end
26
- end
27
-
28
- # Defines class-methods for the class that CallbacksHelper is
29
- # included in.
30
- module ClassMethods
31
-
32
- # Provides lazily initialized access to a Callbacks instance.
33
- def callbacks
34
- @callbacks || ( @callbacks = DataMapper::Callbacks.new )
35
- end
36
- end
37
- end
38
-
39
- # Callbacks is a collection to assign and execute blocks of code when
40
- # hooks throughout the DataMapper call Callbacks#execute. A set of the
41
- # standard callbacks is declared in the Callbacks::EVENTS array.
42
- class Callbacks
43
-
44
- # These are a collection of default callbacks that are hooked
45
- # into the DataMapper. You're free to add your own events just by
46
- # calling #add, but you'll have add the appropriate hooks into the
47
- # system to actually execute them yourself.
48
- EVENTS = [
49
- :before_materialize, :after_materialize,
50
- :before_save, :after_save,
51
- :before_create, :after_create,
52
- :before_update, :after_update,
53
- :before_destroy, :after_destroy,
54
- :before_validation, :after_validation
55
- ]
56
-
57
- # Initializes an internal Hash that ensures callback names are always
58
- # of type Symbol, and assigns an Array to store your delegating code
59
- # when the callback is looked-up by name.
60
- def initialize
61
- @callbacks = Hash.new do |h,k|
62
- raise 'Callback names must be Symbols' unless k.kind_of?(Symbol)
63
- h[k] = Set.new
64
- end
65
- end
66
-
67
- # Executes a given callback and returns TRUE or FALSE depending on the
68
- # return value of the callbacks. All callbacks must return successfully
69
- # in order for the call to #execute to return TRUE. Callbacks always
70
- # execute against an +instance+. You may pass additional arguments
71
- # which will in turn be passed to any Proc objects assigned to a specific
72
- # callback. Strings assigned to callbacks do not accept parameters.
73
- # They are instance-eval'ed instead. When the callback is a Symbol,
74
- # it is sent to the instance under the assumption it is a method call.
75
- def execute(name, instance, *args)
76
- @callbacks[name].all? do |callback|
77
- case callback
78
- when String then instance.instance_eval(callback)
79
- when Proc then callback[instance, *args]
80
- when Symbol then instance.send(callback, *args)
81
- else raise ''
82
- end
83
- end
84
- end
85
-
86
- # Asign delegating code to a callback. The +block+ parameter
87
- # can be a Proc object, a String which will be eval'ed when
88
- # the callback is executed, or a Symbol, which will be sent to
89
- # the instance executed against (as a method call).
90
- def add(name, block)
91
- callback = @callbacks[name]
92
- raise ArgumentError.new("You didn't specify a callback in String, Symbol or Proc form.") unless [String, Proc, Symbol].detect { |type| block.is_a?(type) }
93
- callback << block
94
- end
95
-
96
- def dup
97
- copy = self.class.new
98
- @callbacks.each_pair do |name, callbacks|
99
- callbacks.each do |callback|
100
- copy.add(name, callback)
101
- end
102
- end
103
- return copy
104
- end
105
- end
106
-
107
- end
@@ -1,112 +0,0 @@
1
- require 'data_mapper/identity_map'
2
-
3
- module DataMapper
4
-
5
- class Context
6
-
7
- class MaterializationError < StandardError
8
- end
9
-
10
- attr_reader :adapter
11
-
12
- def initialize(adapter)
13
- @adapter = adapter
14
- end
15
-
16
- def identity_map
17
- @identity_map || ( @identity_map = IdentityMap.new )
18
- end
19
-
20
- def first(klass, *args)
21
- id = nil
22
- options = nil
23
- table = self.table(klass)
24
- key = table.key
25
-
26
- if args.empty? # No id, no options
27
- options = { :limit => 1 }
28
- elsif args.size == 2 && args.last.kind_of?(Hash) # id AND options
29
- options = args.last.merge(key => args.first)
30
- elsif args.size == 1 # id OR options
31
- if args.first.kind_of?(Hash)
32
- options = args.first.merge(:limit => 1) # no id, add limit
33
- else
34
- options = { key => args.first } # no options, set id
35
- end
36
- else
37
- raise ArgumentError.new('Context#first takes a class, and optional type_or_id and/or options arguments')
38
- end
39
-
40
- # Account for undesired behaviour in MySQL that returns the
41
- # last inserted row when the WHERE clause contains a "#{primary_key} IS NULL".
42
- return nil if options.has_key?(key.name) && options[key.name] == nil
43
-
44
- @adapter.load(self, klass, options).first
45
- end
46
-
47
- def get(klass, keys)
48
- @adapter.get(self, klass, keys)
49
- end
50
-
51
- def all(klass, options = {})
52
- @adapter.load(self, klass, options)
53
- end
54
-
55
- def count(klass, *args)
56
- table(klass).count(*args)
57
- end
58
-
59
- def save(instance)
60
- @adapter.save(self, instance)
61
- end
62
-
63
- def destroy(instance)
64
- @adapter.delete(self, instance)
65
- end
66
-
67
- def delete_all(klass)
68
- @adapter.delete(self, klass)
69
- end
70
-
71
- def truncate(klass)
72
- table(klass).truncate!
73
- end
74
-
75
- def create_table(klass)
76
- table(klass).create!
77
- end
78
-
79
- def drop_table(klass)
80
- table(klass).drop!
81
- end
82
-
83
- def table_exists?(klass)
84
- table(klass).exists?
85
- end
86
-
87
- def column_exists_for_table?(klass, column_name)
88
- @adapter.column_exists_for_table?(klass, column_name)
89
- end
90
-
91
- def execute(*args)
92
- @adapter.execute(*args)
93
- end
94
-
95
- def query(*args)
96
- @adapter.query(*args)
97
- end
98
-
99
- def schema
100
- @adapter.schema
101
- end
102
-
103
- def table(klass)
104
- @adapter.table(klass)
105
- end
106
-
107
- def logger
108
- @logger || @logger = @adapter.logger
109
- end
110
-
111
- end
112
- end