jekyll-sanelist 0.0.1 → 0.0.2

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: d92a231593dba0da2171f169e40d31c1e336df187f031d7377c5a7b42475990e
4
- data.tar.gz: 188aee848e6f931a336bbabe4907a567d42cbc7cde0da17228595d0d09bd5c0b
3
+ metadata.gz: 448ded78b7d926f56b51050f132b078208aa6d26770fd08bb40ecbe826549ccf
4
+ data.tar.gz: bb307c842042613403d2ddf3ae5f645c80280cd8f4592b7367a9eca161b57ef3
5
5
  SHA512:
6
- metadata.gz: f7fd4cd766b34f0d23781178c28065615b1c330f80de6b6dfa5c2b9cbcc4b4dc4a016d1dd8c79372ea0cd3aa59649e0f50ec6eadc94ac1c37621cd8a5eacb779
7
- data.tar.gz: 177a353d2ea339181baee72d29579c30a5ec10c9c0287eaeda109ed60f9a984d9e96be605952d4d4cee0ac720da9f46f88368e70ede90e3e0486f19d590932db
6
+ metadata.gz: 90b33e6f509cb0e03e06d30e65524d66da61b083e2f5d9e53a5a8d3915082d755a3cbf23d5e6c5c4b74717dd0bd683b56bd9f3265afd2d5893a3d4f7f29ec290
7
+ data.tar.gz: 10dbb1574ad244054aca0c0bd00f67c703b5395d629d945e3b3edcabe375d3d508388426e861ad59af3cd557b42f3f4c957688e0e2004c34ec838a114e5d01fa
data/.rubocop.yml CHANGED
@@ -3,3 +3,6 @@ inherit_from: .rubocop_todo.yml
3
3
  AllCops:
4
4
  NewCops: enable
5
5
  SuggestExtensions: false
6
+
7
+ Style/NumericPredicate:
8
+ Enabled: false
data/.rubocop_todo.yml CHANGED
@@ -1,11 +1,27 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2021-04-26 03:50:56 UTC using RuboCop version 1.13.0.
3
+ # on 2021-04-26 10:37:31 UTC using RuboCop version 1.13.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
+ # Offense count: 1
10
+ # Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
11
+ Metrics/AbcSize:
12
+ Max: 18
13
+
14
+ # Offense count: 1
15
+ # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
16
+ # IgnoredMethods: refine
17
+ Metrics/BlockLength:
18
+ Max: 57
19
+
20
+ # Offense count: 1
21
+ # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
22
+ Metrics/MethodLength:
23
+ Max: 12
24
+
9
25
  # Offense count: 1
10
26
  # Configuration parameters: ExpectMatchingDefinition, CheckDefinitionPathHierarchy, Regex, IgnoreExecutableScripts, AllowedAcronyms.
11
27
  # AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
@@ -14,8 +30,19 @@ Naming/FileName:
14
30
  - 'lib/jekyll-sanelist.rb'
15
31
 
16
32
  # Offense count: 1
17
- # Configuration parameters: AllowedConstants.
18
- Style/Documentation:
33
+ # Cop supports --auto-correct.
34
+ # Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, IgnoredMethods, AllowBracesOnProceduralOneLiners, BracesRequiredMethods.
35
+ # SupportedStyles: line_count_based, semantic, braces_for_chaining, always_braces
36
+ # ProceduralMethods: benchmark, bm, bmbm, create, each_with_object, measure, new, realtime, tap, with_object
37
+ # FunctionalMethods: let, let!, subject, watch
38
+ # IgnoredMethods: lambda, proc, it
39
+ Style/BlockDelimiters:
19
40
  Exclude:
20
- - 'spec/**/*'
21
- - 'test/**/*'
41
+ - 'spec/jekyll/sanelist_spec.rb'
42
+
43
+ # Offense count: 3
44
+ # Cop supports --auto-correct.
45
+ # Configuration parameters: MinSize, WordRegex.
46
+ # SupportedStyles: percent, brackets
47
+ Style/WordArray:
48
+ EnforcedStyle: brackets
data/README.md CHANGED
@@ -22,7 +22,38 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ ```html
26
+ <html>
27
+ {% assign asanelist = alist | sanelist %}
28
+ {% if asanelist.size == 0 %}
29
+ <!-- Do something for empty list -->
30
+ {% elsif asanelist.size == 1 %}
31
+ <!-- Do something for single-item list -->
32
+ {% elsif asanelist.size > 1 %}
33
+ <!-- Do something for multi-item list -->
34
+ {% endif %}
35
+
36
+ {% for element in asanelist %}
37
+ {% case element.type %{
38
+ {% when "item" %}
39
+ <!-- Do someting with element.data in the below block based on where it appears -->
40
+ {% if element.isFirst and element.isLast %}
41
+ {% elsif element.isFirst %}
42
+ {% elsif element.isLast %}
43
+ {% else %}
44
+ {% endif %}
45
+
46
+ {% when "delimiter" %}
47
+ <!-- Insert appropriate delimiter in the below block based on where it appears -->
48
+ {% if element.isFirst and element.isLast %}
49
+ {% elsif element.isFirst %}
50
+ {% elsif element.isLast %}
51
+ {% else %}
52
+ {% endif %}
53
+ {% endcase %}
54
+ {% endfor %}
55
+ </html>
56
+ ```
26
57
 
