immosquare-yaml 0.1.0 → 0.1.1

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/immosquare-yaml.rb +65 -21
  3. data/lib/version.rb +1 -1
  4. metadata +6 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c14b630cc0f5e121db85ea66b43d18c0d59ae69e2f99db80bdeaf7077b35c5ca
4
- data.tar.gz: 06073e555050eb9d7971135fcdab6b6ec1d00f29f283c5ab68153c5306a0c8d9
3
+ metadata.gz: aef05b6cde6a978367813b253fe4dcc378674aa2b6e0192efe967caaf5babd21
4
+ data.tar.gz: 1bea9842a643d06132b023cf10c8e1f3624c94d83fdff9d62509017fc6873064
5
5
  SHA512:
6
- metadata.gz: da0e7f956a8cf9e1f5a2bac7d03114961d2b2d2b31d41c40b54fe17d853102bd97012cca89d7425c80fd1b04498a847c10641e65690223ea34aec9fa5c1b5798
7
- data.tar.gz: 463d134187834be1649dddf650615f440712282d07448b9254de0d57b4c8d64419091a114bc2c4d23630a4cb3c28408202ebc34e7d1b91a30cf6a7ef78e2975e
6
+ metadata.gz: b067dc205dd3e76680c7b76cc851a7676244fcbfb224865f8fdd7368ea185b7fc7612e282c621144b44c7edde5edb13e0dd7db43baa4d6a62ec9a5aa58bfbd1d
7
+ data.tar.gz: 226772ab6581607c3d41ba8e3fe0bdb360d12e900a4440eba6554d0eb646d7b518f91794dae055f6ff234a798f74b1f0678e5e908dd36e41170441e28f43884a
@@ -32,10 +32,23 @@ module ImmosquareYaml
32
32
  ##============================================================##
33
33
  ## Default options
34
34
  ##============================================================##
35
- options = {:sort => true}.merge(options)
35
+ options = {
36
+ :sort => true,
37
+ :output => file_path
38
+ }.merge(options)
36
39
 
37
40
  begin
38
41
  raise("File not found") if !File.exist?(file_path)
42
+
43
+ ##===========================================================================##
44
+ ## Setup variables
45
+ ##===========================================================================##
46
+ output_file_path = options[:output]
47
+
48
+ ##===========================================================================##
49
+ ## Backup original content for restoration after parsing if necessary
50
+ ##===========================================================================##
51
+ original_content = File.read(file_path) if output_file_path != file_path
39
52
 
40
53
  ##===========================================================================##
41
54
  ## The cleaning procedure is initialized with a comprehensive clean, transforming
@@ -43,10 +56,20 @@ module ImmosquareYaml
43
56
  ## rewriting it to the YAML file in its cleaned and optionally sorted state.
44
57
  ##===========================================================================##
45
58
  clean_yml(file_path)
46
- yaml_final = parse(file_path)
47
- yaml_final = sort_by_key(yaml_final, options[:sort]) if options[:sort]
48
- yaml_final = dump(yaml_final)
49
- File.write(file_path, yaml_final)
59
+ parsed_yml = parse(file_path)
60
+ parsed_yml = sort_by_key(parsed_yml, options[:sort])
61
+ parsed_yml = dump(parsed_yml)
62
+
63
+ ##===========================================================================##
64
+ ## Restore original content if necessary
65
+ ##===========================================================================##
66
+ File.write(file_path, original_content) if output_file_path != file_path
67
+
68
+ ##===========================================================================##
69
+ ## Write the cleaned YAML content to the specified output file
70
+ ##===========================================================================##
71
+ FileUtils.mkdir_p(File.dirname(output_file_path))
72
+ File.write(output_file_path, parsed_yml)
50
73
  true
51
74
  rescue StandardError => e
52
75
  puts(e.message)
@@ -73,10 +96,27 @@ module ImmosquareYaml
73
96
  begin
74
97
  raise("File not found") if !File.exist?(file_path)
75
98
 
99
+ ##===========================================================================##
100
+ ## Backup original content for restoration after parsing
101
+ ##===========================================================================##
102
+ original_content = File.read(file_path)
103
+
104
+ ##===========================================================================##
105
+ ## clean, parse & Sort
106
+ ##===========================================================================##
76
107
  clean_yml(file_path)
77
- yaml_final = parse_xml(file_path)
78
- yaml_final = sort_by_key(yaml_final, options[:sort]) if options[:sort]
79
- yaml_final
108
+ parsed_xml = parse_xml(file_path)
109
+ parsed_xml = sort_by_key(parsed_xml, options[:sort]) if options[:sort]
110
+
111
+ ##===========================================================================##
112
+ ## Restore original content
113
+ ##===========================================================================##
114
+ File.write(file_path, original_content)
115
+
116
+ ##===========================================================================##
117
+ ## Return the parsed YAML file
118
+ ##===========================================================================##
119
+ parsed_xml
80
120
  rescue StandardError => e
