jekyll-favicon 1.0.0.pre.1 → 1.0.0.pre.2

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.devcontainer/Dockerfile +1 -1
  3. data/.devcontainer/devcontainer.json +11 -4
  4. data/.github/workflows/test.yml +5 -5
  5. data/.gitignore +1 -2
  6. data/.reek.yml +25 -0
  7. data/.vscode/launch.json +16 -0
  8. data/.vscode/settings.json +7 -0
  9. data/.vscode/tasks.json +15 -0
  10. data/CHANGELOG.md +4 -0
  11. data/Gemfile +1 -1
  12. data/README.md +3 -3
  13. data/Rakefile +4 -4
  14. data/bin/debug +22 -0
  15. data/jekyll-favicon.gemspec +23 -23
  16. data/lib/jekyll-favicon.rb +5 -7
  17. data/lib/jekyll/favicon.rb +13 -16
  18. data/lib/jekyll/favicon/configuration.rb +11 -11
  19. data/lib/jekyll/favicon/configuration/defaults.rb +6 -6
  20. data/lib/jekyll/favicon/generator.rb +5 -6
  21. data/lib/jekyll/favicon/hooks.rb +4 -4
  22. data/lib/jekyll/favicon/static_data_file.rb +2 -2
  23. data/lib/jekyll/favicon/static_file.rb +18 -18
  24. data/lib/jekyll/favicon/static_file/convertible.rb +30 -27
  25. data/lib/jekyll/favicon/static_file/mutable.rb +16 -16
  26. data/lib/jekyll/favicon/static_file/referenceable.rb +2 -2
  27. data/lib/jekyll/favicon/static_file/sourceable.rb +7 -7
  28. data/lib/jekyll/favicon/static_file/taggable.rb +8 -14
  29. data/lib/jekyll/favicon/static_graphic_file.rb +2 -2
  30. data/lib/jekyll/favicon/tag.rb +9 -10
  31. data/lib/jekyll/favicon/utils.rb +24 -5
  32. data/lib/jekyll/favicon/utils/configuration/compact.rb +29 -32
  33. data/lib/jekyll/favicon/utils/configuration/merge.rb +41 -34
  34. data/lib/jekyll/favicon/utils/configuration/patch.rb +24 -23
  35. data/lib/jekyll/favicon/utils/convert.rb +15 -18
  36. data/lib/jekyll/favicon/utils/tag.rb +44 -28
  37. data/lib/jekyll/favicon/version.rb +1 -1
  38. metadata +7 -9
  39. data/gemfiles/jekyll36.gemfile +0 -6
  40. data/gemfiles/jekyll37.gemfile +0 -6
  41. data/gemfiles/jekyll38.gemfile +0 -6
  42. data/gemfiles/jekyll39.gemfile +0 -6
  43. data/gemfiles/jekyll40.gemfile +0 -6
  44. data/gemfiles/jekyll41.gemfile +0 -6
  45. data/gemfiles/jekyll42.gemfile +0 -6
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'jekyll/favicon/utils/configuration/compact'
4
- require 'jekyll/favicon/utils/configuration/merge'
5
- require 'jekyll/favicon/utils/configuration/patch'
6
- require 'jekyll/favicon/utils/convert'
7
- require 'jekyll/favicon/utils/tag'
3
+ require "jekyll/favicon/utils/configuration/compact"
4
+ require "jekyll/favicon/utils/configuration/merge"
5
+ require "jekyll/favicon/utils/configuration/patch"
6
+ require "jekyll/favicon/utils/convert"
7
+ require "jekyll/favicon/utils/tag"
8
8
 
9
9
  module Jekyll
10
10
  module Favicon
@@ -19,6 +19,25 @@ module Jekyll
19
19
  def self.except(hash, *keys)
20
20
  hash.reject { |key, _| keys.include? key }
21
21
  end
22
+
23
+ def self.define_to_size(define)
24
+ return unless define
25
+
26
+ define.split("=")
27
+ .last
28
+ .split(",")
29
+ .collect { |size| [size, size].join "x" }
30
+ end
31
+
32
+ def self.name_to_size(name)
33
+ size_in_name_regex = /^.*-(\d+x\d+)\..*$/
34
+ name.match size_in_name_regex
35
+ end
36
+
37
+ def self.slice_and_compact(hash, keys)
38
+ compactable = hash.slice(*keys)
39
+ Utils.compact compactable
40
+ end
22
41
  end
23
42
  end
24
43
  end
@@ -10,48 +10,45 @@ module Jekyll
10
10
  klass.extend(ClassMethods)
11
11
  end
12
12
 
13
- # Nil and empty remove from configurations
14
- module ClassMethods
15
- def compact(compactable)
16
- case compactable
17
- when Hash, Array
18
- compact_deep(compactable) || compactable.class[]
19
- else
20
- compactable
21
- end
13
+ def self.compact_deep(compactable)
14
+ case compactable
15
+ when Hash then compact_hash compactable
16
+ when Array then compact_array compactable
17
+ else compactable
22
18
  end
