jekyll_all_collections 0.3.1 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b05fdaeb90e724ead5fe3036822f97e2d3b597eea75b8e2f6e2bd63d8b491401
4
- data.tar.gz: 78ea31227b48c4c3ddaf49c12803c602e9b059097ae73b57083b2f411a28acb2
3
+ metadata.gz: d7f7fa2e1b1ca3dc3ee52ef85f6b1f55db8710bca3fed39386469d686bd6341f
4
+ data.tar.gz: 3827c3d5b908b972fb2d4efb3b6c0f703d84fbd710d5887485f1f6e0810718f9
5
5
  SHA512:
6
- metadata.gz: b871ce27294c5b6474f07bae466bc89ec5b92b3b1d96718889595988934e5fef6f80711aca2ff9faf16b15df5729da8ba44c9d6e4fc67ef4b193f16ddd958262
7
- data.tar.gz: 05ad4525f6e4deb03238a88b74cbd68c5779b7dc8b2437074db5a3c007b67113cec0f2b239d24dc3b148093727958b6505bd091337d602ad95d556e14c7be013
6
+ metadata.gz: fed15d67819f65a6711f9b4a3550fd4d309184f06e774cffe4ba9e9a4673f04e422e785a62c17c4151f12e1e98685f8317bec2e02542cfebac87ec94c9557a0c
7
+ data.tar.gz: 750f6e7f00532dc66bd992269c6cc0651deaebf2e10b385883c29010e4032a52ea7a925de12d55ecc064cdc2c604c919d6eb1a0807a641a31e7055f99a588048
data/.rubocop.yml CHANGED
@@ -1,52 +1,71 @@
1
+ require:
2
+ # - rubocop-jekyll
3
+ - rubocop-md
4
+ - rubocop-performance
5
+ - rubocop-rake
6
+ - rubocop-rspec
7
+
1
8
  AllCops:
2
9
  Exclude:
10
+ - exe/**/*
3
11
  - vendor/**/*
4
12
  - Gemfile*
5
- - '*.gemspec'
6
13
  NewCops: enable
7
14
  TargetRubyVersion: 2.6
8
15
 
9
- # Gemspec/RequireMFA:
10
- # Enabled: false
16
+ Gemspec/DeprecatedAttributeAssignment:
17
+ Enabled: false
18
+
19
+ Gemspec/RequireMFA:
20
+ Enabled: false
11
21
 
12
22
  Layout/HashAlignment:
23
+ EnforcedColonStyle: table
13
24
  EnforcedHashRocketStyle: table
14
25
 
15
26
  Layout/LineLength:
16
27
  Max: 150
17
28
 
29
+ Metrics/AbcSize:
30
+ Max: 45
31
+
18
32
  Metrics/BlockLength:
19
33
  Exclude:
20
- - spec/**/*
21
- Max: 50
22
-
23
- Metrics/AbcSize:
24
- Max: 42
34
+ - jekyll_all_collections.gemspec
35
+ Max: 30
25
36
 
26
37
  Metrics/CyclomaticComplexity:
27
38
  Max: 25
28
39
 
29
40
  Metrics/MethodLength:
30
- Max: 40
31
-
32
- Metrics/ModuleLength:
33
- Enabled: false
41
+ Max: 30
34
42
 
35
43
  Metrics/PerceivedComplexity:
36
- Max: 20
44
+ Max: 25
37
45
 
38
- Style/Documentation:
39
- Enabled: false
46
+ Naming/FileName:
47
+ Exclude:
48
+ - Rakefile
40
49
 
41
- Style/FrozenStringLiteralComment:
50
+ RSpec/ExampleLength:
51
+ Max: 30
52
+
53
+ RSpec/FilePath:
42
54
  Enabled: false
55
+ IgnoreMethods: true
56
+ SpecSuffixOnly: true
43
57
 
44
- Style/LineEndConcatenation:
58
+ RSpec/IndexedLet:
45
59
  Enabled: false
46
60
 
47
- Style/StringConcatenation:
48
- Exclude:
49
- - spec/**/*
61
+ RSpec/MultipleExpectations:
62
+ Max: 15
50
63
 
51
- Style/StringLiterals:
64
+ Style/Documentation:
52
65
  Enabled: false
66
+
67
+ Style/FrozenStringLiteralComment:
68
+ Enabled: false
69
+
70
+ Style/TrailingCommaInHashLiteral:
71
+ EnforcedStyleForMultiline: comma
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 0.3.3 / 2023-05-22
2
+ * Corrected key presence checks in APage.initialize
3
+ * Using `warn_short_trace` from `jekyll_plugin_support` for non-fatal errors.
4
+
5
+ ## 0.3.2 / 2023-04-05
6
+ * Modified dependency `'jekyll_plugin_support', '>= 0.5.0'`
7
+
1
8
  ## 0.3.1 / 2023-03-16
