Class: Usmu::Sitemap::SitemapFile

Inherits:
Template::GeneratedFile
  • Object
show all
Defined in:
lib/usmu/sitemap/sitemap_file.rb

Instance Method Summary collapse

Constructor Details

#initialize(generator, name, metadata = {}, type = nil, content = nil) ⇒ SitemapFile

Returns a new instance of SitemapFile.



8
9
10
11
# File 'lib/usmu/sitemap/sitemap_file.rb', line 8

def initialize(generator, name,  = {}, type = nil, content = nil)
  super(nil, name, , type, content)
  @generator = generator
end

Instance Method Details

#rendervoid



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/usmu/sitemap/sitemap_file.rb', line 13

def render
  doc = Ox::Document.new(version: '1.0', encoding: 'UTF-8')

  urlset = Ox::Element.new('urlset')
  urlset[:xmlns] = 'http://www.sitemaps.org/schemas/sitemap/0.9'

  @generator.renderables.select(&method(:valid_entry?)).map(&method(:to_url)).each {|url| urlset << url }

  doc << urlset
  "<?xml version=\"1.0\" encoding=\"UTF-8\"?>#{Ox.to_xml(doc, effort: :strict)}"
end

#to_url(renderable) ⇒ void



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/usmu/sitemap/sitemap_file.rb', line 32

def to_url(renderable)
  url = Ox::Element.new('url')

  url << (Ox::Element.new('loc') << self['base url', default: '/'] + renderable.output_filename)
  url << (Ox::Element.new('lastmod') << Time.at(renderable.mtime).utc.iso8601)

  change_frequency = renderable['sitemap', 'change frequency', default: self['change frequency']]
  if change_frequency && !(%w{always hourly daily weekly monthly yearly never}.include? change_frequency)
    raise "Invalid change frequency '#{change_frequency}' for #{renderable.output_filename}"
  end
  url << (Ox::Element.new('changefreq') << change_frequency) if change_frequency

  priority = renderable['sitemap', 'priority', default: self['priority']]
  if priority && !(priority.is_a?(Float) && priority >= 0 && priority <= 1)
    raise "Invalid priority '#{priority}' for #{renderable.output_filename}"
  end
  url << (Ox::Element.new('priority') << priority.to_s) if priority

  url
end

#valid_entry?(renderable) ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
28
29
30
# File 'lib/usmu/sitemap/sitemap_file.rb', line 25

def valid_entry?(renderable)
  meta = renderable['sitemap', 'include']
  return meta unless meta.nil?

  !renderable.class.equal? Template::StaticFile
end