class DynamicSitemaps::SitemapGenerator

Attributes

counter[W]
page[W]
sitemap[R]

Public Class Methods

new(sitemap) click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 6
def initialize(sitemap)
  unless self.class.included_modules.include?(Rails.application.routes.url_helpers)
    self.class.send :include, Rails.application.routes.url_helpers
  end
  @sitemap = sitemap
end

Public Instance Methods

counter() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 78
def counter
  @counter ||= 0
end
ensure_host!() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 110
def ensure_host!
  raise "No host specified. Please specify a host using `host \"www.mydomain.com\"` at the top of your sitemap configuration file." if sitemap.host.blank?
end
file() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 114
def file
  @file ||= begin
    files << file_name
    FileUtils.mkdir_p folder_path
    File.open(path, "w")
  end
end
file_name() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 90
def file_name
  sitemap.name.to_s + (page > 1 ? page.to_s : "") + ".xml"
end
files() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 122
def files
  @files ||= []
end
folder() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 94
def folder
  sitemap.folder
end
folder_path() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 98
def folder_path
  "#{DynamicSitemaps.temp_path}/#{folder}"
end
format_date(date) click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 150
def format_date(date)
  if date.is_a?(Date)
    date.strftime("%Y-%m-%d")
  else
    date.to_datetime.utc.strftime("%Y-%m-%dT%H:%M:%S%:z")
  end
end
format_url(url) click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 141
def format_url(url)
  case url
  when ActiveRecord::Base
    polymorphic_url(url)
  else
    url
  end
end
generate() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 13
def generate
  ensure_host!
  write_beginning
  write_urls
  write_end
  
  file.close
  
  SitemapResult.new(sitemap, files)
end
handle_collection() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 60
def handle_collection
  sitemap.collection.find_each do |record|
    if sitemap.block
      instance_exec record, &sitemap.block
    else
      url record, last_mod: (record.respond_to?(:updated_at) ? record.updated_at : nil)
    end
  end
end
host() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 106
def host
  sitemap.host
end
increment_counter() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 82
def increment_counter
  self.counter += 1
end
next_page() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 126
def next_page
  write_end
  reset_counter
  file.close
  @file = nil
  self.page += 1
  write_beginning
end
page() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 74
def page
  @page ||= 1
end
path() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 102
def path
  "#{folder_path}/#{file_name}"
end
per_page() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 70
def per_page
  sitemap.per_page
end
reset_counter() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 86
def reset_counter
  @counter = 1
end
url(url, options = {}) click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 135
def url(url, options = {})
  increment_counter
  next_page if counter > per_page
  write_url url, options
end
write(*lines) click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 56
def write(*lines)
  file.puts lines
end
write_beginning() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 24
def write_beginning
  write '<?xml version="1.0" encoding="UTF-8"?>',
        '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'
end
write_end() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 52
def write_end
  write '</urlset>'
end
write_url(url, options = {}) click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 37
def write_url(url, options = {})
  write '<url>'
  write '<loc>' + format_url(url) + '</loc>'
  if last_mod = options[:last_mod]
    write '<lastmod>' + format_date(last_mod) + '</lastmod>'
  end
  if change_freq = options[:change_freq]
    write '<changefreq>' + change_freq + '</changefreq>'
  end
  if priority = options[:priority]
    write '<priority>' + priority.to_s + '</priority>'
  end
  write '</url>'
end
write_urls() click to toggle source
# File lib/dynamic_sitemaps/sitemap_generator.rb, line 29
def write_urls
  if sitemap.collection
    handle_collection
  else
    instance_eval &sitemap.block
  end
end