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.
- checksums.yaml +4 -4
- data/.devcontainer/Dockerfile +1 -1
- data/.devcontainer/devcontainer.json +11 -4
- data/.github/workflows/test.yml +5 -5
- data/.gitignore +1 -2
- data/.reek.yml +25 -0
- data/.vscode/launch.json +16 -0
- data/.vscode/settings.json +7 -0
- data/.vscode/tasks.json +15 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile +1 -1
- data/README.md +3 -3
- data/Rakefile +4 -4
- data/bin/debug +22 -0
- data/jekyll-favicon.gemspec +23 -23
- data/lib/jekyll-favicon.rb +5 -7
- data/lib/jekyll/favicon.rb +13 -16
- data/lib/jekyll/favicon/configuration.rb +11 -11
- data/lib/jekyll/favicon/configuration/defaults.rb +6 -6
- data/lib/jekyll/favicon/generator.rb +5 -6
- data/lib/jekyll/favicon/hooks.rb +4 -4
- data/lib/jekyll/favicon/static_data_file.rb +2 -2
- data/lib/jekyll/favicon/static_file.rb +18 -18
- data/lib/jekyll/favicon/static_file/convertible.rb +30 -27
- data/lib/jekyll/favicon/static_file/mutable.rb +16 -16
- data/lib/jekyll/favicon/static_file/referenceable.rb +2 -2
- data/lib/jekyll/favicon/static_file/sourceable.rb +7 -7
- data/lib/jekyll/favicon/static_file/taggable.rb +8 -14
- data/lib/jekyll/favicon/static_graphic_file.rb +2 -2
- data/lib/jekyll/favicon/tag.rb +9 -10
- data/lib/jekyll/favicon/utils.rb +24 -5
- data/lib/jekyll/favicon/utils/configuration/compact.rb +29 -32
- data/lib/jekyll/favicon/utils/configuration/merge.rb +41 -34
- data/lib/jekyll/favicon/utils/configuration/patch.rb +24 -23
- data/lib/jekyll/favicon/utils/convert.rb +15 -18
- data/lib/jekyll/favicon/utils/tag.rb +44 -28
- data/lib/jekyll/favicon/version.rb +1 -1
- metadata +7 -9
- data/gemfiles/jekyll36.gemfile +0 -6
- data/gemfiles/jekyll37.gemfile +0 -6
- data/gemfiles/jekyll38.gemfile +0 -6
- data/gemfiles/jekyll39.gemfile +0 -6
- data/gemfiles/jekyll40.gemfile +0 -6
- data/gemfiles/jekyll41.gemfile +0 -6
- data/gemfiles/jekyll42.gemfile +0 -6
data/lib/jekyll/favicon/utils.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
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
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
35
|
-
|
36
|
-
|
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
|
-
|
39
|
-
end
|
40
|
-
compact_shallow compacted_hash
|
34
|
+
memo << compacted
|
41
35
|
end
|
36
|
+
compact_shallow compacted_array
|
37
|
+
end
|
42
38
|
|
43
|
-
|
44
|
-
|
45
|
-
|
39
|
+
def self.compact_shallow(compactable)
|
40
|
+
compactable.empty? ? nil : compactable.compact
|
41
|
+
end
|
46
42
|
|
47
|
-
|
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
|
-
|
14
|
-
|
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
|
-
|
19
|
-
|
20
|
-
|
16
|
+
right, *rest = right_and_or_rest
|
17
|
+
merged = merge_pair left, right
|
18
|
+
return merged if rest.empty?
|
21
19
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
private
|
20
|
+
merge_multiple(merged, *rest)
|
21
|
+
end
|
26
22
|
|
27
|
-
|
28
|
-
|
23
|
+
def self.merge_pair(left, right)
|
24
|
+
return right if !left || !right || !left.instance_of?(right.class)
|
29
25
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
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
|
-
|
38
|
-
|
39
|
-
|
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
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
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
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
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
|
-
|
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
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
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
|
-
|
23
|
+
def self.patch_array(values, &block)
|
24
|
+
values.collect { |value| patch_unknown value, &block }
|
25
|
+
end
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
def self.patch_hash(values, &block)
|
28
|
+
values.transform_values { |value| patch_unknown value, &block }
|
29
|
+
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
def self.patch_value(value, &block)
|
32
|
+
block.call patch_value_string_symbol(value)
|
33
|
+
end
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
def self.patch_value_string_symbol(value)
|
36
|
+
value.to_s.start_with?(":") ? value[1..].to_sym : value
|
37
|
+
end
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
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
|
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
|
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
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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
|
-
|
27
|
-
|
28
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
36
|
-
|
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
|
-
|
41
|
-
|
42
|
-
|
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
|
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.
|
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-
|
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
|