Sha256: c2a0084e093eeab71006939cfc95645964fcc8e801289d87f3afb99e18b195c6

Contents?: true

Size: 995 Bytes

Versions: 1

Compression:

Stored size: 995 Bytes

Contents

require 'public_suffix'
require 'uri'

module SocialParser

  class Link

    def initialize(attrs)
      attrs.each do |key, value|
        instance_variable_set("@#{key}", value) unless value.nil?
      end
    end

    def username
      nil
    end

    def provider
      nil
    end

    def id
      nil
    end

    def embed_url
      nil
    end

    def url
      url_from_attributes
    end

    def attributes
      {
        url:      url,
        provider: provider,
        username: username
      }
    end

    private

    def url_from_attributes
      valid_url_format(@url) or valid_url_format(@url_or_username)
    end

    def valid_url_format(url)
      uri = URI.parse(url)
      return uri.to_s if %w(http https).include?(uri.scheme)
      return "http://#{url}" if PublicSuffix.valid?(URI.parse("http://#{url}").host)
    rescue URI::BadURIError, URI::InvalidURIError
      nil
    end

    def invalid_url_format?(url)
      !valid_url_format(url)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
social_parser-1.1.0 lib/social_parser/link.rb