bridgetown-sitemap 2.0.2 → 3.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4988c349a0919aefa587882e538bf0623a5c9a994f38aa937edcf6898f644e1d
4
- data.tar.gz: d94f6c3d21bc8800f71c038d8615fb6902e61de07b64f8c61c99729a275da104
3
+ metadata.gz: ea58bca8a2a06f1b598f9332323f91fb29891ca412339969f2d120d095bad4b4
4
+ data.tar.gz: b3bd5cd474d8f9a8c1134b32dbdcbba529b86139c3f5c309f4a015483323b33a
5
5
  SHA512:
6
- metadata.gz: 1752c19b00fb0de0b7f194da1ecbe20f279f6890a51f7ff5f826f4a0d5d3da9c1bbaca4331291d517552fa25ca54ae4a297421819a1fcca40e694ad172ce7e7c
7
- data.tar.gz: de70253082a7be05ff85785b1c9ef806ed5c3e62b2fe4e32d616acb0c99dff1e83c50dd4c6b23fd216b50540511d09f2c8cedbdfad49c8d83e9590efa31136df
6
+ metadata.gz: e352891416d845e32acfa8531e23478e69c86ece42221bd72d144f2df42e2281671522654d1988ded89d21c4c0b6c15464fdb07c6256f26610a562db19e1a52e
7
+ data.tar.gz: 9b24215ee863c2a0dbfd271921f6ee7fa462edb8301340d3455d5325d7b8e5a6af8c2b856fea78b40e2cdb501ecafbf5b713bd2495aee93b434e9bb9112851b1
@@ -13,8 +13,8 @@ jobs:
13
13
  runs-on: ubuntu-latest
14
14
  strategy:
15
15
  matrix:
16
- ruby_version: [2.7.7, 3.0.5, 3.1.3, 3.2.0]
17
- bridgetown_version: [1.2.0]
16
+ ruby_version: [3.2.4, 3.3.6, 3.4.2]
17
+ bridgetown_version: [1.3.4, 2.0.0.beta4]
18
18
  continue-on-error: ${{ endsWith(matrix.ruby, 'head') || matrix.ruby == 'debug' }}
19
19
  # Has to be top level to cache properly
20
20
  env:
data/.rubocop.yml CHANGED
@@ -25,6 +25,12 @@ AllCops:
25
25
  Layout/LineLength:
26
26
  Max: 140
27
27
 
28
+ Layout/IndentationWidth:
29
+ Enabled: false
30
+
31
+ Layout/IndentationConsistency:
32
+ Enabled: false
33
+
28
34
  Metrics/BlockLength:
29
35
  Enabled: false
30
36
 
@@ -32,4 +38,7 @@ Bundler/OrderedGems:
32
38
  Enabled: false
33
39
 
34
40
  Style/IfUnlessModifier:
41
+ Enabled: false
42
+
43
+ Lint/UselessConstantScoping:
35
44
  Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # main
2
2
 
3
+ # 3.0.0 / 24-02-2025
4
+
5
+ * Add i18n support
6
+ * Drop support for Bridgetown 1.2.x and lower
7
+ * Drop support for Ruby 3.1.x and lower
8
+ * Fix git error for dynamically generated resources
9
+
3
10
  # 2.0.2 / 27-06-2023
4
11
 
5
12
  * Add support for priority and changefreq tags.
@@ -16,11 +16,10 @@ Gem::Specification.new do |spec|
16
16
  spec.test_files = spec.files.grep(%r!^(test|spec|features)/!)
17
17
  spec.require_paths = ["lib"]
18
18
 
19
- spec.required_ruby_version = ">= 2.7.0"
19
+ spec.required_ruby_version = ">= 3.2.4"
20
20
 
21
- spec.add_dependency "bridgetown", ">= 1.2.0", "< 2.0"
21
+ spec.add_dependency "bridgetown", ">= 1.3.0", "< 3.0"
22
22
 
23
23
  spec.add_development_dependency "bundler"
24
24
  spec.add_development_dependency "rake"
25
- spec.add_development_dependency "rubocop-bridgetown"
26
25
  end
@@ -4,27 +4,11 @@ module Bridgetown
4
4
  module Resource
5
5
  class Base
6
6
  def sitemap_last_modified_at
