jekyll-shorts 0.0.5 → 0.0.7

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: 075333a0c5c258bde795e1bbf517d836e05c704f30036a7781fd0d88873acb6b
4
- data.tar.gz: 8d19ee30aa6547623b58b6b230b44fbf0952e83b034a40a1d856fec05b660e16
3
+ metadata.gz: 5274421350720698e2b1b121d2b1172e7353ed3ee272448a0f4770ce1de2cb9c
4
+ data.tar.gz: 438e0496e14abf79ac5a528f612b9063eb5eaada237c8b2a242f9420b4cc06c9
5
5
  SHA512:
6
- metadata.gz: f72f406ff8aabaede20f7203853c76a9d8d4809b82d1b93e4414784f69a331bfee308f18a951526e7e1260e8477c6f5a0c5435cc0c56709327f5f533a930e8fd
7
- data.tar.gz: bb12ffc8a185eb2bb4de450434015d86761786daa2da87fe16ed689842aaf70046e7833d4809fcc8557a59c2ff9d8ffdab064be9425df7c57c48effc4bd1f925
6
+ metadata.gz: 9a002a9b9801913f4d69244374d23dc2c2516ce007e61fc60714822fff0e3f5d5e4c7c58b0cda3beeb29e2b21831e1c553f7aa98c2abe5216f066769e2b974e6
7
+ data.tar.gz: 3b31fad918a945d95a5a139d3a2a003563c0ee89a9884ee9c0f9f734a460df37f584676589b386f045b96792bc868124f71da66fcd125e6f9696adb7cabcdf43
data/README.md CHANGED
@@ -25,11 +25,11 @@ shorts:
25
25
  Here, every page in the site will get a sibling with the name
26
26
  `:year:month:day.html`, which will redirect to the page itself. You can use:
27
27
 
28
- * `:Y` - the full year of the post, like `2022` or `1976`
29
- * `:y` - the short form of the year of the post, like `23` or `76`
30
- * `:m` - the month of the post, like `01` or `12`
31
- * `:d` - the day of the post, like `07` or `29`
32
- * `:pos` - the unique position of the post in the entire list of them, like `42` or `256`
28
+ * `:year` - the short form of the year of the post, like `23` or `76`
29
+ * `:month` - the month of the post, like `01` or `12`
30
+ * `:day` - the day of the post, like `07` or `29`
31
+ * `:position` - the unique position of the post in the entire list of them, like `42` or `256`
32
+ * `:letter` - one English letter inside a month (empty instead of `a`)
33
33
 
34
34
  Be careful with the `:position`, since it may change when you add a new post
35
35
  somewhere in the middle of existing flow of posts.
data/features/cli.feature CHANGED
@@ -8,7 +8,7 @@ Feature: Simple site building
8
8
  plugins:
9
9
  - jekyll-shorts
10
10
  shorts:
11
- permalink: :y:m:d.html
11
+ permalink: :year:month:day.html
12
12
  """
13
13
  And I have a "_layouts/default.html" file with content:
14
14
  """
@@ -35,7 +35,7 @@ Feature: Simple site building
35
35
  plugins:
36
36
  - jekyll-shorts
37
37
  shorts:
38
- permalink: :y.html
38
+ permalink: :year.html
39
39
  """
40
40
  And I have a "_layouts/default.html" file with content:
41
41
  """