27
58
  ## Development
28
59
 
@@ -28,5 +28,6 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency 'liquid', '~> 5.0'
29
29
  spec.add_development_dependency 'rake', '~> 13.0'
30
30
  spec.add_development_dependency 'rspec', '~> 3.10'
31
+ spec.add_development_dependency 'rspec-collection_matchers', '~> 1.2'
31
32
  spec.add_development_dependency 'rubocop', '~> 1.13'
32
33
  end
@@ -4,7 +4,9 @@ require 'jekyll-sanelist'
4
4
 
5
5
  module Jekyll
6
6
  ##
7
- # TODO: Add relevant documentation
7
+ # Sanelist plugin contains the sanelist filter
8
+ # The filter is used to produce a list consisting of prefix, items, delimiters and suffix
9
+ # While iterating you can generate each item appropriately
8
10
  module Sanelist
9
11
  end
10
12
  end
@@ -1,10 +1,62 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'liquid'
3
4
  require_relative 'sanelist/version'
4
5
 
5
6
  module Jekyll
6
7
  module Sanelist
7
- class Error < StandardError; end
8
- # Your code goes here...
8
+ ##
9
+ # Module containg sanelist filters
10
+ module SanelistFilter
11
+ ITEM = 'item'
12
+ DELIMITER = 'delimiter'
13
+
14
+ ##
15
+ # Takes a regular list and outputs a sanelist
16
+ # @param [Array] input The input list which needs to be converted into a sanelist
17
+ # @return [Array] A list of sane objects of items separated by delimiters
18
+ def sanelist(input)
19
+ raise ArgumentError, 'Input to filter sanelist is not an Array' unless input.is_a?(Array)
20
+
21
+ output = []
22
+
23
+ input.each_with_index do |value, index|
24
+ output << get_item(value, index, input.size)
25
+
26
+ output << get_delimiter(index, input.size) if index != (input.size - 1)
27
+ end
28
+
29
+ output
30
+ end
31
+
32
+ def get_item(data, index, input_size)
33
+ unless (index >= 0) && (input_size >= 1) && (index < input_size)
34
+ raise ArgumentError, 'Inputs index or input_size are invalid'
35
+ end
36
+
37
+ {
38
+ 'data' => data,
39
+ 'isFirst' => (index == 0),
40
+ 'isLast' => (index == (input_size - 1)),
41
+ 'type' => ITEM
42
+ }
43
+ end
44
+
45
+ def get_delimiter(index, input_size)
46
+ unless (index >= 0) && (input_size >= 2) && (index < (input_size - 1))
47
+ raise ArgumentError, 'Inputs index or input_size are invalid'
48
+ end
49
+
50
+ {
51
+ 'isFirst' => (index == 0),
52
+ 'isLast' => (index == (input_size - 2)),
53
+ 'type' => DELIMITER
54
+ }
55
+ end
56
+
57
+ private :get_item, :get_delimiter
58
+ end
9
59
  end
10
60
  end
61
+
62
+ Liquid::Template.register_filter(Jekyll::Sanelist::SanelistFilter)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module Sanelist
5
- VERSION = '0.0.1'
5
+ VERSION = '0.0.2'
6
6
  end
7
7
  end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Jekyll::Sanelist do