7
- (data.last_modified_at || latest_git_commit_date || date)&.to_time
8
- end
9
-
10
- private
11
-
12
- def latest_git_commit_date
13
- return nil unless git_repo?
14
-
15
- date = sitemap_cache.getset(id) do
16
- `git log -1 --pretty="format:%cI" "#{path}"`
17
- end
18
-
19
- Time.parse(date) if date.present?
20
- end
21
-
22
- def git_repo?
23
- system "git status", out: File::NULL, err: File::NULL
24
- end
25
-
26
- def sitemap_cache
27
- @sitemap_cache = Bridgetown::Cache.new("sitemap")
7
+ (
8
+ data.last_modified_at ||
9
+ BridgetownSitemap::GitInspector.new(self).latest_git_commit_date ||
10
+ date
11
+ )&.to_time
28
12
  end
29
13
  end
30
14
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownSitemap
4
+ class GitInspector
5
+ def initialize(resource)
6
+ @resource = resource
7
+ end
8
+
9
+ def latest_git_commit_date
10
+ return nil unless git_repo?
11
+ return nil unless repo_origin?
12
+
13
+ date = cache.getset(@resource.id) do
14
+ `git log -1 --pretty="format:%cI" "#{@resource.path}"`
15
+ end
16
+
17
+ Time.parse(date) if date.present?
18
+ end
19
+
20
+ private
21
+
22
+ def repo_origin?
23
+ @resource.model.origin.url.scheme == "repo"
24
+ end
25
+
26
+ def git_repo?
27
+ system "git status", out: File::NULL, err: File::NULL
28
+ end
29
+
30
+ def cache
31
+ @cache ||= Bridgetown::Cache.new("sitemap")
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownSitemap
4
+ class GroupedGeneratedPages
5
+ def initialize(generated_pages)
6
+ @grouped_generated_pages = \
7
+ generated_pages.group_by { |page| page.data.slug }.values
8
+ end
9
+
10
+ def each(locale:, &block)
11
+ @grouped_generated_pages.each do |page_group|
12
+ page_group = page_group.reject do |page|
13
+ ["sitemap.erb", "robots.liquid"].include?(page.name) ||
14
+ page.data.sitemap == false
15
+ end
16
+
17
+ default_page = page_group.detect do |page|
18
+ !page.data.locale || locale == page.data.locale
19
+ end
20
+
21
+ latest_page = page_group.max_by { |page| page.data.last_modified_at }
22
+
23
+ yield default: default_page, latest: latest_page, group: page_group
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownSitemap
4
+ class GroupedResources
5
+ def initialize(resources)
6
+ @grouped_resources = resources.group_by do |resource|
7
+ [resource.data.slug, resource.date]
8
+ end.values
9
+ end
10
+
11
+ def each(locale:, &block)
12
+ @grouped_resources.each do |resource_group|
13
+ resource_group = resource_group.reject do |resource|
14
+ resource.id == "/404" || resource.data.sitemap == false
15
+ end
16
+
17
+ default_resource = resource_group.detect do |resource|
18
+ !resource.data.locale || locale == resource.data.locale
19
+ end
20
+
21
+ latest_resource = resource_group.max_by { |resource| resource.data.sitemap_last_modified_at }
22
+
23
+ yield default: default_resource, latest: latest_resource, group: resource_group
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BridgetownSitemap
4
- VERSION = "2.0.2"
4
+ VERSION = "3.0.0"
5
5
  end
@@ -1,8 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "bridgetown"
4
- require "bridgetown/resource/base"
5
4
  require "bridgetown-sitemap/builder"
5
+ require "bridgetown-sitemap/git_inspector"
6
+ require "bridgetown-sitemap/grouped_resources"
7
+ require "bridgetown-sitemap/grouped_generated_pages"
8
+ require "bridgetown/resource/base"
6
9
 
7
10
  Bridgetown.initializer :"bridgetown-sitemap" do |config|
8
11
  config.builder BridgetownSitemap::Builder
data/lib/sitemap.erb CHANGED
@@ -4,40 +4,71 @@
4
4
  <?xml-stylesheet type="text/xsl" href="/sitemap.xsl"?>
5
5
  <% end %>
6
6
 
7
- <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
7
+ <urlset
8
+ xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
9
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10
+ xmlns:xhtml="http://www.w3.org/1999/xhtml"
11
+ xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
12
+ http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd
13
+ http://www.w3.org/1999/xhtml
14
+ http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd">
8
15
  <% output_collection_names = site.config.collections.select { |_name, data| data.output }.keys %>
9
16
 
10
17
  <% collections.slice(*output_collection_names).each do |_name, collection| %>
