shorten/lib/shortenurl.rb

49 lines
934 B
Ruby
Raw Normal View History

2010-09-14 05:00:03 +00:00
require 'anybase'
2010-09-13 08:58:49 +00:00
class ShortenUrl < Sequel::Model
2010-09-14 05:00:03 +00:00
plugin :validation_helpers
2010-09-13 08:58:49 +00:00
unless table_exists?
set_schema do
primary_key :id
String :key
String :url
Boolean :image
2010-09-13 08:58:49 +00:00
Time :time
end
create_table
end
2010-09-14 05:00:03 +00:00
def validate
super
validates_presence [:url, :key]
validates_unique :url
validates_unique :key
end
2010-09-13 08:58:49 +00:00
def short_url
2010-09-14 05:00:03 +00:00
"#{Shorten.base_url}#{self.key.to_s}"
2010-09-13 08:58:49 +00:00
end
def self.create_url(link, image = false)
2010-09-14 05:00:03 +00:00
uri = URI::parse(link)
raise "Invalid URL" unless uri.kind_of? URI::HTTP or uri.kind_of? URI::HTTPS
2010-09-13 08:58:49 +00:00
url = self.filter(:url => link).first
2010-09-14 05:00:03 +00:00
if !url
key = Anybase::Base62.random(Shorten.path_size)
key_check = self.filter(:url => key).first
while key_check
key = Anybase::Base62.random(Shorten.path_size)
key_check = self.filter(:url => key).first
2010-09-13 08:58:49 +00:00
end
2010-09-14 05:00:03 +00:00
url = self.new(:url => link, :key => key, :image => image)
2010-09-14 05:00:03 +00:00
url.save
2010-09-13 08:58:49 +00:00
end
url
end
end