datamapper 0.3.2 → 0.9.3

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 (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