<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.3.1" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>
<channel>
	<title>Comments on: validates_as_phone Ruby on Rails Plugin</title>
	<link>http://www.indierockmedia.com/2007/12/14/validates_as_phone-ruby-on-rails-plugin/</link>
	<description>Design + Ruby &#38; Rails Development</description>
	<pubDate>Thu, 28 Aug 2008 05:06:12 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.1</generator>
		<item>
		<title>By: Frederico Araujo</title>
		<link>http://www.indierockmedia.com/2007/12/14/validates_as_phone-ruby-on-rails-plugin/#comment-4</link>
		<dc:creator>Frederico Araujo</dc:creator>
		<pubDate>Tue, 18 Dec 2007 12:10:55 +0000</pubDate>
		<guid>http://www.indierockmedia.com/2007/12/14/validates_as_phone-ruby-on-rails-plugin/#comment-4</guid>
		<description>maybe you could add this to your plugin.
so that you can pass :force =&#62; true, to ensure it's in proper format


&lt;code&gt;
  def validate
    # REGEXP for: (XXX) XXX-XXXX 
    paren = '\([2-9]\d\d\) ?[2-9]\d\d-\d\d\d\d$';

    # REGEXP for: XXX-XXX-XXXX
    dash = '([2-9]\d\d)-[2-9]\d\d-\d\d\d\d$';
    
    # both together:
    both = Regexp.new("#{paren}&#124;#{dash}")
    
    if !fax_number.to_s.empty? &#38;&#38; !both.match(fax_number)
      errors.add("fax_number", "Fax Number is Invalid")
    end
    
    if !phone_number.to_s.empty? &#38;&#38; !both.match(phone_number)
      errors.add("phone_number", "Phone Number is Invalid")
    end
    
  end

&lt;/code&gt;


and some tests


