class PageRankr::Site

Constants

COMPONENTS

Public Class Methods

new(site) click to toggle source
# File lib/page_rankr/site.rb, line 9
def initialize(site)
  site = "http://#{site}" unless site =~ /:\/\//
  @uri = Addressable::URI.parse(site)
  @domain = PublicSuffix.parse(@uri.host || "")

  @domain.valid? or raise DomainInvalid, "The domain provided is invalid.1"
rescue PublicSuffix::DomainInvalid, Addressable::URI::InvalidURIError
  raise DomainInvalid, "The domain provided is invalid."
end

Public Instance Methods

domain() click to toggle source
# File lib/page_rankr/site.rb, line 23
def domain
  @domain.domain
end
fragment() click to toggle source
# File lib/page_rankr/site.rb, line 43
def fragment
  @uri.fragment
end
path() click to toggle source
# File lib/page_rankr/site.rb, line 35
def path
  @uri.path
end
port() click to toggle source
# File lib/page_rankr/site.rb, line 31
def port
  @uri.port
end
query() click to toggle source
# File lib/page_rankr/site.rb, line 39
def query
  @uri.query
end
scheme() click to toggle source
# File lib/page_rankr/site.rb, line 19
def scheme
  @uri.scheme
end
subdomain() click to toggle source
# File lib/page_rankr/site.rb, line 27
def subdomain
  @domain.subdomain or domain
end
url(supported_components = [:domain]) click to toggle source
# File lib/page_rankr/site.rb, line 47
def url(supported_components = [:domain])
  components = COMPONENTS & supported_components #get ordered list

  unless components.include?(:subdomain) ^ components.include?(:domain)
    raise SupportedComponentsInvalid, "Either subdomain or domain should be set as a supported component, not both."
  end

  components.inject("") do |url, component|
    url + case component
    when :scheme
      scheme and "#{scheme}://" or ""
    when :domain
      domain
    when :subdomain
      subdomain
    when :port
      port == @uri.default_port and "" or ":#{port}"
    when :path
      path or ""
    when :query
      query and "?#{query}" or ""
    when :fragment
      fragment and "##{fragment}" or ""
    end
  end
end