81
121
  puts(e.message)
82
122
  false
@@ -123,6 +163,12 @@ module ImmosquareYaml
123
163
  line += "-" if !value.end_with?(NEWLINE)
124
164
  lines << line
125
165
 
166
+ ##============================================================##
167
+ ## Remove quotes surrounding the value if they are present.
168
+ ## They are not necessary in this case after | or |-
169
+ ##============================================================##
170
+ value = value[1..-2] if (value.start_with?(DOUBLE_QUOTE) && value.end_with?(DOUBLE_QUOTE)) || (value.start_with?(SIMPLE_QUOTE) && value.end_with?(SIMPLE_QUOTE))
171
+
126
172
  ##=============================================================##
127
173
  ## We parse on the 2 types of line breaks
128
174
  ##=============================================================##
@@ -464,7 +510,7 @@ module ImmosquareYaml
464
510
  ## Re-add quotes if the key is in the list of reserved keys or is an integer
465
511
  ##============================================================##
466
512
  key = key.gsub(/\A(['“”‘’"]?)(.*)\1\z/, '\2')
467
- key = "\"#{key}\"" if key.in?(RESERVED_KEYS) || is_int
513
+ key = "\"#{key}\"" if RESERVED_KEYS.include?(key) || is_int
468
514
  key
469
515
  end
470
516
 
@@ -528,33 +574,31 @@ module ImmosquareYaml
528
574
  ##=============================================================##
529
575
  ## Handling cases where the value must be surrounded by quotes
530
576
  ## if:
577
+ ## management of "" and " ". Not possible to have more spaces
578
+ ## because we have already removed the double spaces
579
+ ## else
531
580
  ## value.include?(": ") => key: text with: here
532
581
  ## value.include?(" #") => key: text with # here
533
582
  ## value.include?(NEWLINE) => key: Line 1\nLine 2\nLine 3
534
583
  ## value.include?('\n') => key: Line 1"\n"Line 2"\n"Line 3
535
584
  ## value.start_with?(*YML_SPECIAL_CHARS) => key: @text
536
585
  ## value.end_with?(":") => key: text:
537
- ## value.in?(RESERVED_KEYS) => key: YES
586
+ ## RESERVED_KEYS.include?(value) => key: YES
538
587
  ## value.start_with?(SPACE) => key: 'text'
539
588
  ## value.end_with?(SPACE) => key: text '
540
- ## else:
541
- ## management of "" and " ". Not possible to have more spaces
542
- ## because we have already removed the double spaces
543
589
  ##=============================================================##
544
- if value.present?
545
- value = "\"#{value}\"" if (value.include?(": ") ||
590
+ if value.empty?
591
+ value = "\"#{value}\""
592
+ elsif with_quotes_verif == true
593
+ value = "\"#{value}\"" if value.include?(": ") ||
546
594
  value.include?(" #") ||
547
595
  value.include?(NEWLINE) ||
548
596
  value.include?('\n') ||
549
597
  value.start_with?(*YML_SPECIAL_CHARS) ||
550
598
  value.end_with?(":") ||
551
- value.in?(RESERVED_KEYS) ||
599
+ RESERVED_KEYS.include?(value) ||
552
600
  value.start_with?(SPACE) ||
553
- value.end_with?(SPACE)) &&
554
- with_quotes_verif == true
555
-
556
- else
557
- value = "\"#{value}\""
601
+ value.end_with?(SPACE)
558
602
  end
559
603
  value
560
604
  end
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ImmosquareYaml
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: immosquare-yaml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - IMMO SQUARE
@@ -24,9 +24,9 @@ dependencies:
24
24
  - - ">"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.2.5
27
- description: IMMOSQUARE-YAML is a lightweight and efficient YAML parser designed to
28
- facilitate the handling of real estate data in YAML format, offering streamlined
29
- processes and a simplified user experience.
27
+ description: IMMOSQUARE-YAML is a specialized Ruby gem tailored primarily for parsing
28
+ and dumping YML translation files, addressing challenges faced with other parsers
29
+ like interpreting translation keys as booleans, multi-line strings, and more.
30
30
  email:
31
31
  - jules@immosquare.com
32
32
  executables: []
@@ -54,8 +54,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  requirements: []
57
- rubygems_version: 3.1.6
57
+ rubygems_version: 3.4.13
58
58
  signing_key:
59
59
  specification_version: 4
60
- summary: A YAML parser tailored for real estate solutions.
60
+ summary: A YAML parser optimized for translation files.
61
61
  test_files: []