rubustrings 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|