immosquare-yaml 0.1.9 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 102b670cbd77856784f8051dfff363ba411293f4217e148eaf4447138e6c2d25
4
- data.tar.gz: 43122f8196ceca963ec2ec5c51f3fc93acc197e6e5c6099b76e8837c005197bd
3
+ metadata.gz: 4fd55f9ae0f4d9e13ef667a868df1670aa3a038860a8f2cb4db0e2f29dc08fa9
4
+ data.tar.gz: bdf032155c8a4c9db6c0697c249c459378caaac8c46f00cf3d803d194a294dfb
5
5
  SHA512:
6
- metadata.gz: 30dcf484b803bb10b1ee9971fb5163145d0a89bf33df6dcf2f31ee54d8c76fe32a2adf971828a41fe3a8e7f29956af922647bbfe1f627d5226e18eda332aea8e
7
- data.tar.gz: 9e753f4266747162034265ef7b43c727ee297d3ee8fd2bd7414ad935593d2dbe305e773a7ecf05cf4bd5681aa16be1c88402b6052a72958dd44b6509a446610a
6
+ metadata.gz: 3b8ed1227862217b4d7dca2011e4b8df8ca5ed20e8762d462ac2d4fbc062f295aaecf2f782d09405687f8d7ad09844b2ef3734ca8565814838db5739660674bb
7
+ data.tar.gz: a2266c2e2b51e57715ae21ffd25c9391c9af2de021f702805271abad716261ad0ce6ece6cdd85d942725a627beeb610837c497a31bc3464f63111e5e754b445b
@@ -9,4 +9,4 @@ module ImmosquareYaml
9
9
  end
10
10
 
11
11
  end
12
- end
12
+ end
@@ -6,4 +6,4 @@ module ImmosquareYaml
6
6
  end
7
7
 
8
8
  end
9
- end
9
+ end
@@ -15,7 +15,7 @@ module ImmosquareYaml
15
15
  "YES", "NO", "ON", "OFF", "TRUE", "FALSE"
16
16
  ].freeze
17
17
 
18
-
18
+
19
19
  ##============================================================##
20
20
  ## Deep transform values resursively
21
21
  ##============================================================##
@@ -31,7 +31,7 @@ module ImmosquareYaml
31
31
 
32
32
  ##============================================================##
33
33
  ## sort_by_key Function
34
- ## Purpose: Sort a hash by its keys, optionally recursively, with
34
+ ## Purpose: Sort a hash by its keys, optionally recursively, with
35
35
  ## case-insensitive comparison and stripping of double quotes.
36
36
  ## ============================================================ #
37
37
  def sort_by_key(hash, recursive = false, &block)
@@ -42,4 +42,4 @@ module ImmosquareYaml
42
42
  end
43
43
  end
44
44
  end
45
- end
45
+ end
@@ -3,7 +3,6 @@ require "httparty"
3
3
 
4
4
 
5
5
  module ImmosquareYaml
6
-
7
6
  module Translate
8
7
  extend SharedMethods
9
8
 
@@ -23,10 +22,10 @@ module ImmosquareYaml
23
22
  ##=============================================================##
24
23
  ## Load config keys from config_dev.yml
25
24
  ##=============================================================##
26
- raise("Error: openai_api_key not found in config_dev.yml") if ImmosquareYaml.configuration.openai_api_key.nil?
25
+ raise("Error: openai_api_key not found in config_dev.yml") if ImmosquareYaml.configuration.openai_api_key.nil?
27
26
  raise("Error: File #{file_path} not found") if !File.exist?(file_path)
28
27
  raise("Error: locale is not a locale") if !locale_to.is_a?(String) || locale_to.size != 2
29
-
28
+
30
29
  ##============================================================##
31
30
  ## We clean the file before translation
32
31
  ##============================================================##
@@ -63,7 +62,7 @@ module ImmosquareYaml
63
62
  ##============================================================##
64
63
  array_to = translatable_array(hash_to)
65
64
  array_to = array_to.map {|k, v| [k, v, nil] }
