lbenicio-minimal-v1 1.0.3 → 1.0.5
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/.rubocop.yml +471 -0
- data/_includes/analytics.html +10 -0
- data/_includes/anchor_headings.html +172 -0
- data/_includes/blog-navigation.html +18 -0
- data/_includes/conclusion.html +4 -0
- data/_includes/footer.html +13 -0
- data/_includes/fork.html +6 -0
- data/_includes/head.html +45 -0
- data/_includes/navigation.html +42 -0
- data/_includes/pagination.html +23 -0
- data/_includes/postList.html +20 -0
- data/_layouts/autopage_category.html +9 -0
- data/_layouts/autopage_collection.html +7 -0
- data/_layouts/autopage_tags.html +9 -0
- data/_layouts/default.html +28 -0
- data/_layouts/home.html +19 -0
- data/_layouts/posts.html +7 -0
- data/assets/favicon.ico +0 -0
- data/assets/monokai.scss +354 -0
- data/assets/postStyle.scss +26 -0
- data/assets/profile.jpg +0 -0
- data/assets/style.scss +143 -0
- data/assets/vendor/all.min.css +5 -0
- data/assets/webfonts/fa-brands-400.eot +0 -0
- data/assets/webfonts/fa-brands-400.svg +3717 -0
- data/assets/webfonts/fa-brands-400.ttf +0 -0
- data/assets/webfonts/fa-brands-400.woff +0 -0
- data/assets/webfonts/fa-brands-400.woff2 +0 -0
- data/assets/webfonts/fa-regular-400.eot +0 -0
- data/assets/webfonts/fa-regular-400.svg +801 -0
- data/assets/webfonts/fa-regular-400.ttf +0 -0
- data/assets/webfonts/fa-regular-400.woff +0 -0
- data/assets/webfonts/fa-regular-400.woff2 +0 -0
- data/assets/webfonts/fa-solid-900.eot +0 -0
- data/assets/webfonts/fa-solid-900.svg +5034 -0
- data/assets/webfonts/fa-solid-900.ttf +0 -0
- data/assets/webfonts/fa-solid-900.woff +0 -0
- data/assets/webfonts/fa-solid-900.woff2 +0 -0
- data/benchmark/capture-assign.rb +23 -0
- data/benchmark/conditional_liquid.rb +102 -0
- data/benchmark/end-with-vs-regexp +18 -0
- data/benchmark/file-dir-ensure-trailing-slash +56 -0
- data/benchmark/find-filter-vs-where-first-filters.rb +49 -0
- data/benchmark/flat-map +19 -0
- data/benchmark/hash-fetch +12 -0
- data/benchmark/jekyll-sanitize-path +47 -0
- data/benchmark/local-require +29 -0
- data/benchmark/native-vs-pathutil-relative +33 -0
- data/benchmark/parse-date +26 -0
- data/benchmark/parse-include-tag-params.rb +85 -0
- data/benchmark/path-manager.rb +65 -0
- data/benchmark/proc-call-vs-yield +17 -0
- data/benchmark/regexp-vs-include.rb +53 -0
- data/benchmark/sanitize-url.rb +27 -0
- data/benchmark/schwartzian_transform.rb +110 -0
- data/benchmark/sequential-assignment +15 -0
- data/benchmark/static-drop-vs-forwarded.rb +83 -0
- data/benchmark/string-concat +11 -0
- data/benchmark/string-replacement +16 -0
- data/benchmark/symbol-to-proc +9 -0
- data/rubocop/jekyll/assert_equal_literal_actual.rb +149 -0
- data/rubocop/jekyll/no_p_allowed.rb +23 -0
- data/rubocop/jekyll/no_puts_allowed.rb +23 -0
- data/rubocop/jekyll.rb +5 -0
- metadata +71 -7
@@ -0,0 +1,110 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# The Ruby documentation for #sort_by describes what's called a Schwartzian transform:
|
6
|
+
#
|
7
|
+
# > A more efficient technique is to cache the sort keys (modification times in this case)
|
8
|
+
# > before the sort. Perl users often call this approach a Schwartzian transform, after
|
9
|
+
# > Randal Schwartz. We construct a temporary array, where each element is an array
|
10
|
+
# > containing our sort key along with the filename. We sort this array, and then extract
|
11
|
+
# > the filename from the result.
|
12
|
+
# > This is exactly what sort_by does internally.
|
13
|
+
#
|
14
|
+
# The well-documented efficiency of sort_by is a good reason to use it. However, when a property
|
15
|
+
# does not exist on an item being sorted, it can cause issues (no nil's allowed!)
|
16
|
+
# In Jekyll::Filters#sort_input, we extract the property in each iteration of #sort,
|
17
|
+
# which is quite inefficient! How inefficient? This benchmark will tell you just how, and how much
|
18
|
+
# it can be improved by using the Schwartzian transform. Thanks, Randall!
|
19
|
+
|
20
|
+
require 'benchmark/ips'
|
21
|
+
require 'minitest'
|
22
|
+
require File.expand_path('../lib/jekyll', __dir__)
|
23
|
+
|
24
|
+
def site
|
25
|
+
@site ||= Jekyll::Site.new(
|
26
|
+
Jekyll.configuration('source' => File.expand_path('../docs', __dir__))
|
27
|
+
).tap(&:reset).tap(&:read)
|
28
|
+
end
|
29
|
+
|
30
|
+
def site_docs
|
31
|
+
site.collections['docs'].docs.dup
|
32
|
+
end
|
33
|
+
|
34
|
+
def sort_by_property_directly(docs, meta_key)
|
35
|
+
docs.sort! do |apple, orange|
|
36
|
+
apple_property = apple[meta_key]
|
37
|
+
orange_property = orange[meta_key]
|
38
|
+
|
39
|
+
if !apple_property.nil? && !orange_property.nil?
|
40
|
+
apple_property <=> orange_property
|
41
|
+
elsif !apple_property.nil? && orange_property.nil?
|
42
|
+
-1
|
43
|
+
elsif apple_property.nil? && !orange_property.nil?
|
44
|
+
1
|
45
|
+
else
|
46
|
+
apple <=> orange
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def schwartzian_transform(docs, meta_key)
|
52
|
+
docs.collect! do |d|
|
53
|
+
[d[meta_key], d]
|
54
|
+
end.sort! do |apple, orange|
|
55
|
+
if !apple[0].nil? && !orange[0].nil?
|
56
|
+
apple.first <=> orange.first
|
57
|
+
elsif !apple[0].nil? && orange[0].nil?
|
58
|
+
-1
|
59
|
+
elsif apple[0].nil? && !orange[0].nil?
|
60
|
+
1
|
61
|
+
else
|
62
|
+
apple[-1] <=> orange[-1]
|
63
|
+
end
|
64
|
+
end.collect! { |d| d[-1] }
|
65
|
+
end
|
66
|
+
|
67
|
+
# Before we test efficiency, do they produce the same output?
|
68
|
+
class Correctness
|
69
|
+
include Minitest::Assertions
|
70
|
+
|
71
|
+
define_method :mu_pp, &:pretty_inspect
|
72
|
+
|
73
|
+
attr_accessor :assertions
|
74
|
+
|
75
|
+
def initialize(docs, property)
|
76
|
+
@assertions = 0
|
77
|
+
@docs = docs
|
78
|
+
@property = property
|
79
|
+
end
|
80
|
+
|
81
|
+
def assert!
|
82
|
+
assert sort_by_property_directly(@docs, @property).is_a?(Array), 'sort_by_property_directly must return an array'
|
83
|
+
assert schwartzian_transform(@docs, @property).is_a?(Array), 'schwartzian_transform must return an array'
|
84
|
+
assert_equal sort_by_property_directly(@docs, @property),
|
85
|
+
schwartzian_transform(@docs, @property)
|
86
|
+
puts "Yeah, ok, correctness all checks out for property #{@property.inspect}"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
Correctness.new(site_docs, 'redirect_from').assert!
|
91
|
+
Correctness.new(site_docs, 'title').assert!
|
92
|
+
|
93
|
+
def property(property, meta_key)
|
94
|
+
Benchmark.ips do |x|
|
95
|
+
x.config(time: 10, warmup: 5)
|
96
|
+
x.report("sort_by_property_directly with #{property} property") do
|
97
|
+
sort_by_property_directly(site_docs, meta_key)
|
98
|
+
end
|
99
|
+
x.report("schwartzian_transform with #{property} property") do
|
100
|
+
schwartzian_transform(site_docs, meta_key)
|
101
|
+
end
|
102
|
+
x.compare!
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# First, test with a property only a handful of documents have.
|
107
|
+
test_property('sparse', 'redirect_from')
|
108
|
+
|
109
|
+
# Next, test with a property they all have.
|
110
|
+
test_property('non-sparse', 'title')
|
@@ -0,0 +1,83 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'forwardable'
|
5
|
+
require 'colorator'
|
6
|
+
require 'liquid'
|
7
|
+
require 'benchmark/ips'
|
8
|
+
require 'memory_profiler'
|
9
|
+
|
10
|
+
# Set up (memory) profiler
|
11
|
+
|
12
|
+
class Profiler
|
13
|
+
def self.run
|
14
|
+
yield new(ARGV[0] || 10_000)
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(count)
|
18
|
+
@count = count.to_i
|
19
|
+
end
|
20
|
+
|
21
|
+
def report(label, color, &block)
|
22
|
+
prof_report = MemoryProfiler.report { @count.to_i.times(&block) }
|
23
|
+
|
24
|
+
allocated_memory = prof_report.scale_bytes(prof_report.total_allocated_memsize)
|
25
|
+
allocated_objects = prof_report.total_allocated
|
26
|
+
retained_memory = prof_report.scale_bytes(prof_report.total_retained_memsize)
|
27
|
+
retained_objects = prof_report.total_retained
|
28
|
+
|
29
|
+
puts <<~MSG.send(color)
|
30
|
+
With #{label} calls
|
31
|
+
|
32
|
+
Total allocated: #{allocated_memory} (#{allocated_objects} objects)
|
33
|
+
Total retained: #{retained_memory} (#{retained_objects} objects)
|
34
|
+
MSG
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Set up stage
|
39
|
+
|
40
|
+
class Drop < Liquid::Drop
|
41
|
+
def initialize(obj)
|
42
|
+
@obj = obj
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class ForwardDrop < Drop
|
47
|
+
extend Forwardable
|
48
|
+
def_delegators :@obj, :name
|
49
|
+
end
|
50
|
+
|
51
|
+
class StaticDrop < Drop
|
52
|
+
def name
|
53
|
+
@obj.name
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class Document
|
58
|
+
def name
|
59
|
+
'lipsum'
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Set up actors
|
64
|
+
|
65
|
+
document = Document.new
|
66
|
+
alpha = ForwardDrop.new(document)
|
67
|
+
beta = StaticDrop.new(document)
|
68
|
+
count = ARGV[0] || 10_000
|
69
|
+
|
70
|
+
# Run profilers
|
71
|
+
puts "\nMemory profiles for #{count} calls to invoke drop key:"
|
72
|
+
Profiler.run do |x|
|
73
|
+
x.report('forwarded', :cyan) { alpha['name'] }
|
74
|
+
x.report('static', :green) { beta['name'] }
|
75
|
+
end
|
76
|
+
|
77
|
+
# Benchmark
|
78
|
+
puts "\nBenchmarking the two scenarios..."
|
79
|
+
Benchmark.ips do |x|
|
80
|
+
x.report('forwarded'.cyan) { alpha['name'] }
|
81
|
+
x.report('static'.green) { beta['name'] }
|
82
|
+
x.compare!
|
83
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'benchmark/ips'
|
5
|
+
|
6
|
+
def str
|
7
|
+
'http://baruco.org/2014/some-talk-with-some-amount-of-value'
|
8
|
+
end
|
9
|
+
|
10
|
+
Benchmark.ips do |x|
|
11
|
+
x.report('#tr') { str.tr('some', 'a') }
|
12
|
+
x.report('#gsub') { str.gsub('some', 'a') }
|
13
|
+
x.report('#gsub!') { str.gsub!('some', 'a') }
|
14
|
+
x.report('#sub') { str.sub('some', 'a') }
|
15
|
+
x.report('#sub!') { str.sub!('some', 'a') }
|
16
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Jekyll
|
6
|
+
# Checks for `assert_equal(exp, act, msg = nil)` calls containing literal values as
|
7
|
+
# second argument. The second argument should ideally be a method called on the tested
|
8
|
+
# instance.
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# # bad
|
12
|
+
# assert_equal @foo.bar, "foobar"
|
13
|
+
# assert_equal @alpha.beta, { "foo" => "bar", "lorem" => "ipsum" }
|
14
|
+
# assert_equal @alpha.omega, ["foobar", "lipsum"]
|
15
|
+
#
|
16
|
+
# # good
|
17
|
+
# assert_equal "foobar", @foo.bar
|
18
|
+
#
|
19
|
+
# assert_equal(
|
20
|
+
# { "foo" => "bar", "lorem" => "ipsum" },
|
21
|
+
# @alpha.beta
|
22
|
+
# )
|
23
|
+
#
|
24
|
+
# assert_equal(
|
25
|
+
# ["foobar", "lipsum"],
|
26
|
+
# @alpha.omega
|
27
|
+
# )
|
28
|
+
#
|
29
|
+
class AssertEqualLiteralActual < Cop
|
30
|
+
MSG = "Provide the 'expected value' as the first argument to `assert_equal`.".freeze
|
31
|
+
|
32
|
+
SIMPLE_LITERALS = %i(
|
33
|
+
true
|
34
|
+
false
|
35
|
+
nil
|
36
|
+
int
|
37
|
+
float
|
38
|
+
str
|
39
|
+
sym
|
40
|
+
complex
|
41
|
+
rational
|
42
|
+
regopt
|
43
|
+
).freeze
|
44
|
+
|
45
|
+
COMPLEX_LITERALS = %i(
|
46
|
+
array
|
47
|
+
hash
|
48
|
+
pair
|
49
|
+
irange
|
50
|
+
erange
|
51
|
+
regexp
|
52
|
+
).freeze
|
53
|
+
|
54
|
+
def_node_matcher :literal_actual?, <<-PATTERN
|
55
|
+
(send nil? :assert_equal $(send ...) $#literal?)
|
56
|
+
PATTERN
|
57
|
+
|
58
|
+
def_node_matcher :literal_actual_with_msg?, <<-PATTERN
|
59
|
+
(send nil? :assert_equal $(send ...) $#literal? $#opt_msg?)
|
60
|
+
PATTERN
|
61
|
+
|
62
|
+
def on_send(node)
|
63
|
+
return unless literal_actual?(node) || literal_actual_with_msg?(node)
|
64
|
+
add_offense(node, location: :expression)
|
65
|
+
end
|
66
|
+
|
67
|
+
def autocorrect(node)
|
68
|
+
lambda do |corrector|
|
69
|
+
corrector.replace(node.loc.expression, replacement(node))
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def opt_msg?(node)
|
76
|
+
node&.source
|
77
|
+
end
|
78
|
+
|
79
|
+
# This is not implement using a NodePattern because it seems
|
80
|
+
# to not be able to match against an explicit (nil) sexp
|
81
|
+
def literal?(node)
|
82
|
+
node && (simple_literal?(node) || complex_literal?(node))
|
83
|
+
end
|
84
|
+
|
85
|
+
def simple_literal?(node)
|
86
|
+
SIMPLE_LITERALS.include?(node.type)
|
87
|
+
end
|
88
|
+
|
89
|
+
def complex_literal?(node)
|
90
|
+
COMPLEX_LITERALS.include?(node.type) &&
|
91
|
+
node.each_child_node.all?(&method(:literal?))
|
92
|
+
end
|
93
|
+
|
94
|
+
def replacement(node)
|
95
|
+
_, _, first_param, second_param, optional_param = *node
|
96
|
+
|
97
|
+
replaced_text = \
|
98
|
+
if second_param.type == :hash
|
99
|
+
replace_hash_with_variable(first_param.source, second_param.source)
|
100
|
+
elsif second_param.type == :array && second_param.source != "[]"
|
101
|
+
replace_array_with_variable(first_param.source, second_param.source)
|
102
|
+
else
|
103
|
+
replace_based_on_line_length(first_param.source, second_param.source)
|
104
|
+
end
|
105
|
+
|
106
|
+
return "#{replaced_text}, #{optional_param.source}" if optional_param
|
107
|
+
replaced_text
|
108
|
+
end
|
109
|
+
|
110
|
+
def replace_based_on_line_length(first_expression, second_expression)
|
111
|
+
result = "assert_equal #{second_expression}, #{first_expression}"
|
112
|
+
return result if result.length < 80
|
113
|
+
|
114
|
+
# fold long lines independent of Rubocop configuration for better readability
|
115
|
+
<<~TEXT
|
116
|
+
assert_equal(
|
117
|
+
#{second_expression},
|
118
|
+
#{first_expression}
|
119
|
+
)
|
120
|
+
TEXT
|
121
|
+
end
|
122
|
+
|
123
|
+
def replace_hash_with_variable(first_expression, second_expression)
|
124
|
+
expect_expression = if second_expression.start_with?("{")
|
125
|
+
second_expression
|
126
|
+
else
|
127
|
+
"{#{second_expression}}"
|
128
|
+
end
|
129
|
+
<<~TEXT
|
130
|
+
expected = #{expect_expression}
|
131
|
+
assert_equal expected, #{first_expression}
|
132
|
+
TEXT
|
133
|
+
end
|
134
|
+
|
135
|
+
def replace_array_with_variable(first_expression, second_expression)
|
136
|
+
expect_expression = if second_expression.start_with?("%")
|
137
|
+
second_expression
|
138
|
+
else
|
139
|
+
Array(second_expression)
|
140
|
+
end
|
141
|
+
<<~TEXT
|
142
|
+
expected = #{expect_expression}
|
143
|
+
assert_equal expected, #{first_expression}
|
144
|
+
TEXT
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rubocop"
|
4
|
+
|
5
|
+
module RuboCop
|
6
|
+
module Cop
|
7
|
+
module Jekyll
|
8
|
+
class NoPAllowed < Cop
|
9
|
+
MSG = "Avoid using `p` to print things. Use `Jekyll.logger` instead.".freeze
|
10
|
+
|
11
|
+
def_node_search :p_called?, <<-PATTERN
|
12
|
+
(send _ :p _)
|
13
|
+
PATTERN
|
14
|
+
|
15
|
+
def on_send(node)
|
16
|
+
if p_called?(node)
|
17
|
+
add_offense(node, :location => :selector)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rubocop"
|
4
|
+
|
5
|
+
module RuboCop
|
6
|
+
module Cop
|
7
|
+
module Jekyll
|
8
|
+
class NoPutsAllowed < Cop
|
9
|
+
MSG = "Avoid using `puts` to print things. Use `Jekyll.logger` instead.".freeze
|
10
|
+
|
11
|
+
def_node_search :puts_called?, <<-PATTERN
|
12
|
+
(send nil? :puts _)
|
13
|
+
PATTERN
|
14
|
+
|
15
|
+
def on_send(node)
|
16
|
+
if puts_called?(node)
|
17
|
+
add_offense(node, :location => :selector)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/rubocop/jekyll.rb
ADDED
metadata
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lbenicio-minimal-v1
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leonardo Benicio
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2022-12-04 00:00:00.000000000 Z
|
@@ -156,12 +156,76 @@ email:
|
|
156
156
|
executables: []
|
157
157
|
extensions: []
|
158
158
|
extra_rdoc_files: []
|
159
|
-
files:
|
160
|
-
|
159
|
+
files:
|
160
|
+
- ".rubocop.yml"
|
161
|
+
- _includes/analytics.html
|
162
|
+
- _includes/anchor_headings.html
|
163
|
+
- _includes/blog-navigation.html
|
164
|
+
- _includes/conclusion.html
|
165
|
+
- _includes/footer.html
|
166
|
+
- _includes/fork.html
|
167
|
+
- _includes/head.html
|
168
|
+
- _includes/navigation.html
|
169
|
+
- _includes/pagination.html
|
170
|
+
- _includes/postList.html
|
171
|
+
- _layouts/autopage_category.html
|
172
|
+
- _layouts/autopage_collection.html
|
173
|
+
- _layouts/autopage_tags.html
|
174
|
+
- _layouts/default.html
|
175
|
+
- _layouts/home.html
|
176
|
+
- _layouts/posts.html
|
177
|
+
- assets/favicon.ico
|
178
|
+
- assets/monokai.scss
|
179
|
+
- assets/postStyle.scss
|
180
|
+
- assets/profile.jpg
|
181
|
+
- assets/style.scss
|
182
|
+
- assets/vendor/all.min.css
|
183
|
+
- assets/webfonts/fa-brands-400.eot
|
184
|
+
- assets/webfonts/fa-brands-400.svg
|
185
|
+
- assets/webfonts/fa-brands-400.ttf
|
186
|
+
- assets/webfonts/fa-brands-400.woff
|
187
|
+
- assets/webfonts/fa-brands-400.woff2
|
188
|
+
- assets/webfonts/fa-regular-400.eot
|
189
|
+
- assets/webfonts/fa-regular-400.svg
|
190
|
+
- assets/webfonts/fa-regular-400.ttf
|
191
|
+
- assets/webfonts/fa-regular-400.woff
|
192
|
+
- assets/webfonts/fa-regular-400.woff2
|
193
|
+
- assets/webfonts/fa-solid-900.eot
|
194
|
+
- assets/webfonts/fa-solid-900.svg
|
195
|
+
- assets/webfonts/fa-solid-900.ttf
|
196
|
+
- assets/webfonts/fa-solid-900.woff
|
197
|
+
- assets/webfonts/fa-solid-900.woff2
|
198
|
+
- benchmark/capture-assign.rb
|
199
|
+
- benchmark/conditional_liquid.rb
|
200
|
+
- benchmark/end-with-vs-regexp
|
201
|
+
- benchmark/file-dir-ensure-trailing-slash
|
202
|
+
- benchmark/find-filter-vs-where-first-filters.rb
|
203
|
+
- benchmark/flat-map
|
204
|
+
- benchmark/hash-fetch
|
205
|
+
- benchmark/jekyll-sanitize-path
|
206
|
+
- benchmark/local-require
|
207
|
+
- benchmark/native-vs-pathutil-relative
|
208
|
+
- benchmark/parse-date
|
209
|
+
- benchmark/parse-include-tag-params.rb
|
210
|
+
- benchmark/path-manager.rb
|
211
|
+
- benchmark/proc-call-vs-yield
|
212
|
+
- benchmark/regexp-vs-include.rb
|
213
|
+
- benchmark/sanitize-url.rb
|
214
|
+
- benchmark/schwartzian_transform.rb
|
215
|
+
- benchmark/sequential-assignment
|
216
|
+
- benchmark/static-drop-vs-forwarded.rb
|
217
|
+
- benchmark/string-concat
|
218
|
+
- benchmark/string-replacement
|
219
|
+
- benchmark/symbol-to-proc
|
220
|
+
- rubocop/jekyll.rb
|
221
|
+
- rubocop/jekyll/assert_equal_literal_actual.rb
|
222
|
+
- rubocop/jekyll/no_p_allowed.rb
|
223
|
+
- rubocop/jekyll/no_puts_allowed.rb
|
224
|
+
homepage: https://github.com/lbenicio/lbenicio-minimal-v1
|
161
225
|
licenses:
|
162
226
|
- GPL-3.0
|
163
227
|
metadata: {}
|
164
|
-
post_install_message:
|
228
|
+
post_install_message:
|
165
229
|
rdoc_options: []
|
166
230
|
require_paths:
|
167
231
|
- lib
|
@@ -176,8 +240,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
176
240
|
- !ruby/object:Gem::Version
|
177
241
|
version: '0'
|
178
242
|
requirements: []
|
179
|
-
rubygems_version: 3.
|
180
|
-
signing_key:
|
243
|
+
rubygems_version: 3.3.26
|
244
|
+
signing_key:
|
181
245
|
specification_version: 4
|
182
246
|
summary: Personal website and blog theme.
|
183
247
|
test_files: []
|