copy_tuner_incompatible_search 2.0.2 → 2.0.3
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/CHANGELOG.md +4 -1
- data/Steepfile +0 -2
- data/exe/copy_tuner_incompatible_search +1 -1
- data/lib/copy_tuner_incompatible_search/replace_command.rb +23 -11
- data/lib/copy_tuner_incompatible_search/{command.rb → search_command.rb} +1 -1
- data/lib/copy_tuner_incompatible_search/version.rb +1 -1
- data/lib/copy_tuner_incompatible_search.rb +1 -1
- data/sig/lib/copy_tuner_incompatible_search/replace_command.rbs +100 -0
- data/sig/lib/copy_tuner_incompatible_search/{command.rbs → search_command.rbs} +1 -1
- data/sig/lib/copy_tuner_incompatible_search/xlsx_writer.rbs +4 -4
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 549e35e731fc1cc494c260d49c66e5dcdb5db7eb4cb4a82bd5dad34f32f2a685
|
4
|
+
data.tar.gz: 14e23c9d6841ccb3e18b49de84daa2a16c52a1c84f522d0bb121e3a31492945b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4967fec81fb7dc9cadb284f979cd85874fa5c1412f3ed9a1cdcd421d79534e8b1d860f1af348d89e8758a76c04d3c66469443b56cced0492f3965e134596236b
|
7
|
+
data.tar.gz: dba034921fafca23d9762a18ee0ef2df043f528307891e203976e10368b4c4b36ce954c08ec845cb5781f7a978f5a1fd68a6b0ffa4cc68af1c1242e7120f2307
|
data/CHANGELOG.md
CHANGED
data/Steepfile
CHANGED
@@ -5,6 +5,6 @@ require_relative '../lib/copy_tuner_incompatible_search'
|
|
5
5
|
project_name = File.basename(Dir.pwd)
|
6
6
|
timestamp = Time.now.strftime('%Y%m%d%H%M%S')
|
7
7
|
output_path = "tmp/usages-#{project_name}-#{timestamp}.xlsx"
|
8
|
-
CopyTunerIncompatibleSearch::
|
8
|
+
CopyTunerIncompatibleSearch::SearchCommand.run(output_path)
|
9
9
|
puts "open #{output_path}"
|
10
10
|
`open #{output_path}`
|
@@ -18,10 +18,10 @@ module CopyTunerIncompatibleSearch
|
|
18
18
|
|
19
19
|
def run(output_path) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
20
20
|
# usages.xlsxから生成したUsageオブジェクトの配列
|
21
|
-
usages = usage_sheet.each(type: 'Type', key: 'Key',
|
21
|
+
usages = usage_sheet.each(type: 'Type', key: 'Key', file: 'File', line: 'Line').filter_map.with_index do |hash, i|
|
22
22
|
next if i.zero? # skip header
|
23
23
|
|
24
|
-
Usage.new(
|
24
|
+
Usage.new(type: hash[:type], key: hash[:key], file: hash[:file], line: hash[:line])
|
25
25
|
end
|
26
26
|
# プロジェクト内で後方互換性のないキーの集合
|
27
27
|
incompatible_keys = Set[*usages.select(&:static?).map(&:key)]
|
@@ -53,7 +53,7 @@ module CopyTunerIncompatibleSearch
|
|
53
53
|
if i.zero?
|
54
54
|
csv_out << row.headers
|
55
55
|
end
|
56
|
-
key = row[
|
56
|
+
key = row['key']
|
57
57
|
converted_key = "#{key}_html"
|
58
58
|
if keys_to_convert.include?(key) && !dot_converted_keys.include?(key) && !underscore_converted_keys.include?(key)
|
59
59
|
csv_out << [converted_key, *row[1..]]
|
@@ -82,14 +82,13 @@ module CopyTunerIncompatibleSearch
|
|
82
82
|
attr_reader :usage_path, :blurbs_path
|
83
83
|
|
84
84
|
class Usage
|
85
|
-
attr_reader :type, :key, :file
|
85
|
+
attr_reader :type, :key, :file
|
86
86
|
|
87
|
-
def initialize(type:, key:,
|
87
|
+
def initialize(type:, key:, file:, line:)
|
88
88
|
@type = type
|
89
|
-
@key = key
|
90
|
-
@
|
91
|
-
@
|
92
|
-
@line = line.to_s.empty? ? nil : line.to_i
|
89
|
+
@key = key.to_s
|
90
|
+
@file = file.to_s
|
91
|
+
@line = line.to_s
|
93
92
|
end
|
94
93
|
|
95
94
|
def static?
|
@@ -114,6 +113,12 @@ module CopyTunerIncompatibleSearch
|
|
114
113
|
last_key = key.split('.').last
|
115
114
|
".#{last_key}"
|
116
115
|
end
|
116
|
+
|
117
|
+
def line
|
118
|
+
raise 'line is not set' if @line.empty?
|
119
|
+
|
120
|
+
@line.to_i
|
121
|
+
end
|
117
122
|
end
|
118
123
|
|
119
124
|
class Result
|
@@ -154,7 +159,8 @@ module CopyTunerIncompatibleSearch
|
|
154
159
|
CSV.parse(blurbs_csv_text, headers: true, quote_char: '"').each do |row|
|
155
160
|
key = row['key']
|
156
161
|
all_blurb_keys << key
|
157
|
-
|
162
|
+
tr_range = detect_translation_range(row)
|
163
|
+
translation = row[tr_range].join(' ')
|
158
164
|
if translation.match?(/&#\d+;|&\w+;/) && !key.match?(/[_.]html$/)
|
159
165
|
keys_with_special_chars << key
|
160
166
|
end
|
@@ -162,6 +168,12 @@ module CopyTunerIncompatibleSearch
|
|
162
168
|
[Set[*all_blurb_keys], keys_with_special_chars]
|
163
169
|
end
|
164
170
|
|
171
|
+
def detect_translation_range(row)
|
172
|
+
start = 1
|
173
|
+
finish = row.to_h.keys.index('created_at') - 1
|
174
|
+
start..finish
|
175
|
+
end
|
176
|
+
|
165
177
|
def replace_code_for_lazy_usages(lazy_usages_by_key, keys_for_code_replace, underscore_converted_keys, dot_converted_keys)
|
166
178
|
lazy_usages_by_key.each do |key, usages|
|
167
179
|
next unless keys_for_code_replace.include?(key)
|
@@ -186,7 +198,7 @@ module CopyTunerIncompatibleSearch
|
|
186
198
|
lines = file_readlines(usage.file)
|
187
199
|
if usage.lazy?
|
188
200
|
lazy_key = usage.lazy_key
|
189
|
-
regex = /(?<=['"])#{Regexp.escape(lazy_key)}(?=['"])/
|
201
|
+
regex = /(?<=['"])#{Regexp.escape(lazy_key.to_s)}(?=['"])/
|
190
202
|
else
|
191
203
|
regex = /(?<=['"])#{Regexp.escape(usage.key)}(?=['"])/
|
192
204
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative 'copy_tuner_incompatible_search/version'
|
4
|
-
require_relative 'copy_tuner_incompatible_search/
|
4
|
+
require_relative 'copy_tuner_incompatible_search/search_command'
|
5
5
|
require_relative 'copy_tuner_incompatible_search/xlsx_writer'
|
6
6
|
require_relative 'copy_tuner_incompatible_search/replace_command'
|
7
7
|
|
@@ -0,0 +1,100 @@
|
|
1
|
+
module CopyTunerIncompatibleSearch
|
2
|
+
class ReplaceCommand
|
3
|
+
def self.run: (String usage_path, String blurbs_path, String output_path) -> void
|
4
|
+
|
5
|
+
def initialize: (String usage_path, String blurbs_path) -> void
|
6
|
+
|
7
|
+
def run: (String output_path) -> Result
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
attr_reader usage_path: String
|
12
|
+
|
13
|
+
attr_reader blurbs_path: String
|
14
|
+
|
15
|
+
class Usage
|
16
|
+
@line: String
|
17
|
+
|
18
|
+
type usage_type = 'dynamic' | 'static' | 'lazy'
|
19
|
+
|
20
|
+
attr_reader type: usage_type
|
21
|
+
|
22
|
+
attr_reader key: String
|
23
|
+
|
24
|
+
attr_reader file: String
|
25
|
+
|
26
|
+
def initialize: (type: usage_type, key: String?, file: String?, line: String?) -> void
|
27
|
+
|
28
|
+
def static?: () -> bool
|
29
|
+
|
30
|
+
def lazy?: () -> bool
|
31
|
+
|
32
|
+
def dynamic?: () -> bool
|
33
|
+
|
34
|
+
def used?: () -> bool
|
35
|
+
|
36
|
+
def lazy_key: () -> (nil | String)
|
37
|
+
|
38
|
+
def line: () -> Integer
|
39
|
+
end
|
40
|
+
|
41
|
+
class Result
|
42
|
+
attr_reader newly_replaced_keys: Array[String]
|
43
|
+
|
44
|
+
attr_reader existing_keys: Array[String]
|
45
|
+
|
46
|
+
attr_reader not_used_incompatible_keys: Array[String]
|
47
|
+
|
48
|
+
attr_reader keys_to_ignore: Array[String]
|
49
|
+
|
50
|
+
attr_reader already_ignored_keys: Array[String]
|
51
|
+
|
52
|
+
attr_reader keys_with_special_chars: Array[String]
|
53
|
+
|
54
|
+
attr_reader dynamic_count: Integer
|
55
|
+
|
56
|
+
def initialize: (Array[String] newly_replaced_keys, Array[String] existing_keys, Array[String] not_used_incompatible_keys, Array[String] keys_to_ignore, Array[String] already_ignored_keys, Array[String] keys_with_special_chars, Integer dynamic_count) -> void
|
57
|
+
end
|
58
|
+
|
59
|
+
def usage_sheet: () -> untyped
|
60
|
+
|
61
|
+
def blurbs_csv_text: () -> String
|
62
|
+
|
63
|
+
def search_ignored_keys: () -> Array[String]
|
64
|
+
|
65
|
+
def ignored_keys_text: () -> String
|
66
|
+
|
67
|
+
def parse_blurbs_csv: () -> [Set[String], Array[String]]
|
68
|
+
|
69
|
+
def replace_code_for_lazy_usages: (Hash[String, Array[Usage]] lazy_usages_by_key, Array[String] keys_for_code_replace, Set[String] underscore_converted_keys, Set[String] dot_converted_keys) -> void
|
70
|
+
|
71
|
+
def replace_code_for_static_usages: (Hash[String, Array[Usage]] static_usages_by_key, Array[String] keys_for_code_replace, Set[String] underscore_converted_keys, Set[String] dot_converted_keys) -> void
|
72
|
+
|
73
|
+
def replace_code: (Usage usage, Set[String] underscore_converted_keys, Set[String] dot_converted_keys) -> void
|
74
|
+
|
75
|
+
def file_readlines: (String path) -> Array[String]
|
76
|
+
|
77
|
+
def file_write: (String path, String text) -> void
|
78
|
+
|
79
|
+
def generate_html_key: (Usage usage, Set[String] underscore_converted_keys, Set[String] dot_converted_keys) -> String
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
module Roo
|
84
|
+
class Spreadsheet
|
85
|
+
def self.open: (String path) -> untyped
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# 公式のrbsファイルだとなぜかエラーが出てsteep checkがパスしないので、自前で定義している
|
90
|
+
class CSV
|
91
|
+
def self.parse: (String str, ?::Hash[Symbol, untyped] options) -> Array[CSV::Row]
|
92
|
+
def self.open: (String path, String mode) { (CSV csv) -> void } -> void
|
93
|
+
def <<: (Array[untyped] row) -> void
|
94
|
+
class Row
|
95
|
+
def []: (String key) -> String
|
96
|
+
| (Integer index) -> String
|
97
|
+
| (range[Integer] range) -> Array[String]
|
98
|
+
def headers: () -> Array[String]
|
99
|
+
end
|
100
|
+
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module CopyTunerIncompatibleSearch
|
2
2
|
class XlsxWriter
|
3
|
-
def initialize: (Array[
|
3
|
+
def initialize: (Array[SearchCommand::Result] results, Set[String] incompatible_keys, Set[String] ignored_keys) -> void
|
4
4
|
|
5
5
|
def save_to: (String output_path) -> void
|
6
6
|
|
7
7
|
private
|
8
8
|
|
9
|
-
attr_reader results: Array[
|
9
|
+
attr_reader results: Array[SearchCommand::Result]
|
10
10
|
|
11
11
|
attr_reader incompatible_keys: Set[String]
|
12
12
|
|
@@ -14,9 +14,9 @@ module CopyTunerIncompatibleSearch
|
|
14
14
|
|
15
15
|
def freeze_pane: (untyped sheet) -> void
|
16
16
|
|
17
|
-
def add_result_rows: (untyped sheet,
|
17
|
+
def add_result_rows: (untyped sheet, SearchCommand::Result result, untyped style) -> void
|
18
18
|
|
19
|
-
def should_output?: (
|
19
|
+
def should_output?: (SearchCommand::Usage usage, SearchCommand::Result result, String full_key) -> bool
|
20
20
|
|
21
21
|
def ignored_flag: (String key) -> ("Y" | "N")
|
22
22
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: copy_tuner_incompatible_search
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Junichi Ito
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-07-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: caxlsx
|
@@ -44,12 +44,13 @@ files:
|
|
44
44
|
- exe/copy_tuner_incompatible_replace
|
45
45
|
- exe/copy_tuner_incompatible_search
|
46
46
|
- lib/copy_tuner_incompatible_search.rb
|
47
|
-
- lib/copy_tuner_incompatible_search/command.rb
|
48
47
|
- lib/copy_tuner_incompatible_search/replace_command.rb
|
48
|
+
- lib/copy_tuner_incompatible_search/search_command.rb
|
49
49
|
- lib/copy_tuner_incompatible_search/version.rb
|
50
50
|
- lib/copy_tuner_incompatible_search/xlsx_writer.rb
|
51
51
|
- sig/copy_tuner_incompatible_search.rbs
|
52
|
-
- sig/lib/copy_tuner_incompatible_search/
|
52
|
+
- sig/lib/copy_tuner_incompatible_search/replace_command.rbs
|
53
|
+
- sig/lib/copy_tuner_incompatible_search/search_command.rbs
|
53
54
|
- sig/lib/copy_tuner_incompatible_search/xlsx_writer.rbs
|
54
55
|
homepage: https://github.com/JunichiIto/copy_tuner_incompatible_search
|
55
56
|
licenses:
|
@@ -74,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
74
75
|
- !ruby/object:Gem::Version
|
75
76
|
version: '0'
|
76
77
|
requirements: []
|
77
|
-
rubygems_version: 3.5.
|
78
|
+
rubygems_version: 3.5.11
|
78
79
|
signing_key:
|
79
80
|
specification_version: 4
|
80
81
|
summary: Search usage of incompatible keys in CopyTuner.
|