module Sqm2Json::Reverse

Public Instance Methods

get_array(key, values, level) click to toggle source

Convert a JSON value array in SQM equivalent @param [Object] key of JSON element @param [Array] values of JSON element @param [Integer] level of the element in the whole JSON tree. (root is level 0) @return [String] SQM formatted array

# 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) click to toggle source

Convert any JSON element to SQM equivalent @param [Object] key of JSON element @param [Object] value of JSON element @param [Integer] level of the element in the whole JSON tree. (root is level 0) @return [String] SQM formatted element

# 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) click to toggle source

Convert a JSON numeric value in SQM equivalent @param [Object] value of JSON element @return [String] SQM formatted numeric value

# 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) click to toggle source

Generate a SQM formatted output from given JSON document @param [Hash] json valid JSON document @return [String] SQM document as string

# File lib/sqm2json/json2sqm.rb, line 7
def to_sqm(json)
  content = ''
  json.each { |k,v|
    content += get_element(k, v, 0)
  }
  content
end