bridgetown-sitemap 3.0.2 → 3.0.3

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: 549a10754e46862c85bcf21f63d605644f861939245598093152af4862009c92
4
- data.tar.gz: 70e6268b85f3448c415a1b6acb7c4aa27bf9f3ab5b83b7cc3a778b8b18d4c7b6
3
+ metadata.gz: 8f00894900e60c0fffd2a423628cb6fc74b4c14c34e9d4af61b720768bd5975e
4
+ data.tar.gz: 362241749b5e761fe4d053033d7e55f8836ddb9abf44f6fc0ba24cb7968ae41a
5
5
  SHA512:
6
- metadata.gz: 025d45947ead07e7a9c9f6a6cad5b67748d5442b69fb4c42f16fcbf87bd1bd47a79ef2a27dda6536bb052aa207f1daff66e52036be22b0652c57dc4729db1637
7
- data.tar.gz: '07790cc195ceeebcd204456cf21df88e22b8724256a247c4fd89f9eef1937b9d3a1a7f9c8e44ade8539a676e1ffe76aa45d26a202d59d8a383269f93b1da26be'
6
+ metadata.gz: 4e94ff81de31e076f67ceee0027c3ddb087e64d2bac1c5bf6beba746d89fa3a7f7e2947168a8de0957d6f61fe63b5a00109f023ad94fd38585e3ef19b6147d72
7
+ data.tar.gz: 01e2c19296e749abe40df77f5e51bb5ca0a6592a3d0e36b29a288652368619c406fdde24efbd6c495cb84bd13430230933b756283ad119e4880c29aab99636ab
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # main
2
2
 
3
+ # 3.0.3 / 15-04-2026
4
+
5
+ * Fix resource and generated page grouping for same-name pages in different paths
6
+ * Cache git_repo? check at the class level
7
+
3
8
  # 3.0.2 / 25-03-2026
4
9
 
5
10
  * Fix the accidental inclusion of a sitemap XSL stylesheet within the sitemap itself
@@ -24,7 +24,13 @@ module BridgetownSitemap
24
24
  end
25
25
 
26
26
  def git_repo?
27
- system "git status", out: File::NULL, err: File::NULL
27
+ self.class.git_repo?
28
+ end
29
+
30
+ def self.git_repo?
31
+ return @git_repo if defined?(@git_repo)
32
+
33
+ @git_repo = system("git rev-parse --is-inside-work-tree", out: File::NULL, err: File::NULL)
28
34
  end
29
35
 
30
36
  def cache
@@ -3,8 +3,15 @@
3
3
  module BridgetownSitemap
4
4
  class GroupedGeneratedPages
5
5
  def initialize(generated_pages)
6
- @grouped_generated_pages = \
7
- generated_pages.group_by { |page| page.data.slug }.values
6
+ @grouped_generated_pages = generated_pages.group_by do |page|
7
+ url = if page.respond_to?(:original_resource) && page.original_resource
8
+ page.original_resource.relative_url.to_s
9
+ else
10
+ page.url.to_s
11
+ end
12
+ locale = page.data.locale.to_s
13
+ locale.empty? ? url : url.sub("/#{locale}/", "/")
14
+ end.values
8
15
  end
9
16
 
10
17
  def each(locale:, &block)
@@ -4,7 +4,10 @@ module BridgetownSitemap
4
4
  class GroupedResources
5
5
  def initialize(resources)
6
6
  @grouped_resources = resources.group_by do |resource|
7
- [resource.data.slug, resource.date]
7
+ url = resource.relative_url.to_s
8
+ locale = resource.data.locale.to_s
9
+ base_url = locale.empty? ? url : url.sub("/#{locale}/", "/")
10
+ [base_url, resource.date]
8
11
  end.values
9
12
  end
10
13
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BridgetownSitemap
4
- VERSION = "3.0.2"
4
+ VERSION = "3.0.3"
5
5
  end
data/lib/sitemap.erb CHANGED
@@ -49,7 +49,7 @@
49
49
  <url>
50
50
  <loc><%= xml_escape absolute_url(default.url) %></loc>
51
51
 
52
- <% group.each do |page| %>
52
+ <% group.reject { |p| p.respond_to?(:original_resource) && p.original_resource && p.url != default.url }.each do |page| %>
53
53
  <% if !page.data.locale || site.locale == page.data.locale %>
54
54
  <xhtml:link rel="alternate" hreflang="x-default" href="<%= xml_escape absolute_url(page.url) %>" />
55
55
  <% end %>
@@ -10,6 +10,7 @@ Bridgetown.configure do |config|
10
10
 
11
11
  available_locales [ :en, :ru ]
12
12
  default_locale :en
13
+ pagination { enabled true }
13
14
 
14
15
  init :"bridgetown-sitemap"
15
16
  end