@@ -62,3 +62,39 @@ Feature: Simple site building
62
62
  """
63
63
  And I build Jekyll site
64
64
  And Exit code is not zero
65
+
66
+ Scenario: Simple site
67
+ Given I have a "_config.yml" file with content:
68
+ """
69
+ markdown: kramdown
70
+ plugins:
71
+ - jekyll-shorts
72
+ shorts:
73
+ permalink: :year:month:letter.html
74
+ """
75
+ And I have a "_layouts/default.html" file with content:
76
+ """
77
+ {{ content }}
78
+ """
79
+ And I have a "_posts/2023-01-01-apple.md" file with content:
80
+ """
81
+ ---
82
+ title: Hello, world!
83
+ layout: default
84
+ ---
85
+ Hello, world!
86
+ """
87
+ Then I build Jekyll site
88
+ And Exit code is zero
89
+ And I have a "_posts/2023-01-02-apple.md" file with content:
90
+ """
91
+ ---
92
+ title: Hello, world!
93
+ layout: default
94
+ ---
95
+ Hello, world!
96
+ """
97
+ And I build Jekyll site
98
+ And Exit code is zero
99
+ And File "_site/2301.html" exists
100
+ And File "_site/2301b.html" exists
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
28
28
  s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
29
29
  s.required_ruby_version = '>= 2.6'
30
30
  s.name = 'jekyll-shorts'
31
- s.version = '0.0.5'
31
+ s.version = '0.0.7'
32
32
  s.license = 'MIT'
33
33
  s.summary = 'Automatically generates short links for Jekyll website'
34
34
  s.description = [
@@ -45,20 +45,25 @@ class JekyllShorts::Generator < Jekyll::Generator
45
45
  permalink ||= config['permalink'] || ':year:month:day'
46
46
  start = Time.now
47
47
  total = 0
48
+ months = {}
48
49
  site.posts.docs.sort_by(&:url).each_with_index do |doc, pos|
49
50
  long = doc.url
51
+ month = doc.date.strftime('%Y%m')
52
+ months[month] = 0 if months[month].nil?
53
+ raise 'Too many letters' if months[month] >= 26
50
54
  short = Jekyll::URL.new(
51
55
  template: permalink,
52
56
  placeholders: {
53
- 'Y' => doc.date.year.to_s,
54
- 'y' => doc.date.year.to_s[2..],
55
- 'm' => doc.date.month.to_s.rjust(2, '0'),
56
- 'd' => doc.date.day.to_s.rjust(2, '0'),
57
- 'pos' => pos.to_s
57
+ 'year' => doc.date.year.to_s[2..],
58
+ 'month' => doc.date.month.to_s.rjust(2, '0'),
59
+ 'day' => doc.date.day.to_s.rjust(2, '0'),
60
+ 'letter' => months[month].zero? ? '' : (months[month] + 'a'.ord).chr,
61
+ 'position' => pos.to_s
58
62
  }
59
63
  ).to_s
60
64
  site.static_files << ShortFile.new(site, short, long)
61
65
  doc.data['short-url'] = short
66
+ months[month] += 1
62
67
  total += 1
63
68
  end
64
69
  Jekyll.logger.info("jekyll-shorts #{JekyllShorts::VERSION}: \
@@ -23,5 +23,5 @@
23
23
  # SOFTWARE.
24
24
 
25
25
  module JekyllShorts
26
- VERSION = '0.0.5'
26
+ VERSION = '0.0.7'
27
27
  end
@@ -49,4 +49,24 @@ class JekyllShorts::GeneratorTest < Minitest::Test
49
49
  gen.generate(site)
50
50
  end
51
51
  end
52
+
53
+ def test_two_similar_posts
54
+ Dir.mktmpdir do |home|
55
+ first = File.join(home, '2023-01-01-first.md')
56
+ File.write(first, "---\ntitle: Hello\n---\n\nHello, world!")
57
+ second = File.join(home, '2023-01-01-second.md')
58
+ File.write(second, "---\ntitle: Hello\n---\n\nHello, world!")
59
+ site = JekyllShorts::FakeSite.new(
60
+ {
61
+ 'url' => 'https://www.yegor256.com/',
62
+ 'shorts' => {
63
+ 'permalink' => ':y:m:letter.html'
64
+ }
65
+ },
66
+ [first, second]
67
+ )
68
+ gen = JekyllShorts::Generator.new
69
+ gen.generate(site)
70
+ end
71
+ end
52
72
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-shorts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko