Module: Asciinurse::Chart::ChartCreator

Included in:
ChartAssetsDocinfoProcessor, ChartBlockMacro, ChartBlockProcessor
Defined in:
lib/asciinurse/extensions/charts/extension.rb

Instance Method Summary collapse

Instance Method Details

#create_chart(parent, attrs, config) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 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) ⇒ Object



36
37
38
39
# 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) ⇒ Object



29
30
31
32
33
34
# 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) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 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) ⇒ Object



9
10
11
# File 'lib/asciinurse/extensions/charts/extension.rb', line 9

def get_engine(doc)
  doc.attributes['charts'] || Asciinurse.config('charts.default')
end