4
+ it 'has a version number' do
5
+ expect(Jekyll::Sanelist::VERSION).not_to be nil
6
+ end
7
+ end
@@ -1,11 +1,66 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RSpec.describe Jekyll::Sanelist do
4
- it 'has a version number' do
5
- expect(Jekyll::Sanelist::VERSION).not_to be nil
3
+ RSpec.describe Jekyll::Sanelist::SanelistFilter do
4
+ include Jekyll::Sanelist::SanelistFilter
5
+
6
+ it "throws exception when input isn\'t array" do
7
+ expect {
8
+ sanelist('Not an array')
9
+ }.to raise_error(ArgumentError, 'Input to filter sanelist is not an Array')
10
+ end
11
+
12
+ it 'gives empty list for an empty list' do
13
+ input = []
14
+ output = sanelist(input)
15
+
16
+ expect(output).to have(0).things
17
+ end
18
+
19
+ it 'gives one item for a sinleton list' do
20
+ input = ['foo']
21
+ output = sanelist(input)
22
+
23
+ expect(output).to have(1).things
24
+
25
+ expect(output[0]).to eq item(input[0], true, true)
26
+ end
27
+
28
+ it 'gives two items spearated by a delimiter for a list of two item' do
29
+ input = ['foo', 'bar']
30
+ output = sanelist(input)
31
+
32
+ expect(output).to have(3).things
33
+
34
+ expect(output[0]).to eq item(input[0], true, false)
35
+ expect(output[1]).to eq delimiter(true, true)
36
+ expect(output[2]).to eq item(input[1], false, true)
6
37
  end
7
38
 
8
- it 'does something useful' do
9
- expect(true).to eq(true)
39
+ it 'gives three items spearated by two delimiters for a list of three item' do
40
+ input = ['foo', 'and', 'bar']
41
+ output = sanelist(input)
42
+
43
+ expect(output).to have(5).things
44
+
45
+ expect(output[0]).to eq item(input[0], true, false)
46
+ expect(output[1]).to eq delimiter(true, false)
47
+ expect(output[2]).to eq item(input[1], false, false)
48
+ expect(output[3]).to eq delimiter(false, true)
49
+ expect(output[4]).to eq item(input[2], false, true)
50
+ end
51
+
52
+ it 'gives four items spearated by three delimiters for a list of four item' do
53
+ input = ['foo', 'and', 'bar', 'list']
54
+ output = sanelist(input)
55
+
56
+ expect(output).to have(7).things
57
+
58
+ expect(output[0]).to eq item(input[0], true, false)
59
+ expect(output[1]).to eq delimiter(true, false)
60
+ expect(output[2]).to eq item(input[1], false, false)
61
+ expect(output[3]).to eq delimiter(false, false)
62
+ expect(output[4]).to eq item(input[2], false, false)
63
+ expect(output[5]).to eq delimiter(false, true)
64
+ expect(output[6]).to eq item(input[3], false, true)
10
65
  end
11
66
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SanelistHelpers
4
+ def item(data, first, last)
5
+ {
6
+ 'data' => data,
7
+ 'isFirst' => first,
8
+ 'isLast' => last,
9
+ 'type' => 'item'
10
+ }
11
+ end
12
+
13
+ def delimiter(first, last)
14
+ {
15
+ 'isFirst' => first,
16
+ 'isLast' => last,
17
+ 'type' => 'delimiter'
18
+ }
19
+ end
20
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'jekyll/sanelist'
4
+ require 'rspec/collection_matchers'
5
+ require_relative 'sanelist_helpers'
4
6
 
5
7
  RSpec.configure do |config|
6
8
  # Enable flags like --only-failures and --next-failure
@@ -9,6 +11,8 @@ RSpec.configure do |config|
9
11
  # Disable RSpec exposing methods globally on `Module` and `main`
10
12
  config.disable_monkey_patching!
11
13
 
14
+ include SanelistHelpers
15
+
12
16
  config.expect_with :rspec do |c|
13
17
  c.syntax = :expect
14
18
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-sanelist
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sampath Sukesh Ravolaparthi
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec-collection_matchers
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.2'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.2'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rubocop
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -104,7 +118,9 @@ files:
104
118
  - lib/jekyll/sanelist/version.rb
105
119
  - script/bootstrap
106
120
  - script/fmt
121
+ - spec/jekyll/sanelist/version_spec.rb
107
122
  - spec/jekyll/sanelist_spec.rb
123
+ - spec/sanelist_helpers.rb
108
124
  - spec/spec_helper.rb
109
125
  homepage: https://rsampaths16.github.io/jekyll-sanelist
110
126
  licenses:
@@ -133,5 +149,7 @@ signing_key:
133
149
  specification_version: 4
134
150
  summary: Human oriented lists filter for Jekyll
135
151
  test_files:
152
+ - spec/jekyll/sanelist/version_spec.rb
136
153
  - spec/jekyll/sanelist_spec.rb
154
+ - spec/sanelist_helpers.rb
137
155
  - spec/spec_helper.rb