class Json2xxx::Core

Public Class Methods

new() click to toggle source
# File lib/json2xxx/core.rb, line 13
def initialize
end

Public Instance Methods

convert_backlog_wiki(data) click to toggle source
# File lib/json2xxx/core.rb, line 43
def convert_backlog_wiki(data)
  headers = get_keys(data)
  result = []
  result << '|~' + headers.join('|') + '|h'

  data.each do |hash|
    columns = headers.map{ |column_name|
      get_json_value(hash[column_name]).gsub("\n", "&br;")
    }
    result << '|~' + columns.join('|') + '|'
  end
  result.join("\n")
end
convert_csv(data, delimiter, force_quotes, write_header) click to toggle source
# File lib/json2xxx/core.rb, line 16
def convert_csv(data, delimiter, force_quotes, write_header)
  headers = get_keys(data)
  csv = []
  CSV.generate(col_sep: delimiter, force_quotes: force_quotes) do |csv|
    csv << headers if write_header
    data.each do |hash|
      csv << headers.map { |column_name| 
        get_json_value(hash[column_name]).gsub("\n", '')
      }
    end
  end
end
convert_excel(data, filepath = Time.now.strftime("%Y%m%d%H%M%S") + '.xls') click to toggle source
# File lib/json2xxx/core.rb, line 57
def convert_excel(data, filepath = Time.now.strftime("%Y%m%d%H%M%S") + '.xls')
  require 'spreadsheet'
  headers = get_keys(data)

  basename = File.basename(filepath, '.*')
  Spreadsheet.client_encoding = 'UTF-8'
  workbook = Spreadsheet::Workbook.new
  workbook.add_font 'MS ゴシック'
  worksheet = workbook.create_worksheet(name: basename)
  worksheet.row(0).replace headers

  unless data.class == Array
    puts 'data is not Array'
    exit
  end
  i = 1
  data.each do |record|
    values = headers.map { |key| get_json_value(record[key]) }
    worksheet.row(i).replace values
    i = i + 1
  end
  workbook.write(filepath)
  puts "write #{filepath}"
end
convert_html(data) click to toggle source
# File lib/json2xxx/core.rb, line 82
def convert_html(data)
  headers = get_keys(data)
  result = []
  result << headers
  data.each do |hash|
    columns = headers.map{ |column_name|
      get_json_value(hash[column_name]).gsub("\n", '')
    }
    result << columns
  end
  result.to_html_table
end
convert_markdown(data) click to toggle source
# File lib/json2xxx/core.rb, line 29
def convert_markdown(data)
  headers = get_keys(data)
  result = []
  header = '|' + headers.join('|') + '|' + "\n" + 
                             '|' + headers.map { |_header| ':--' }.join('|') + '|'
  data.each do |hash|
    columns = headers.map{ |column_name|
      get_json_value(hash[column_name]).gsub("\n", '').gsub("|", '')
    }
    result << columns
  end
  header + "\n" + result.to_table
end
extract(data, fields) click to toggle source
# File lib/json2xxx/core.rb, line 95
def extract(data, fields)
  data.map { |record|
    record = HashWrapper.new(record)
    fields.inject({}) { |result, field| 
      eval_string = field[0] == "[" ? "record#{field}" : "record.#{field}"
      result[field] = eval(eval_string)
      result
    }
  }
end
get_json_value(value) click to toggle source
# File lib/json2xxx/core.rb, line 117
def get_json_value(value)
  return '' if value.nil? 
  return value.to_json if value.class == Array || value.class == Hash || value.class == HashWrapper
  return value.to_s
end
get_keys(data) click to toggle source
# File lib/json2xxx/core.rb, line 112
def get_keys(data)
  keys = data.inject(Set.new) {|set, record| set.merge(record.keys) }
  keys.to_a
end
sort(data, sort_column) click to toggle source
# File lib/json2xxx/core.rb, line 106
def sort(data, sort_column)
  data.sort_by{ |record|
    record[sort_column]
  }
end