19
+ end
23
20
 
24
- private
21
+ def self.compact_hash(hash)
22
+ compacted_hash = hash.each_with_object({}) do |(key, value), memo|
23
+ next unless (compacted = compact_deep(value))
25
24
 
26
- def compact_deep(compactable)
27
- case compactable
28
- when Hash then compact_hash compactable
29
- when Array then compact_array compactable
30
- else compactable
31
- end
25
+ memo[key] = compacted
32
26
  end
27
+ compact_shallow compacted_hash
28
+ end
33
29
 
34
- def compact_hash(hash)
35
- compacted_hash = hash.each_with_object({}) do |(key, value), memo|
36
- next unless (compacted = compact_deep(value))
30
+ def self.compact_array(array)
31
+ compacted_array = array.each_with_object([]) do |value, memo|
32
+ next unless (compacted = compact_deep(value))
37
33
 
38
- memo[key] = compacted
39
- end
40
- compact_shallow compacted_hash
34
+ memo << compacted
41
35
  end
36
+ compact_shallow compacted_array
37
+ end
42
38
 
43
- def compact_array(array)
44
- compacted_array = array.each_with_object([]) do |value, memo|
45
- next unless (compacted = compact_deep(value))
39
+ def self.compact_shallow(compactable)
40
+ compactable.empty? ? nil : compactable.compact
41
+ end
46
42
 
47
- memo << compacted
43
+ # Nil and empty remove from configurations
44
+ module ClassMethods
45
+ def compact(compactable)
46
+ case compactable
47
+ when Hash, Array
48
+ Compact.compact_deep(compactable) || compactable.class[]
49
+ else
50
+ compactable
48
51
  end
49
- compact_shallow compacted_array
50
- end
51
-
52
- # :reek:UtilityFunction
53
- def compact_shallow(compactable)
54
- compactable.empty? ? nil : compactable.compact
55
52
  end
56
53
  end
57
54
  end
@@ -10,50 +10,57 @@ module Jekyll
10
10
  klass.extend(ClassMethods)
11
11
  end
12
12
 
13
- # Merge configurations
14
- module ClassMethods
15
- def merge(left = nil, *right_and_or_rest)
16
- return left if right_and_or_rest.empty?
13
+ def self.merge_multiple(left = nil, *right_and_or_rest)
14
+ return left if right_and_or_rest.empty?
17
15
 
18
- right, *rest = right_and_or_rest
19
- merged = merge_pair left, right
20
- return merged if rest.empty?
16
+ right, *rest = right_and_or_rest
17
+ merged = merge_pair left, right
18
+ return merged if rest.empty?
21
19
 
22
- merge(merged, *rest)
23
- end
24
-
25
- private
20
+ merge_multiple(merged, *rest)
21
+ end
26
22
 
27
- def merge_pair(left, right)
28
- return right if !left || !right || !left.instance_of?(right.class)
23
+ def self.merge_pair(left, right)
24
+ return right if !left || !right || !left.instance_of?(right.class)
29
25
 
30
- case right
31
- when Hash then merge_pair_hash left, right
32
- when Array then merge_pair_array left, right
33
- else right
34
- end
26
+ case right
27
+ when Hash then merge_pair_hash left, right
28
+ when Array then merge_pair_array left, right
29
+ else right
35
30
  end
31
+ end
36
32
 
37
- def merge_pair_hash(left_hash, right_hash)
38
- left_hash.merge(right_hash) do |_, left_value, right_value|
39
- merge left_value, right_value
40
- end
33
+ def self.merge_pair_hash(left_hash, right_hash)
34
+ left_hash.merge(right_hash) do |_, left_value, right_value|
35
+ merge_multiple left_value, right_value
41
36
  end
37
+ end
42
38
 
43
- def merge_pair_array(left_array, right_array)
44
- joint_array = left_array + right_array
45
- joint_array.group_by { |map| merge_group map }
46
- .collect { |group, values| merge_collect group, values }
47
- .flatten
48
- end
39
+ def self.merge_pair_array(left_array, right_array)
40
+ joint_array = left_array + right_array
41
+ joint_array.group_by { |map| merge_group map }
42
+ .collect { |group, values| merge_collect group, values }
43
+ .flatten
44
+ end
49
45
 
