Module DataMapper::Adapters::Sql::Coersion
In: lib/data_mapper/adapters/sql/coersion.rb
lib/data_mapper/adapters/sql/coersion.rb

Coersion is a mixin that allows for coercing database values to Ruby Types.

DESIGN: Probably should handle the opposite scenario here too. I believe that‘s currently in DataMapper::Database, which is obviously not a very good spot for it.

Methods

Classes and Modules

Class DataMapper::Adapters::Sql::Coersion::CoersionError

Constants

TRUE_ALIASES = ['true'.freeze, 'TRUE'.freeze, '1'.freeze, 1]
FALSE_ALIASES = [nil, '0'.freeze, 0]
TRUE_ALIASES = ['true'.freeze, 'TRUE'.freeze, '1'.freeze, 1]
FALSE_ALIASES = [nil, '0'.freeze, 0]

Public Class methods

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 20
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

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 20
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

Public Instance methods

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 25
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

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 25
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

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 47
47:         def type_cast_class(raw_value)
48:           return nil if raw_value.blank?
49:           Object::recursive_const_get(raw_value)
50:         end

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 47
47:         def type_cast_class(raw_value)
48:           return nil if raw_value.blank?
49:           Object::recursive_const_get(raw_value)
50:         end

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 87
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

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 87
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

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 75
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

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 75
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

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 59
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

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 59
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

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 66
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

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 66
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

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 52
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

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 52
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

[Source]

     # File lib/data_mapper/adapters/sql/coersion.rb, line 98
 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

[Source]

     # File lib/data_mapper/adapters/sql/coersion.rb, line 98
 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

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 35
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

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 35
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

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 41
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

[Source]

    # File lib/data_mapper/adapters/sql/coersion.rb, line 41
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

[Source]

     # File lib/data_mapper/adapters/sql/coersion.rb, line 108
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

[Source]

     # File lib/data_mapper/adapters/sql/coersion.rb, line 108
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

[Validate]