Class: SiteMaps::SitemapBuilder

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/site_maps/sitemap_builder.rb

Instance Method Summary collapse

Constructor Details

#initialize(adapter:, location: nil, notification_payload: {}) ⇒ SitemapBuilder

Returns a new instance of SitemapBuilder.



7
8
9
10
11
12
13
# File 'lib/site_maps/sitemap_builder.rb', line 7

def initialize(adapter:, location: nil, notification_payload: {})
  @adapter = adapter
  @url_set = build_url_set
  @location = location
  @mutex = Mutex.new
  @notification_payload = notification_payload
end

Instance Method Details

#add(path, params: nil, **options) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/site_maps/sitemap_builder.rb', line 15

def add(path, params: nil, **options)
  @mutex.synchronize do
    link = build_link(path, params)
    filtered_options = adapter.apply_url_filters(link, options)
    return if filtered_options.nil?

    url_set.add(link, **filtered_options)
  rescue SiteMaps::FullSitemapError
    finalize_and_start_next_urlset!
    url_set.add(link, **filtered_options)
  end
end

#add_sitemap_index(url, lastmod: Time.now) ⇒ Object



28
29
30
# File 'lib/site_maps/sitemap_builder.rb', line 28

def add_sitemap_index(url, lastmod: Time.now)
  sitemap_index.add(url, lastmod: lastmod)
end

#finalize!Object



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

def finalize!
  return if url_set.finalized?
  return if url_set.empty?

  raw_data = url_set.finalize!

  SiteMaps::Notification.instrument("sitemaps.finalize_urlset", notification_payload) do |payload|
    payload[:links_count] = url_set.links_count
    payload[:news_count] = url_set.news_count
    payload[:last_modified] = url_set.last_modified

    if adapter.maybe_inline_urlset? && sitemap_index.empty?
      payload[:url] = repo.main_url
      adapter.write(repo.main_url, raw_data, last_modified: url_set.last_modified)
    else
      sitemap_url = repo.generate_url(location)
      payload[:url] = sitemap_url
      adapter.write(sitemap_url, raw_data, last_modified: url_set.last_modified)
      add_sitemap_index(sitemap_url, lastmod: url_set.last_modified)
    end
  end
end