66
-
65
+
67
66
  ##============================================================##
68
67
  ## If we already have a translation file for the language
69
68
  ## we get the values in it and put it in our
@@ -121,7 +120,7 @@ module ImmosquareYaml
121
120
  ## format = "string" and keys_only = true => ["fr.demo1", "fr.demo2.demo2-1"]
122
121
  ## format = "array" and keys_only = false => [[["fr", "demo1"], "demo1"], [["fr", "demo2", "demo2-1"], "demo2-1"]]
123
122
  ## format = "array" and keys_only = true => [["fr", "demo1"], ["fr", "demo2", "demo2-1"]]
124
- ## ============================================================
123
+ ## ============================================================
125
124
  def translatable_array(hash, key = nil, result = [], **options)
126
125
  options = {
127
126
  :format => "string",
@@ -140,7 +139,6 @@ module ImmosquareYaml
140
139
  result << (options[:keys_only] ? r2 : [r2, hash])
141
140
  end
142
141
  result
143
-
144
142
  end
145
143
 
146
144
  ##============================================================##
@@ -156,13 +154,13 @@ module ImmosquareYaml
156
154
  parent[leaf] = value
157
155
  end
158
156
  final
159
- end
157
+ end
160
158
 
161
159
  ##============================================================##
162
160
  ## Translate with OpenAI
163
- ##
161
+ ##
164
162
  ## [
165
- ## ["en.mlsconnect.contact_us", "Nous contacter", "Contact us"],
163
+ ## ["en.mlsconnect.contact_us", "Nous contacter", "Contact us"],
166
164
  ## ["en.mlsconnect.description", "Description", nil],
167
165
  ## ...
168
166
  ## ]
@@ -190,8 +188,8 @@ module ImmosquareYaml
190
188
  blank_values = [NOTHING, SPACE, "\"\"", "\"#{SPACE}\""]
191
189
  cant_be_translated = "CANNOT-BE-TRANSLATED"
192
190
  array = array.map do |key, from, to|
193
- [key, from, blank_values.include?(from) ? from : to]
194
- end
191
+ [key, from, blank_values.include?(from) ? from : to]
192
+ end
195
193
 
196
194
 
197
195
  ##============================================================##
@@ -211,14 +209,14 @@ module ImmosquareYaml
211
209
  ## Remove quotes surrounding the value if they are present.
212
210
  ## and remove to to avoid error in translation
213
211
  ##============================================================##
214
- data_open_ai = data_open_ai.map do |index, from, _to|
212
+ data_open_ai = data_open_ai.map do |index, from, _to|
215
213
  from = from.to_s
216
214
  from = from[1..-2] while (from.start_with?(DOUBLE_QUOTE) && from.end_with?(DOUBLE_QUOTE)) || (from.start_with?(SIMPLE_QUOTE) && from.end_with?(SIMPLE_QUOTE))
217
- [index, from]
215
+ [index, from]
218
216
  end
219
217
 
220
218
  return array if data_open_ai.empty?
221
-
219
+
222
220
  ##============================================================##
223
221
  ## Call OpenAI API
224
222
  ##============================================================##
@@ -243,8 +241,8 @@ module ImmosquareYaml
243
241
  "Content-Type" => "application/json",
244
242
  "Authorization" => "Bearer #{ImmosquareYaml.configuration.openai_api_key}"
245
243
  }
246
-
247
-
244
+
245
+
248
246
  ##============================================================##
249
247
  ## Loop
250
248
  ##============================================================##
@@ -254,7 +252,7 @@ module ImmosquareYaml
254
252
 
255
253
 
256
254
  begin
