sqm2json 0.0.4 → 0.0.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c02cdf58b8fca45cb20db6981aa66a4dae32f0e6dfd56ec930002a9d65b3cb54
4
- data.tar.gz: 123c9d72a99bd1fa376b17b278618fd243c09b327fedabaf05ac491354519bec
3
+ metadata.gz: b0205d1803db07b24a01d4f9f8f724558b1acd239563c37b28a03aa401a1df76
4
+ data.tar.gz: 6de7251a1e81056f24c6cf6208d617ff29c2c001450c5c531a5fd84aa5d2591d
5
5
  SHA512:
6
- metadata.gz: aefc059a1453d1c58b3cd9e06b6dc35b8e44a2fb0e15897620f14f93e2c0ba48065c8136ef8bd44570443a21cca4bc6208d4a7b623949496bbc5b17cf80c4df9
7
- data.tar.gz: e97debfc0d9286cc562fb3e5aa0dc0a00147d63f2aae122a8cab100c926cf9389e9ee5657b8eb29321ad7873d41e241acee8fbb5a4a228ef590e9052dedac49d
6
+ metadata.gz: 1c38982487c1d5e2d92ff4f9d344ccb0b00400a5db9e5ac152fcb7dbdaf20449aae8f1e94926955d211d4b9553981d3bca7f1b704cdc914bc901e8c522b1de5e
7
+ data.tar.gz: 74f81499454ea81c0f75e9008b36495c49ea9f66b2e9b13f60961eb5b059a49abc505cab94a573b6b297106daff881fbdc4960f4a0eacf9b877dd333596f8599
data/CHANGELOG.md CHANGED
@@ -7,6 +7,16 @@
7
7
  @ bug fix
8
8
  !! security fix
9
9
 
10
+ ## [v0.0.6] - 2025-02-27
11
+ ~ change carriage return for SQM generation
12
+
13
+ ## [v0.0.5] - 2025-01-13
14
+ @ Fix parsing of field containing *""* as it can happen into _init_
15
+ ~ addition of test cases into spec
16
+
17
+ ## [v0.0.4] - 2024-04-28
18
+ ~ support SQM v54
19
+
10
20
  ## [v0.0.3] - 2016-08-22
11
21
  \+ changelog
12
22
  \+ supported SQM format versions provides *get_supported_versions* and *is_version_supported?*
@@ -1,4 +1,6 @@
1
+
1
2
  module Sqm2Json
3
+ # Provide JSON => SQM conversion
2
4
  module Reverse
3
5
 
4
6
  # Generate a SQM formatted output from given JSON document
@@ -6,13 +8,10 @@ module Sqm2Json
6
8
  # @return [String] SQM document as string
7
9
  def to_sqm(json)
8
10
  content = ''
9
- json.each { |k,v|
10
- content += get_element(k, v, 0)
11
- }
11
+ json.each { |k, v| content += get_element(k, v, 0) }
12
12
  content
13
13
  end
14
14
 
15
-
16
15
  # Convert any JSON element to SQM equivalent
17
16
  # @param [Object] key of JSON element
18
17
  # @param [Object] value of JSON element
@@ -20,28 +19,30 @@ module Sqm2Json
20
19
  # @return [String] SQM formatted element
21
20
  def get_element(key, value, level)
22
21
  content = ''
23
- level.times { content << "\t"}
22
+ level.times { content << "\t" }
24
23
 
25
- if value.is_a?(::Numeric)
26
- content << "#{key.to_s}=#{get_numeric(value)};\r\n"
27
- elsif value.is_a?(::String)
28
- content << "#{key.to_s}=\"#{value.gsub(/"/, '""').to_s}\";\r\n"
29
- elsif value.is_a?(::Array)
24
+ case value
25
+ when ::Numeric
26
+ content << "#{key}=#{get_numeric(value)};\n"
27
+ when ::String
28
+ content << "#{key}=\"#{value}\";\n"
29
+ when ::Array
30
30
  content << get_array(key, value, level)
