activevalidators 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +2 -2
- data/README.md +2 -2
- data/activevalidators.gemspec +1 -1
- data/lib/active_model/validations/email_validator.rb +1 -1
- data/lib/active_model/validations/phone_validator.rb +11 -0
- data/lib/active_model/validations/respond_to_validator.rb +1 -1
- data/lib/active_model/validations/url_validator.rb +1 -1
- data/lib/active_validators.rb +1 -0
- data/spec/models/phone_validator_model.rb +7 -0
- data/spec/specs/email_spec.rb +17 -6
- data/spec/specs/phone_spec.rb +57 -0
- data/spec/specs/respond_to_spec.rb +18 -8
- data/spec/specs/url_spec.rb +16 -5
- metadata +7 -2
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            PATH
         | 
| 2 2 | 
             
              remote: .
         | 
| 3 3 | 
             
              specs:
         | 
| 4 | 
            -
                 | 
| 4 | 
            +
                activevalidators (1.0.2)
         | 
| 5 5 | 
             
                  activemodel (>= 3.0.0)
         | 
| 6 6 | 
             
                  activerecord (>= 3.0.0)
         | 
| 7 7 | 
             
                  mail
         | 
| @@ -46,9 +46,9 @@ PLATFORMS | |
| 46 46 | 
             
              ruby
         | 
| 47 47 |  | 
| 48 48 | 
             
            DEPENDENCIES
         | 
| 49 | 
            -
              ActiveValidators!
         | 
| 50 49 | 
             
              activemodel (>= 3.0.0)
         | 
| 51 50 | 
             
              activerecord (>= 3.0.0)
         | 
| 51 | 
            +
              activevalidators!
         | 
| 52 52 | 
             
              bundler
         | 
| 53 53 | 
             
              mail
         | 
| 54 54 | 
             
              rspec
         | 
    
        data/README.md
    CHANGED
    
    | @@ -22,14 +22,14 @@ Exhaustive list of supported validators: | |
| 22 22 |  | 
| 23 23 | 
             
            * `email` : checks the email based on the `mail` gem
         | 
| 24 24 | 
             
            * `url`   : checks the url based on a regular expression
         | 
| 25 | 
            -
             | 
| 25 | 
            +
            * `phone` : checks the phone number based on a regular expression
         | 
| 26 26 |  | 
| 27 27 | 
             
            Todo
         | 
| 28 28 | 
             
            ----
         | 
| 29 29 |  | 
| 30 30 | 
             
            Lots of improvements can be made:
         | 
| 31 31 |  | 
| 32 | 
            -
            * Add I18n of error messages
         | 
| 32 | 
            +
            * Add I18n specific types of error messages for each validator
         | 
| 33 33 | 
             
            * Implement new validators
         | 
| 34 34 | 
             
            * ...
         | 
| 35 35 |  | 
    
        data/activevalidators.gemspec
    CHANGED
    
    
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            module ActiveModel
         | 
| 2 | 
            +
              module Validations
         | 
| 3 | 
            +
                class PhoneValidator < EachValidator
         | 
| 4 | 
            +
                  def validate_each(record, attribute, value)
         | 
| 5 | 
            +
                    unless value =~ /^\d{3}-\d{3}-\d{4}|\d{3}\.\d{3}\.\d{4}|\d{10}|\d{3}\s\d{3}\s\d{4}|\(\d{3}\)\s\d{3}-\d{4}$/i
         | 
| 6 | 
            +
                      record.errors.add(attribute)
         | 
| 7 | 
            +
                    end
         | 
| 8 | 
            +
                  end
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
            end
         | 
| @@ -6,7 +6,7 @@ module ActiveModel | |
| 6 6 | 
             
                    responders = options.dup
         | 
| 7 7 | 
             
                    RESERVED_OPTIONS.each do |opt,should_apply| responders.delete(opt) end
         | 
| 8 8 | 
             
                    responders.each do |method,dummy|
         | 
| 9 | 
            -
                      record.errors | 
| 9 | 
            +
                      record.errors.add(attribute) unless value.respond_to? method
         | 
| 10 10 | 
             
                    end
         | 
| 11 11 | 
             
                  end
         | 
| 12 12 | 
             
                end
         | 
| @@ -3,7 +3,7 @@ module ActiveModel | |
| 3 3 | 
             
                class UrlValidator < EachValidator
         | 
| 4 4 | 
             
                  def validate_each(record, attribute, value)
         | 