&lt;code&gt;

  def test_new_with_invalid_phone_number
    @@invalid_numbers.each do &#124;t&#124;
      #puts "Number to test: #{t} \n"
      a = create_contact(:phone_number =&#62; t)
      #puts "INVALID \n"
      assert a.errors.on(:phone_number)
      assert_nil a.errors.on(:fax_number)
    end
  end

  
  def test_new_with_valid_phone_number
    
    @@valid_numbers.each do &#124;t&#124;
      #puts "Number to test: #{t} \n"
      a = create_contact(:phone_number =&#62; t, :fax_number =&#62; t)
      #puts "VALID \n"
      #assert a.errors.on(:phone_number)
      assert !a.new_record?, "#{a.errors.full_messages.to_sentence}"
    end
  end
  
  protected
  #validates_length_of     :state,   :is =&#62; 2, :message =&#62; "State must be 2 Digits"
  #validates_inclusion_of  :postal,  :in =&#62; 10000..99999, :message =&#62; "Postal Code must be 5 Digits"  
  #validates_presence_of   :name, :address1, :city, :state, :postal
    def create_contact(options = {})
      Contact.create({ :name =&#62; 'Fred',
        :state =&#62; 'LA', 
        :city =&#62; 'Los Angeles', 
        :postal =&#62; '12345', 
        :address1 =&#62; 'Street 1',
        :address2 =&#62; 'Street 2' }.merge(options))
    end
end

@@valid_numbers = [  "314-555-4000", "(314) 555-4000", "(314)555-4000" ]

@@invalid_numbers = [ "800 255 4400",
  "800 155 4990",
  "100 252 4400",
  "100 155 4400",
  "400 255 440",
  "300 25 4400",
  "40 255 4400",      
  "(114) 555-4000", 
  "(314) 155-4000", 
  "(114) 155-4000", 
  "(214)155-4000", 
  "(214)2a5-4000", 
  "(214)555-a000", 
  "(214)555-400", 
  "(214)55-4000", 
  "(21)555-4000", 
  "(2a4)555-4000",
  "(a14)555-4000", 
  "(214)a55-4000", 
  "(214)555-a000", 
  "(214)555-aaaa",
  "314.555.4000",
  "554-40", 
  "555-40-2",
  "555-40-21",
  "555-40-211",
  "555-40-2112",
  "555-40-21122",
  "554-400", 
  "555-400-2",
  "555-400-21",
  "555-400-211",
  "555-400-21122",
  "555-4000", 
  "555-4000-2",
  "555-4000-21",
  "555-4000-211",
  "555-4000-21123",
  "5545-40", 
  "5554-40-2",
  "5554-40-21",
  "5554-40-211",
  "5554-40-2112",
  "5554-40-21122",
  "5545-4000", 
  "5554-4000-2",
  "5554-4000-21",
  "5554-4000-211",
  "5554-4000-2113",
  "5554-4000-21123",
  "22555-4000", 
  "21455-400", 
  "21455-400-2",
  "21455-400-22",
  "14-555-40",  
  "1-525-40", 
  "214-55-2400", 
  "aas-dklfjkl-as",
  "aasdk-lfjklas",
  "aasdkl-fjk-las",
  "aasd-klfjk-las",
  "aasd-klfj-klas"
]
&lt;/code&gt;
</description>
		<content:encoded><![CDATA[<p>maybe you could add this to your plugin.<br />
so that you can pass :force =&gt; true, to ensure it&#8217;s in proper format</p>
<p><code><br />
  def validate<br />
    # REGEXP for: (XXX) XXX-XXXX<br />
    paren = '\([2-9]\d\d\) ?[2-9]\d\d-\d\d\d\d$';</p>
<p>    # REGEXP for: XXX-XXX-XXXX<br />
    dash = '([2-9]\d\d)-[2-9]\d\d-\d\d\d\d$';</p>
<p>    # both together:<br />
    both = Regexp.new("#{paren}|#{dash}")</p>
<p>    if !fax_number.to_s.empty? &amp;&amp; !both.match(fax_number)<br />
      errors.add("fax_number", "Fax Number is Invalid")<br />
    end</p>
<p>    if !phone_number.to_s.empty? &amp;&amp; !both.match(phone_number)<br />
      errors.add("phone_number", "Phone Number is Invalid")<br />
    end</p>
<p>  end</p>
<p></code></p>
<p>and some tests</p>
<p><code></p>
<p>  def test_new_with_invalid_phone_number<br />
    @@invalid_numbers.each do |t|<br />
      #puts "Number to test: #{t} \n"<br />
      a = create_contact(:phone_number =&gt; t)<br />
      #puts "INVALID \n"<br />
      assert a.errors.on(:phone_number)<br />
      assert_nil a.errors.on(:fax_number)<br />
    end<br />
  end</p>
<p>  def test_new_with_valid_phone_number</p>
<p>    @@valid_numbers.each do |t|<br />
      #puts "Number to test: #{t} \n"<br />
      a = create_contact(:phone_number =&gt; t, :fax_number =&gt; t)<br />
      #puts "VALID \n"<br />
      #assert a.errors.on(:phone_number)<br />
      assert !a.new_record?, "#{a.errors.full_messages.to_sentence}"<br />
    end<br />
  end</p>
<p>  protected<br />
  #validates_length_of     :state,   :is =&gt; 2, :message =&gt; "State must be 2 Digits"<br />
  #validates_inclusion_of  :postal,  :in =&gt; 10000..99999, :message =&gt; "Postal Code must be 5 Digits"<br />
  #validates_presence_of   :name, :address1, :city, :state, :postal<br />
    def create_contact(options = {})<br />
      Contact.create({ :name =&gt; 'Fred',<br />
        :state =&gt; 'LA',<br />
        :city =&gt; 'Los Angeles',<br />
        :postal =&gt; '12345',<br />
        :address1 =&gt; 'Street 1',<br />
        :address2 =&gt; 'Street 2' }.merge(options))<br />
    end<br />
end</p>
<p>@@valid_numbers = [  "314-555-4000", "(314) 555-4000", "(314)555-4000" ]</p>
<p>@@invalid_numbers = [ "800 255 4400",<br />
  "800 155 4990",<br />
  "100 252 4400",<br />
  "100 155 4400",<br />
  "400 255 440",<br />
  "300 25 4400",<br />
  "40 255 4400",<br />
  "(114) 555-4000",<br />
  "(314) 155-4000",<br />
  "(114) 155-4000",<br />
  "(214)155-4000",<br />
  "(214)2a5-4000",<br />
  "(214)555-a000",<br />
  "(214)555-400",<br />
  "(214)55-4000",<br />
  "(21)555-4000",<br />
  "(2a4)555-4000",<br />
  "(a14)555-4000",<br />
  "(214)a55-4000",<br />
  "(214)555-a000",<br />
  "(214)555-aaaa",<br />
  "314.555.4000",<br />
  "554-40",<br />
  "555-40-2",<br />
  "555-40-21",<br />
  "555-40-211",<br />
  "555-40-2112",<br />
  "555-40-21122",<br />
  "554-400",<br />
  "555-400-2",<br />
  "555-400-21",<br />
  "555-400-211",<br />
  "555-400-21122",<br />
  "555-4000",<br />
  "555-4000-2",<br />
  "555-4000-21",<br />
  "555-4000-211",<br />
  "555-4000-21123",<br />
  "5545-40",<br />
  "5554-40-2",<br />
  "5554-40-21",<br />
  "5554-40-211",<br />
  "5554-40-2112",<br />
  "5554-40-21122",<br />
  "5545-4000",<br />
  "5554-4000-2",<br />
  "5554-4000-21",<br />
  "5554-4000-211",<br />
  "5554-4000-2113",<br />
  "5554-4000-21123",<br />
  "22555-4000",<br />
  "21455-400",<br />
  "21455-400-2",<br />
  "21455-400-22",<br />
  "14-555-40",<br />
  "1-525-40",<br />
  "214-55-2400",<br />
  "aas-dklfjkl-as",<br />
  "aasdk-lfjklas",<br />
  "aasdkl-fjk-las",<br />
  "aasd-klfjk-las",<br />
  "aasd-klfj-klas"<br />
]<br />
</code></p>
]]></content:encoded>
	</item>
</channel>
</rss>