31
- elsif value.is_a?(::Hash)
32
- content << "class #{key.to_s}\r\n"
33
- level.times { content << "\t"}
34
- content << "{\r\n"
35
- value.each{ |k,v|
31
+ when ::Hash
32
+ content << "class #{key}\n"
33
+ level.times { content << "\t" }
34
+ content << "{\n"
35
+ value.each { |k, v|
36
36
  content << get_element(k, v, level + 1)
37
37
  }
38
- level.times { content << "\t"}
39
- content << "};\r\n"
38
+ level.times { content << "\t" }
39
+ content << "};\n"
40
+ else
41
+ raise "Invalid JSON element type: #{value.class}"
40
42
  end
41
43
  content
42
44
  end
43
45
 
44
-
45
46
  # Convert a JSON value array in SQM equivalent
46
47
  # @param [Object] key of JSON element
47
48
  # @param [Array] values of JSON element
@@ -49,43 +50,41 @@ module Sqm2Json
49
50
  # @return [String] SQM formatted array
50
51
  def get_array(key, values, level)
51
52
  content = ''
52
- content << "#{key.to_s}[]="
53
+ content << "#{key}[]="
53
54
  if values[0].is_a?(::Numeric)
54
55
  content << '{'
55
56
  values.each { |v|
56
57
  content << "#{get_numeric(v)},"
57
58
  }
58
59
  content.chomp!(',')
59
- content << "};\r\n"
60
60
  else
61
- content << "\r\n"
62
- level.times { content << "\t"}
63
- content << "{\r\n"
64
- values.each { |v|
65
- (level + 1).times {content << "\t"}
66
- content << "\"#{v.to_s}\",\r\n"
67
- }
68
- content.chomp!(",\r\n")
69
- content << "\r\n"
70
- level.times { content << "\t"}
71
- content << "};\r\n"
61
+ content << "\n"
62
+ level.times { content << "\t" }
63
+ content << "{\n"
64
+ values.each do |v|
65
+ (level + 1).times {content << "\t" }
66
+ content << "\"#{v.to_s}\",\n"
67
+ end
68
+ content.chomp!(",\n")
69
+ content << "\n"
70
+ level.times { content << "\t" }
72
71
  end
72
+ content << "};\n"
73
73
  content
74
74
  end
75
75
 
76
-
77
76
  # Convert a JSON numeric value in SQM equivalent
78
77
  # @param [Object] value of JSON element
79
78
  # @return [String] SQM formatted numeric value
80
79
  def get_numeric(value)
81
- value.to_s.gsub(/(?<val>[0-9\.]+e[-\+]?)(?<exp>[0-9]+)/) { |m|
80
+ value.to_s.gsub(/(?<val>[0-9\.]+e[-\+]?)(?<exp>[0-9]+)/) do |m|
82
81
  arr = m.split(/e/)
83
82
  if arr[1][0] =~ /[0-9]/
84
83
  "#{arr[0]}e#{arr[1].rjust(3,'0')}"
85
84
  else
86
- "#{arr[0]}e#{arr[1][0]}#{arr[1][1..-1].rjust(3,'0')}"
85
+ "#{arr[0]}e#{arr[1][0]}#{arr[1][1..].rjust(3,'0')}"
87
86
  end
88
- }.to_s
87
+ end.to_s
89
88
  end
90
89
 
91
90
  end
@@ -1,3 +1,4 @@
1
+ # Provide SQM =>> JSON conversion
1
2
  module Sqm2Json
2
3
 
3
4
  # Parse a given SQM file to JSON document
@@ -6,28 +7,30 @@ module Sqm2Json
6
7
  # @return [Hash] JSON document
7
8
  def to_json(sqm_document)
8
9
  content = sqm_document.delete("\r\n").delete("\t")
9
-
10
- content.gsub!(/(?<key>\w*)(\s)*=(\s)*(?<val>"");/, '\k<key>="ʉ";') # replace empty string values
11
- content.gsub!('""', '\"') # 2x" in init fields replaced by \"
12
-
13
- content.gsub!(/(?<key>[\w]+)(\[\])?=(?<val>".{0,}?([^\\]\";))/) { |m|
14
- pairs = m.split('=', 2)
15
- "\"#{pairs[0]}\": #{pairs[1].gsub(/;/,'ʊ').gsub(/,/,'ʎ').chomp('ʊ').gsub('""','\"').gsub(/\\([^"])/, '\\\\\\\\\1')},"
16
- }
17
-
10
+ content.gsub!(/(?<key>\w*)\s*=\s*(?<val>"");/, '\k<key>="ʉ";') # replace empty string values
11
+ protect_special_chars_into_values(content)
18
12
  content.gsub!(/class (?<val>\w+)\s*\{/, '"\k<val>" : {')
19
13
  content.gsub!(/(?<key>\w*)=(?<val>[\w#+\-0-9 .,]+);/, '"\k<key>" : \k<val>,')
20
14
  content.gsub!(/(?<key>\w*)\[\]\s*=\s*\{(?<val>[\w#\+\-0-9 .,"]+)\};/, '"\k<key>" : [\k<val>],')
21
15
  content.gsub!(/\};/, '},')
22
16
  content.gsub!(/,\}/, '}')
23
17
  content.gsub!(/\}[;,]\}/, '}}')
24
- content.gsub!(/ʊ/, ';') if content.include? 'ʊ'
25
- content.gsub!(/ʎ/, ',') if content.include? 'ʎ'
26
- content.gsub!(/ʉ/, '') if content.include? 'ʉ'
27
- content.gsub!(/ɣ/, '\'') if content.include? 'ɣ'
28
- content = "{#{content.chomp('"').chomp(',')}}"
18
+ recover_special_chars_into_values(content)
19
+ ::JSON.parse("{#{content.chomp('"').chomp(',')}}", symbolize_names: true)
20
+ end
21
+
22
+ # Replace special characters into init-like fields before processing the structure
23
+ def protect_special_chars_into_values(content)
24
+ content.gsub!(/(\w+)(\[\])?\s*=\s*"(.{0,}?([^\\]))";/) do
25
+ "\"#{$1}\": \"#{$3.gsub(/;/, 'ʊ').gsub(/,/, 'ʎ').gsub('"', 'ƛ').gsub(/'/, 'ɣ').gsub(/\\([^"])/, '\\\\\\\\\1')}\","
26
+ end
27
+ end
29
28
 
30
- ::JSON.parse(content, symbolize_names: true)
29
+ # Recover protected special characters into init-like fields after processing the structure
30
+ def recover_special_chars_into_values(content)
31
+ content.gsub!(/"(\w+)(\[\])?"\s*:\s*"(.{0,}?([^\\])*)"(,)?/) do
32
+ "\"#{$1}\" : \"#{$3.gsub(/ʊ/, ';').gsub(/ʎ/, ',').gsub(/ƛ/, '\"').gsub(/ɣ/, '\'').gsub(/ʉ/, '')}#{$4}\""
33
+ end
31
34
  end
32
35
 
33
36
  end
@@ -1,11 +1,11 @@
1
1
  module Sqm2Json
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.6'
3
3
 
4
4
  def self.get_supported_versions
5
- [12,51,52,54]
5
+ [12, 51, 52, 54]
6
6
  end
7
7
 
8
- def self.is_version_supported?(version)
8
+ def self.version_supported?(version)
9
9
  get_supported_versions.include?(version)
10
10
  end
11
11
 
data/lib/sqm2json.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  require 'json'
2
2
  require 'sqm2json/json2sqm'
3
3
  require 'sqm2json/sqm2json'
4
- require 'sqm2json/version'
4
+ require 'sqm2json/version'
data/sqm2json.gemspec CHANGED
@@ -23,6 +23,6 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency 'bundler', '~> 2.4'
24
24
  spec.add_development_dependency 'rake', '~> 13.2'
25
25
  spec.add_development_dependency 'rspec', '~> 3.13'
26
- spec.add_development_dependency 'rubocop'
26
+ spec.add_development_dependency 'rubocop', '~> 1.70'
27
27
  spec.add_development_dependency 'yard', '~> 0.9'
28
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqm2json
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolas FLINOIS
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-01 00:00:00.000000000 Z
11
+ date: 2025-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -56,16 +56,16 @@ dependencies:
56
56
  name: rubocop
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '1.70'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '1.70'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: yard
71
71
  requirement: !ruby/object:Gem::Requirement