| 5 5 | 
             
                    unless value =~ /^https?:\/\/(?i)[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/
         | 
| 6 | 
            -
                      record.errors | 
| 6 | 
            +
                      record.errors.add(attribute)
         | 
| 7 7 | 
             
                    end
         | 
| 8 8 | 
             
                  end
         | 
| 9 9 | 
             
                end
         | 
    
        data/lib/active_validators.rb
    CHANGED
    
    
    
        data/spec/specs/email_spec.rb
    CHANGED
    
    | @@ -4,14 +4,25 @@ describe "Email Validation" do | |
| 4 4 | 
             
              it "accepts valid emails" do
         | 
| 5 5 | 
             
                model = Models::EmailValidatorModel.new
         | 
| 6 6 | 
             
                model.email = 'franck@verrot.fr'
         | 
| 7 | 
            -
                model.valid?.should  | 
| 7 | 
            +
                model.valid?.should be(true)
         | 
| 8 8 | 
             
                model.should have(0).errors
         | 
| 9 9 | 
             
              end
         | 
| 10 10 |  | 
| 11 | 
            -
               | 
| 12 | 
            -
                model  | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 11 | 
            +
              describe "for invalid emails" do
         | 
| 12 | 
            +
                let(:model) do
         | 
| 13 | 
            +
                  Models::EmailValidatorModel.new.tap do |m|
         | 
| 14 | 
            +
                    m.email = 'franck.fr'
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                it "rejects invalid emails" do
         | 
| 19 | 
            +
                  model.valid?.should be(false)
         | 
| 20 | 
            +
                  model.should have(1).errors
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                it "generates an error message of type invalid" do
         | 
| 24 | 
            +
                  model.valid?.should be(false)
         | 
| 25 | 
            +
                  model.errors[:email].should == [model.errors.generate_message(:email, :invalid)]
         | 
| 26 | 
            +
                end
         | 
| 16 27 | 
             
              end
         | 
| 17 28 | 
             
            end
         | 
| @@ -0,0 +1,57 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe "Phone Validation" do
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              it 'should validate format of phone with ###-###-####' do
         | 
| 6 | 
            +
                model = Models::PhoneValidatorModel.new
         | 
| 7 | 
            +
                model.phone = '999-999-9999'
         | 
| 8 | 
            +
                model.valid?.should be(true)
         | 
| 9 | 
            +
                model.should have(0).errors
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              it 'should validate format of phone with ##########' do
         | 
| 13 | 
            +
                model = Models::PhoneValidatorModel.new
         | 
| 14 | 
            +
                model.phone = '9999999999'
         | 
| 15 | 
            +
                model.valid?.should be(true)
         | 
| 16 | 
            +
                model.should have(0).errors
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              it 'should validate format of phone with ###.###.####' do
         | 
| 20 | 
            +
                model = Models::PhoneValidatorModel.new
         | 
| 21 | 
            +
                model.phone = '999.999.9999'
         | 
| 22 | 
            +
                model.valid?.should be(true)
         | 
| 23 | 
            +
                model.should have(0).errors
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              it 'should validate format of phone with ### ### ####' do
         | 
| 27 | 
            +
                model = Models::PhoneValidatorModel.new
         | 
| 28 | 
            +
                model.phone = '999 999 9999'
         | 
| 29 | 
            +
                model.valid?.should be(true)
         | 
| 30 | 
            +
                model.should have(0).errors
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              it 'should validate format of phone with (###) ###-####' do
         | 
| 34 | 
            +
                model = Models::PhoneValidatorModel.new
         | 
| 35 | 
            +
                model.phone = '(999) 999-9999'
         | 
| 36 | 
            +
                model.valid?.should be(true)
         | 
| 37 | 
            +
                model.should have(0).errors
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              describe "for invalid formats" do
         | 
| 41 | 
            +
                let(:model) do
         | 
| 42 | 
            +
                  Models::PhoneValidatorModel.new.tap do |m|
         | 
| 43 | 
            +
                    m.phone = '999'
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                it "rejects invalid formats" do
         | 
| 48 | 
            +
                  model.valid?.should be(false)
         | 
| 49 | 
            +
                  model.should have(1).errors
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                it "generates an error message of type invalid" do
         | 
| 53 | 
            +
                  model.valid?.should be(false)
         | 
| 54 | 
            +
                  model.errors[:phone].should == [model.errors.generate_message(:phone, :invalid)]
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
              end
         | 
| 57 | 
            +
            end
         | 
| @@ -7,17 +7,27 @@ describe "Respond To Validation" do | |
| 7 7 | 
             
                model.global_condition = true
         | 
| 8 8 | 
             
                model.local_condition = true
         | 
| 9 9 |  | 
| 10 | 
            -
                model.valid?.should  | 
| 10 | 
            +
                model.valid?.should be(true)
         | 
| 11 11 | 
             
                model.should have(0).errors
         | 
| 12 12 | 
             
              end
         | 
| 13 13 |  | 
| 14 | 
            -
               | 
| 15 | 
            -
                model  | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 14 | 
            +
              describe "when does not respond_to?" do
         | 
| 15 | 
            +
                let(:model) do
         | 
| 16 | 
            +
                  Models::RespondToValidatorModel.new.tap do |m|
         | 
| 17 | 
            +
                    m.responder        = 42
         | 
| 18 | 
            +
                    m.global_condition = true
         | 
| 19 | 
            +
                    m.local_condition  = true
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                it "rejects the responder" do
         | 
| 24 | 
            +
                  model.valid?.should be(false)
         | 
| 25 | 
            +
                  model.should have(1).errors
         | 
| 26 | 
            +
                end
         | 
| 19 27 |  | 
| 20 | 
            -
                 | 
| 21 | 
            -
             | 
| 28 | 
            +
                it "generates an error message of type invalid" do
         | 
| 29 | 
            +
                  model.valid?.should be(false)
         | 
| 30 | 
            +
                  model.errors[:responder].should == [model.errors.generate_message(:responder, :invalid)]
         | 
| 31 | 
            +
                end
         | 
| 22 32 | 
             
              end
         | 
| 23 33 | 
             
            end
         | 
    
        data/spec/specs/url_spec.rb
    CHANGED
    
    | @@ -8,10 +8,21 @@ describe "Url Validation" do | |
| 8 8 | 
             
                model.should have(0).errors
         | 
| 9 9 | 
             
              end
         | 
| 10 10 |  | 
| 11 | 
            -
               | 
| 12 | 
            -
                model  | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 11 | 
            +
              describe "for invalid emails" do
         | 
| 12 | 
            +
                let(:model) do
         | 
| 13 | 
            +
                  Models::UrlValidatorModel.new.tap do |m|
         | 
| 14 | 
            +
                    m.url = 'http://^^^^.fr'
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                it "rejects invalid emails" do
         | 
| 19 | 
            +
                  model.valid?.should be(false)
         | 
| 20 | 
            +
                  model.should have(1).errors
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                it "generates an error message of type invalid" do
         | 
| 24 | 
            +
                  model.valid?.should be(false)
         | 
| 25 | 
            +
                  model.errors[:url].should == [model.errors.generate_message(:url, :invalid)]
         | 
| 26 | 
            +
                end
         | 
| 16 27 | 
             
              end
         | 
| 17 28 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version | |
| 5 5 | 
             
              segments: 
         | 
| 6 6 | 
             
              - 1
         | 
| 7 7 | 
             
              - 0
         | 
| 8 | 
            -
              -  | 
| 9 | 
            -
              version: 1.0. | 
| 8 | 
            +
              - 2
         | 
| 9 | 
            +
              version: 1.0.2
         | 
| 10 10 | 
             
            platform: ruby
         | 
| 11 11 | 
             
            authors: 
         | 
| 12 12 | 
             
            - Franck Verrot
         | 
| @@ -132,14 +132,17 @@ files: | |
| 132 132 | 
             
            - activevalidators.gemspec
         | 
| 133 133 | 
             
            - autotest/discover.rb
         | 
| 134 134 | 
             
            - lib/active_model/validations/email_validator.rb
         | 
| 135 | 
            +
            - lib/active_model/validations/phone_validator.rb
         | 
| 135 136 | 
             
            - lib/active_model/validations/respond_to_validator.rb
         | 
| 136 137 | 
             
            - lib/active_model/validations/url_validator.rb
         | 
| 137 138 | 
             
            - lib/active_validators.rb
         | 
| 138 139 | 
             
            - spec/models/email_validator_model.rb
         | 
| 140 | 
            +
            - spec/models/phone_validator_model.rb
         | 
| 139 141 | 
             
            - spec/models/respond_to_validator_model.rb
         | 
| 140 142 | 
             
            - spec/models/url_validator_model.rb
         | 
| 141 143 | 
             
            - spec/spec_helper.rb
         | 
| 142 144 | 
             
            - spec/specs/email_spec.rb
         | 
| 145 | 
            +
            - spec/specs/phone_spec.rb
         | 
| 143 146 | 
             
            - spec/specs/respond_to_spec.rb
         | 
| 144 147 | 
             
            - spec/specs/url_spec.rb
         | 
| 145 148 | 
             
            has_rdoc: true
         | 
| @@ -176,9 +179,11 @@ specification_version: 3 | |
| 176 179 | 
             
            summary: Collection of ActiveModel/ActiveRecord validations
         | 
| 177 180 | 
             
            test_files: 
         | 
| 178 181 | 
             
            - spec/models/email_validator_model.rb
         | 
| 182 | 
            +
            - spec/models/phone_validator_model.rb
         | 
| 179 183 | 
             
            - spec/models/respond_to_validator_model.rb
         | 
| 180 184 | 
             
            - spec/models/url_validator_model.rb
         | 
| 181 185 | 
             
            - spec/spec_helper.rb
         | 
| 182 186 | 
             
            - spec/specs/email_spec.rb
         | 
| 187 | 
            +
            - spec/specs/phone_spec.rb
         | 
| 183 188 | 
             
            - spec/specs/respond_to_spec.rb
         | 
| 184 189 | 
             
            - spec/specs/url_spec.rb
         |