11
- <% collection.resources.each do |resource| %>
12
- <% next if resource.id == "/404" || resource.data.sitemap == false %>
18
+ <% BridgetownSitemap::GroupedResources.new(collection.resources)
19
+ .each(locale: site.locale) do |default:, latest:, group:| %>
20
+ <% if default %>
21
+ <url>
22
+ <loc><%= xml_escape absolute_url(in_locale(default, default.data.locale)) %></loc>
23
+
24
+ <% group.each do |resource| %>
25
+ <% if site.locale == resource.data.locale %>
26
+ <xhtml:link rel="alternate" hreflang="x-default" href="<%= xml_escape resource.absolute_url %>" />
27
+ <% end %>
28
+ <xhtml:link rel="alternate" hreflang="<%= resource.data.locale %>" href="<%= xml_escape resource.absolute_url %>" />
29
+ <% end %>
30
+
31
+ <lastmod><%= latest.sitemap_last_modified_at.localtime.xmlschema %></lastmod>
32
+
33
+ <% if default.data.sitemap_priority %>
34
+ <priority><%= default.data.sitemap_priority %></priority>
35
+ <% end %>
36
+
37
+ <% if default.data.sitemap_change_frequency %>
38
+ <changefreq><%= default.data.sitemap_change_frequency %></changefreq>
39
+ <% end %>
40
+ </url>
41
+ <% end %>
42
+ <% end %>
43
+ <% end %>
44
+
45
+ <% BridgetownSitemap::GroupedGeneratedPages.new(site.generated_pages)
46
+ .each(locale: site.locale) do |default:, latest:, group:| %>
47
+
48
+ <% if default %>
13
49
  <url>
14
- <loc><%= xml_escape resource.absolute_url %></loc>
15
- <lastmod><%= resource.sitemap_last_modified_at.localtime.xmlschema %></lastmod>
16
- <% if resource.data.sitemap_priority %>
17
- <priority><%= resource.data.sitemap_priority %></priority>
50
+ <loc><%= xml_escape absolute_url(default.url) %></loc>
51
+
52
+ <% group.each do |page| %>
53
+ <% if !page.data.locale || site.locale == page.data.locale %>
54
+ <xhtml:link rel="alternate" hreflang="x-default" href="<%= xml_escape absolute_url(page.url) %>" />
55
+ <% end %>
56
+ <xhtml:link rel="alternate" hreflang="<%= page.data.locale || site.locale %>" href="<%= xml_escape absolute_url(page.url) %>" />
18
57
  <% end %>
19
- <% if resource.data.sitemap_change_frequency %>
20
- <changefreq><%= resource.data.sitemap_change_frequency %></changefreq>
58
+
59
+ <lastmod><%= (latest.data.last_modified_at || site.time).localtime.xmlschema %></lastmod>
60
+
61
+ <% if default.data.sitemap_priority %>
62
+ <priority><%= default.data.sitemap_priority %></priority>
63
+ <% end %>
64
+
65
+ <% if default.data.sitemap_change_frequency %>
66
+ <changefreq><%= default.data.sitemap_change_frequency %></changefreq>
21
67
  <% end %>
22
68
  </url>
23
69
  <% end %>
24
70
  <% end %>
25
71
 
26
- <% site.generated_pages.each do |generated_page| %>
27
- <% next if ["sitemap.erb", "robots.liquid"].include? generated_page.name %>
28
- <% next if generated_page.data.sitemap == false %>
29
- <url>
30
- <loc><%= xml_escape absolute_url(generated_page.url) %></loc>
31
- <lastmod><%= (generated_page.data.last_modified_at || site.time).localtime.xmlschema %></lastmod>
32
- <% if generated_page.data.sitemap_priority %>
33
- <priority><%= generated_page.data.sitemap_priority %></priority>
34
- <% end %>
35
- <% if generated_page.data.sitemap_change_frequency %>
36
- <changefreq><%= generated_page.data.sitemap_change_frequency %></changefreq>
37
- <% end %>
38
- </url>
39
- <% end %>
40
-
41
72
  <% page.data.static_files.each do |file| %>
42
73
  <% next if file.data.sitemap == false %>
43
74
  <url>
data/script/cibuild CHANGED
@@ -2,5 +2,4 @@
2
2
 
3
3
  set -e
4
4
 
5
- script/fmt
6
5
  script/test
@@ -8,5 +8,8 @@ Bridgetown.configure do |config|
8
8
  "values" => { "sitemap" => false }
9
9
  }
10
10
 
11
+ available_locales [ :en, :ru ]
12
+ default_locale :en
13
+
11
14
  init :"bridgetown-sitemap"
