yalphabetize 0.9.0 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/performance_local +11 -0
- data/bin/performance_test +74 -0
- data/lib/yalphabetize/logger.rb +15 -16
- data/lib/yalphabetize/reader.rb +10 -1
- data/lib/yalphabetize/version.rb +1 -1
- data/lib/yalphabetize/writer.rb +5 -1
- data/lib/yalphabetize/yalphabetizer.rb +1 -1
- data/lib/yalphabetize/yaml_finder.rb +2 -2
- data/lib/yalphabetize.rb +2 -1
- metadata +26 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 620d06de0e383ed3e49a6878958f5fceef74ce7ed12d50e179110ebddb5c9fb3
|
4
|
+
data.tar.gz: 85e47f431754b89bfe3ac0b67d46f77f4f1467b351607e8289e9a1b142772ad5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c388188a52fec11ef2a15c547845ddc213d3a8a2d7b8db0cd972d5e9aa22b8ac78216e812ade4006b77c1e49de7300c84f767f6f4ed5fb951acd602c73859cca
|
7
|
+
data.tar.gz: a8ed2b327a0542514b9bc419b07daa0a7c982fb0ad0f62da9a2292d45243661eb66149b379eb925984ed54bc97b11a2296d1a86f4527781f42ba0707d77984d4
|
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
# Key length | File length | No of files | Iterations | Benchmark (s)
|
4
|
+
bundle exec bin/performance_test 1 1 1 250 0.06 &&
|
5
|
+
bundle exec bin/performance_test 1 1 10000 50 0.41 &&
|
6
|
+
bundle exec bin/performance_test 1 100000 1 60 0.41 &&
|
7
|
+
bundle exec bin/performance_test 1 1000 1000 12 2.6 &&
|
8
|
+
bundle exec bin/performance_test 1024 1 1 250 0.06 &&
|
9
|
+
bundle exec bin/performance_test 1024 1 40000 12 1.9 &&
|
10
|
+
bundle exec bin/performance_test 1024 100000 1 30 1.1 &&
|
11
|
+
bundle exec bin/performance_test 1024 800 340 12 2.3
|
@@ -0,0 +1,74 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'benchmark'
|
5
|
+
require 'fileutils'
|
6
|
+
require 'securerandom'
|
7
|
+
require 'yalphabetize'
|
8
|
+
|
9
|
+
key_length = ARGV[0].to_i
|
10
|
+
file_length = ARGV[1].to_i
|
11
|
+
number_of_files = ARGV[2].to_i
|
12
|
+
iterations = ARGV[3].to_i
|
13
|
+
expected = ARGV[4].to_f
|
14
|
+
|
15
|
+
def suppress_output
|
16
|
+
original_stdout = $stdout.clone
|
17
|
+
$stdout.reopen(File.new(File::NULL, 'w'))
|
18
|
+
yield
|
19
|
+
ensure
|
20
|
+
$stdout.reopen(original_stdout)
|
21
|
+
end
|
22
|
+
|
23
|
+
puts "Running performance test:\n\n"
|
24
|
+
puts "key_length: #{key_length}"
|
25
|
+
puts "file_length: #{file_length}"
|
26
|
+
puts "number_of_files: #{number_of_files}"
|
27
|
+
puts "iterations: #{iterations}"
|
28
|
+
puts "expected: #{expected}\n\n"
|
29
|
+
|
30
|
+
fixtures_dir = "performance/fixtures/#{key_length}_#{file_length}_#{number_of_files}"
|
31
|
+
|
32
|
+
if !Dir.exist?(fixtures_dir) && !ENV['CI']
|
33
|
+
FileUtils.makedirs(fixtures_dir)
|
34
|
+
|
35
|
+
number_of_files.times do |i|
|
36
|
+
yaml = ''
|
37
|
+
file_length.times do
|
38
|
+
yaml += "#{SecureRandom.alphanumeric(key_length)}: VALUE\n"
|
39
|
+
end
|
40
|
+
|
41
|
+
puts "#{i.fdiv(number_of_files) * 100}% of files written"
|
42
|
+
|
43
|
+
File.write("#{fixtures_dir}/#{i + 1}.yml", yaml)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
if !Dir.exist?(fixtures_dir) && ENV['CI']
|
48
|
+
puts "Could not find fixtures directory #{fixtures_dir}"
|
49
|
+
exit 1
|
50
|
+
end
|
51
|
+
|
52
|
+
times = []
|
53
|
+
|
54
|
+
suppress_output do
|
55
|
+
iterations.times do
|
56
|
+
times << Benchmark.measure do
|
57
|
+
Yalphabetize::CLI.call([fixtures_dir])
|
58
|
+
end.real
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
sorted_times = times.sort
|
63
|
+
duration = times.sum
|
64
|
+
p50 = sorted_times[iterations / 2]
|
65
|
+
|
66
|
+
if p50 > expected
|
67
|
+
puts 'FAILED'
|
68
|
+
puts "Duration: #{duration}"
|
69
|
+
puts "P50: #{p50}"
|
70
|
+
exit 1
|
71
|
+
else
|
72
|
+
puts "Duration: #{duration}"
|
73
|
+
puts "p50: #{p50}\n\n\n"
|
74
|
+
end
|
data/lib/yalphabetize/logger.rb
CHANGED
@@ -2,41 +2,40 @@
|
|
2
2
|
|
3
3
|
module Yalphabetize
|
4
4
|
class Logger
|
5
|
-
DEFAULT_OUTPUT =
|
5
|
+
DEFAULT_OUTPUT = Kernel
|
6
6
|
|
7
|
-
def initialize
|
8
|
-
@output = output
|
7
|
+
def initialize
|
9
8
|
@inspected_count = 0
|
10
9
|
@offences = {}
|
11
10
|
end
|
12
11
|
|
13
12
|
def initial_summary(file_paths)
|
14
|
-
|
13
|
+
DEFAULT_OUTPUT.puts "Inspecting #{file_paths.size} YAML files"
|
15
14
|
end
|
16
15
|
|
17
16
|
def log_offence(file_path)
|
18
17
|
self.inspected_count += 1
|
19
18
|
offences[file_path] = :detected
|
20
|
-
|
19
|
+
DEFAULT_OUTPUT.print red 'O'
|
21
20
|
end
|
22
21
|
|
23
22
|
def log_no_offence
|
24
23
|
self.inspected_count += 1
|
25
|
-
|
24
|
+
DEFAULT_OUTPUT.print green '.'
|
26
25
|
end
|
27
26
|
|
28
27
|
def final_summary
|
29
|
-
|
30
|
-
|
28
|
+
DEFAULT_OUTPUT.puts "\nInspected: #{inspected_count}"
|
29
|
+
DEFAULT_OUTPUT.puts send(list_offences_color, "Offences: #{offences.size}")
|
31
30
|
|
32
31
|
offences.each { |file_path, status| puts_offence(file_path, status) }
|
33
|
-
return unless
|
32
|
+
return unless uncorrected_offences?
|
34
33
|
|
35
|
-
|
34
|
+
DEFAULT_OUTPUT.puts 'Offences can be automatically fixed with `-a` or `--autocorrect`'
|
36
35
|
end
|
37
36
|
|
38
|
-
def
|
39
|
-
|
37
|
+
def uncorrected_offences?
|
38
|
+
offences.value?(:detected)
|
40
39
|
end
|
41
40
|
|
42
41
|
def log_correction(file_path)
|
@@ -45,20 +44,20 @@ module Yalphabetize
|
|
45
44
|
|
46
45
|
private
|
47
46
|
|
48
|
-
attr_reader :offences
|
47
|
+
attr_reader :offences
|
49
48
|
attr_accessor :inspected_count
|
50
49
|
|
51
50
|
def puts_offence(file_path, status)
|
52
51
|
case status
|
53
52
|
when :detected
|
54
|
-
|
53
|
+
DEFAULT_OUTPUT.puts yellow file_path
|
55
54
|
when :corrected
|
56
|
-
|
55
|
+
DEFAULT_OUTPUT.puts("#{yellow(file_path)} #{green('CORRECTED')}")
|
57
56
|
end
|
58
57
|
end
|
59
58
|
|
60
59
|
def list_offences_color
|
61
|
-
offences? ? :red : :green
|
60
|
+
offences.any? ? :red : :green
|
62
61
|
end
|
63
62
|
|
64
63
|
def red(string)
|
data/lib/yalphabetize/reader.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'psych'
|
4
|
+
require 'psych/comments'
|
4
5
|
|
5
6
|
module Yalphabetize
|
6
7
|
class Reader
|
@@ -21,7 +22,7 @@ module Yalphabetize
|
|
21
22
|
end
|
22
23
|
|
23
24
|
def stream_node
|
24
|
-
@_stream_node ||=
|
25
|
+
@_stream_node ||= parser_class.parse_stream file
|
25
26
|
rescue Psych::SyntaxError => e
|
26
27
|
raise Yalphabetize::ParsingError.new(
|
27
28
|
path,
|
@@ -32,5 +33,13 @@ module Yalphabetize
|
|
32
33
|
e.context
|
33
34
|
)
|
34
35
|
end
|
36
|
+
|
37
|
+
def parser_class
|
38
|
+
if Yalphabetize.config['preserve_comments']
|
39
|
+
Psych::Comments
|
40
|
+
else
|
41
|
+
Psych
|
42
|
+
end
|
43
|
+
end
|
35
44
|
end
|
36
45
|
end
|
data/lib/yalphabetize/version.rb
CHANGED
data/lib/yalphabetize/writer.rb
CHANGED
@@ -20,7 +20,11 @@ module Yalphabetize
|
|
20
20
|
attr_reader :stream_node, :path
|
21
21
|
|
22
22
|
def new_file_content
|
23
|
-
@_new_file_content ||=
|
23
|
+
@_new_file_content ||= if Yalphabetize.config['preserve_comments']
|
24
|
+
Psych::Comments.emit_yaml stream_node
|
25
|
+
else
|
26
|
+
stream_node.to_yaml(nil, line_width: MAX_LINE_WIDTH)
|
27
|
+
end
|
24
28
|
end
|
25
29
|
|
26
30
|
def indent_sequences
|
@@ -25,7 +25,7 @@ module Yalphabetize
|
|
25
25
|
process_paths(paths)
|
26
26
|
end
|
27
27
|
|
28
|
-
files.flatten.select { |file| valid?(file) }.
|
28
|
+
files.flatten.select { |file| valid?(file) }.uniq
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
@@ -56,7 +56,7 @@ module Yalphabetize
|
|
56
56
|
'--exclude-standard', '--others', '--cached', '--modified'
|
57
57
|
)
|
58
58
|
|
59
|
-
output.split("\0").uniq
|
59
|
+
output.split("\0").uniq if status.success?
|
60
60
|
end
|
61
61
|
|
62
62
|
def valid?(path)
|
data/lib/yalphabetize.rb
CHANGED
metadata
CHANGED
@@ -1,22 +1,38 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yalphabetize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Jenkins
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
|
11
|
+
date: 2024-12-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: psych-comments
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description:
|
28
|
+
email:
|
15
29
|
executables:
|
16
30
|
- yalphabetize
|
17
31
|
extensions: []
|
18
32
|
extra_rdoc_files: []
|
19
33
|
files:
|
34
|
+
- bin/performance_local
|
35
|
+
- bin/performance_test
|
20
36
|
- bin/yalphabetize
|
21
37
|
- lib/yalphabetize.rb
|
22
38
|
- lib/yalphabetize/aliaser.rb
|
@@ -40,11 +56,11 @@ files:
|
|
40
56
|
- lib/yalphabetize/writer.rb
|
41
57
|
- lib/yalphabetize/yalphabetizer.rb
|
42
58
|
- lib/yalphabetize/yaml_finder.rb
|
43
|
-
homepage:
|
59
|
+
homepage:
|
44
60
|
licenses: []
|
45
61
|
metadata:
|
46
62
|
rubygems_mfa_required: 'true'
|
47
|
-
post_install_message:
|
63
|
+
post_install_message:
|
48
64
|
rdoc_options: []
|
49
65
|
require_paths:
|
50
66
|
- lib
|
@@ -59,8 +75,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
59
75
|
- !ruby/object:Gem::Version
|
60
76
|
version: '0'
|
61
77
|
requirements: []
|
62
|
-
rubygems_version: 3.3.
|
63
|
-
signing_key:
|
78
|
+
rubygems_version: 3.3.27
|
79
|
+
signing_key:
|
64
80
|
specification_version: 4
|
65
81
|
summary: Alphabetize your YAML files
|
66
82
|
test_files: []
|