2
9
  * Reduced the verbosity of the `@logger` message
3
10
 
data/README.md CHANGED
@@ -15,25 +15,39 @@ The collection consists of an array of objects with the following properties:
15
15
  Pages that are not in any collection are not included.
16
16
 
17
17
 
18
+ ## Installation
19
+ Add this line to your application's Gemfile:
20
+
21
+ ```ruby
22
+ group :jekyll_plugins do
23
+ gem 'jekyll_all_collections'
24
+ end
25
+ ```
26
+
27
+ And then execute:
28
+
29
+ $ bundle
30
+
31
+
18
32
  ## Requirements
19
33
  All the pages in the Jekyll website must have an implicit date (for example, all posts are assigned this property by Jekyll),
20
34
  or an explicit `date` set in front matter, like this:
21
35
  ```
22
36
  ---
23
- date=2022-01-01
37
+ date: 2022-01-01
24
38
  ---
25
39
  ```
26
40
  If a front matter variable called `last_modified` or `last_modified_at` exists, its value will be converted to a Ruby `Date`:
27
41
  ```
28
42
  ---
29
- last_modified=2023-01-01
43
+ last_modified: 2023-01-01
30
44
  ---
31
45
  ```
32
46
 
33
47
  Or:
34
48
  ```
35
49
  ---
36
- last_modified_at=2023-01-01
50
+ last_modified_at: 2023-01-01
37
51
  ---
38
52
  ```
39
53
 
@@ -79,7 +93,12 @@ exclude_from_all: true
79
93
  #### General Form
80
94
  The general form of the Jekyll tag is:
81
95
  ```
82
- {% all_collections date_column='date|last_modified' id='asdf' heading='All Posts' sort_by='SORT_KEYS' %}
96
+ {% all_collections
97
+ date_column='date|last_modified'
98
+ heading='All Posts'
99
+ id='asdf'
100
+ sort_by='SORT_KEYS'
101
+ %}
83
102
  ```
84
103
 
85
104
  #### `date_column` Attribute
@@ -89,19 +108,6 @@ or `last_modified`.
89
108
  The default value for the `date_column` attribute is `date`.
90
109
 
91
110
 
