No commit activity in last 3 years
No release in over 3 years
A DataMapper Integer type which behaves well on forms
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

DataMapper::Types::FormFriendlyInteger¶ ↑

An adaptation of the DataMapper Integer type designed to work well with web forms. It behaves in the same way as the standard DataMapper Integer type when writing the property to the database but it doesn’t immediately typecast the property unless it is an integer string. The example below illustrates this.

The reason for wanting this behaviour is to ensure that if an invalid entry is fed into a web form then when the form is re-displayed with it’s errors, the value in the form input will be as it was when it was entered.

EXAMPLE:¶ ↑

model MyModel
  include DataMapper::Resource

  property :id,         Serial
  property :a_number,   Integer
  property :ff_number,  FormFriendlyInteger
end

The a_number property will behave as follows:

my_model = MyModel.new
my_model.a_number   = 7
my_model.ff_number  = 7
my_model.a_number                       # => 7
my_model.ff_number                      # => 7
my_model.save
Model.get(my_model.id).a_number         # => 7
Model.get(my_model.id).ff_number        # => 7

my_model = MyModel.new
my_model.a_number   = -7
my_model.ff_number  = -7
my_model.a_number                       # => -7
my_model.ff_number                      # => -7
my_model.save
Model.get(my_model.id).a_number         # => -7
Model.get(my_model.id).ff_number        # => -7

my_model = MyModel.new
my_model.a_number   = "7.45"
my_model.ff_number  = "7.45"
my_model.a_number                       # => 7
my_model.ff_number                      # => "7.45"
my_model.save
Model.get(my_model.id).a_number         # => 7
Model.get(my_model.id).ff_number        # => 7

my_model = MyModel.new
my_model.a_number   = "not a number"
my_model.ff_number  = "not a number"
my_model.a_number                       # => nil
my_model.ff_number                      # => "not a number"
my_model.save
Model.get(my_model.id).a_number         # => 0
Model.get(my_model.id).ff_number        # => 0

my_model = MyModel.new
my_model.a_number   = []                # => nothing raised
my_model.ff_number  = []                # => raise(ArgumentError, '+value+ must be nil or a String')