rubustrings 0.0.1 → 0.0.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/lib/rubustrings/action.rb +47 -7
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa19cca952b74543bed45a486114d63af4233bcc
|
4
|
+
data.tar.gz: 23d3c792e54fb1b3876dc532ff5a665c6ff5023c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 969982b6ac0dc93ac4b7093d0de9d823765ae828b66e48cb508363c40fbf5c3a24bcdfd77dd26a1deba87a1bb7cd6e0d498003d8694dc61b096547f24ea7729d
|
7
|
+
data.tar.gz: 9b9ef14a267ca556cfb6e157287e9f63ccbe8bb740690dd8f8b9fd357d7ebd550f43eb0cd3524c063f89445031ee6c9834cc8ff5fdee6eb9acddb99adbb06661
|
data/lib/rubustrings/action.rb
CHANGED
@@ -12,10 +12,8 @@ module Rubustrings
|
|
12
12
|
|
13
13
|
if result
|
14
14
|
log_output(:result_success, file_name, 0, 'Strings file validated succesfully')
|
15
|
-
exit 0
|
16
15
|
else
|
17
16
|
log_output(:result_error, file_name, 0, 'Some errors detected')
|
18
|
-
exit 1
|
19
17
|
end
|
20
18
|
end
|
21
19
|
end
|
@@ -84,11 +82,43 @@ module Rubustrings
|
|
84
82
|
end
|
85
83
|
|
86
84
|
def validate_special_characters(translation_key, translation_value)
|
87
|
-
|
88
|
-
|
89
|
-
|
85
|
+
# Remove %% to avoid ambiguous scenarios with adjacent formats like "%s%%s"
|
86
|
+
translation_key = translation_key.gsub("%%", " ")
|
87
|
+
translation_value = translation_value.gsub("%%", " ")
|
88
|
+
|
89
|
+
variables_regex = /\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?(hh|ll|[hlLzjt])?([b-fiosuxX@])/
|
90
|
+
position_index = 0
|
91
|
+
length_index = 7
|
92
|
+
format_index = 8
|
93
|
+
|
94
|
+
# sort by according to parameter field, if specified
|
95
|
+
key_variables = translation_key.scan(variables_regex).stable_sort_by{ |r| r[position_index].to_i }
|
96
|
+
value_variables = translation_value.scan(variables_regex).stable_sort_by{ |r| r[position_index].to_i }
|
97
|
+
|
98
|
+
return true unless key_variables.any? || value_variables.any?
|
99
|
+
return false unless key_variables.count == value_variables.count
|
100
|
+
|
101
|
+
# we should not have any parameter fields in the keys
|
102
|
+
return false unless key_variables.last[position_index] == nil
|
103
|
+
|
104
|
+
# if we do have parameter fields, we need to include all of them
|
105
|
+
if value_variables[0][position_index] != nil
|
106
|
+
return false unless value_variables.last[position_index] != nil
|
107
|
+
validation_result = true
|
108
|
+
value_variables.each_with_index { |v, idx|
|
109
|
+
if v[position_index].to_i != idx + 1
|
110
|
+
validation_result = false
|
111
|
+
end
|
112
|
+
}
|
113
|
+
return false unless validation_result
|
114
|
+
else
|
115
|
+
return false unless value_variables.last[position_index] == nil
|
116
|
+
end
|
90
117
|
|
91
|
-
|
118
|
+
# remove parameter field
|
119
|
+
key_variables = key_variables.map{ |v| [v[length_index], v[format_index]] }
|
120
|
+
value_variables = value_variables.map{ |v| [v[length_index], v[format_index]] }
|
121
|
+
key_variables == value_variables
|
92
122
|
end
|
93
123
|
|
94
124
|
def validate_special_beginning(translation_key, translation_value)
|
@@ -133,7 +163,7 @@ module Rubustrings
|
|
133
163
|
log_output(:warning, file_name, line_number, "translation significantly large: #{line}") unless check_translation_length match_key, match_value
|
134
164
|
|
135
165
|
validation_special_characters = validate_special_characters match_key, match_value
|
136
|
-
log_output(:error, file_name, line_number, "
|
166
|
+
log_output(:error, file_name, line_number, "variables mismatch: #{line}") unless validation_special_characters
|
137
167
|
|
138
168
|
validation_special_beginning = validate_special_beginning match_key, match_value
|
139
169
|
log_output(:error, file_name, line_number, "beginning mismatch: #{line}") unless validation_special_beginning
|
@@ -145,3 +175,13 @@ module Rubustrings
|
|
145
175
|
end
|
146
176
|
end
|
147
177
|
end
|
178
|
+
|
179
|
+
module Enumerable
|
180
|
+
def stable_sort
|
181
|
+
sort_by.with_index { |x, idx| [x, idx] }
|
182
|
+
end
|
183
|
+
|
184
|
+
def stable_sort_by
|
185
|
+
sort_by.with_index { |x, idx| [yield(x), idx] }
|
186
|
+
end
|
187
|
+
end
|