@@ -10,8 +10,13 @@ class Builders::GeneratedPages < SiteBuilder
10
10
  generated_page_ru.data.layout = "default"
11
11
  generated_page_ru.data.locale = :ru
12
12
 
13
+ generated_page_alt = Bridgetown::GeneratedPage.new(site, site.source, "/alt", "generated_page.erb")
14
+ generated_page_alt.content = "<%= 'alt generated page'.capitalize %>"
15
+ generated_page_alt.data.layout = "default"
16
+
13
17
  site.generated_pages << generated_page
14
18
  site.generated_pages << generated_page_ru
19
+ site.generated_pages << generated_page_alt
15
20
  end
16
21
  end
17
22
  end
@@ -0,0 +1,8 @@
1
+ ---
2
+ layout: default
3
+ pagination:
4
+ collection: posts
5
+ per_page: 4
6
+ ---
7
+
8
+ <h1>Blog Index</h1>
data/test/test_sitemap.rb CHANGED
@@ -120,7 +120,26 @@ class TestSitemap < BridgetownSitemap::Test
120
120
  end
121
121
 
122
122
  it "includes the correct number of items for the sitemap" do
123
- assert_equal 20, @sitemap.scan(%r!(?=<url>)!).count
123
+ assert_equal 22, @sitemap.scan(%r!(?=<url>)!).count
124
+ end
125
+
126
+ it "does not merge pages with the same slug but different paths" do
127
+ assert_match %r!<loc>https://example\.com/</loc>!, @sitemap
128
+ assert_match %r!<loc>https://example\.com/blog/</loc>!, @sitemap
129
+ end
130
+
131
+ it "does not merge generated pages with the same name but different paths" do
132
+ assert_match %r!<loc>https://example\.com/generated_page/</loc>!, @sitemap
133
+ assert_match %r!<loc>https://example\.com/alt/generated_page/</loc>!, @sitemap
134
+ end
135
+
136
+ it "collapses pagination pages with their original page" do
137
+ assert_match %r!<loc>https://example\.com/blog/</loc>!, @sitemap
138
+ refute_match %r!<loc>https://example\.com/blog/page/!, @sitemap
139
+ end
140
+
141
+ it "does not list pagination pages as hreflang alternates" do
142
+ refute_match %r!hreflang.*blog/page/!, @sitemap
124
143
  end
125
144
 
126
145
  it "includes generated pages in the sitemap" do
@@ -242,6 +261,20 @@ class TestSitemap < BridgetownSitemap::Test
242
261
  end
243
262
  end
244
263
 
264
+ describe "GitInspector" do
265
+ it "caches the git_repo? check at the class level" do
266
+ BridgetownSitemap::GitInspector.remove_instance_variable(:@git_repo) if
267
+ BridgetownSitemap::GitInspector.instance_variable_defined?(:@git_repo)
268
+
269
+ result = BridgetownSitemap::GitInspector.git_repo?
270
+
271
+ assert BridgetownSitemap::GitInspector.instance_variable_defined?(:@git_repo),
272
+ "Expected git_repo? result to be cached on the class"
273
+ assert_equal result, BridgetownSitemap::GitInspector.git_repo?,
274
+ "Expected cached result to be returned on subsequent calls"
275
+ end
276
+ end
277
+
245
278
  describe "rendering the site with custom URLs" do
246
279
  before(:all) do
247
280
  prepare_site
@@ -257,4 +290,5 @@ class TestSitemap < BridgetownSitemap::Test
257
290
  assert_match %r!<changefreq>weekly</changefreq>!, @sitemap
258
291
  end
259
292
  end
293
+
260
294
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bridgetown-sitemap
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 3.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ayush Newatia
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-03-25 00:00:00.000000000 Z
10
+ date: 2026-04-15 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: bridgetown
@@ -103,6 +103,7 @@ files:
103
103
  - test/fixtures/src/about.html
104
104
  - test/fixtures/src/assets/sample_image.jpg
105
105
  - test/fixtures/src/assets/sample_pdf.pdf
106
+ - test/fixtures/src/blog/index.html
106
107
  - test/fixtures/src/excluded_files/excluded_pdf.pdf
107
108
  - test/fixtures/src/excluded_files/html_file.html
108
109
  - test/fixtures/src/feeds/atom.xml
@@ -160,6 +161,7 @@ test_files:
160
161
  - test/fixtures/src/about.html
161
162
  - test/fixtures/src/assets/sample_image.jpg
162
163
  - test/fixtures/src/assets/sample_pdf.pdf
164
+ - test/fixtures/src/blog/index.html
163
165
  - test/fixtures/src/excluded_files/excluded_pdf.pdf
164
166
  - test/fixtures/src/excluded_files/html_file.html
165
167
  - test/fixtures/src/feeds/atom.xml