Class: BetterSeo::Sitemap::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/better_seo/sitemap/generator.rb

Class Method Summary collapse

Class Method Details

.generate {|builder| ... } ⇒ Object

Yields:

  • (builder)


9
10
11
12
13
# File 'lib/better_seo/sitemap/generator.rb', line 9

def generate
  builder = Builder.new
  yield(builder) if block_given?
  builder.to_xml
end

.generate_from(urls, lastmod: nil, changefreq: "weekly", priority: 0.5) ⇒ Object



15
16
17
18
19
# File 'lib/better_seo/sitemap/generator.rb', line 15

def generate_from(urls, lastmod: nil, changefreq: "weekly", priority: 0.5)
  builder = Builder.new
  builder.add_urls(urls, lastmod: lastmod, changefreq: changefreq, priority: priority)
  builder.to_xml
end

.generate_from_collection(collection, url: nil, lastmod: nil, changefreq: "weekly", priority: 0.5) ⇒ Object

Raises:

  • (ArgumentError)


21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/better_seo/sitemap/generator.rb', line 21

def generate_from_collection(collection, url: nil, lastmod: nil, changefreq: "weekly", priority: 0.5)
  raise ArgumentError, "url option is required" if url.nil?
  raise ArgumentError, "url option must be callable" unless url.respond_to?(:call)

  builder = Builder.new

  collection.each do |item|
    url_value = url.call(item)
    lastmod_value = lastmod.respond_to?(:call) ? lastmod.call(item) : lastmod
    changefreq_value = changefreq.respond_to?(:call) ? changefreq.call(item) : changefreq
    priority_value = priority.respond_to?(:call) ? priority.call(item) : priority

    builder.add_url(
      url_value,
      lastmod: lastmod_value,
      changefreq: changefreq_value,
      priority: priority_value
    )
  end

  builder.to_xml
end

.write_to_file(file_path, &block) ⇒ Object



44
45
46
47
48
49
50
51
52
53
# File 'lib/better_seo/sitemap/generator.rb', line 44

def write_to_file(file_path, &block)
  xml = generate(&block)

  # Create parent directories if they don't exist
  dir = File.dirname(file_path)
  FileUtils.mkdir_p(dir) unless File.directory?(dir)

  File.write(file_path, xml)
  file_path
end