92
- #### `id` Attribute
93
- If your Jekyll layout employs [`jekyll-toc`](https://github.com/allejo/jekyll-toc), then `id` attributes are important.
94
- The `jekyll-toc` include checks for `id` attributes in `h2` ... `h6` tags, and if found, and if the attribute value is enclosed in double quotes (`id="my_id"`, not `id='my_id'`),
95
- then the heading is included in the table of contents.
96
-
97
- To suppress an `id` from being generated,
98
- and thereby preventing the heading from appearing in the automatically generated table of contents from `jekyll-toc`,
99
- specify an empty string for the value of `id`, like this:
100
- ```
101
- {% all_collections id='' %}
102
- ```
103
-
104
-
105
111
  #### `heading` Attribute
106
112
  If no `heading` attribute is specified, a heading will automatically be generated, which contains the `sort_by` values, for example:
107
113
  ```
@@ -109,7 +115,7 @@ If no `heading` attribute is specified, a heading will automatically be generate
109
115
  ```
110
116
  Generates a heading like:
111
117
  ```
112
- <h2 id="abcdef">All Posts Sorted By -last_modified</h2>
118
+ <h2 id="abcdef">All Posts Sorted By last_modified</h2>
113
119
  ```
114
120
 
115
121
  To suppress both a `h2` heading (and the enclosed `id`) from being generated,
@@ -119,13 +125,39 @@ specify an empty string for the value of `heading`:
119
125
  ```
120
126
 
121
127
 
128
+ #### `id` Attribute
129
+ If your Jekyll layout employs [`jekyll-toc`](https://github.com/allejo/jekyll-toc), then `id` attributes are important.
130
+ The `jekyll-toc` include checks for `id` attributes in `h2` ... `h6` tags, and if found, and if the attribute value is enclosed in double quotes (`id="my_id"`, not `id='my_id'`),
131
+ then the heading is included in the table of contents.
132
+
133
+ To suppress an `id` from being generated,
134
+ and thereby preventing the heading from appearing in the automatically generated table of contents from `jekyll-toc`,
135
+ specify an empty string for the value of `id`, like this:
136
+ ```
137
+ {% all_collections id='' %}
138
+ ```
139
+
140
+
122
141
  #### `SORT_KEYS` Values
123
142
  `SORT_KEYS` specifies how to sort the collection.
124
143
  Values can include one or more of the following attributes:
125
- `date`, `destination`, `draft`, `label`, `last_modified`, `path`, `relative_path`, `title`, `type`, and `url`.
144
+ `date`, `destination`, `draft`, `label`, `last_modified`, `last_modified_at`, `path`, `relative_path`, `title`, `type`, and `url`.
126
145
  Ascending sorts are the default, however a descending sort can be achieved by prepending `-` before an attribute.
127
146
 
128
- To specify more than one sort key, provide an array of values.
147
+ To specify more than one sort key, provide a comma-delimited string of values.
148
+ Included spaces are ignored.
149
+ For example, specify the primary sort key as <code>draft</code>,
150
+ the secondary sort key as <code>last_modified</code>,
151
+ and the tertiary key as <code>label</code>:
152
+
153
+ ```
154
+ {% all_collections
155
+ date_column='last_modified'
156
+ heading='All Posts'
157
+ id='asdf'
158
+ sort_by='draft, last_modified, label'
159
+ %}
160
+ ```
129
161
 
130
162
 
131
163
  #### Usage Examples
@@ -237,22 +269,6 @@ More information is available on Mike Slinn's website about
237
269
  [Jekyll plugins](https://www.mslinn.com/blog/index.html#Jekyll).
238
270
 
239
271
 
240
- ## Installation
241
- This has already been done for the demo;
242
- these instructions are for incorporating the plugin(s) into other Jekyll websites.
243
- Add this line to your application's Gemfile:
244
-
245
- ```ruby
246
- group :jekyll_plugins do
247
- gem 'jekyll_all_collections'
248
- end
249
- ```
250
-
251
- And then execute:
252
-
253
- $ bundle install
254
-
255
-
256
272
  ## Development
257
273
 
258
274
  After checking out the repo, run `bin/setup` to install dependencies.
@@ -12,9 +12,9 @@ Gem::Specification.new do |spec|
12
12
  spec.executables = []
13
13
 
14
14
  # Specify which files should be added to the gem when it is released.
15
- spec.files = Dir['.rubocop.yml', 'LICENSE.*', 'Rakefile', "{lib,spec}/**/*", "*.gemspec", "*.md"]
15
+ spec.files = Dir['.rubocop.yml', 'LICENSE.*', 'Rakefile', '{lib,spec}/**/*', '*.gemspec', '*.md']
16
16
 
17
- spec.homepage = 'https://www.mslinn.com/blog/2020/12/30/jekyll-plugin-template-collection.html'
17
+ spec.homepage = 'https://www.mslinn.com/jekyll_plugins/jekyll_all_collections.html'
18
18
  spec.license = 'MIT'
19
19
  spec.metadata = {
20
20
  'allowed_push_host' => 'https://rubygems.org',
@@ -31,5 +31,5 @@ Gem::Specification.new do |spec|
31
31
 
32
32
  spec.add_dependency 'jekyll', '>= 3.5.0'
33
33
  spec.add_dependency 'jekyll_draft', '~> 1.1.1'
34
- spec.add_dependency 'jekyll_plugin_support', '~> 0.5.0'
34
+ spec.add_dependency 'jekyll_plugin_support', '>= 0.7.0'
35
35
  end
@@ -66,22 +66,22 @@ module AllCollectionsHooks
66
66
  end
67
67
 
68
68
  class APage
69
- attr_reader :content, :data, :date, :description, :destination, :draft, :excerpt, :ext, \
69
+ attr_reader :content, :data, :date, :description, :destination, :draft, :excerpt, :ext,
70
70
  :label, :last_modified, :layout, :path, :relative_path, :tags, :title, :type, :url
71
71
 
72
72
  # Verify each property exists before accessing it; this helps write tests
73
73
  def initialize(obj) # rubocop:disable Metrics/AbcSize
74
74
  @data = obj.data if obj.respond_to? :data
75
75
 
76
- @categories = @data['categories'] if obj.respond_to? :categories
76
+ @categories = @data['categories'] if @data.key? 'categories'
77
77
  @content = obj.content if obj.respond_to? :content
78
- @date = @data['date'].to_date if obj.respond_to? :date
79
- @description = @data['description'] if obj.respond_to? :data
78
+ @date = (@data['date'].to_date if @data&.key?('date')) || Date.today
79
+ @description = @data['description'] if @data.key? 'description'
80
80
  @destination = obj.destination('') if obj.respond_to? :destination # TODO: What _config.yml setting should be passed to destination()?
81
81
  @draft = Jekyll::Draft.draft?(obj)
82
- @excerpt = @data['excerpt'] if obj.respond_to? :excerpt
83
- @ext = @data['ext'] if obj.respond_to? :data
84
- @label = obj.collection.label if obj.respond_to? :label
82
+ @excerpt = @data['excerpt'] if @data.key? 'excerpt'
83
+ @ext = @data['ext'] if @data.key? 'ext'
84
+ @label = obj.collection.label if obj&.collection.respond_to? :label
85
85
  @last_modified = @data['last_modified'] || @data['last_modified_at'] || @date
86
86
  @last_modified_field = case @data
87
87
  when @data.key?('last_modified')
@@ -89,11 +89,11 @@ module AllCollectionsHooks
89
89
  when @data.key?('last_modified_at')
90
90
  'last_modified_at'
91
91
  end
92
- @layout = @data['layout'] if obj.respond_to? :layout
92
+ @layout = @data['layout'] if @data.key? 'layout'
93
93
  @path = obj.path if obj.respond_to? :path
94
94
  @relative_path = obj.relative_path if obj.respond_to? :relative_path
95
- @tags = @data['tags'] if obj.respond_to? :tags
96
- @title = @data['title'] if obj.respond_to? :title
95
+ @tags = @data['tags'] if @data.key? 'tags'
96
+ @title = @data['title'] if @data.key? 'title'
97
97
  @type = obj.type if obj.respond_to? :type
98
98
  @url = obj.url
99
99
  end
@@ -105,9 +105,9 @@ module AllCollectionsHooks
105
105
  end
106
106
  end
107
107
 
108
- PluginMetaLogger.instance.logger.info {
108
+ PluginMetaLogger.instance.logger.info do
109
109
  "Loaded AllCollectionsHooks v#{JekyllAllCollectionsVersion::VERSION} :site, :pre_render, :normal hook plugin."
110
- }
110
+ end
111
111
  end
112
112
 
113
113
  Liquid::Template.register_filter(AllCollectionsHooks)
@@ -18,6 +18,7 @@ end
18
18
  module AllCollectionsTag
19
19
  PLUGIN_NAME = 'all_collections'.freeze
20
20
  CRITERIA = %w[date destination draft label last_modified last_modified_at path relative_path title type url].freeze
21
+ DRAFT_HTML = '<i class="jekyll_draft">Draft</i>'.freeze
21
22
 
22
23
  class AllCollectionsTag < JekyllSupport::JekyllTag
23
24
  include JekyllAllCollectionsVersion
@@ -28,18 +29,22 @@ module AllCollectionsTag
28
29
  AllCollectionsHooks.compute(@site) unless @site.class.method_defined? :all_collections
29
30
 
30
31
  @date_column = @helper.parameter_specified?('date_column') || 'date'
31
- abort "Error: the date_column attribute must either have value 'date' or 'last_modified', but '#{@date_column}' was specified" \
32
- unless %w[date last_modified].include?(@date_column)
33
-
32
+ unless %w[date last_modified].include?(@date_column)
33
+ # TODO: should this just issue a warning and return instead of dieing?
34
+ abort "Error: the date_column attribute must either have value 'date' or 'last_modified', " \
35
+ "but '#{@date_column}' was specified"
36
+ end
34
37
  @id = @helper.parameter_specified?('id') || SecureRandom.hex(10)
35
- sort_by_param = @helper.parameter_specified?('sort_by')
38
+ sort_by_param = @helper.parameter_specified? 'sort_by'
36
39
  sort_by = (sort_by_param&.gsub(' ', '')&.split(',') if sort_by_param != false) || ['-date']
37
40
  @heading = @helper.parameter_specified?('heading') || self.class.default_head(sort_by)
38
41
  sort_lambda_string = self.class.create_lambda_string(sort_by)
39
- @logger.debug "#{@page['path']} sort_by_param=#{sort_by_param}"
40
- @logger.debug " sort_lambda_string = #{sort_lambda_string}\n"
41
- sort_lambda = self.class.evaluate(sort_lambda_string)
42
- generate_output(sort_lambda)
42
+ @logger.debug do
43
+ "#{@page['path']} sort_by_param=#{sort_by_param} " \
44
+ "sort_lambda_string = #{sort_lambda_string}\n"
45
+ end
46
+ sort_lambda = self.class.evaluate sort_lambda_string
47
+ generate_output sort_lambda
43
48
  end
44
49
 
45
50
  def self.default_head(sort_by)
@@ -57,9 +62,9 @@ module AllCollectionsTag
57
62
  criteria_lhs_array = []
58
63
  criteria_rhs_array = []
59
64
  verify_sort_by_type(criteria).each do |c|
60
- descending_sort = c.start_with?('-')
65
+ descending_sort = c.start_with? '-'
61
66
  c.delete_prefix! '-'
62
- abort("Error: '#{c}' is not a valid sort field. Valid field names are: #{CRITERIA.join(', ')}") \
67
+ abort("Error: '#{c}' is not a valid sort field. Valid field names are: #{CRITERIA.join ', '}") \
63
68
  unless CRITERIA.include?(c)
64
69
  criteria_lhs_array << (descending_sort ? "b.#{c}" : "a.#{c}")
65
70
  criteria_rhs_array << (descending_sort ? "a.#{c}" : "b.#{c}")
@@ -92,30 +97,38 @@ module AllCollectionsTag
92
97
 
93
98
  private
94
99
 
100
+ def last_modified_value(post)
101
+ @logger.debug { " post.last_modified='#{post.last_modified}'; post.last_modified_at='#{post.last_modified_at}'; @date_column='#{@date_column}'" }
102
+ last_modified = if @date_column == 'last_modified' && post.respond_to?(:last_modified)
103
+ post.last_modified
104
+ elsif post.respond_to? :last_modified_at
105
+ post.last_modified_at
106
+ else
107
+ post.date
108
+ end
109
+ last_modified ||= post.date || Date.today
110
+ last_modified
111
+ end
112
+
95
113
  def generate_output(sort_lambda)
96
- id = @id.to_s.empty? ? '' : " id='#{@id}'"
97
- heading = @heading.to_s.empty? ? '' : "<h2#{id}>#{@heading}</h2>"
98
- @site.all_collections.each do |post|
99
- # @logger.debug "#{post.relative_path}: last_modified=#{post.last_modified}(#{post.last_modified.class}) date=#{post.date}(#{post.date.class})"
100
- @logger.debug "Error: #{post.relative_path} has no value for last_modified" if post.last_modified.to_s.empty?
101
- end
114
+ id = @id.to_s.strip.empty? ? '' : " id='#{@id}'"
115
+ heading = @heading.strip.to_s.empty? ? '' : "<h2#{id}>#{@heading}</h2>"
102
116
  collection = @site.all_collections.sort(&sort_lambda)
103
117
  <<~END_TEXT
104
118
  #{heading}
105
119
  <div class="posts">
106
- #{(collection.map do |post|
107
- @logger.debug { " post.last_modified='#{post.last_modified}' @date_column='#{@date_column}'" }
108
- date = (@date_column == 'last_modified' ? post.last_modified : post.date).strftime('%Y-%m-%d')
109
- draft = post.draft ? "<i class='jekyll_draft'>Draft</i>" : ''
110
- href = "<a href='#{post.url}'>#{post.title}</a>"
111
- @logger.debug { " date='#{date}' #{post.title}\n" }
112
- " <span>#{date}</span><span>#{href}#{draft}</span>"
113
- end).join("\n")}
120
+ #{(collection.map do |post|
121
+ last_modified = last_modified_value post
122
+ date = last_modified.strftime '%Y-%m-%d'
123
+ draft = post.draft ? DRAFT_HTML : ''
124
+ href = "<a href='#{post.url}'>#{post.title}</a>"
125
+ @logger.debug { " date='#{date}' #{post.title}\n" }
126
+ " <span>#{date}</span><span>#{href}#{draft}</span>"
127
+ end).join "\n"}
114
128
  </div>
115
129
  END_TEXT
116
130
  rescue ArgumentError => e
117
- puts e.message
118
- puts e.backtrace.join("\n")
131
+ warn_short_trace e
119
132
  end
120
133
 
121
134
  JekyllPluginHelper.register(self, PLUGIN_NAME)
@@ -1,3 +1,3 @@
1
1
  module JekyllAllCollectionsVersion
2
- VERSION = '0.3.1'.freeze
2
+ VERSION = '0.3.3'.freeze
3
3
  end
@@ -20,95 +20,89 @@ def show(lambda_string, result, expected)
20
20
  end
21
21
 
22
22
  # See https://stackoverflow.com/a/75388137/553865
23
- RSpec.describe(AllCollectionsTag) do
23
+ RSpec.describe(AllCollectionsTag::AllCollectionsTag) do
24
24
  let(:o1) { APageStub.new('2020-01-01', '2020-01-01', 'a_A') }
25
25
  let(:o2) { APageStub.new('2021-01-01', '2020-01-01', 'b_A') }
26
26
  let(:o3) { APageStub.new('2021-01-01', '2023-01-01', 'b_B') }
27
27
  let(:o4) { APageStub.new('2022-01-01', '2023-01-01', 'c_B') }
28
28
  let(:objs) { [o1, o2, o3, o4] }
29
29
 
30
- it "defines sort_by lambda with last_modified" do
30
+ it 'defines sort_by lambda with last_modified' do
31
31
  sort_lambda = ->(a, b) { [a.last_modified] <=> [b.last_modified] }
32
32
  result = objs.sort(&sort_lambda)
33
33
  expect(result).to eq([o1, o2, o3, o4])
34
34
  end
35
35
 
36
- it "makes sort_by lambdas from stringified date" do
37
- sort_lambda = eval "->(a, b) { a.last_modified <=> b.last_modified }",
36
+ it 'makes sort_by lambdas from stringified date' do
37
+ sort_lambda = eval '->(a, b) { a.last_modified <=> b.last_modified }',
38
38
  NullBinding.new.min_binding, __FILE__, __LINE__ - 1
39
39
  result = objs.sort(&sort_lambda)
40
40
  expect(result).to eq([o1, o2, o3, o4])
41
41
  end
42
42
 
43
- it "defines sort_by lambda with array of last_modified" do
44
- sort_lambda = ->(a, b) { [a.last_modified] <=> [b.last_modified] }
45
- result = objs.sort(&sort_lambda)
46
- expect(result).to eq([o1, o2, o3, o4])
47
- end
48
-
49
- it "makes sort_by lambdas from stringified array of last_modified" do
50
- sort_lambda = eval "->(a, b) { [a.last_modified] <=> [b.last_modified] }",
43
+ it 'makes sort_by lambdas from stringified array of last_modified' do
44
+ sort_lambda = eval '->(a, b) { [a.last_modified] <=> [b.last_modified] }',
51
45
  NullBinding.new.min_binding, __FILE__, __LINE__ - 1
52
46
  result = objs.sort(&sort_lambda)
53
47
  expect(result).to eq([o1, o2, o3, o4])
54
48
  end
55
49
 
56
- it "makes sort_by lambdas with descending keys from stringified array of last_modified" do
57
- sort_lambda = eval "->(a, b) { [b.last_modified] <=> [a.last_modified] }",
50
+ it 'makes sort_by lambdas with descending keys from stringified array of last_modified' do
51
+ sort_lambda = eval '->(a, b) { [b.last_modified] <=> [a.last_modified] }',
58
52
  NullBinding.new.min_binding, __FILE__, __LINE__ - 1
59
53
  result = objs.sort(&sort_lambda)
60
54
  expected = [o3, o4, o1, o2]
61
55
  expect(result).to eq(expected)
62
56
  end
63
57
 
64
- it "create_lambda with 1 date key, descending" do
65
- lambda_string = AllCollectionsTag::AllCollectionsTag.create_lambda_string('-last_modified')
66
- sort_lambda = AllCollectionsTag::AllCollectionsTag.evaluate(lambda_string)
58
+ it 'create_lambda with 1 date key, descending' do
59
+ lambda_string = described_class.create_lambda_string('-last_modified')
60
+ sort_lambda = described_class.evaluate(lambda_string)
67
61
  result = objs.sort(&sort_lambda)
68
62
  expected = [o3, o4, o1, o2]
69
63
  # show(lambda_string, result, expected)
70
64
  expect(result).to eq(expected)
71
65
  end
72
66
 
73
- it "create_lambda with 1 date key, ascending" do
74
- lambda_string = AllCollectionsTag::AllCollectionsTag.create_lambda_string('date')
75
- sort_lambda = AllCollectionsTag::AllCollectionsTag.evaluate(lambda_string)
67
+ it 'create_lambda with 1 date key, ascending' do
68
+ lambda_string = described_class.create_lambda_string('date')
69
+ sort_lambda = described_class.evaluate(lambda_string)
76
70
  result = objs.sort(&sort_lambda)
77
71
  expected = [o1, o2, o3, o4]
78
72
  # show(lambda_string, result, expected)
79
73
  expect(result).to eq(expected)
80
74
  end
81
75
 
82
- it "create_lambda with 2 date keys, both ascending" do
83
- lambda_string = AllCollectionsTag::AllCollectionsTag.create_lambda_string(%w[date last_modified])
84
- sort_lambda = AllCollectionsTag::AllCollectionsTag.evaluate(lambda_string)
76
+ it 'create_lambda with 2 date keys, both ascending' do
77
+ lambda_string = described_class.create_lambda_string(%w[date last_modified])
78
+ sort_lambda = described_class.evaluate(lambda_string)
85
79
  result = objs.sort(&sort_lambda)
86
80
  expected = [o1, o2, o3, o4]
87
81
  # show(lambda_string, result, expected)
88
82
  expect(result).to eq(expected)
89
83
  end
90
84
 
91
- it "create_lambda with 2 date keys, both descending" do
92
- lambda_string = AllCollectionsTag::AllCollectionsTag.create_lambda_string(['-date', '-last_modified'])
93
- sort_lambda = AllCollectionsTag::AllCollectionsTag.evaluate(lambda_string)
85
+ it 'create_lambda with 2 date keys, both descending' do
86
+ lambda_string = described_class.create_lambda_string(['-date', '-last_modified'])
87
+ sort_lambda = described_class.evaluate(lambda_string)
94
88
  result = objs.sort(&sort_lambda)
95
89
  expected = [o4, o3, o2, o1]
96
90
  # show(lambda_string, result, expected)
97
91
  expect(result).to eq(expected)
98
92
  end
99
93
 
100
- it "create_lambda with 2 date keys, first descending and second ascending" do
101
- lambda_string = AllCollectionsTag::AllCollectionsTag.create_lambda_string(['-date', 'last_modified'])
102
- sort_lambda = AllCollectionsTag::AllCollectionsTag.evaluate(lambda_string)
94
+ it 'create_lambda with 2 date keys, first descending and second ascending' do
95
+ lambda_string = described_class.create_lambda_string(['-date', 'last_modified'])
96
+ sort_lambda = described_class.evaluate(lambda_string)
103
97
  result = objs.sort(&sort_lambda)
104
98
  expected = [o4, o2, o3, o1]
105
99
  # show(lambda_string, result, expected)
106
100
  expect(result).to eq(expected)
107
101
  end
108
102
 
109
- it "create_lambda with 2 date keys, first ascending and second descending" do
110
- lambda_string = AllCollectionsTag::AllCollectionsTag.create_lambda_string(['date', '-last_modified'])
111
- sort_lambda = AllCollectionsTag::AllCollectionsTag.evaluate(lambda_string)
103
+ it 'create_lambda with 2 date keys, first ascending and second descending' do
104
+ lambda_string = described_class.create_lambda_string(['date', '-last_modified'])
105
+ sort_lambda = described_class.evaluate(lambda_string)
112
106
  result = objs.sort(&sort_lambda)
113
107
  expected = [o1, o3, o2, o4]
114
108
  # show(lambda_string, result, expected)
@@ -20,61 +20,61 @@ RSpec.describe(Obj) do # rubocop:disable Metrics/BlockLength
20
20
  let(:objs) { [o1, o2, o3, o4] }
21
21
 
22
22
  # See https://ruby-doc.org/3.2.0/Comparable.html
23
- it "compares one key with ascending dates" do
23
+ it 'compares one key with ascending dates' do
24
24
  expect([o1.last_modified] <=> [o2.last_modified]).to eq(-1)
25
25
  expect([o2.last_modified] <=> [o3.last_modified]).to eq(0)
26
26
  expect([o3.last_modified] <=> [o4.last_modified]).to eq(-1)
27
27
  end
28
28
 
29
- it "compares two keys with ascending dates" do
29
+ it 'compares two keys with ascending dates' do
30
30
  expect([o1.last_modified, o1.date] <=> [o2.last_modified, o2.date]).to eq(-1)
31
31
  expect([o2.last_modified, o2.date] <=> [o3.last_modified, o3.date]).to eq(-1)
32
32
  expect([o3.last_modified, o3.date] <=> [o4.last_modified, o4.date]).to eq(-1)
33
33
  end
34
34
 
35
- it "compares one key with descending dates" do
35
+ it 'compares one key with descending dates' do
36
36
  expect([o1.last_modified] <=> [o2.last_modified]).to eq(-1)
37
37
  expect([o2.last_modified] <=> [o3.last_modified]).to eq(0)
38
38
  end
39
39
 
40
- it "compares two keys with descending dates" do
40
+ it 'compares two keys with descending dates' do
41
41
  expect([o2.last_modified, o2.date] <=> [o1.last_modified, o1.date]).to eq(1)
42
42
  expect([o3.last_modified, o3.date] <=> [o2.last_modified, o2.date]).to eq(1)
43
43
  expect([o4.last_modified, o4.date] <=> [o3.last_modified, o3.date]).to eq(1)
44
44
  end
45
45
 
46
46
  # See https://ruby-doc.org/3.2.0/Enumerable.html#method-i-sort
47
- it "sort with one key ascending" do
47
+ it 'sort with one key ascending' do
48
48
  sort_lambda = ->(a, b) { [a.last_modified] <=> [b.last_modified] }
49
49
  result = objs.sort(&sort_lambda)
50
50
  expect(result).to eq([o1, o2, o3, o4])
51
51
  end
52
52
 
53
- it "sort with one key descending" do
53
+ it 'sort with one key descending' do
54
54
  sort_lambda = ->(a, b) { [b.last_modified] <=> [a.last_modified] }
55
55
  result = objs.sort(&sort_lambda)
56
56
  expect(result).to eq([o4, o2, o3, o1])
57
57
  end
58
58
 
59
- it "sort with two keys ascending" do
59
+ it 'sort with two keys ascending' do
60
60
  sort_lambda = ->(a, b) { [a.last_modified, a.date] <=> [b.last_modified, b.date] }
61
61
  result = objs.sort(&sort_lambda)
62
62
  expect(result).to eq([o1, o2, o3, o4])
63
63
  end
64
64
 
65
- it "sort with both keys descending" do
65
+ it 'sort with both keys descending' do
66
66
  sort_lambda = ->(a, b) { [b.last_modified, b.date] <=> [a.last_modified, a.date] }
67
67
  result = objs.sort(&sort_lambda)
68
68
  expect(result).to eq([o4, o3, o2, o1])
69
69
  end
70
70
 
71
- it "sort with last_modified descending and date ascending" do
71
+ it 'sort with last_modified descending and date ascending' do
72
72
  sort_lambda = ->(a, b) { [b.last_modified, a.date] <=> [a.last_modified, b.date] }
73
73
  result = objs.sort(&sort_lambda)
74
74
  expect(result).to eq([o4, o2, o3, o1])
75
75
  end
76
76
 
77
- it "sort with last_modified ascending and date descending" do
77
+ it 'sort with last_modified ascending and date descending' do
78
78
  sort_lambda = ->(a, b) { [a.last_modified, b.date] <=> [b.last_modified, a.date] }
79
79
  result = objs.sort(&sort_lambda)
80
80
  expect(result).to eq([o1, o3, o2, o4])
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll_all_collections
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Slinn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-17 00:00:00.000000000 Z
11
+ date: 2023-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: jekyll_plugin_support
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 0.5.0
47
+ version: 0.7.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 0.5.0
54
+ version: 0.7.0
55
55
  description: 'Provides a collection of all collections in site.all_collections.
56
56
 
57
57
  '
@@ -71,18 +71,17 @@ files:
71
71
  - lib/all_collections_tag.rb
72
72
  - lib/jekyll_all_collections.rb
73
73
  - lib/jekyll_all_collections/version.rb
74
+ - spec/all_collections_tag_sort_spec.rb
74
75
  - spec/date_sort_spec.rb
75
- - spec/lambda_sort_spec.rb
76
76
  - spec/spec_helper.rb
77
- - spec/status_persistence.txt
78
- homepage: https://www.mslinn.com/blog/2020/12/30/jekyll-plugin-template-collection.html
77
+ homepage: https://www.mslinn.com/jekyll_plugins/jekyll_all_collections.html
79
78
  licenses:
80
79
  - MIT
81
80
  metadata:
82
81
  allowed_push_host: https://rubygems.org
83
82
  bug_tracker_uri: https://github.com/mslinn/jekyll_all_collections/issues
84
83
  changelog_uri: https://github.com/mslinn/jekyll_all_collections/CHANGELOG.md
85
- homepage_uri: https://www.mslinn.com/blog/2020/12/30/jekyll-plugin-template-collection.html
84
+ homepage_uri: https://www.mslinn.com/jekyll_plugins/jekyll_all_collections.html
86
85
  source_code_uri: https://github.com/mslinn/jekyll_all_collections
87
86
  post_install_message:
88
87
  rdoc_options: []
@@ -1,23 +0,0 @@
1
- example_id | status | run_time |
2
- -------------------------------- | ------ | --------------- |
3
- ./spec/date_sort_spec.rb[1:1] | passed | 0.00111 seconds |
4
- ./spec/date_sort_spec.rb[1:2] | passed | 0.00019 seconds |
5
- ./spec/date_sort_spec.rb[1:3] | passed | 0.00014 seconds |
6
- ./spec/date_sort_spec.rb[1:4] | passed | 0.00016 seconds |
7
- ./spec/date_sort_spec.rb[1:5] | passed | 0.00016 seconds |
8
- ./spec/date_sort_spec.rb[1:6] | passed | 0.00015 seconds |
9
- ./spec/date_sort_spec.rb[1:7] | passed | 0.00014 seconds |
10
- ./spec/date_sort_spec.rb[1:8] | passed | 0.00014 seconds |
11
- ./spec/date_sort_spec.rb[1:9] | passed | 0.00016 seconds |
12
- ./spec/date_sort_spec.rb[1:10] | passed | 0.00015 seconds |
13
- ./spec/lambda_sort_spec.rb[1:1] | passed | 0.00017 seconds |
14
- ./spec/lambda_sort_spec.rb[1:2] | passed | 0.00022 seconds |
15
- ./spec/lambda_sort_spec.rb[1:3] | passed | 0.00029 seconds |
16
- ./spec/lambda_sort_spec.rb[1:4] | passed | 0.0002 seconds |
17
- ./spec/lambda_sort_spec.rb[1:5] | passed | 0.00018 seconds |
18
- ./spec/lambda_sort_spec.rb[1:6] | passed | 0.0002 seconds |
19
- ./spec/lambda_sort_spec.rb[1:7] | passed | 0.00019 seconds |
20
- ./spec/lambda_sort_spec.rb[1:8] | passed | 0.00019 seconds |
21
- ./spec/lambda_sort_spec.rb[1:9] | passed | 0.00019 seconds |
22
- ./spec/lambda_sort_spec.rb[1:10] | passed | 0.00019 seconds |
23
- ./spec/lambda_sort_spec.rb[1:11] | passed | 0.00036 seconds |