class Integral::ChartRenderer::Base

Base class which all Charts should inherit from

Public Class Methods

new(dataset, options = {}) click to toggle source

@param [Hash] dataset @param [Hash] options

# File lib/integral/chart_renderer/base.rb, line 17
def initialize(dataset, options = {})
  @dataset = dataset
  @options = options
end
render(dataset, options = {}) click to toggle source

Render chart markup

# File lib/integral/chart_renderer/base.rb, line 10
def self.render(dataset, options = {})
  renderer = new(dataset, options)
  renderer.render
end

Public Instance Methods

render() click to toggle source

Render chart markup

# File lib/integral/chart_renderer/base.rb, line 23
def render
  data = process_data

  return respond_with_chart(data) if data_available?(data)

  respond_with_no_data_available
end

Private Instance Methods

controller() click to toggle source

Controller used to render partials

# File lib/integral/chart_renderer/base.rb, line 44
def controller
  ApplicationController
end
data_available?(data) click to toggle source

@return [Boolean] whether or not any data is present

# File lib/integral/chart_renderer/base.rb, line 61
def data_available?(data)
  return false if data.empty?

  if data.first.is_a?(Array)
    data = data.map(&:uniq).uniq

    return true if data.length > 1

    data = data.first
  end

  data = data.uniq
  !(data.length == 1 && data.first.zero?)
end
process_data() click to toggle source

Process data values from provided dataset to be converted into graph markup

# File lib/integral/chart_renderer/base.rb, line 39
def process_data
  raise NotImplementedError
end
render_partial(path, locals = {}) click to toggle source

Renders a given partial

@param [String] path partial path to render @param [Hash] locals optional hash of variables to pass to partial

@return [String] Markup which frontend uses to build a graph

# File lib/integral/chart_renderer/base.rb, line 54
def render_partial(path, locals = {})
  controller.render(partial: "integral/backend/shared/graphs/#{path}",
                    locals: locals,
                    layout: false)
end
respond_with_chart(_data) click to toggle source

@return [String] Markup which frontend uses to build a graph

# File lib/integral/chart_renderer/base.rb, line 34
def respond_with_chart(_data)
  raise NotImplementedError
end
respond_with_no_data_available() click to toggle source

@return [String] Markup which informs users of no available data to build graph

# File lib/integral/chart_renderer/base.rb, line 77
def respond_with_no_data_available
  render_partial('no_data_available')
end