Sha256: 338ae6ca193655516c6d43bf0404e3a8b522cb2093697f480b45cca026af07ec
Contents?: true
Size: 1.54 KB
Versions: 1
Compression:
Stored size: 1.54 KB
Contents
module Structural module Model module TypeCasts def self.cast(type, value) casts.fetch(type, Identity).new(value).cast end protected def self.register(cast) casts[cast.type] = cast end private def self.casts @casts ||= {} end class Cast def initialize(value) @value = value end def cast value.is_a?(type) ? value : conversion end def type self.class.type end def conversion raise NotImplementedError end private def self.type raise NotImplementedError end attr_reader :value end class Identity < Cast def cast value end end class Integer < Cast def self.type ::Integer end def conversion value.to_i end TypeCasts.register(self) end class Date < Cast def self.type ::Date end def conversion ::Date.parse value end TypeCasts.register(self) end class Time < Cast def self.type ::Time end def conversion ::Time.parse value end TypeCasts.register(self) end class Money < Cast def self.type ::Money end def conversion ::Money.new value.to_i end TypeCasts.register(self) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
structural-0.0.2 | lib/structural/model/type_casts.rb |