12
- end
15
+ end
@@ -5,7 +5,13 @@ class Builders::GeneratedPages < SiteBuilder
5
5
  generated_page.content = "<%= 'created from a plugin'.capitalize %>"
6
6
  generated_page.data.layout = "default"
7
7
 
8
+ generated_page_ru = Bridgetown::GeneratedPage.new(site, site.source, "/ru", "generated_page.erb")
9
+ generated_page_ru.content = "<%= '(RU) created from a plugin'.capitalize %>"
10
+ generated_page_ru.data.layout = "default"
11
+ generated_page_ru.data.locale = :ru
12
+
8
13
  site.generated_pages << generated_page
14
+ site.generated_pages << generated_page_ru
9
15
  end
10
16
  end
11
- end
17
+ end
@@ -0,0 +1,5 @@
1
+ ---
2
+ date: 2022-02-19
3
+ ---
4
+
5
+ The 18th of February!
@@ -0,0 +1,5 @@
1
+ ---
2
+ date: 2022-02-19
3
+ ---
4
+
5
+ 18 Февраля!
data/test/test_sitemap.rb CHANGED
@@ -116,13 +116,19 @@ class TestSitemap < BridgetownSitemap::Test
116
116
  end
117
117
 
118
118
  it "includes the correct number of items for the sitemap" do
119
- assert_equal 19, @sitemap.scan(%r!(?=<url>)!).count
119
+ assert_equal 20, @sitemap.scan(%r!(?=<url>)!).count
120
120
  end
121
121
 
122
122
  it "includes generated pages in the sitemap" do
123
123
  assert_match %r!<loc>https://example.com/generated_page/</loc>!, @sitemap
124
124
  end
125
125
 
126
+ it "includes i18n generated pages in the sitemap" do
127
+ assert_match %r!<xhtml:link rel="alternate" hreflang="x-default" href="https://example\.com/generated_page/" />!, @sitemap
128
+ assert_match %r!<xhtml:link rel="alternate" hreflang="en" href="https://example\.com/generated_page/" />!, @sitemap
129
+ assert_match %r!<xhtml:link rel="alternate" hreflang="ru" href="https://example\.com/ru/generated_page/" />!, @sitemap
130
+ end
131
+
126
132
  it "renders liquid in the robots.txt" do
127
133
  assert_match "Sitemap: https://example.com/sitemap.xml", @robots
128
134
  end
@@ -131,6 +137,12 @@ class TestSitemap < BridgetownSitemap::Test
131
137
  assert_match %r!<priority>0.8</priority>!, @sitemap
132
138
  assert_match %r!<changefreq>monthly</changefreq>!, @sitemap
133
139
  end
140
+
141
+ it "adds child links for i18n posts" do
142
+ assert_match %r!<xhtml:link rel="alternate" hreflang="x-default" href="https://example\.com/2022/02/19/locale-default/" />!, @sitemap
143
+ assert_match %r!<xhtml:link rel="alternate" hreflang="en" href="https://example\.com/2022/02/19/locale-default/" />!, @sitemap
144
+ assert_match %r!<xhtml:link rel="alternate" hreflang="ru" href="https://example\.com/ru/2022/02/19/locale-default/" />!, @sitemap
145
+ end
134
146
  end
135
147
 
136
148
  describe "rendering the site with a base URL" do
@@ -162,6 +174,12 @@ class TestSitemap < BridgetownSitemap::Test
162
174
  it "adds the baseurl in the robots.txt" do
163
175
  assert_match "Sitemap: https://example.com/baseurl/sitemap.xml", @robots
164
176
  end
177
+
178
+ it "adds child links for i18n posts with baseurl" do
179
+ assert_match %r!<xhtml:link rel="alternate" hreflang="x-default" href="https://example\.com/baseurl/2022/02/19/locale-default/" />!, @sitemap
180
+ assert_match %r!<xhtml:link rel="alternate" hreflang="en" href="https://example\.com/baseurl/2022/02/19/locale-default/" />!, @sitemap
181
+ assert_match %r!<xhtml:link rel="alternate" hreflang="ru" href="https://example\.com/baseurl/ru/2022/02/19/locale-default/" />!, @sitemap
182
+ end
165
183
  end
166
184
 
167
185
  describe "rendering the site with a url that needs URI encoding" do
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bridgetown-sitemap
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ayush Newatia
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-06-27 00:00:00.000000000 Z
10
+ date: 2025-02-24 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bridgetown
@@ -16,20 +15,20 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: 1.2.0
18
+ version: 1.3.0
20
19
  - - "<"
