Module: Ohm::Typecast

Defined in:
lib/ohm/contrib/typecast.rb

Overview

Provides unobtrusive, non-explosive typecasting.Instead of exploding on set of an invalid value, this module takes the approach of just taking in parameters and letting you do validation yourself. The only thing this module does for you is the boilerplate casting you might need to do.

The Typecasted way


class Item < Ohm::Model
  include Ohm::Typecast

  attribute :price, Decimal
  attribute :posted, Time
end

item = Item.create(:price => "299", :posted => Time.now.utc)
item = Item[item.id]
item.price.class == Ohm::Types::Decimal
# => true

item.price.to_s == "299"
# => true

item.price * 2 == 598
# => true

item.posted.strftime('%m/%d/%Y')
# => works!!!

Examples:


# without typecasting
class Item < Ohm::Model
  attribute :price
  attribute :posted
end

item = Item.create(:price => 299, :posted => Time.now.utc)
item = Item[item.id]

# now when you try and grab `item.price`, its a string.
"299" == item.price
# => true

# you can opt to manually cast everytime, or do it in the model, i.e.

class Item
  def price
    BigDecimal(read_local(:price))
  end
end

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object



254
255
256
# File 'lib/ohm/contrib/typecast.rb', line 254

def self.included(base)
  base.extend ClassMethods
end