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,72 +0,0 @@
1
- require 'data_mapper/adapters/data_object_adapter'
2
- begin
3
- gem 'do_mysql', '<=0.2.4'
4
- require 'do_mysql'
5
- rescue LoadError
6
- STDERR.puts <<-EOS
7
- You must install the DataObjects::Mysql driver.
8
- gem install do_mysql
9
- EOS
10
- exit
11
- end
12
-
13
- module DataMapper
14
- module Adapters
15
-
16
- class MysqlAdapter < DataObjectAdapter
17
-
18
- TRUE_ALIASES << "T".freeze << "\004\bT".freeze
19
- FALSE_ALIASES << "F".freeze << "\004\bF".freeze
20
-
21
- def empty_insert_sql
22
- "() VALUES ()"
23
- end
24
-
25
- def create_connection
26
-
27
- connection_string = ""
28
- builder = lambda { |k,v| connection_string << "#{k}=#{@configuration.send(v)} " unless @configuration.send(v).blank? }
29
-
30
- builder['host', :host]
31
- builder['user', :username]
32
- builder['password', :password]
33
- builder['dbname', :database]
34
- builder['socket', :socket]
35
- builder['port', :port]
36
-
37
- logger.debug { connection_string.strip }
38
-
39
- conn = DataObject::Mysql::Connection.new(connection_string.strip)
40
- conn.logger = self.logger
41
- conn.open
42
- cmd = conn.create_command("SET NAMES UTF8")
43
- cmd.execute_non_query
44
- return conn
45
- end
46
-
47
- def database_column_name
48
- "TABLE_SCHEMA"
49
- end
50
-
51
- module Mappings
52
-
53
- def to_create_table_sql
54
- @to_create_table_sql || @to_create_table_sql = begin
55
- "CREATE TABLE #{to_sql} (#{columns.map { |c| c.to_long_form }.join(', ')}) Type=MyISAM CHARACTER SET utf8"
56
- end
57
- end
58
-
59
- class Schema
60
-
61
- def database_tables
62
- get_database_tables(@adapter.schema.name)
63
- end
64
-
65
- end
66
-
67
-
68
- end # module Mappings
69
- end # class MysqlAdapter
70
-
71
- end # module Adapters
72
- end # module DataMapper
@@ -1,258 +0,0 @@
1
- require 'data_mapper/adapters/data_object_adapter'
2
- begin
3
- gem 'do_postgres', '<=0.2.4'
4
- require 'do_postgres'
5
- rescue LoadError
6
- STDERR.puts <<-EOS
7
- You must install the DataObjects::Postgres driver.
8
- gem install do_postgres
9
- EOS
10
- exit
11
- end
12
-
13
- module DataMapper
14
- module Adapters
15
-
16
- class PostgresqlAdapter < DataObjectAdapter
17
-
18
- def schema_search_path
19
- @schema_search_path || @schema_search_path = begin
20
- if @configuration.schema_search_path
21
- @configuration.schema_search_path.split(',').map do |part|
22
- part.blank? ? nil : part.strip.ensure_wrapped_with("'")
23
- end.compact
24
- else
25
- []
26
- end
27
- end
28
- end
29
-
30
- def create_connection
31
- connection_string = ""
32
- builder = lambda do |k,v|
33
- connection_string << "#{k}=#{@configuration.send(v)} " unless
34
- @configuration.send(v).blank?
35
- end
36
- builder['host', :host]
37
- builder['user', :username]
38
- builder['password', :password]
39
- builder['dbname', :database]
40
- builder['socket', :socket]
41
- builder['port', :port]
42
- conn = DataObject::Postgres::Connection.new(connection_string.strip)
43
- conn.logger = self.logger
44
- conn.open
45
-
46
- unless schema_search_path.empty?
47
- execute("SET search_path TO #{schema_search_path}")
48
- end
49
-
50
- return conn
51
- end
52
-
53
- def database_column_name
54
- "TABLE_CATALOG"
55
- end
56
-
57
- TABLE_QUOTING_CHARACTER = '"'.freeze
58
- COLUMN_QUOTING_CHARACTER = '"'.freeze
59
-
60
- TYPES.merge!({
61
- :integer => 'integer'.freeze,
62
- :datetime => 'timestamp with time zone'.freeze
63
- })
64
-
65
- module Mappings
66
- class Table
67
- def sequence_sql
68
- @sequence_sql ||= quote_table("_id_seq").freeze
69
- end
70
-
71
- def to_create_table_sql
72
- schema_name = name.index('.') ? name.split('.').first : nil
73
- schema_list = @adapter.query('SELECT nspname FROM pg_namespace').join(',')
74
-
75
- sql = if schema_name and !schema_list.include?(schema_name)
76
- "CREATE SCHEMA #{@adapter.quote_table_name(schema_name)}; "
77
- else
78
- ''
79
- end
80
-
81
- sql << "CREATE TABLE " << to_sql
82
-
83
- sql << " (" << columns.map do |column|
84
- column.to_long_form
85
- end.join(', ') << ")"
86
-
87
- return sql
88
- end
89
-
90
- # The logic of this comes from AR; it was modified for smarter typecasting
91
- def unquote_default(default)
92
- # Boolean types
93
- return true if default =~ /true/i
94
- return false if default =~ /false/i
95
-
96
- # Char/String/Bytea type values
97
- return $1 if default =~ /^'(.*)'::(bpchar|text|character varying|bytea)$/
98
-
99
- # Numeric values
100
- return value.to_f if default =~ /^-?[0-9]+(\.[0-9]*)/
101
- return value.to_i if default =~ /^-?[0-9]+/
102
-
103
- # Fixed dates / times
104
- return Date.parse($1) if default =~ /^'(.+)'::date/
105
- return DateTime.parse($1) if default =~ /^'(.+)'::timestamp/
106
-
107
- # Anything else is blank, some user type, or some function
108
- # and we can't know the value of that, so return nil.
109
- return nil
110
- end
111
-
112
- # def to_exists_sql
113
- # @to_exists_sql || @to_exists_sql = <<-EOS.compress_lines
114
- # SELECT TABLE_NAME
115
- # FROM INFORMATION_SCHEMA.TABLES
116
- # WHERE TABLE_NAME = ?
117
- # AND TABLE_CATALOG = ?
118
- # EOS
119
- # end
120
- #
121
- # def to_column_exists_sql
122
- # @to_column_exists_sql || @to_column_exists_sql = <<-EOS.compress_lines
123
- # SELECT TABLE_NAME, COLUMN_NAME
124
- # FROM INFORMATION_SCHEMA.COLUMNS
125
- # WHERE TABLE_NAME = ?
126
- # AND COLUMN_NAME = ?
127
- # AND TABLE_CATALOG = ?
128
- # EOS
129
- # end
130
-
131
- private
132
-
133
- def quote_table(table_suffix = nil)
134
- parts = name.split('.')
135
- parts.last << table_suffix if table_suffix
136
- parts.map { |part|
137
- @adapter.quote_table_name(part) }.join('.')
138
- end
139
- end # class Table
140
-
141
- class Schema
142
-
143
- def database_tables
144
- get_database_tables("public")
145
- end
146
-
147
- end
148
-
149
- class Column
150
- def serial_declaration
151
- "SERIAL"
152
- end
153
-
154
- def check_declaration
155
- "CHECK (" << check << ")"
156
- end
157
-
158
- def to_alter_sql
159
- "ALTER TABLE " << table.to_sql << " ALTER COLUMN " << to_alter_form
160
- end
161
-
162
- def alter!
163
- result = super
164
- reset_alter_state!
165
- result
166
- end
167
-
168
- def reset_alter_state!
169
- @type_changed = false
170
- @default_changed = false
171
- end
172
-
173
- def default=(value)
174
- @default_changed = true
175
- super
176
- end
177
-
178
- def type=(value)
179
- @type_changed = true
180
- super
181
- end
182
-
183
- def to_alter_form
184
- sql = to_sql.dup
185
-
186
- changes = 0
187
-
188
- if @type_changed
189
- changes += 1
190
- sql << " TYPE " << type_declaration
191
- case self.type
192
- when :integer then sql << " USING #{to_sql}::integer"
193
- when :datetime then
194
- sql << " USING timestamp with time zone"
195
- end
196
- end
197
-
198
- if @default_changed
199
- sql << ", " if changes += 1 > 1
200
-
201
- if default.blank? || default_declaration.blank?
202
- sql << " DROP DEFAULT"
203
- else
204
- sql << " " << default_declaration
205
- end
206
- end
207
-
208
- sql
209
- end
210
-
211
- def to_long_form
212
- @to_long_form || begin
213
- @to_long_form = "#{to_sql}"
214
-
215
- if serial? && !serial_declaration.blank?
216
- @to_long_form << " #{serial_declaration}"
217
- if key? && !primary_key_declaration.blank?
218
- @to_long_form << " #{primary_key_declaration}"
219
- end
220
- else
221
- @to_long_form << " #{type_declaration}"
222
-
223
- unless nullable? || not_null_declaration.blank?
224
- @to_long_form << " #{not_null_declaration}"
225
- end
226
-
227
- if default && !default_declaration.blank?
228
- @to_long_form << " #{default_declaration}"
229
- end
230
-
231
- if unique? && !unique_declaration.blank?
232
- @to_long_form << " #{unique_declaration}"
233
- end
234
-
235
- if check && !check_declaration.blank?
236
- @to_long_form << " #{check_declaration}"
237
- end
238
- end
239
-
240
- @to_long_form
241
- end
242
- end
243
-
244
- # size is still required, as length in postgres behaves slightly differently
245
- def size
246
- case self.type
247
- #strings in postgres can be unlimited length
248
- when :string then return (@options.has_key?(:length) || @options.has_key?(:size) ? @size : nil)
249
- else nil
250
- end
251
- end
252
- end # class Column
253
- end # module Mappings
254
-
255
- end # class PostgresqlAdapter
256
-
257
- end # module Adapters
258
- end # module DataMapper
@@ -1,134 +0,0 @@
1
- require 'bigdecimal'
2
- require 'bigdecimal/util'
3
-
4
- module DataMapper
5
- module Adapters
6
- module Sql
7
- # Coersion is a mixin that allows for coercing database values to Ruby Types.
8
- #
9
- # DESIGN: Probably should handle the opposite scenario here too. I believe that's
10
- # currently in DataMapper::Database, which is obviously not a very good spot for
11
- # it.
12
- module Coersion
13
-
14
- class CoersionError < StandardError
15
- end
16
-
17
- TRUE_ALIASES = ['true'.freeze, 'TRUE'.freeze, '1'.freeze, 1]
18
- FALSE_ALIASES = [nil, '0'.freeze, 0]
19
-
20
- def self.included(base)
21
- base.const_set('TRUE_ALIASES', TRUE_ALIASES.dup)
22
- base.const_set('FALSE_ALIASES', FALSE_ALIASES.dup)
23
- end
24
-
25
- def type_cast_boolean(raw_value)
26
- return nil if raw_value.nil? || (raw_value.respond_to?(:empty?) && raw_value.empty?)
27
- case raw_value
28
- when TrueClass, FalseClass then raw_value
29
- when *self::class::TRUE_ALIASES then true
30
- when *self::class::FALSE_ALIASES then false
31
- else raise CoersionError.new("Can't type-cast #{raw_value.inspect} to a boolean")
32
- end
33
- end
34
-
35
- def type_cast_string(raw_value)
36
- return nil if raw_value.blank?
37
- # type-cast values should be immutable for memory conservation
38
- raw_value
39
- end
40
-
41
- def type_cast_text(raw_value)
42
- return nil if raw_value.blank?
43
- # type-cast values should be immutable for memory conservation
44
- raw_value
45
- end
46
-
47
- def type_cast_class(raw_value)
48
- return nil if raw_value.blank?
49
- Object::recursive_const_get(raw_value)
50
- end
51
-
52
- def type_cast_integer(raw_value)
53
- return nil if raw_value.blank?
54
- raw_value.to_i
55
- rescue ArgumentError
56
- nil
57
- end
58
-
59
- def type_cast_decimal(raw_value)
60
- return nil if raw_value.blank?
61
- raw_value.to_d
62
- rescue ArgumentError
63
- nil
64
- end
65
-
66
- def type_cast_float(raw_value)
67
- return nil if raw_value.blank?
68
- case raw_value
69
- when Float then raw_value
70
- when Numeric, String then raw_value.to_f
71
- else CoersionError.new("Can't type-cast #{raw_value.inspect} to a float")
72
- end
73
- end
74
-
75
- def type_cast_datetime(raw_value)
76
- return nil if raw_value.blank?
77
-
78
- case raw_value
79
- when "0000-00-00 00:00:00" then nil
80
- when DateTime then raw_value
81
- when Date then DateTime.new(raw_value) rescue nil
82
- when String then DateTime::parse(raw_value) rescue nil
83
- else raise CoersionError.new("Can't type-cast #{raw_value.inspect} to a datetime")
84
- end
85
- end
86
-
87
- def type_cast_date(raw_value)
88
- return nil if raw_value.blank?
89
-
90
- case raw_value
91
- when Date then raw_value
92
- when DateTime, Time then Date::civil(raw_value.year, raw_value.month, raw_value.day)
93
- when String then Date::parse(raw_value)
94
- else raise CoersionError.new("Can't type-cast #{raw_value.inspect} to a date")
95
- end
96
- end
97
-
98
- def type_cast_object(raw_value)
99
- return nil if raw_value.blank?
100
-
101
- begin
102
- YAML.load(raw_value)
103
- rescue
104
- raise CoersionError.new("Can't type-cast #{raw_value.inspect} to an object")
105
- end
106
- end
107
-
108
- def type_cast_value(type, raw_value)
109
- return nil if raw_value.blank?
110
-
111
- case type
112
- when :string then type_cast_string(raw_value)
113
- when :text then type_cast_text(raw_value)
114
- when :boolean then type_cast_boolean(raw_value)
115
- when :class then type_cast_class(raw_value)
116
- when :integer then type_cast_integer(raw_value)
117
- when :decimal then type_cast_decimal(raw_value)
118
- when :float then type_cast_float(raw_value)
119
- when :datetime then type_cast_datetime(raw_value)
120
- when :date then type_cast_date(raw_value)
121
- when :object then type_cast_object(raw_value)
122
- else
123
- if respond_to?("type_cast_#{type}")
124
- send("type_cast_#{type}", raw_value)
125
- else
126
- raise "Don't know how to type-cast #{{ type => raw_value }.inspect }"
127
- end
128
- end
129
- end
130
-
131
- end # module Coersion
132
- end
133
- end
134
- end