jekyll-favicon 1.0.0.pre.1 → 1.0.0.pre.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|