immosquare-yaml 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/immosquare-yaml.rb +65 -21
- data/lib/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aef05b6cde6a978367813b253fe4dcc378674aa2b6e0192efe967caaf5babd21
|
4
|
+
data.tar.gz: 1bea9842a643d06132b023cf10c8e1f3624c94d83fdff9d62509017fc6873064
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b067dc205dd3e76680c7b76cc851a7676244fcbfb224865f8fdd7368ea185b7fc7612e282c621144b44c7edde5edb13e0dd7db43baa4d6a62ec9a5aa58bfbd1d
|
7
|
+
data.tar.gz: 226772ab6581607c3d41ba8e3fe0bdb360d12e900a4440eba6554d0eb646d7b518f91794dae055f6ff234a798f74b1f0678e5e908dd36e41170441e28f43884a
|
data/lib/immosquare-yaml.rb
CHANGED
@@ -32,10 +32,23 @@ module ImmosquareYaml
|
|
32
32
|
##============================================================##
|
33
33
|
## Default options
|
34
34
|
##============================================================##
|
35
|
-
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
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
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
|
-
|
78
|
-
|
79
|
-
|
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
|
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
|
-
##
|
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.
|
545
|
-
value = "\"#{value}\""
|
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
|
-
|
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
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.
|
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
|
28
|
-
|
29
|
-
|
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.
|
57
|
+
rubygems_version: 3.4.13
|
58
58
|
signing_key:
|
59
59
|
specification_version: 4
|
60
|
-
summary: A YAML parser
|
60
|
+
summary: A YAML parser optimized for translation files.
|
61
61
|
test_files: []
|