Sha256: 214690922164cece9aeba87b2c944d37f5ed355d517a001f409e4d56f7577571
Contents?: true
Size: 1.55 KB
Versions: 1
Compression:
Stored size: 1.55 KB
Contents
module Firefly class Url include DataMapper::Resource VALID_URL_REGEX = /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix VALID_CODE_REGEX = /^[a-z0-9\-_]{3,64}$/i property :id, Serial property :url, String, :index => true, :length => 255 property :code, String, :index => true, :length => 64 property :clicks, Integer, :default => 0 property :created_at, DateTime, :default => Proc.new{Time.now} # Increase the visits counter by 1 def register_click! self.update(:clicks => self.clicks + 1) end # Shorten a long_url and return a new FireFly::Url def self.shorten(long_url, code = nil) return nil unless valid_url?(long_url) return nil unless valid_code?(code) long_url = normalize_url(long_url) the_url = Firefly::Url.first(:url => long_url) || Firefly::Url.create(:url => long_url) code ||= Firefly::Base62.encode(the_url.id.to_i) the_url.update(:code => code) if the_url.code.nil? the_url end private # Normalize the URL def self.normalize_url(url) URI.parse(URI.escape(url)).normalize.to_s end # Validates the URL to be a valid http or https one. def self.valid_url?(url) url.match(Firefly::Url::VALID_URL_REGEX) end def self.valid_code?(code) return true if code.nil? code.match(Firefly::Url::VALID_CODE_REGEX) && Firefly::Url.count(:code => code) == 0 end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
firefly-1.2.0 | lib/firefly/url.rb |