diff options
| author | Teddy Wing | 2013-04-07 04:55:24 -0400 |
|---|---|---|
| committer | Teddy Wing | 2013-04-07 04:55:24 -0400 |
| commit | 5057c63d90819ba10ba18070c8ee219000ad3c97 (patch) | |
| tree | 7cf97b477cfb2212684c7075fb7077d01bd5e05a /clip.rb | |
| parent | 51a213997274ce7581f10fa8e8ef2edd90e38a34 (diff) | |
| download | clips-5057c63d90819ba10ba18070c8ee219000ad3c97.tar.bz2 | |
Move Clip validation into model
Add a method to prepend 'http://' before URLs that don't include it.
Diffstat (limited to 'clip.rb')
| -rw-r--r-- | clip.rb | 22 |
1 files changed, 17 insertions, 5 deletions
@@ -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 |