50
- # :reek:UtilityFunction
51
- def merge_group(map, keys = %w[name dir])
52
- map.is_a?(Hash) ? map.values_at(*keys) : []
53
- end
46
+ def self.merge_group(map, keys = %w[name dir])
47
+ map.is_a?(Hash) ? map.values_at(*keys) : []
48
+ end
49
+
50
+ def self.merge_collect(group, values)
51
+ group.first ? merge_multiple(*values) : values
52
+ end
53
+
54
+ # Merge configurations
55
+ module ClassMethods
56
+ def merge(left = nil, *right_and_or_rest)
57
+ return left if right_and_or_rest.empty?
58
+
59
+ right, *rest = right_and_or_rest
60
+ merged = Merge.merge_pair left, right
61
+ return merged if rest.empty?
54
62
 
55
- def merge_collect(group, values)
56
- group.first ? merge(*values) : values
63
+ Merge.merge_multiple(merged, *rest)
57
64
  end
58
65
  end
59
66
  end
@@ -10,35 +10,36 @@ module Jekyll
10
10
  klass.extend(ClassMethods)
11
11
  end
12
12
 
13
- # Patch configuration with the block provided
14
- module ClassMethods
15
- def patch(value_or_values, &block)
16
- patch_method = case value_or_values
17
- when Array then :patch_array
18
- when Hash then :patch_hash
19
- when Symbol, String then :patch_value
20
- else return value_or_values
21
- end
22
- send patch_method, value_or_values, &block
13
+ def self.patch_unknown(value_or_values, &block)
14
+ patch_method = case value_or_values
15
+ when Array then :patch_array
16
+ when Hash then :patch_hash
17
+ when Symbol, String then :patch_value
18
+ else return value_or_values
23
19
  end
20
+ send patch_method, value_or_values, &block
21
+ end
24
22
 
25
- private
23
+ def self.patch_array(values, &block)
24
+ values.collect { |value| patch_unknown value, &block }
25
+ end
26
26
 
27
- def patch_array(values, &block)
28
- values.collect { |value| patch value, &block }
29
- end
27
+ def self.patch_hash(values, &block)
28
+ values.transform_values { |value| patch_unknown value, &block }
29
+ end
30
30
 
31
- def patch_hash(values, &block)
32
- values.transform_values { |value| patch value, &block }
33
- end
31
+ def self.patch_value(value, &block)
32
+ block.call patch_value_string_symbol(value)
33
+ end
34
34
 
35
- def patch_value(value, &block)
36
- block.call patch_value_string_symbol(value)
37
- end
35
+ def self.patch_value_string_symbol(value)
36
+ value.to_s.start_with?(":") ? value[1..].to_sym : value
37
+ end
38
38
 
39
- # :reek:UtilityFunction
40
- def patch_value_string_symbol(value)
41
- value.to_s.start_with?(':') ? value[1..-1].to_sym : value
39
+ # Patch configuration with the block provided
40
+ module ClassMethods
41
+ def patch(value_or_values, &block)
42
+ Patch.patch_unknown value_or_values, &block
42
43
  end
43
44
  end
44
45
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'mini_magick'
3
+ require "mini_magick"
4
4
 
5
5
  module Jekyll
6
6
  module Favicon
@@ -11,28 +11,25 @@ module Jekyll
11
11
  klass.extend(ClassMethods)
12
12
  end
13
13
 
14
+ def self.convert_apply(convert, options = {})
15
+ options.each_with_object(convert) do |(option, value), memo|
16
+ memo.send option.to_sym, value
17
+ end
18
+ end
19
+
20
+ def self.convert_options(convert, options = {})
21
+ priorities = %w[resize scale]
22
+ convert_apply convert, options.slice(*priorities)
23
+ common_options = options.reject { |key| priorities.include? key }
24
+ convert_apply convert, common_options
25
+ end
26
+
14
27
  # Favicon convert utils functions
15
28
  module ClassMethods
16
29
  def convert(input, output, options = {})
17
30
  MiniMagick::Tool::Convert.new do |convert|
18
31
  convert.flatten
19
- convert_options(convert, options) << input << output
20
- end
21
- end
22
-
23
- private
24
-
25
- def convert_options(convert, options = {})
26
- priorities = %w[resize scale]
27
- convert_apply convert, options.slice(*priorities)
28
- common_options = options.reject { |key| priorities.include? key }
29
- convert_apply convert, common_options
30
- end
31
-
32
- # :reek:UtilityFunction
33
- def convert_apply(convert, options = {})
34
- options.each_with_object(convert) do |(option, value), memo|
35
- memo.send option.to_sym, value
32
+ Convert.convert_options(convert, options) << input << output
36
33
  end
37
34
  end
38
35
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rexml/document'
3
+ require "rexml/document"
4
4
 
5
5
  module Jekyll
6
6
  module Favicon
@@ -11,41 +11,57 @@ module Jekyll
11
11
  klass.extend(ClassMethods)
12
12
  end
13
13
 
