Sha256: f78e0394b330a311ddc461acc3cd4dccb69098040a748c1f69c4862648d2f36b

Contents?: true

Size: 1.28 KB

Versions: 4

Compression:

Stored size: 1.28 KB

Contents

module OpenConferenceWare
  module NormalizeUrlMixin
    def self.included(mixee)
      mixee.send(:extend, ClassMethods)
      mixee.send(:include, ClassMethods)
    end

    module ClassMethods
      # Return a normalized URL, with the scheme prefix added, or raise an
      # URI::InvalidURIError if invalid.
      def normalize_url!(url)
        uri = URI.parse(url.strip)
        uri.scheme = 'http' unless ['http','ftp'].include?(uri.scheme) || uri.scheme.nil?
        return URI.parse(uri.scheme.nil? ? 'http://'+url.strip : uri.to_s).normalize.to_s
      end

      # Validate that +attributes+ each contain a valid URL or are blank. If any
      # are invalid, returns false. Invalid attributes will be marked with an
      # ActiveRecord validation error.
      def validate_url_attribute(*attributes)
        valid = true
        for attribute in [attributes].flatten
          value = self.read_attribute(attribute)
          next if value.blank?
          begin
            url = self.normalize_url!(value)
            self.send("#{attribute}=", url)
          rescue URI::InvalidURIError => e
            self.errors.add(attribute, 'is invalid')
            valid = false
          end
        end
        return valid
      end
    end

    include ClassMethods
    extend ClassMethods
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
open_conference_ware-1.0.0.pre4 app/mixins/open_conference_ware/normalize_url_mixin.rb
open_conference_ware-1.0.0.pre3 app/mixins/open_conference_ware/normalize_url_mixin.rb
open_conference_ware-1.0.0.pre2 app/mixins/open_conference_ware/normalize_url_mixin.rb
open_conference_ware-1.0.0.pre1 app/mixins/open_conference_ware/normalize_url_mixin.rb