Module: Sqm2Json::Reverse

Defined in:
lib/sqm2json/json2sqm.rb

Instance Method Summary collapse

Instance Method Details

#get_array(key, values, level) ⇒ String

Convert a JSON value array in SQM equivalent

Parameters:

  • key (Object)

    of JSON element

  • values (Array)

    of JSON element

  • level (Integer)

    of the element in the whole JSON tree. (root is level 0)

Returns:

  • (String)

    SQM formatted array



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/sqm2json/json2sqm.rb', line 50

def get_array(key, values, level)
  content = ''
  content << "#{key.to_s}[]="
  if values[0].is_a?(::Numeric)
    content << '{'
    values.each { |v|
      content << "#{get_numeric(v)},"
    }
    content.chomp!(',')
    content << "};\r\n"
  else
    content << "\r\n"
    level.times { content << "\t"}
    content << "{\r\n"
    values.each { |v|
      (level + 1).times {content << "\t"}
      content << "\"#{v.to_s}\",\r\n"
    }
    content.chomp!(",\r\n")
    content << "\r\n"
    level.times { content << "\t"}
    content << "};\r\n"
  end
  content
end

#get_element(key, value, level) ⇒ String

Convert any JSON element to SQM equivalent

Parameters:

  • key (Object)

    of JSON element

  • value (Object)

    of JSON element

  • level (Integer)

    of the element in the whole JSON tree. (root is level 0)

Returns:

  • (String)

    SQM formatted element



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/sqm2json/json2sqm.rb', line 21

def get_element(key, value, level)
  content = ''
  level.times { content << "\t"}

  if value.is_a?(::Numeric)
    content << "#{key.to_s}=#{get_numeric(value)};\r\n"
  elsif value.is_a?(::String)
    content << "#{key.to_s}=\"#{value.gsub(/"/, '""').to_s}\";\r\n"
  elsif value.is_a?(::Array)
    content << get_array(key, value, level)
  elsif value.is_a?(::Hash)
    content << "class #{key.to_s}\r\n"
    level.times { content << "\t"}
    content << "{\r\n"
    value.each{ |k,v|
      content << get_element(k, v, level + 1)
    }
    level.times { content << "\t"}
    content << "};\r\n"
  end
  content
end

#get_numeric(value) ⇒ String

Convert a JSON numeric value in SQM equivalent

Parameters:

  • value (Object)

    of JSON element

Returns:

  • (String)

    SQM formatted numeric value



80
81
82
83
84
85
86
87
88
89
# File 'lib/sqm2json/json2sqm.rb', line 80

def get_numeric(value)
  value.to_s.gsub(/(?<val>[0-9\.]+e-?)(?<exp>[0-9]+)/) { |m|
    arr = m.split(/e/)
    if arr[1][0] =~ /[0-9]/
      "#{arr[0]}e#{arr[1].rjust(3,'0')}"
    else
      "#{arr[0]}e#{arr[1][0]}#{arr[1][1..-1].rjust(3,'0')}"
    end
  }.to_s
end

#to_sqm(json) ⇒ String

Generate a SQM formatted output from given JSON document

Parameters:

  • json (Hash)

    valid JSON document

Returns:

  • (String)

    SQM document as string



7
8
9
10
11
12
13
# File 'lib/sqm2json/json2sqm.rb', line 7

def to_sqm(json)
  content = ''
  json.each { |k,v|
    content += get_element(k, v, 0)
  }
  content
end