From 5057c63d90819ba10ba18070c8ee219000ad3c97 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sun, 7 Apr 2013 04:55:24 -0400 Subject: Move Clip validation into model Add a method to prepend 'http://' before URLs that don't include it. --- clip.rb | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'clip.rb') diff --git a/clip.rb b/clip.rb index debe4a2..49d70be 100644 --- a/clip.rb +++ b/clip.rb @@ -19,13 +19,11 @@ module Clip::Controllers def post @headers['Access-Control-Allow-Origin'] = '*' - @url_regex = /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/?)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s\`!()\[\]{};:\'\".,<>?]))/i - @result = {} - if @input.url and @url_regex.match(@input.url) and not Clip.find_by_url(@input.url) - Clip.create(:url => @input.url) - + clip = Clip.new(:url => @input.url) + + if clip.save @result[:success] = true else @result[:success] = false @@ -41,6 +39,20 @@ end module Clip::Models class Clip < Base + validates :url, :presence => true + validates :url, :uniqueness => true + validates :url, :format => { :with => /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/?)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s\`!()\[\]{};:\'\".,<>?]))/i, :message => 'Requires a valid URL' } + + def smart_add_url_protocol + unless self.url[/^http:\/\//] || self.url[/^https:\/\//] + self.url = 'http://' + self.url + end + end + + def save + self.smart_add_url_protocol + super + end end class BasicFields < V 1.0 -- cgit v1.2.3