aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clip.rb22
1 files changed, 17 insertions, 5 deletions
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