sitemap_generator 6.3.0 → 7.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +20 -0
  3. data/README.md +37 -31
  4. data/VERSION +1 -1
  5. data/lib/sitemap_generator/adapters/active_storage_adapter.rb +26 -0
  6. data/lib/sitemap_generator/adapters/aws_sdk_adapter.rb +24 -9
  7. data/lib/sitemap_generator/adapters/file_adapter.rb +2 -0
  8. data/lib/sitemap_generator/adapters/fog_adapter.rb +7 -5
  9. data/lib/sitemap_generator/adapters/google_storage_adapter.rb +3 -1
  10. data/lib/sitemap_generator/adapters/s3_adapter.rb +10 -6
  11. data/lib/sitemap_generator/adapters/wave_adapter.rb +3 -1
  12. data/lib/sitemap_generator/application.rb +4 -0
  13. data/lib/sitemap_generator/builder/sitemap_file.rb +19 -13
  14. data/lib/sitemap_generator/builder/sitemap_index_file.rb +12 -9
  15. data/lib/sitemap_generator/builder/sitemap_index_url.rb +6 -4
  16. data/lib/sitemap_generator/builder/sitemap_url.rb +59 -55
  17. data/lib/sitemap_generator/builder.rb +3 -1
  18. data/lib/sitemap_generator/core_ext/big_decimal.rb +2 -0
  19. data/lib/sitemap_generator/core_ext/numeric.rb +2 -0
  20. data/lib/sitemap_generator/core_ext.rb +2 -0
  21. data/lib/sitemap_generator/helpers/number_helper.rb +35 -33
  22. data/lib/sitemap_generator/interpreter.rb +6 -4
  23. data/lib/sitemap_generator/link_set.rb +65 -62
  24. data/lib/sitemap_generator/railtie.rb +55 -1
  25. data/lib/sitemap_generator/simple_namer.rb +8 -5
  26. data/lib/sitemap_generator/sitemap_location.rb +13 -9
  27. data/lib/sitemap_generator/tasks.rb +14 -26
  28. data/lib/sitemap_generator/templates.rb +8 -5
  29. data/lib/sitemap_generator/utilities.rb +38 -11
  30. data/lib/sitemap_generator.rb +24 -17
  31. data/templates/sitemap.rb +1 -1
  32. metadata +7 -131
@@ -1,16 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SitemapGenerator
2
4
  module Utilities
3
5
  extend self
4
6
 
5
7
  # Copy templates/sitemap.rb to config if not there yet.
6
- def install_sitemap_rb(verbose=false)
8
+ def install_sitemap_rb(verbose = false)
7
9
  if File.exist?(SitemapGenerator.app.root + 'config/sitemap.rb')
8
- puts "already exists: config/sitemap.rb, file not copied" if verbose
10
+ puts 'already exists: config/sitemap.rb, file not copied' if verbose
9
11
  else
10
12
  FileUtils.cp(
11
13
  SitemapGenerator.templates.template_path(:sitemap_sample),
12
14
  SitemapGenerator.app.root + 'config/sitemap.rb')
13
- puts "created: config/sitemap.rb" if verbose
15
+ puts 'created: config/sitemap.rb' if verbose
14
16
  end
15
17
  end
16
18
 
@@ -31,7 +33,7 @@ module SitemapGenerator
31
33
  # strings for keys but assert symbols as keys, this will fail.
32
34
  def assert_valid_keys(hash, *valid_keys)
33
35
  unknown_keys = hash.keys - [valid_keys].flatten
34
- raise(ArgumentError, "Unknown key(s): #{unknown_keys.join(", ")}") unless unknown_keys.empty?
36
+ raise(ArgumentError, "Unknown key(s): #{unknown_keys.join(', ')}") unless unknown_keys.empty?
35
37
  end
36
38
 
37
39
  # Return a new hash with all keys converted to symbols, as long as
@@ -69,7 +71,7 @@ module SitemapGenerator
69
71
  # x.round(2) # => 1.34
70
72
  def round(float, precision = nil)
71
73
  if precision
72
- magnitude = 10.0 ** precision
74
+ magnitude = 10.0**precision
73
75
  (float * magnitude).round / magnitude
74
76
  else
75
77
  float.round
@@ -98,7 +100,7 @@ module SitemapGenerator
98
100
  # Performs the opposite of <tt>merge</tt>, with the keys and values from the first hash taking precedence over the second.
99
101
  # Modifies the receiver in place.
100
102
  def reverse_merge!(hash, other_hash)
101
- hash.merge!( other_hash ){|k,o,n| o }
103
+ hash.merge!(other_hash) { |k, o, n| o }
102
104
  end
103
105
 
104
106
  # An object is blank if it's false, empty, or a whitespace string.
@@ -111,7 +113,7 @@ module SitemapGenerator
111
113
  # ...to:
112
114
  #
113
115
  # if !address.blank?
114
- def blank?(object)
116
+ def blank?(object) # rubocop:disable Metrics/MethodLength
115
117
  case object
116
118
  when NilClass, FalseClass
117
119
  true
@@ -133,15 +135,16 @@ module SitemapGenerator
133
135
 
134
136
  # Sets $VERBOSE for the duration of the block and back to its original value afterwards.
135
137
  def with_warnings(flag)
136
- old_verbose, $VERBOSE = $VERBOSE, flag
138
+ old_verbose, $VERBOSE = $VERBOSE, flag # rubocop:disable Style/ParallelAssignment
137
139
  yield
138
140
  ensure
139
141
  $VERBOSE = old_verbose
140
142
  end
141
143
 
142
144
  def titleize(string)
143
- string.gsub!(/_/, ' ')
144
- string.split(/(\W)/).map(&:capitalize).join
145
+ result = string.tr('_', ' ')
146
+ result.gsub!(/\b\w/) { |match| match.upcase }
147
+ result
145
148
  end
146
149
 
147
150
  def truthy?(value)
@@ -156,7 +159,7 @@ module SitemapGenerator
156
159
  # Returns a string. Expects a string or Pathname object.
157
160
  def append_slash(path)
158
161
  strpath = path.to_s
159
- if strpath[-1] != nil && strpath[-1].chr != '/'
162
+ if !strpath[-1].nil? && strpath[-1].chr != '/'
160
163
  strpath + '/'
161
164
  else
162
165
  strpath
@@ -177,5 +180,29 @@ module SitemapGenerator
177
180
  def bytesize(string)
178
181
  string.respond_to?(:bytesize) ? string.bytesize : string.length
179
182
  end
183
+
184
+ # Looks up an adapter from various sources:
185
+ # 1. symbol/string names are camelized and constantized
186
+ # - :fog becomes SitemapGenerator::FogAdapter
187
+ # - 'external/adapter_class' becomes External::AdapterClass
188
+ # 2. classes are instantiated
189
+ # 3. callables (procs, lambdas, #call) are "called"
190
+ # All steps recurse, so a proc could return a string that names a class that is instantiated.
191
+ #
192
+ # This method is used by the Rails railtie and as such,
193
+ # safely depends on ActiveSupport::Inflector.
194
+ def find_adapter(candidate)
195
+ if candidate.is_a?(Symbol) || candidate.is_a?(String)
196
+ candidate.to_s.camelize.then { |name|
197
+ "SitemapGenerator::#{name}Adapter".safe_constantize || name.safe_constantize
198
+ }.then { |c| find_adapter(c) }
199
+ elsif candidate.respond_to?(:new)
200
+ find_adapter candidate.new
201
+ elsif candidate.respond_to?(:call)
202
+ find_adapter candidate.call
203
+ else
204
+ candidate
205
+ end
206
+ end
180
207
  end
181
208
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sitemap_generator/simple_namer'
2
4
  require 'sitemap_generator/builder'
3
5
  require 'sitemap_generator/link_set'
@@ -9,6 +11,7 @@ require 'sitemap_generator/sitemap_location'
9
11
  module SitemapGenerator
10
12
  autoload(:Interpreter, 'sitemap_generator/interpreter')
11
13
  autoload(:FileAdapter, 'sitemap_generator/adapters/file_adapter')
14
+ autoload(:ActiveStorageAdapter, 'sitemap_generator/adapters/active_storage_adapter') if defined?(::ActiveStorage)
12
15
  autoload(:S3Adapter, 'sitemap_generator/adapters/s3_adapter')
13
16
  autoload(:AwsSdkAdapter, 'sitemap_generator/adapters/aws_sdk_adapter')
14
17
  autoload(:WaveAdapter, 'sitemap_generator/adapters/wave_adapter')
@@ -22,7 +25,7 @@ module SitemapGenerator
22
25
  SitemapFinalizedError = Class.new(SitemapError)
23
26
 
24
27
  Utilities.with_warnings(nil) do
25
- VERSION = File.read(File.dirname(__FILE__) + "/../VERSION").strip
28
+ VERSION = File.read(File.dirname(__FILE__) + '/../VERSION').strip
26
29
  MAX_SITEMAP_FILES = 50_000 # max sitemap links per index file
27
30
  MAX_SITEMAP_LINKS = 50_000 # max links per sitemap
28
31
  MAX_SITEMAP_IMAGES = 1_000 # max images per url
@@ -37,18 +40,21 @@ module SitemapGenerator
37
40
  }
38
41
 
39
42
  # Lazy-initialize the LinkSet instance
