sitemap_generator 6.3.0 → 7.0.1

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 +16 -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 +5 -3
  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 +17 -12
  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 +3 -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 +10 -8
  28. data/lib/sitemap_generator/templates.rb +8 -5
  29. data/lib/sitemap_generator/utilities.rb +12 -9
  30. data/lib/sitemap_generator.rb +13 -9
  31. data/templates/sitemap.rb +1 -1
  32. metadata +6 -130
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'builder'
2
4
  require 'uri'
3
5
  require 'time'
@@ -29,13 +31,13 @@ module SitemapGenerator
29
31
  # * +mobile+
30
32
  # * +alternate+/+alternates+
31
33
  # * +pagemap+
32
- def initialize(path, options={})
34
+ def initialize(path, options = {})
33
35
  options = SitemapGenerator::Utilities.symbolize_keys(options)
34
36
  if sitemap = path.is_a?(SitemapGenerator::Builder::SitemapFile) && path
35
37
  SitemapGenerator::Utilities.reverse_merge!(
36
38
  options,
37
- :host => sitemap.location.host,
38
- :lastmod => sitemap.lastmod
39
+ host: sitemap.location.host,
40
+ lastmod: sitemap.lastmod
39
41
  )
40
42
  path = sitemap.location.path_in_public
41
43
  end
@@ -46,16 +48,16 @@ module SitemapGenerator
46
48
  )
47
49
  SitemapGenerator::Utilities.reverse_merge!(
48
50
  options,
49
- :priority => 0.5,
50
- :changefreq => 'weekly',
51
- :lastmod => Time.now,
52
- :images => [],
53
- :news => {},
54
- :videos => [],
55
- :mobile => false,
56
- :alternates => []
51
+ priority: 0.5,
52
+ changefreq: 'weekly',
53
+ lastmod: Time.now,
54
+ images: [],
55
+ news: {},
56
+ videos: [],
57
+ mobile: false,
58
+ alternates: []
57
59
  )
58
- raise "Cannot generate a url without a host" unless SitemapGenerator::Utilities.present?(options[:host])
60
+ raise 'Cannot generate a url without a host' unless SitemapGenerator::Utilities.present?(options[:host])
59
61
 
60
62
  if video = options.delete(:video)
61
63
  options[:videos] = video.is_a?(Array) ? options[:videos].concat(video) : options[:videos] << video
