Skip to content

Instantly share code, notes, and snippets.

@7even
Forked from foxweb/url_creator.rb
Last active August 29, 2015 14:01
Show Gist options
  • Save 7even/7a403dce92090aa8354a to your computer and use it in GitHub Desktop.
Save 7even/7a403dce92090aa8354a to your computer and use it in GitHub Desktop.
# Класс создатель объектов Url и связанных сущностей.
class UrlCreator
attr_reader :uri, :domain, :url_path, :query_string, :url
# Инициирует модель Url на основе полного URL.
#
# @param [String] full_url какой-то URL (http://www.linux.org.ru/forum/talks/8623652)
#
def initialize(full_url)
@uri = URI.parse(full_url)
end
# Возвращает созданную/найденную модель Domain.
#
# @return [Domain] каскадно созданный или первый найденный Domain
#
def create_domain
@domain = Domain.find_or_create_by_hostname(uri.host)
end
# Возвращает созданную/найденную модель UrlPath.
#
# @return [UrlPath] каскадно созданный или первый найденный UrlPath
#
def create_url_path
@url_path = UrlPath.find_or_create_by_path(uri.path, domain)
end
# Возвращает созданную/найденную модель QueryString.
#
# @return [QueryString] созданный или первый найденный QueryString
#
def create_query_string
@query_string = QueryString.create(url_path: url_path, value: uri.query)
end
def create_url
@url = Url.create(
domain: domain,
url_path: url_path.path << url_path.id,
query_string: query_string,
categories: []
)
end
# Возвращает созданную/найденную модель Url со всеми прилагающимися сущностями.
#
# @return [Url] созданный или первый найденный Url
#
def save
Url.transaction do
create_domain
create_url_path
create_query_string
create_url
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment