Class: SiteMaps::Adapters::Adapter

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

Direct Known Subclasses

AwsSdk, FileSystem, Noop

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(**options, &block) ⇒ Adapter

Returns a new instance of Adapter.



18
19
20
21
22
23
24
# File 'lib/site_maps/adapters/adapter.rb', line 18

def initialize(**options, &block)
  @config = SiteMaps.config.becomes(self.class.config_class, **options)
  @processes = Concurrent::Hash.new
  @process_mixins = Concurrent::Array.new
  reset!
  instance_exec(&block) if block
end

Instance Attribute Details

#process_mixinsObject (readonly)

Returns the value of attribute process_mixins.



16
17
18
# File 'lib/site_maps/adapters/adapter.rb', line 16

def process_mixins
  @process_mixins
end

#processesObject (readonly)

Returns the value of attribute processes.



16
17
18
# File 'lib/site_maps/adapters/adapter.rb', line 16

def processes
  @processes
end

#sitemap_indexObject (readonly)

Returns the value of attribute sitemap_index.



16
17
18
# File 'lib/site_maps/adapters/adapter.rb', line 16

def sitemap_index
  @sitemap_index
end

Class Method Details

.config_classObject



8
9
10
11
12
# File 'lib/site_maps/adapters/adapter.rb', line 8

def config_class
  return SiteMaps::Configuration unless defined?(self::Config)

  self::Config
end

Instance Method Details

#apply_url_filters(link, options) ⇒ Object



93
94
95
96
97
98
99
100
101
102
# File 'lib/site_maps/adapters/adapter.rb', line 93

def apply_url_filters(link, options)
  url = link.respond_to?(:to_s) ? link.to_s : link
  url_filter.each do |filter|
    result = filter.call(url, options)
    return nil if result == false

    options = result if result.is_a?(Hash)
  end
  options
end

#config {|@config| ... } ⇒ Object Also known as: configure

Yields:



51
52
53
54
# File 'lib/site_maps/adapters/adapter.rb', line 51

def config
  yield(@config) if block_given?
  @config
end

#delete(_url) ⇒ void

This method is abstract.

This method returns an undefined value.

Parameters:

  • url (String)

    The remote URL to delete

Raises:



47
48
49
# File 'lib/site_maps/adapters/adapter.rb', line 47

def delete(_url)
  raise NotImplementedError
end

#extend_processes_with(mod) ⇒ Object



81
82
83
# File 'lib/site_maps/adapters/adapter.rb', line 81

def extend_processes_with(mod)
  @process_mixins << mod
end

#external_sitemap(url, lastmod: nil) ⇒ Object



64
65
66
67
# File 'lib/site_maps/adapters/adapter.rb', line 64

def external_sitemap(url, lastmod: nil)
  @external_sitemaps ||= Concurrent::Array.new
  @external_sitemaps << SiteMaps::Builder::SitemapIndex::Item.new(url, lastmod)
end

#external_sitemapsObject



69
70
71
# File 'lib/site_maps/adapters/adapter.rb', line 69

def external_sitemaps
  @external_sitemaps || []
end

#maybe_inline_urlset?Boolean

Returns:

  • (Boolean)


73
74
75
# File 'lib/site_maps/adapters/adapter.rb', line 73

def maybe_inline_urlset?
  @processes.size == 1 && @processes.first.last.static? && external_sitemaps.empty?
end

#process(name = :default, location = nil, **kwargs, &block) ⇒ Object

Raises:

  • (ArgumentError)


57
58
59
60
61
62
# File 'lib/site_maps/adapters/adapter.rb', line 57

def process(name = :default, location = nil, **kwargs, &block)
  name = name.to_sym
  raise ArgumentError, "Process #{name} already defined" if @processes.key?(name)

  @processes[name] = SiteMaps::Process.new(name, location, kwargs, block)
end

#read(_url) ⇒ Array<String, Hash>

This method is abstract.

Returns The raw data and metadata.

Parameters:

  • url (String)

    The remote URL to read from

Returns:

  • (Array<String, Hash>)

    The raw data and metadata

Raises:



39
40
41
# File 'lib/site_maps/adapters/adapter.rb', line 39

def read(_url)
  raise NotImplementedError
end

#repoObject



77
78
79
# File 'lib/site_maps/adapters/adapter.rb', line 77

def repo
  @repo ||= SiteMaps::AtomicRepository.new(config.url)
end

#reset!Object



104
105
106
107
108
# File 'lib/site_maps/adapters/adapter.rb', line 104

def reset!
  xsl_url = config.respond_to?(:xsl_index_stylesheet_url) ? config.xsl_index_stylesheet_url : nil
  @sitemap_index = SiteMaps::Builder::SitemapIndex.new(xsl_url: xsl_url)
  @repo = nil
end

#url_filter(&block) ⇒ Object



85
86
87
88
89
90
91
# File 'lib/site_maps/adapters/adapter.rb', line 85

def url_filter(&block)
  if block
    @url_filters ||= Concurrent::Array.new
    @url_filters << block
  end
  @url_filters || []
end

#write(_url, _raw_data, **_kwargs) ⇒ void

This method is abstract.

This method returns an undefined value.

Parameters:

  • url (String)

    The remote URL to write to

  • raw_data (String)

    The raw data to write

Raises:



31
32
33
# File 'lib/site_maps/adapters/adapter.rb', line 31

def write(_url, _raw_data, **_kwargs)
  raise NotImplementedError
end