Class: SiteMaps::Builder::SitemapIndex

Inherits:
Object
  • Object
show all
Defined in:
lib/site_maps/builder/sitemap_index.rb

Defined Under Namespace

Classes: Item

Constant Summary collapse

XML_DECLARATION =
%(<?xml version="1.0" encoding="UTF-8"?>)
SITEMAPINDEX_OPEN =
<<~SITEMAPINDEX_OPEN
  <sitemapindex
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd"
    xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
  >
SITEMAPINDEX_OPEN
HEADER =
"#{XML_DECLARATION}\n#{SITEMAPINDEX_OPEN}"
"</sitemapindex>"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(xsl_url: nil) ⇒ SitemapIndex

Returns a new instance of SitemapIndex.



18
19
20
21
# File 'lib/site_maps/builder/sitemap_index.rb', line 18

def initialize(xsl_url: nil)
  @sitemaps = Concurrent::Set.new
  @xsl_url = xsl_url
end

Instance Attribute Details

#sitemapsObject (readonly)

Returns the value of attribute sitemaps.



16
17
18
# File 'lib/site_maps/builder/sitemap_index.rb', line 16

def sitemaps
  @sitemaps
end

Instance Method Details

#add(loc, lastmod: nil) ⇒ Object



23
24
25
26
# File 'lib/site_maps/builder/sitemap_index.rb', line 23

def add(loc, lastmod: nil)
  sitemap = loc.is_a?(Item) ? loc : Item.new(loc, lastmod)
  @sitemaps.add(sitemap)
end

#empty?Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/site_maps/builder/sitemap_index.rb', line 49

def empty?
  @sitemaps.empty?
end

#last_modifiedObject



44
45
46
47
# File 'lib/site_maps/builder/sitemap_index.rb', line 44

def last_modified
  dates = @sitemaps.filter_map { |s| parse_lastmod(s.lastmod) }
  dates.max || Time.now
end

#to_xmlObject



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/site_maps/builder/sitemap_index.rb', line 28

def to_xml
  io = StringIO.new
  if @xsl_url
    io.puts(XML_DECLARATION)
    io.puts(XSLStylesheet.processing_instruction(@xsl_url))
    io.puts(SITEMAPINDEX_OPEN)
  else
    io.puts(HEADER)
  end
  @sitemaps.each do |sitemap|
    io.puts(sitemap.to_xml)
  end
  io.puts(FOOTER)
  io.string
end