@@ -67,23 +69,23 @@ module SitemapGenerator
67
69
  path = path.to_s.sub(/^\//, '')
68
70
  loc = path.empty? ? options[:host] : (options[:host].to_s.sub(/\/$/, '') + '/' + path)
69
71
  self.merge!(
70
- :priority => options[:priority],
71
- :changefreq => options[:changefreq],
72
- :lastmod => options[:lastmod],
73
- :expires => options[:expires],
74
- :host => options[:host],
75
- :loc => loc,
76
- :images => prepare_images(options[:images], options[:host]),
77
- :news => prepare_news(options[:news]),
78
- :videos => options[:videos],
79
- :mobile => options[:mobile],
80
- :alternates => options[:alternates],
81
- :pagemap => options[:pagemap]
72
+ priority: options[:priority],
73
+ changefreq: options[:changefreq],
74
+ lastmod: options[:lastmod],
75
+ expires: options[:expires],
76
+ host: options[:host],
77
+ loc: loc,
78
+ images: prepare_images(options[:images], options[:host]),
79
+ news: prepare_news(options[:news]),
80
+ videos: options[:videos],
81
+ mobile: options[:mobile],
82
+ alternates: options[:alternates],
83
+ pagemap: options[:pagemap]
82
84
  )
83
85
  end
84
86
 
85
87
  # Return the URL as XML
86
- def to_xml(builder=nil)
88
+ def to_xml(builder = nil)
87
89
  builder = ::Builder::XmlMarkup.new if builder.nil?
88
90
  builder.url do
89
91
  builder.loc self[:loc]
@@ -94,8 +96,8 @@ module SitemapGenerator
94
96
 
95
97
  unless SitemapGenerator::Utilities.blank?(self[:news])
96
98
  news_data = self[:news]
97
- builder.news:news do
98
- builder.news:publication do
99
+ builder.news :news do
100
+ builder.news :publication do
99
101
  builder.news :name, news_data[:publication_name].to_s if news_data[:publication_name]
100
102
  builder.news :language, news_data[:publication_language].to_s if news_data[:publication_language]
101
103
  end
@@ -110,7 +112,7 @@ module SitemapGenerator
110
112
  end
111
113
 
112
114
  self[:images].each do |image|
113
- builder.image:image do
115
+ builder.image :image do
114
116
  builder.image :loc, image[:loc]
115
117
  builder.image :caption, image[:caption].to_s if image[:caption]
116
118
  builder.image :geo_location, image[:geo_location].to_s if image[:geo_location]
@@ -124,25 +126,25 @@ module SitemapGenerator
124
126
  builder.video :thumbnail_loc, video[:thumbnail_loc].to_s
125
127
  builder.video :title, video[:title].to_s
126
128
  builder.video :description, video[:description].to_s
127
- builder.video :content_loc, video[:content_loc].to_s if video[:content_loc]
129
+ builder.video :content_loc, video[:content_loc].to_s if video[:content_loc]
128
130
  if video[:player_loc]
129
- loc_attributes = { :allow_embed => yes_or_no_with_default(video[:allow_embed], true) }
131
+ loc_attributes = { allow_embed: yes_or_no_with_default(video[:allow_embed], true) }
130
132
  loc_attributes[:autoplay] = video[:autoplay].to_s if SitemapGenerator::Utilities.present?(video[:autoplay])
131
133
  builder.video :player_loc, video[:player_loc].to_s, loc_attributes
132
134
  end
133
- builder.video :duration, video[:duration].to_s if video[:duration]
134
- builder.video :expiration_date, w3c_date(video[:expiration_date]) if video[:expiration_date]
135
- builder.video :rating, format_float(video[:rating]) if video[:rating]
136
- builder.video :view_count, video[:view_count].to_s if video[:view_count]
135
+ builder.video :duration, video[:duration].to_s if video[:duration]
136
+ builder.video :expiration_date, w3c_date(video[:expiration_date]) if video[:expiration_date]
137
+ builder.video :rating, format_float(video[:rating]) if video[:rating]
138
+ builder.video :view_count, video[:view_count].to_s if video[:view_count]
137
139
  builder.video :publication_date, w3c_date(video[:publication_date]) if video[:publication_date]
138
- video[:tags].each {|tag| builder.video :tag, tag.to_s } if video[:tags]
140
+ video[:tags].each { |tag| builder.video :tag, tag.to_s } if video[:tags]
139
141
  builder.video :tag, video[:tag].to_s if video[:tag]
140
142
  builder.video :category, video[:category].to_s if video[:category]
141
- builder.video :family_friendly, yes_or_no_with_default(video[:family_friendly], true) if video.has_key?(:family_friendly)
142
- builder.video :gallery_loc, video[:gallery_loc].to_s, :title => video[:gallery_title].to_s if video[:gallery_loc]
143
+ builder.video :family_friendly, yes_or_no_with_default(video[:family_friendly], true) if video.has_key?(:family_friendly)
144
+ builder.video :gallery_loc, video[:gallery_loc].to_s, title: video[:gallery_title].to_s if video[:gallery_loc]
143
145
  builder.video :price, video[:price].to_s, prepare_video_price_attribs(video) if SitemapGenerator::Utilities.present?(video[:price])
144
146
  if video[:uploader]
145
- builder.video :uploader, video[:uploader].to_s, video[:uploader_info] ? { :info => video[:uploader_info].to_s } : {}
147
+ builder.video :uploader, video[:uploader].to_s, video[:uploader_info] ? { info: video[:uploader_info].to_s } : {}
146
148
  end
147
149
  builder.video :live, yes_or_no_with_default(video[:live], true) if video.has_key?(:live)
148
150
  builder.video :requires_subscription, yes_or_no_with_default(video[:requires_subscription], true) if video.has_key?(:requires_subscription)
@@ -151,7 +153,7 @@ module SitemapGenerator
151
153
 
152
154
  self[:alternates].each do |alternate|
153
155
  rel = alternate[:nofollow] ? 'alternate nofollow' : 'alternate'
154
- attributes = { :rel => rel, :href => alternate[:href].to_s }
156
+ attributes = { rel: rel, href: alternate[:href].to_s }
155
157
  attributes[:hreflang] = alternate[:lang].to_s if SitemapGenerator::Utilities.present?(alternate[:lang])
156
158
  attributes[:media] = alternate[:media].to_s if SitemapGenerator::Utilities.present?(alternate[:media])
157
159
  builder.xhtml :link, attributes
@@ -164,9 +166,9 @@ module SitemapGenerator
164
166
  unless SitemapGenerator::Utilities.blank?(self[:pagemap])
165
167
  builder.pagemap :PageMap do
166
168
  SitemapGenerator::Utilities.as_array(self[:pagemap][:dataobjects]).each do |dataobject|
167
- builder.pagemap :DataObject, :type => dataobject[:type].to_s, :id => dataobject[:id].to_s do
169
+ builder.pagemap :DataObject, type: dataobject[:type].to_s, id: dataobject[:id].to_s do
168
170
  SitemapGenerator::Utilities.as_array(dataobject[:attributes]).each do |attribute|
169
- builder.pagemap :Attribute, attribute[:value].to_s, :name => attribute[:name].to_s
171
+ builder.pagemap :Attribute, attribute[:value].to_s, name: attribute[:name].to_s
170
172
  end
171
173
  end
172
174
  end
@@ -197,12 +199,12 @@ module SitemapGenerator
197
199
 
198
200
  # Return an Array of image option Hashes suitable to be parsed by SitemapGenerator::Builder::SitemapFile
199
201
  def prepare_images(images, host)
200
- images.delete_if { |key,value| key[:loc] == nil }
202
+ images.delete_if { |key, value| key[:loc] == nil }
201
203
  images.each do |r|
202
204
  SitemapGenerator::Utilities.assert_valid_keys(r, :loc, :caption, :geo_location, :title, :license)
203
205
  r[:loc] = URI.join(host, r[:loc]).to_s
204
206
  end
205
- images[0..(SitemapGenerator::MAX_SITEMAP_IMAGES-1)]
207
+ images[0..(SitemapGenerator::MAX_SITEMAP_IMAGES - 1)]
206
208
  end
207
209
 
208
210
  def w3c_date(date)
@@ -211,23 +213,24 @@ module SitemapGenerator
211
213
  elsif date.respond_to?(:iso8601)
212
214
  date.iso8601.sub(/Z$/i, '+00:00')
213
215
  elsif date.is_a?(Date) && !date.is_a?(DateTime)
214
- date.strftime("%Y-%m-%d")
216
+ date.strftime('%Y-%m-%d')
215
217
  else
216
- zulutime = if date.is_a?(DateTime)
217
- date.new_offset(0)
218
- elsif date.respond_to?(:utc)
219
- date.utc
220
- elsif date.is_a?(Integer)
221
- Time.at(date).utc
222
- else
223
- nil
224
- end
218
+ zulutime =
219
+ if date.is_a?(DateTime)
220
+ date.new_offset(0)
221
+ elsif date.respond_to?(:utc)
222
+ date.utc
223
+ elsif date.is_a?(Integer)
224
+ Time.at(date).utc
225
+ else
226
+ nil
227
+ end
225
228
 
226
229
  if zulutime
227
- zulutime.strftime("%Y-%m-%dT%H:%M:%S+00:00")
230
+ zulutime.strftime('%Y-%m-%dT%H:%M:%S+00:00')
228
231
  else
229
232
  zone = date.strftime('%z').insert(-3, ':')
230
- date.strftime("%Y-%m-%dT%H:%M:%S") + zone
233
+ date.strftime('%Y-%m-%dT%H:%M:%S') + zone
231
234
  end
232
235
  end
233
236
  end
@@ -237,6 +240,7 @@ module SitemapGenerator
237
240
  def yes_or_no(value)
238
241
  if value.is_a?(String)
239
242
  raise ArgumentError.new("Unrecognized value for yes/no field: #{value.inspect}") unless value =~ /^(yes|no)$/i
243
+
240
244
  value.downcase
241
245
  else
242
246
  value ? 'yes' : 'no'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sitemap_generator/builder/sitemap_file'
2
4
  require 'sitemap_generator/builder/sitemap_index_file'
3
5
  require 'sitemap_generator/builder/sitemap_url'
@@ -5,4 +7,4 @@ require 'sitemap_generator/builder/sitemap_index_url'
5
7
 
6
8
  module SitemapGenerator::Builder
7
9
  LinkHolder = Struct.new(:link, :options)
8
- end
10
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bigdecimal'
2
4
 
3
5
  begin
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SitemapGenerator::Numeric
2
4
  KILOBYTE = 1024
3
5
  MEGABYTE = KILOBYTE * 1024
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Dir["#{File.dirname(__FILE__)}/core_ext/**/*.rb"].sort.each do |path|
2
4
  require path
3
5
  end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # require "sitemap_generator/core_ext/big_decimal/conversions"
2
- require "sitemap_generator/utilities"
4
+ require 'sitemap_generator/utilities'
3
5
 
4
6
  module SitemapGenerator
5
7
  # = SitemapGenerator Number Helpers
6
- module Helpers #:nodoc:
8
+ module Helpers # :nodoc:
7
9
 
8
10
  # Provides methods for converting numbers into formatted strings.
9
11
  # Methods are provided for precision, positional notation and file size
@@ -52,11 +54,11 @@ module SitemapGenerator
52
54
  end
53
55
 
54
56
  defaults = {
55
- :separator => ".",
56
- :delimiter => ",",
57
- :precision => 3,
58
- :significant => false,
59
- :strip_insignificant_zeros => false
57
+ separator: '.',
58
+ delimiter: ',',
59
+ precision: 3,
60
+ significant: false,
61
+ strip_insignificant_zeros: false
60
62
  }
61
63
  options = SitemapGenerator::Utilities.reverse_merge(options, defaults)
62
64
 
@@ -105,18 +107,18 @@ module SitemapGenerator
105
107
  end
106
108
 
107
109
  defaults = {
108
- :separator => ".",
109
- :delimiter => ",",
110
- :precision => 3,
111
- :significant => false,
112
- :strip_insignificant_zeros => false
110
+ separator: '.',
111
+ delimiter: ',',
112
+ precision: 3,
113
+ significant: false,
114
+ strip_insignificant_zeros: false
113
115
  }
114
116
  precision_defaults = {
115
- :delimiter => ""
117
+ delimiter: ''
116
118
  }
117
119
  defaults = defaults.merge(precision_defaults)
118
120
 
119
- options = SitemapGenerator::Utilities.reverse_merge(options, defaults) # Allow the user to unset default values: Eg.: :significant => false
121
+ options = SitemapGenerator::Utilities.reverse_merge(options, defaults) # Allow the user to unset default values: Eg.: :significant => false
120
122
  precision = options.delete :precision
121
123
  significant = options.delete :significant
122
124
  strip_insignificant_zeros = options.delete :strip_insignificant_zeros
@@ -126,11 +128,11 @@ module SitemapGenerator
126
128
  digits, rounded_number = 1, 0
127
129
  else
128
130
  digits = (Math.log10(number.abs) + 1).floor
129
- rounded_number = (SitemapGenerator::BigDecimal.new(number.to_s) / SitemapGenerator::BigDecimal.new((10 ** (digits - precision)).to_f.to_s)).round.to_f * 10 ** (digits - precision)
131
+ rounded_number = (SitemapGenerator::BigDecimal.new(number.to_s) / SitemapGenerator::BigDecimal.new((10**(digits - precision)).to_f.to_s)).round.to_f * 10**(digits - precision)
130
132
  digits = (Math.log10(rounded_number.abs) + 1).floor # After rounding, the number of digits may have changed
131
133
  end
132
134
  precision = precision - digits
133
- precision = precision > 0 ? precision : 0 #don't let it be negative
135
+ precision = precision > 0 ? precision : 0 # don't let it be negative
134
136
  else
135
137
  rounded_number = SitemapGenerator::Utilities.round(SitemapGenerator::BigDecimal.new(number.to_s), precision).to_f
136
138
  end
@@ -191,24 +193,24 @@ module SitemapGenerator
191
193
  end
192
194
 
193
195
  defaults = {
194
- :separator => ".",
195
- :delimiter => ",",
196
- :precision => 3,
197
- :significant => false,
198
- :strip_insignificant_zeros => false
196
+ separator: '.',
197
+ delimiter: ',',
198
+ precision: 3,
199
+ significant: false,
200
+ strip_insignificant_zeros: false
199
201
  }
200
202
  human = {
201
- :delimiter => "",
202
- :precision => 3,
203
- :significant => true,
204
- :strip_insignificant_zeros => true
203
+ delimiter: '',
204
+ precision: 3,
205
+ significant: true,
206
+ strip_insignificant_zeros: true
205
207
  }
206
208
  defaults = defaults.merge(human)
207
209
  options = SitemapGenerator::Utilities.reverse_merge(options, defaults)
208
- #for backwards compatibility with those that didn't add strip_insignificant_zeros to their locale files
210
+ # for backwards compatibility with those that didn't add strip_insignificant_zeros to their locale files
209
211
  options[:strip_insignificant_zeros] = true if not options.key?(:strip_insignificant_zeros)
210
212
 
211
- storage_units_format = "%n %u"
213
+ storage_units_format = '%n %u'
212
214
 
213
215
  if number.to_i < 1024
214
216
  unit = number.to_i > 1 || number.to_i == 0 ? 'Bytes' : 'Byte'
@@ -217,15 +219,15 @@ module SitemapGenerator
217
219
  max_exp = STORAGE_UNITS.size - 1
218
220
  exponent = (Math.log(number) / Math.log(1024)).to_i # Convert to base 1024
219
221
  exponent = max_exp if exponent > max_exp # we need this to avoid overflow for the highest unit
220
- number /= 1024 ** exponent
222
+ number /= 1024**exponent
221
223
 
222
224
  unit_key = STORAGE_UNITS[exponent]
223
225
  units = {
224
- :byte => "Bytes",
225
- :kb => "KB",
226
- :mb => "MB",
227
- :gb => "GB",
228
- :tb => "TB"
226
+ byte: 'Bytes',
227
+ kb: 'KB',
228
+ mb: 'MB',
229
+ gb: 'GB',
230
+ tb: 'TB'
229
231
  }
230
232
  unit = units[unit_key]
231
233
  formatted_number = number_with_precision(number, options)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sitemap_generator'
2
4
 
3
5
  module SitemapGenerator
@@ -22,8 +24,8 @@ module SitemapGenerator
22
24
  # * <tt>link_set</tt> - a LinkSet instance to use. Default is SitemapGenerator::Sitemap.
23
25
  #
24
26
  # All other options are passed to the LinkSet by setting them using accessor methods.
25
- def initialize(opts={}, &block)
26
- opts = SitemapGenerator::Utilities.reverse_merge(opts, :link_set => SitemapGenerator::Sitemap)
27
+ def initialize(opts = {}, &block)
28
+ opts = SitemapGenerator::Utilities.reverse_merge(opts, link_set: SitemapGenerator::Sitemap)
27
29
  @linkset = opts.delete :link_set
28
30
  @linkset.send(:set_options, opts)
29
31
  eval(&block) if block_given?
@@ -53,7 +55,7 @@ module SitemapGenerator
53
55
 
54
56
  # Evaluate the block in the interpreter. Pass :yield_sitemap => true to
55
57
  # yield the Interpreter instance to the block...for old-style calling.
56
- def eval(opts={}, &block)
58
+ def eval(opts = {}, &block)
57
59
  if block_given?
58
60
  if opts[:yield_sitemap]
59
61
  yield @linkset
@@ -70,7 +72,7 @@ module SitemapGenerator
70
72
  # * <tt>:config_file</tt> - full path to the config file to evaluate.
71
73
  # Default is config/sitemap.rb in your application's root directory.
72
74
  # All other options are passed to +new+.
73
- def self.run(opts={}, &block)
75
+ def self.run(opts = {}, &block)
74
76
  opts = opts.dup
75
77
  config_file = opts.delete(:config_file)
76
78
  config_file ||= SitemapGenerator.app.root + 'config/sitemap.rb'