21
20
  - !ruby/object:Gem::Version
22
- version: '2.0'
21
+ version: '3.0'
23
22
  type: :runtime
24
23
  prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- version: 1.2.0
28
+ version: 1.3.0
30
29
  - - "<"
31
30
  - !ruby/object:Gem::Version
32
- version: '2.0'
31
+ version: '3.0'
33
32
  - !ruby/object:Gem::Dependency
34
33
  name: bundler
35
34
  requirement: !ruby/object:Gem::Requirement
@@ -58,21 +57,6 @@ dependencies:
58
57
  - - ">="
59
58
  - !ruby/object:Gem::Version
60
59
  version: '0'
61
- - !ruby/object:Gem::Dependency
62
- name: rubocop-bridgetown
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: '0'
68
- type: :development
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- version: '0'
75
- description:
76
60
  email: ayush@hey.com
77
61
  executables: []
78
62
  extensions: []
@@ -89,12 +73,14 @@ files:
89
73
  - bridgetown-sitemap.gemspec
90
74
  - lib/bridgetown-sitemap.rb
91
75
  - lib/bridgetown-sitemap/builder.rb
76
+ - lib/bridgetown-sitemap/git_inspector.rb
77
+ - lib/bridgetown-sitemap/grouped_generated_pages.rb
78
+ - lib/bridgetown-sitemap/grouped_resources.rb
92
79
  - lib/bridgetown-sitemap/version.rb
93
80
  - lib/bridgetown/resource/base.rb
94
81
  - lib/robots.liquid
95
82
  - lib/sitemap.erb
96
83
  - script/cibuild
97
- - script/fmt
98
84
  - script/release
99
85
  - script/test
100
86
  - test/fixtures/config/initializers.rb
@@ -112,6 +98,8 @@ files:
112
98
  - test/fixtures/src/_posts/2021-03-04-march-the-fourth.md
113
99
  - test/fixtures/src/_posts/2021-05-06-may-the-sixth.md
114
100
  - test/fixtures/src/_posts/2022-02-18-feb-the-eighteenth.md
101
+ - test/fixtures/src/_posts/2022-02-19-locale-default.md
102
+ - test/fixtures/src/_posts/2022-02-19-locale-default.ru.md
115
103
  - test/fixtures/src/about.html
116
104
  - test/fixtures/src/assets/sample_image.jpg
117
105
  - test/fixtures/src/assets/sample_pdf.pdf
@@ -134,7 +122,6 @@ homepage: https://github.com/ayushn21/bridgetown-sitemap
134
122
  licenses:
135
123
  - MIT
136
124
  metadata: {}
137
- post_install_message:
138
125
  rdoc_options: []
139
126
  require_paths:
140
127
  - lib
@@ -142,15 +129,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
142
129
  requirements:
143
130
  - - ">="
144
131
  - !ruby/object:Gem::Version
145
- version: 2.7.0
132
+ version: 3.2.4
146
133
  required_rubygems_version: !ruby/object:Gem::Requirement
147
134
  requirements:
148
135
  - - ">="
149
136
  - !ruby/object:Gem::Version
150
137
  version: '0'
151
138
  requirements: []
152
- rubygems_version: 3.4.10
153
- signing_key:
139
+ rubygems_version: 3.6.2
154
140
  specification_version: 4
155
141
  summary: Automatically generate a sitemap.xml for your Bridgetown site.
156
142
  test_files:
@@ -169,6 +155,8 @@ test_files:
169
155
  - test/fixtures/src/_posts/2021-03-04-march-the-fourth.md
170
156
  - test/fixtures/src/_posts/2021-05-06-may-the-sixth.md
171
157
  - test/fixtures/src/_posts/2022-02-18-feb-the-eighteenth.md
158
+ - test/fixtures/src/_posts/2022-02-19-locale-default.md
159
+ - test/fixtures/src/_posts/2022-02-19-locale-default.ru.md
172
160
  - test/fixtures/src/about.html
173
161
  - test/fixtures/src/assets/sample_image.jpg
174
162
  - test/fixtures/src/assets/sample_pdf.pdf
data/script/fmt DELETED
@@ -1,10 +0,0 @@
1
- #!/bin/bash
2
- set -e
3
-
4
- echo "Rubocop $(bundle exec rubocop --version)"
5
- bundle exec rubocop -D -E $@
6
- success=$?
7
- if ((success != 0)); then
8
- echo -e "\nTry running \`script/fmt -a\` to automatically fix errors"
9
- fi
10
- exit $success