40
- Sitemap = (Class.new do
41
- def method_missing(*args, &block)
42
- (@link_set ||= reset!).send(*args, &block)
43
+ Sitemap = (Config = Class.new do
44
+ # Use a new LinkSet instance
45
+ def reset!
46
+ @link_set = LinkSet.new
43
47
  end
44
48
 
45
- def respond_to?(name, include_private = false)
46
- (@link_set ||= reset!).respond_to?(name, include_private)
49
+ private
50
+
51
+ def method_missing(name, *args, &block)
52
+ @link_set ||= reset!
53
+ @link_set.respond_to?(name, true) ? @link_set.__send__(name, *args, &block) : super
47
54
  end
48
55
 
49
- # Use a new LinkSet instance
50
- def reset!
51
- @link_set = LinkSet.new
56
+ def respond_to_missing?(name, include_private = false)
57
+ (@link_set ||= reset!).respond_to?(name, include_private) || super
52
58
  end
53
59
  end).new
54
60
  end
@@ -62,13 +68,14 @@ module SitemapGenerator
62
68
  # Global default for the verbose setting.
63
69
  def self.verbose
64
70
  if @verbose.nil?
65
- @verbose = if SitemapGenerator::Utilities.truthy?(ENV['VERBOSE'])
66
- true
67
- elsif SitemapGenerator::Utilities.falsy?(ENV['VERBOSE'])
68
- false
69
- else
70
- nil
71
- end
71
+ @verbose =
72
+ if SitemapGenerator::Utilities.truthy?(ENV['VERBOSE'])
73
+ true
74
+ elsif SitemapGenerator::Utilities.falsy?(ENV['VERBOSE'])
75
+ false
76
+ else
77
+ nil
78
+ end
72
79
  else
73
80
  @verbose
74
81
  end
@@ -79,7 +86,7 @@ module SitemapGenerator
79
86
  !!@yield_sitemap
80
87
  end
81
88
 
82
- self.root = File.expand_path(File.join(File.dirname(__FILE__), '../')) # Root of the install dir, not the Rails app
89
+ self.root = File.expand_path(File.join(File.dirname(__FILE__), '../')) # Root of the install dir, not the Rails app
83
90
  self.templates = SitemapGenerator::Templates.new(self.root)
84
91
  self.app = SitemapGenerator::Application.new
85
92
  end
data/templates/sitemap.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # Set the host name for URL creation
2
- SitemapGenerator::Sitemap.default_host = "http://www.example.com"
2
+ SitemapGenerator::Sitemap.default_host = 'http://www.example.com'
3
3
 
4
4
  SitemapGenerator::Sitemap.create do
5
5
  # Put links creation logic here.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sitemap_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.3.0
4
+ version: 7.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karl Varga
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-09 00:00:00.000000000 Z
11
+ date: 2026-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: builder
@@ -24,132 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.0'
27
- - !ruby/object:Gem::Dependency
28
- name: aws-sdk-core
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: aws-sdk-s3
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: fog-aws
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: google-cloud-storage
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: nokogiri
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: rake
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: rspec_junit_formatter
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: rspec
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: webmock
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
27
  description: SitemapGenerator is a framework-agnostic XML Sitemap generator written
154
28
  in Ruby with automatic Rails integration. It supports Video, News, Image, Mobile,
155
29
  PageMap and Alternate Links sitemap extensions and includes Rake tasks for managing
@@ -166,6 +40,7 @@ files:
166
40
  - lib/capistrano/sitemap_generator.rb
167
41
  - lib/capistrano/tasks/sitemap_generator.cap
168
42
  - lib/sitemap_generator.rb
43
+ - lib/sitemap_generator/adapters/active_storage_adapter.rb
169
44
  - lib/sitemap_generator/adapters/aws_sdk_adapter.rb
170
45
  - lib/sitemap_generator/adapters/file_adapter.rb
171
46
  - lib/sitemap_generator/adapters/fog_adapter.rb
@@ -197,7 +72,8 @@ files:
197
72
  homepage: https://github.com/kjvarga/sitemap_generator
198
73
  licenses:
199
74
  - MIT
200
- metadata: {}
75
+ metadata:
76
+ rubygems_mfa_required: 'true'
201
77
  post_install_message:
202
78
  rdoc_options: []
203
79
  require_paths:
@@ -206,14 +82,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
206
82
  requirements:
207
83
  - - ">="
208
84
  - !ruby/object:Gem::Version
209
- version: '0'
85
+ version: '2.6'
210
86
  required_rubygems_version: !ruby/object:Gem::Requirement
211
87
  requirements:
212
88
  - - ">="
213
89
  - !ruby/object:Gem::Version
214
90
  version: '0'
215
91
  requirements: []
216
- rubygems_version: 3.3.3
92
+ rubygems_version: 3.4.10
217
93
  signing_key:
218
94
  specification_version: 4
219
95
  summary: Easily generate XML Sitemaps