module Asciinurse::Chart::ChartCreator

Public Instance Methods

create_chart(parent, attrs, config) click to toggle source
# File lib/asciinurse/extensions/charts/extension.rb, line 13
def create_chart(parent, attrs, config)
  document = parent.document
  backend = document.attributes['backend']
  if backend == 'html5'
    html = create_from_json document, config
    create_pass_block parent, html, attrs, subs: nil
  else
    attrs['target'] = create_image document, config, attrs
    attrs['width'] ||= 800
    attrs['height'] ||= 600
    attrs['align'] ||= 'center'

    create_image_block parent, attrs
  end
end
create_from_csv(engine, data, attrs) click to toggle source
# File lib/asciinurse/extensions/charts/extension.rb, line 36
def create_from_csv(engine, data, attrs)
  csv_data = CSVData::new engine, attrs, data
  csv_data.to_chart_json
end
create_from_json(document, config) click to toggle source
# File lib/asciinurse/extensions/charts/extension.rb, line 29
def create_from_json(document, config)
  id = 'chart_%s' % document.counter(:chart_id)
  engine = get_engine document
  template = Asciinurse.read_resource "#{engine}/templates/chart.html.erb"
  ERB.new(template).result binding
end
create_image(document, config, attrs) click to toggle source
# File lib/asciinurse/extensions/charts/extension.rb, line 41
def create_image(document, config, attrs)
  engine = get_engine document
  converter_file = Asciinurse.config "charts.#{engine}.convert.file"
  tmpdir = Asciinurse.tmp_dir document
  id = document.counter(:chart_id)

  config_file = "#{tmpdir}/config-#{id}.json"
  image_file = "#{tmpdir}/chart-#{id}.png"

  IO.write config_file, config

  converter = Asciinurse.find_resource "#{engine}/converter/#{converter_file}"
  command = Asciinurse.config("charts.#{engine}.convert.command") %
      [converter, config_file, image_file]

  `#{command}`
  image_file
end
get_engine(doc) click to toggle source
# File lib/asciinurse/extensions/charts/extension.rb, line 9
def get_engine(doc)
  doc.attributes['charts'] || Asciinurse.config('charts.default')
end