module NeqaHighCharts::ViewsHelper

Public Instance Methods

high_chart(div_id, object, div_html_options = {}) click to toggle source
# File lib/neqa_high_charts/views_helper.rb, line 3
    def high_chart(div_id, object, div_html_options = {})
      div_html_options = {width: "100%", height: "100%"}.merge(div_html_options)
      div_style = generate_div_style_from_hash div_html_options
      div_el =<<-DIV
        <div id="#{div_id}" style="#{div_style}"></div>
      DIV
      graph =<<-HCJS
        <script type="text/javascript">
          $(function () {
            $("##{div_id}").highcharts({
      #{option_generate(object)}
            });
          });
        </script>
      HCJS

      div_el + graph
    end
option_generate(object) click to toggle source
# File lib/neqa_high_charts/views_helper.rb, line 22
    def option_generate(object)
      options = ''
      object.instance_variables.each do |v|
        v_name = v.to_s.delete("@")
        v_value = object.instance_variable_get(v)
        if v_value.is_a? Hash
          j_value = '{' + generate_json_from_hash(v_value) + '}'
        else
          j_value = '[' + generate_json_from_array(v_value) + ']'
        end
        option =<<-OPTION
        #{v_name}: #{j_value},
        OPTION
        options += option
      end
      options
    end

Private Instance Methods

generate_div_style_from_hash(hash) click to toggle source
# File lib/neqa_high_charts/views_helper.rb, line 65
def generate_div_style_from_hash hash
  style_str = ""
  hash.each_pair do |key, val|
    if ["width", "height"].include? key.to_s
      if val.is_a? Integer
        style_str += "#{key}: #{val}px;"
        warn "[deprecated] old high_chart function parameters set: high_chart('div-id', hc-object, width: 400, height: 400) will be deprecated, please set in new way: high_chart('div-id', hc-object, width: '400px', height: '400px')"
      else
        style_str += "#{key}: #{val};"
      end
    else
      style_str += "#{key}: #{val};"
    end
  end
  style_str
end
generate_json_from_array(array) click to toggle source
# File lib/neqa_high_charts/views_helper.rb, line 61
def generate_json_from_array array
  array.map { |value| generate_json_from_value(value) }.join(",")
end
generate_json_from_hash(hash) click to toggle source
# File lib/neqa_high_charts/views_helper.rb, line 42
def generate_json_from_hash hash
  hash.each_pair.map do |key, value|
    k = key.to_s.camelize.gsub!(/\b\w/) { $&.downcase }
    %|#{k}: #{generate_json_from_value value}|
  end.flatten.join(',')
end
generate_json_from_value(value) click to toggle source
# File lib/neqa_high_charts/views_helper.rb, line 49
def generate_json_from_value value
  if value.is_a? Hash
    %|{ #{generate_json_from_hash value} }|
  elsif value.is_a? Array
    %|[ #{generate_json_from_array value} ]|
  elsif value.is_a?(String) && (value.include?('function(') || value.include?('Highcharts.'))
    value
  else
    value.to_json
  end
end