From f18460cd40bb70b076c77fe7a05514c6fa0dcbd3 Mon Sep 17 00:00:00 2001 From: Vaughan Kelly Guy Date: Wed, 10 Sep 2014 17:21:11 -0400 Subject: [PATCH] RMQ::Validation.add_validator method + spec --- motion/ruby_motion_query/validation.rb | 4 ++++ spec/validation.rb | 29 ++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/motion/ruby_motion_query/validation.rb b/motion/ruby_motion_query/validation.rb index fd7ff05..86ef2bf 100644 --- a/motion/ruby_motion_query/validation.rb +++ b/motion/ruby_motion_query/validation.rb @@ -206,6 +206,10 @@ module RubyMotionQuery (value.to_s =~ regex) != nil end + def add_validator(rule, &block) + @@validation_methods[rule] = block + end + end end end diff --git a/spec/validation.rb b/spec/validation.rb index 22bff5b..211b169 100644 --- a/spec/validation.rb +++ b/spec/validation.rb @@ -276,4 +276,33 @@ describe 'validation' do end end + + describe 'adding a custom validator' do + before do + @rmq.validation.add_validator(:start_with) do |value, opts| + value.start_with?(opts[:prefix]) + end + end + + it "should not raise a RuntimeError for a missing validation method" do + should.not.raise(RuntimeError) do + validation = @rmq.validation.new(:start_with) + end + end + + it "should validate at utility and selection level" do + # Utility Level + @rmq.validation.valid?('test', :start_with, {prefix: 'te'}).should == true + @rmq.validation.valid?('test', :start_with, {prefix: 'est'}).should == false + + # Validation Selection level + vc = UIViewController.new + vc.rmq.append(UITextField).validates(:start_with, prefix: 'x').data('test').tag(:one) + vc.rmq(:one).valid?.should == false + vc.rmq.append(UITextField).validates(:start_with, prefix: 't').data('test').tag(:two) + vc.rmq(:two).valid?.should == true + end + end + + end