14
- # Favicon rexml utils functions
15
- module ClassMethods
16
- # :reek:FeatureEnvy
17
- def mutate_element(parent, changes = {})
18
- changes.each_with_object(parent) do |(key, value), memo|
19
- if key.start_with? '__' then memo.text = value
20
- elsif key.start_with? '_' then memo.add_attribute key[1..-1], value
21
- else mutate_element mutate_find_or_create_element(memo, key), value
22
- end
23
- end
14
+ def self.mutate_find_or_create_element(parent, key)
15
+ parent.get_elements(key).first || parent.add_element(key)
16
+ end
17
+
18
+ def self.mutate_xml(parent, changes = {})
19
+ changes.each_with_object(parent) do |(key, value), memo|
20
+ mutate_iterator key, value, memo
24
21
  end
22
+ end
25
23
 
26
- def build_element(name, parent = nil, config = {})
27
- element = REXML::Element.new name, parent
28
- return populate_element element, config if config.is_a? Enumerable
24
+ def self.mutate_iterator(key, value, memo)
25
+ if key.start_with? "__" then memo.text = value
26
+ elsif key.start_with? "_" then memo.add_attribute key[1..], value
27
+ else Tag.mutate_xml Tag.mutate_find_or_create_element(memo, key), value
28
+ end
29
+ end
29
30
 
30
- element.text = config and return element
31
+ def self.build_xml(name, parent = nil, config = {})
32
+ element = REXML::Element.new name, parent
33
+ return Tag.populate_element element, config if config.is_a? Enumerable
34
+
35
+ element.text = config and return element
36
+ end
37
+
38
+ def self.populate_element(element, config)
39
+ config.each_with_object(element) do |(key, value), memo|
40
+ populate_iterator key, value, memo
31
41
  end
42
+ end
43
+
44
+ def self.populate_iterator(key, value, memo)
45
+ if key.start_with? "__" then memo.text = value
46
+ elsif (child_key = key.match(/^_(.*)$/))
47
+ memo.add_attribute child_key[1], value
48
+ else build_xml key, memo, value
49
+ end
50
+ end
32
51
 
33
- private
52
+ # Favicon rexml utils functions
53
+ module ClassMethods
54
+ def mutate_element(parent, changes = {})
55
+ Tag.mutate_xml parent, changes
56
+ end
34
57
 
35
- # :reek:UtilityFunction
36
- def mutate_find_or_create_element(parent, key)
37
- parent.get_elements(key).first || parent.add_element(key)
58
+ def build_element(name, parent = nil, config = {})
59
+ Tag.build_xml name, parent, config
38
60
  end
39
61
 
40
- # :reek:FeatureEnvy
41
- def populate_element(element, config)
42
- config.each_with_object(element) do |(key, value), memo|
43
- if key.start_with? '__' then memo.text = value
44
- elsif (child_key = key.match(/^_(.*)$/))
45
- memo.add_attribute child_key[1], value
46
- else build_element key, memo, value
47
- end
48
- end
62
+ def build_tag(name, attributes = {})
63
+ config = attributes.transform_keys { |key| "_#{key}" }
64
+ Tag.build_xml name, nil, config
49
65
  end
50
66
  end
51
67
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module Favicon
5
- VERSION = '1.0.0-1'
5
+ VERSION = "1.0.0-2"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-favicon
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.1
4
+ version: 1.0.0.pre.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alvaro Faundez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-01 00:00:00.000000000 Z
11
+ date: 2021-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -136,6 +136,10 @@ files:
136
136
  - ".github/workflows/gem-push.yml"
137
137
  - ".github/workflows/test.yml"
138
138
  - ".gitignore"
139
+ - ".reek.yml"
140
+ - ".vscode/launch.json"
141
+ - ".vscode/settings.json"
142
+ - ".vscode/tasks.json"
139
143
  - CHANGELOG.md
140
144
  - CODE_OF_CONDUCT.md
141
145
  - CONTRIBUTING.md
@@ -144,6 +148,7 @@ files:
144
148
  - README.md
145
149
  - Rakefile
146
150
  - bin/console
151
+ - bin/debug
147
152
  - bin/setup
148
153
  - config/jekyll/favicon.yml
149
154
  - config/jekyll/favicon/static_file.yml
@@ -152,13 +157,6 @@ files:
152
157
  - config/jekyll/favicon/static_file/referenceable.yml
153
158
  - config/jekyll/favicon/static_file/sourceable.yml
154
159
  - config/jekyll/favicon/static_file/taggable.yml
155
- - gemfiles/jekyll36.gemfile
156
- - gemfiles/jekyll37.gemfile
157
- - gemfiles/jekyll38.gemfile
158
- - gemfiles/jekyll39.gemfile
159
- - gemfiles/jekyll40.gemfile
160
- - gemfiles/jekyll41.gemfile
161
- - gemfiles/jekyll42.gemfile
162
160
  - jekyll-favicon.gemspec
163
161
  - lib/jekyll-favicon.rb
164
162
  - lib/jekyll/favicon.rb