257
- puts("call OPENAI Api (with model #{model[:name]}) #{" for #{data_group.size} fields (#{index}-#{index+data_group.size})" if data_open_ai.size > group_size}")
255
+ puts("call OPENAI Api (with model #{model[:name]}) #{" for #{data_group.size} fields (#{index}-#{index + data_group.size})" if data_open_ai.size > group_size}")
258
256
  prompt = "#{prompt_init}:\n\n#{data_group.inspect}\n\n"
259
257
  body = {
260
258
  :model => model[:name],
@@ -266,11 +264,11 @@ module ImmosquareYaml
266
264
  }
267
265
  t0 = Time.now
268
266
  call = HTTParty.post("https://api.openai.com/v1/chat/completions", :body => body.to_json, :headers => headers, :timeout => 500)
269
-
267
+
270
268
  puts("responded in #{(Time.now - t0).round(2)} seconds")
271
- raise(call["error"]["message"]) if call.code != 200
269
+ raise(call["error"]["message"]) if call.code != 200
270
+
272
271
 
273
-
274
272
  ##============================================================##
275
273
  ## We check that the result is complete
276
274
  ##============================================================##
@@ -278,7 +276,7 @@ module ImmosquareYaml
278
276
  choice = response["choices"][0]
279
277
  raise("Result is not complete") if choice["finish_reason"] != "stop"
280
278
 
281
-
279
+
282
280
  ##============================================================##
283
281
  ## We calculate the estimate price of the call
284
282
  ##============================================================##
@@ -313,7 +311,7 @@ module ImmosquareYaml
313
311
  ##============================================================##
314
312
  ai_resuslts.each do |index, translation|
315
313
  begin
316
- array[index.to_i][2] = translation
314
+ array[index.to_i][2] = translation
317
315
  rescue StandardError => e
318
316
  puts(e.message)
319
317
  end
@@ -322,14 +320,14 @@ module ImmosquareYaml
322
320
  ##============================================================##
323
321
  ## We return the modified array
324
322
  ##============================================================##
325
- array.map.with_index do |(k, from, to), index|
323
+ array.map.with_index do |(k, from, to), index|
326
324
  from = from.to_s
327
325
  to = "#{DOUBLE_QUOTE}#{to}#{DOUBLE_QUOTE}" if ai_resuslts.find {|i, _t| i == index } && ((from.start_with?(DOUBLE_QUOTE) && from.end_with?(DOUBLE_QUOTE)) || (from.start_with?(SIMPLE_QUOTE) && from.end_with?(SIMPLE_QUOTE)))
328
- [k, from, to]
326
+ [k, from, to]
329
327
  end
330
328
  end
331
329
 
332
330
 
333
331
  end
334
332
  end
335
- end
333
+ end
@@ -1,3 +1,3 @@
1
1
  module ImmosquareYaml
2
- VERSION = "0.1.9".freeze
2
+ VERSION = "0.1.10".freeze
3
3
  end
@@ -6,12 +6,12 @@ require_relative "immosquare-yaml/railtie" if defined?(Rails)
6
6
 
7
7
  module ImmosquareYaml
8
8
  extend SharedMethods
9
-
9
+
10
10
  class << self
11
11
 
12
-
13
12
 
14
-
13
+
14
+
15
15
  ##===========================================================================##
16
16
  ## Gem configuration
17
17
  ##===========================================================================##
@@ -46,10 +46,10 @@ module ImmosquareYaml
46
46
  :sort => true,
47
47
  :output => file_path
48
48
  }.merge(options)
49
-
49
+
50
50
  begin
51
51
  raise("File not found") if !File.exist?(file_path)
52
-
52
+
53
53
  ##===========================================================================##
54
54
  ## Setup variables
55
55
  ##===========================================================================##
@@ -61,8 +61,8 @@ module ImmosquareYaml
61
61
  original_content = File.read(file_path) if output_file_path != file_path
62
62
 
63
63
  ##===========================================================================##
64
- ## The cleaning procedure is initialized with a comprehensive clean, transforming
65
- ## the YAML content to a hash to facilitate optional sorting, before
64
+ ## The cleaning procedure is initialized with a comprehensive clean, transforming
65
+ ## the YAML content to a hash to facilitate optional sorting, before
66
66
  ## rewriting it to the YAML file in its cleaned and optionally sorted state.
67
67
  ##===========================================================================##
68
68
  clean_yml(file_path)
@@ -74,12 +74,12 @@ module ImmosquareYaml
74
74
  ## Restore original content if necessary
75
75
  ##===========================================================================##
76
76
  File.write(file_path, original_content) if output_file_path != file_path
77
-
77
+
78
78
  ##===========================================================================##
79
79
  ## Write the cleaned YAML content to the specified output file
80
80
  ##===========================================================================##
81
81
  FileUtils.mkdir_p(File.dirname(output_file_path))
82
- File.write(output_file_path, parsed_yml)
82
+ File.write(output_file_path, parsed_yml)
83
83
  true
84
84
  rescue StandardError => e
85
85
  puts(e.message)
@@ -88,8 +88,8 @@ module ImmosquareYaml
88
88
  end
89
89
 
90
90
  ##==========================================================================##
91
- ## This method parses a specified YAML file, carrying out a preliminary
92
- ## cleaning operation to ensure a smooth parsing process. Following this,
91
+ ## This method parses a specified YAML file, carrying out a preliminary
92
+ ## cleaning operation to ensure a smooth parsing process. Following this,
93
93
  ## the cleaned file is transformed into a hash, which can optionally be sorted.
94
94
  ## It operates under the assumption that the file is properly structured.
95
95
  ##
@@ -102,7 +102,7 @@ module ImmosquareYaml
102
102
  ##==========================================================================##
103
103
  def parse(file_path, **options)
104
104
  options = {:sort => true}.merge(options)
105
-
105
+
106
106
  begin
107
107
  raise("File not found") if !File.exist?(file_path)
108
108
 
@@ -132,12 +132,12 @@ module ImmosquareYaml
132
132
  false
133
133
  end
134
134
  end
135
-
135
+
136
136
  ##===========================================================================##
137
- ## This method performs a dump operation to obtain a well-structured
138
- ## YAML file from a hash input. It iterates through each key-value pair in the
139
- ## hash and constructs a series of lines representing the YAML file, with
140
- ## appropriate indentations and handling of various value types including
137
+ ## This method performs a dump operation to obtain a well-structured
138
+ ## YAML file from a hash input. It iterates through each key-value pair in the
139
+ ## hash and constructs a series of lines representing the YAML file, with
140
+ ## appropriate indentations and handling of various value types including
141
141
  ## strings with newline characters.
142
142
  ##
143
143
  ## Params:
@@ -151,18 +151,18 @@ module ImmosquareYaml
151
151
  def dump(hash, lines = [], indent = 0)
152
152
  hash.each do |key, value|
153
153
  ##===========================================================================##
154
- ## Preparing the key with the proper indentation before identifying
154
+ ## Preparing the key with the proper indentation before identifying
155
155
  ## the type of the value to handle it appropriately in the YAML representation.
156
156
  ##===========================================================================##
157
157
  line = "#{SPACE * indent}#{clean_key(key)}:"
158
-
158
+
159
159
  case value
160
160
  when nil
161
161
  lines << "#{line} null"
162
162
  when String
163
163
  if value.include?(NEWLINE) || value.include?('\n')
164
164
  ##=============================================================##
165
- ## We display the line with the key
165
+ ## We display the line with the key
166
166
  ## then the indentation if necessary
167
167
  ## then - if necessary (the + is not displayed because it is
168
168
  ## the default behavior)
@@ -197,7 +197,7 @@ module ImmosquareYaml
197
197
  end
198
198
 
199
199
  ##===========================================================================##
200
- ## Finalizing the construction by adding a newline at the end and
200
+ ## Finalizing the construction by adding a newline at the end and
201
201
  ## removing whitespace from empty lines.
202
202
  ##===========================================================================##
203
203
  lines += [NOTHING]
@@ -211,8 +211,8 @@ module ImmosquareYaml
211
211
  ##===========================================================================##
212
212
  ## This method ensures the file ends with a single newline, facilitating
213
213
  ## cleaner multi-line blocks. It operates by reading all lines of the file,
214
- ## removing any empty lines at the end, and then appending a newline.
215
- ## This guarantees the presence of a newline at the end, and also prevents
214
+ ## removing any empty lines at the end, and then appending a newline.
215
+ ## This guarantees the presence of a newline at the end, and also prevents
216
216
  ## multiple newlines from being present at the end.
217
217
  ##
218
218
  ## Params:
@@ -226,32 +226,27 @@ module ImmosquareYaml
226
226
  ## Read all lines from the file
227
227
  ## https://gist.github.com/guilhermesimoes/d69e547884e556c3dc95
228
228
  ##============================================================##
229
- lines = File.read(file_path).lines
229
+ content = File.read(file_path)
230
230
 
231
- ##============================================================##
232
- ## Ensure the last line ends with a newline character
233
- ##============================================================##
234
- lines[-1] = "#{lines[-1]}#{NEWLINE}" if !lines[-1].end_with?(NEWLINE)
235
-
236
231
  ##===========================================================================##
237
232
  ## Remove all trailing empty lines at the end of the file
233
+ content.gsub!(/#{Regexp.escape($INPUT_RECORD_SEPARATOR)}+\z/, "")
238
234
  ##===========================================================================##
239
- lines.pop while lines.last && lines.last.strip.empty?
240
-
235
+
241
236
  ##===========================================================================##
242
237
  ## Append a newline at the end to maintain the file structure
243
238
  ###===========================================================================##
244
- lines += [NEWLINE]
245
-
239
+ content += $INPUT_RECORD_SEPARATOR
240
+
246
241
  ##===========================================================================##
247
242
  ## Write the modified lines back to the file
248
243
  ##===========================================================================##
249
- File.write(file_path, lines.join)
244
+ File.write(file_path, content)
250
245
 
251
246
  ##===========================================================================##
252
247
  ## Return the total number of lines in the modified file
253
248
  ##===========================================================================##
254
- lines.size
249
+ content.lines.size
255
250
  end
256
251
 
257
252
  ##============================================================##
@@ -267,15 +262,15 @@ module ImmosquareYaml
267
262
 
268
263
  ##===================================================================================#
269
264
  ## First, we normalize the file by ensuring it always ends with an empty line
270
- ## This also allows us to get the total number of lines in the file,
265
+ ## This also allows us to get the total number of lines in the file,
271
266
  ## helping us to determine when we are processing the last line
272
267
  ###===================================================================================#
273
268
  line_count = normalize_last_line(file_path)
274
-
275
-
269
+
270
+
276
271
  File.foreach(file_path) do |current_line|
277
272
  last_line = line_index == line_count
278
-
273
+
279
274
  ##===================================================================================#
280
275
  ## Cleaning the current line by removing multiple spaces occurring after a non-space character
281
276
  ##===================================================================================#
@@ -285,10 +280,10 @@ module ImmosquareYaml
285
280
  ## Trimming potential whitespace characters from the end of the line
286
281
  ##============================================================##
287
282
  current_line = current_line.rstrip
288
-
283
+
289
284
 
290
285
  ##===================================================================================#
291
- ## Detecting blank lines to specially handle the last line within a block;
286
+ ## Detecting blank lines to specially handle the last line within a block;
292
287
  ## if we are inside a block or it's the last line, we avoid skipping
293
288
  ##===================================================================================#
294
289
  blank_line = current_line.gsub(NEWLINE, NOTHING).empty?
@@ -301,9 +296,9 @@ module ImmosquareYaml
301
296
  indent_level = current_line[/\A */].size
302
297
  need_to_clean_prev_inblock = inblock == true && ((!blank_line && indent_level <= inblock_indent) || last_line)
303
298
  need_to_clen_prev_weirdblock = weirdblock == true && (indent_level <= weirdblock_indent || last_line)
304
-
299
+
305
300
  ##===================================================================================#
306
- ## Handling the exit from a block:
301
+ ## Handling the exit from a block:
307
302
  ## if we are exiting a block, we clean the entire block
308
303
  ##===================================================================================#
309
304
  if need_to_clean_prev_inblock
@@ -323,7 +318,7 @@ module ImmosquareYaml
323
318
  ##============================================================##
324
319
  ## Handling different types of blocks (literal blocks "|",
325
320
  ## folded blocks ">", etc.)
326
- ## and applying the respective formatting strategies based on
321
+ ## and applying the respective formatting strategies based on
327
322
  ## block type and additional indent specified
328
323
  ##
329
324
  ## | => Literal blocks: It keeps line breaks as
@@ -359,25 +354,25 @@ module ImmosquareYaml
359
354
  end
360
355
 
361
356
  ##===================================================================================#
362
- ## Handling 'weirdblocks': cases where multi-line values are enclosed in quotes,
357
+ ## Handling 'weirdblocks': cases where multi-line values are enclosed in quotes,
363
358
  ## which should actually be single-line values
364
- ## key: "
359
+ ## key: "
365
360
  ## line1
366
361
  ## line2
367
362
  ## line3"
368
- ## key: '
363
+ ## key: '
369
364
  ## line1
370
365
  ## line2
371
366
  ## line3'
372
367
  ##============================================================##
373
368
  if need_to_clen_prev_weirdblock
374
- weirdblock = false
369
+ weirdblock = false
375
370
  key, value = lines[-1].split(":", 2)
376
371
  lines[-1] = "#{key}: #{clean_value(value)}"
377
372
  end
378
373
 
379
374
  ##===================================================================================#
380
- ## Handling keys without values: if the previous line ends with a colon (:) and is not
375
+ ## Handling keys without values: if the previous line ends with a colon (:) and is not
381
376
  ## followed by a value, we assign 'null' as the value
382
377
  ##===================================================================================#
383
378
  if inblock == false && weirdblock == false && lines[-1] && lines[-1].end_with?(":") && last_inblock == false
@@ -395,8 +390,8 @@ module ImmosquareYaml
395
390
  key = inblock || weirdblock ? nil : split[0].to_s.strip
396
391
 
397
392
  ##===================================================================================#
398
- ## Line processing based on various conditions such as being inside a block,
399
- ## starting with a comment symbol (#), or being a part of a 'weirdblock'
393
+ ## Line processing based on various conditions such as being inside a block,
394
+ ## starting with a comment symbol (#), or being a part of a 'weirdblock'
400
395
  ## Each case has its specific line cleaning strategy
401
396
  ## ----
402
397
  ## If the line is commented out, we keep and we remove newlines
@@ -450,7 +445,7 @@ module ImmosquareYaml
450
445
 
451
446
  if !split[1].empty?
452
447
  value = split[1].to_s.strip
453
-
448
+
454
449
  ##============================================================##
455
450
  ## We are in a multiline block which should be an inline
456
451
  ## if the value starts with a " and the number of " is odd
@@ -484,7 +479,7 @@ module ImmosquareYaml
484
479
  lines += [NOTHING]
485
480
  lines = lines.map {|l| (l.strip.empty? ? NOTHING : l).to_s.gsub(/(?<=\S)\s+/, SPACE) }
486
481
  File.write(file_path, lines.join(NEWLINE))
487
- end
482
+ end
488
483
 
489
484
  ##============================================================##
490
485
  ## clean_key Function
@@ -510,33 +505,33 @@ module ImmosquareYaml
510
505
  key = key[1..-2] if (key.start_with?(DOUBLE_QUOTE) && key.end_with?(DOUBLE_QUOTE)) || (key.start_with?(SIMPLE_QUOTE) && key.end_with?(SIMPLE_QUOTE))
511
506
 
512
507
  ##============================================================##
513
- ## Check if the key is an integer
508
+ ## Check if the key is an integer
514
509
  ##============================================================##
515
510
  is_int = key =~ /\A[-+]?\d+\z/
516
511
 
517
512
  ##============================================================##
518
- ##
513
+ ##
519
514
  ## Re-add quotes if the key is in the list of reserved keys or is an integer
520
515
  ##============================================================##
521
516
  key = "\"#{key}\"" if RESERVED_KEYS.include?(key) || is_int
522
517
  key
523
518
  end
524
-
519
+
525
520
  ##============================================================##
526
521
  ## clean_value Function
527
522
  ## Purpose: Sanitize and standardize YAML values
528
523
  ## In YAML "inblock" scenarios, there's no need to add quotes
529
524
  ## around values as it's inherently handled.
530
525
  ## ============================================================ ##
531
- def clean_value(value, with_quotes_verif = true)
526
+ def clean_value(value, with_quotes_verif: true)
532
527
  ##============================================================##
533
528
  ## Convert value to string to prevent issues in subsequent operations
534
529
  ##============================================================##
535
530
  value = value.to_s
536
-
531
+
537
532
  ##============================================================##
538
533
  ## Remove newline characters at the end of the value if present.
539
- ## This should be done prior to strip operation to handle scenarios
534
+ ## This should be done prior to strip operation to handle scenarios
540
535
  ## where the value ends with a space followed by a newline.
541
536
  ###============================================================##
542
537
  value = value[0..-2] if value.end_with?(NEWLINE)
@@ -544,7 +539,7 @@ module ImmosquareYaml
544
539
 
545
540
  ##============================================================##
546
541
  ## Clean up the value:
547
- ## - Remove tabs, carriage returns, form feeds, and vertical tabs.
542
+ ## - Remove tabs, carriage returns, form feeds, and vertical tabs.
548
543
  ## \t: corresponds to a tab
549
544
  ## \r: corresponds to a carriage return
550
545
  ## \f: corresponds to a form feed
@@ -552,17 +547,17 @@ module ImmosquareYaml
552
547
  ## We keep the \n
553
548
  ##============================================================##
554
549
  value = value.gsub(/[\t\r\f\v]+/, NOTHING)
555
-
550
+
556
551
  ##============================================================##
557
552
  ## Replace multiple spaces with a single space.
558
553
  ##============================================================##
559
554
  value = value.gsub(/ {2,}/, SPACE)
560
-
555
+
561
556
  ##============================================================##
562
557
  ## Trim leading and trailing spaces.
563
558
  ##============================================================##
564
559
  value = value.strip
565
-
560
+
566
561
  ##============================================================##
567
562
  ## Replace special quotes with standard single quotes.
568
563
  ##============================================================##
@@ -599,15 +594,15 @@ module ImmosquareYaml
599
594
  if value.empty?
600
595
  value = "\"#{value}\""
601
596
  elsif with_quotes_verif == true
602
- value = "\"#{value}\"" if value.include?(": ") ||
597
+ value = "\"#{value}\"" if value.include?(": ") ||
603
598
  value.include?(" #") ||
604
- value.include?(NEWLINE) ||
605
- value.include?('\n') ||
599
+ value.include?(NEWLINE) ||
600
+ value.include?('\n') ||
606
601
  value.start_with?(*YML_SPECIAL_CHARS) ||
607
602
  value.end_with?(":") ||
608
603
  RESERVED_KEYS.include?(value) ||
609
- value.start_with?(SPACE) ||
610
- value.end_with?(SPACE)
604
+ value.start_with?(SPACE) ||
605
+ value.end_with?(SPACE)
611
606
  end
612
607
  value
613
608
  end
@@ -616,14 +611,14 @@ module ImmosquareYaml
616
611
  ## parse_xml Function
617
612
  ## Purpose: Parse an XML file into a nested hash representation.
618
613
  ##
619
- ## This method reads through the XML file line by line and creates a
614
+ ## This method reads through the XML file line by line and creates a
620
615
  ## nested hash representation based on the structure and content of the XML.
621
616
  ##============================================================##
622
617
  def parse_xml(file_path)
623
618
  nested_hash = {}
624
619
  inblock = nil
625
620
  last_keys = []
626
-
621
+
627
622
  ##============================================================##
628
623
  ## We go over each line of the file to create a hash.
629
624
  ## We put the multiline blocks in an array to recover
@@ -641,20 +636,20 @@ module ImmosquareYaml
641
636
  ## Check for blank lines (which can be present within multi-line blocks)
642
637
  ##============================================================##
643
638
  blank_line = line.gsub(NEWLINE, NOTHING).empty?
644
-
639
+
645
640
  ##============================================================##
646
641
  ## Split the line into key and value.
647
642
  ##============================================================##
648
643
  split = line.strip.split(":", 2)
649
644
  key = split[0].to_s.strip
650
645
  inblock = nil if !inblock.nil? && !blank_line && indent_level <= inblock
651
-
652
-
646
+
647
+
653
648
  ##============================================================##
654
649
  ## Set the key level based on indentation
655
650
  ##============================================================##
656
651
  last_keys = last_keys[0, (blank_line ? inblock + INDENT_SIZE : indent_level) / INDENT_SIZE]
657
-
652
+
658
653
  ##============================================================##
659
654
  ## If inside a multi-line block, append the line to the current key's value
660
655
  ##============================================================##
@@ -666,7 +661,7 @@ module ImmosquareYaml
666
661
  ##============================================================##
667
662
  ## Handle multi-line key declarations.
668
663
  ## We no longer have the >
669
- ## because it is transformed in the clean_xml into |
664
+ ## because it is transformed in the clean_xml into |
670
665
  ##============================================================##
671
666
  elsif line.gsub("#{key}:", NOTHING).strip.start_with?("|")
672
667
  inblock = indent_level
@@ -697,7 +692,7 @@ module ImmosquareYaml
697
692
  ## |4- without newline and indentation of 4
698
693
  ##============================================================##
699
694
  deep_transform_values(nested_hash) do |value|
700
- if value.is_a?(Array)
695
+ if value.is_a?(Array)
701
696
  style_type = value[0]
702
697
  indent_supp = style_type.scan(/\d+/).first&.to_i || 0
703
698
  indent_supp = [indent_supp - INDENT_SIZE, 0].max
@@ -722,4 +717,4 @@ module ImmosquareYaml
722
717
 
723
718
 
724
719
  end
725
- end
720
+ end
@@ -1,5 +1,4 @@
1
1
  namespace :immosquare_yaml do
2
-
3
2
  ##============================================================##
4
3
  ## Function to translate translation files in rails app
5
4
  ## rake immosquare_yaml:translate SOURCE_LOCALE=fr
@@ -10,15 +9,15 @@ namespace :immosquare_yaml do
10
9
  source_locale = ENV.fetch("SOURCE_LOCALE", nil) || "fr"
11
10
  reset_translations = ENV.fetch("RESET_TRANSLATIONS", nil) || false
12
11
  reset_translations = reset_translations == "true"
13
-
12
+
14
13
  raise("Please provide a valid locale") if !I18n.available_locales.map(&:to_s).include?(source_locale)
15
14
  raise("Please provide a valid boolean for reset_translations") if ![true, false].include?(reset_translations)
16
-
15
+
17
16
  locales = I18n.available_locales.map(&:to_s).reject {|l| l == source_locale }
18
17
  puts("Translating from #{source_locale} to #{locales.join(", ")} with reset_translations=#{reset_translations}")
19
18
  Dir.glob("#{Rails.root}/config/locales/**/*#{source_locale}.yml").each do |file|
20
19
  locales.each do |locale|
21
- ImmosquareYaml::Translate.translate(file, locale, :reset_translations => reset_translations)
20
+ ImmosquareYaml::Translate.translate(file, locale, :reset_translations => reset_translations)
22
21
  end
23
22
  end
24
23
  rescue StandardError => e
@@ -35,5 +34,4 @@ namespace :immosquare_yaml do
35
34
  ImmosquareYaml.clean(file)
36
35
  end
37
36
  end
38
-
39
- end
37
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: immosquare-yaml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - IMMO SQUARE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-27 00:00:00.000000000 Z
11
+ date: 2023-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: iso-639
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.6
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.3.6
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: httparty
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.21.0
33
+ version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.21.0
40
+ version: '0'
41
41
  description: IMMOSQUARE-YAML is a specialized Ruby gem tailored primarily for parsing
42
42
  and dumping YML translation files, addressing challenges faced with other parsers
43
43
  like interpreting translation keys as booleans, multi-line strings, and more.