just_high_charts 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,14 @@
1
+ *.sw?
2
+ .DS_Store
3
+ coverage*
4
+ doc
5
+ rdoc
6
+ pkg
7
+ tmp
8
+ tags
9
+ rerun.txt
10
+ Gemfile.lock
11
+ .bundle
12
+ *.gem
13
+ .rvmrc
14
+ .ruby-version
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format=progress
3
+
@@ -0,0 +1,3 @@
1
+ # VERSION 0.0.1
2
+ * Mon Mar 10, 2014
3
+ 1. Initial release
@@ -0,0 +1 @@
1
+ 0.0.1
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in just_high_charts.gemspec
4
+ gemspec
5
+
6
+ group :test, :development do # This causes the plugins to NOT load
7
+ gem 'webrat', '~> 0.7'
8
+ gem 'rspec', '~> 2.0'
9
+ gem 'guard-rspec'
10
+ gem 'rb-fsevent', '~> 0.9.1'
11
+ end
@@ -0,0 +1,9 @@
1
+ # just_high_charts Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'rspec' do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+ end
9
+
@@ -0,0 +1,36 @@
1
+ # just_high_charts
2
+
3
+ Easily include HighCharts in your project with this gem, without Rails.
4
+
5
+ Extracted from the
6
+ [lazy_high_charts Rails gem](https://github.com/michelson/lazy_high_charts)
7
+ by Deshi Xiao and Miguel Michelson Martinez.
8
+
9
+ ## Installation
10
+
11
+ ### Installation with rubygems
12
+
13
+ To install it, you just need to add it to your Gemfile:
14
+
15
+ ```ruby
16
+ gem 'just_high_charts'
17
+ ```
18
+
19
+ then run
20
+
21
+ ```bash
22
+ bundle install
23
+ ```
24
+
25
+ to install it.
26
+
27
+ ## just_high_charts User Guide
28
+
29
+ TODO
30
+
31
+
32
+ ## Maintainers
33
+ * [Steven Clontz](https://github.com/StevenClontz)
34
+
35
+ ## License
36
+ Released under the MIT license.
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rspec/core/rake_task'
4
+ require 'bundler'
5
+ Bundler::GemHelper.install_tasks
6
+
7
+ desc 'Default: run unit specs.'
8
+ task :default => :spec
9
+
10
+ desc 'Test the just_high_charts plugin.'
11
+ RSpec::Core::RakeTask.new('spec') do |t|
12
+ t.pattern = FileList['spec/**/*_spec.rb']
13
+ end
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
3
+ version = File.read(File.expand_path("../GEM_VERSION", __FILE__)).strip
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "just_high_charts"
7
+ s.version = version
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ['Steven Clontz']
10
+ s.email = ['steven.clontz@gmail.com']
11
+ s.homepage = "https://github.com/StevenClontz/just_high_charts"
12
+ s.summary = <<-EOF
13
+ extraction of HighCharts object from LazyHighCharts
14
+ without Rails requirement
15
+ EOF
16
+ s.description = <<-EOF
17
+ just_high_charts simply provides a HighCharts object for use with
18
+ Highcharts.js
19
+ EOF
20
+
21
+ s.extra_rdoc_files = ["README.md", "CHANGELOG.md"]
22
+ s.rdoc_options = ["--charset=UTF-8"]
23
+
24
+ s.required_rubygems_version = ">= 1.3"
25
+
26
+ s.add_dependency "bundler", ">= 1.0"
27
+ s.add_dependency "hash-deep-merge"
28
+ s.add_dependency "activesupport"
29
+ s.add_dependency "actionview"
30
+
31
+ s.files = `git ls-files`.split("\n")
32
+ s.executables = `git ls-files`.split("\n").select { |f| f =~ /^bin/ }
33
+ s.require_path = 'lib'
34
+ end
@@ -0,0 +1,13 @@
1
+ require 'active_support/core_ext'
2
+ require 'action_view'
3
+
4
+ require File.join(File.dirname(__FILE__), *%w[just_high_charts core_ext string])
5
+ require File.join(File.dirname(__FILE__), *%w[just_high_charts options_key_filter])
6
+ require File.join(File.dirname(__FILE__), *%w[just_high_charts layout_helper])
7
+ require File.join(File.dirname(__FILE__), *%w[just_high_charts high_chart])
8
+
9
+ module JustHighCharts
10
+ def self.root
11
+ File.expand_path '../..', __FILE__
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ class String
2
+
3
+ def js_code true_or_false = true
4
+ @_lazy_high_charts_js_code = true_or_false
5
+ self
6
+ end
7
+
8
+ def js_code?
9
+ @_lazy_high_charts_js_code || false
10
+ end
11
+
12
+ end
@@ -0,0 +1,106 @@
1
+ module JustHighCharts
2
+ class HighChart
3
+ include LayoutHelper
4
+
5
+ SERIES_OPTIONS = %w(data index legendIndex name stack type xAxis yAxis)
6
+
7
+ attr_accessor :series_data, :options, :placeholder, :html_options
8
+ alias :canvas :placeholder
9
+ alias :canvas= :placeholder=
10
+
11
+ def initialize(canvas = nil, html_opts = {})
12
+
13
+ self.tap do |high_chart|
14
+ high_chart.series_data ||= []
15
+ high_chart.options ||= {}
16
+ high_chart.defaults_options
17
+ high_chart.html_options ||= html_opts
18
+ high_chart.canvas = (canvas ? canvas : random_canvas_id)
19
+ yield high_chart if block_given?
20
+ end
21
+ end
22
+
23
+ # title: legend: xAxis: yAxis: tooltip: credits: :plotOptions
24
+ def defaults_options
25
+ self.title({:text => nil})
26
+ self.legend({:layout => "vertical", :style => {}})
27
+ self.xAxis({})
28
+ self.yAxis({:title => {:text => nil}, :labels => {}})
29
+ self.tooltip({:enabled => true})
30
+ self.credits({:enabled => false})
31
+ self.plotOptions({:areaspline => {}})
32
+ self.chart({:defaultSeriesType => "line", :renderTo => nil})
33
+ self.subtitle({})
34
+ end
35
+
36
+
37
+ # Pass other methods through to the javascript high_chart object.
38
+ #
39
+ # For instance: <tt>high_chart.grid(:color => "#699")</tt>
40
+ def method_missing(meth, opts = {})
41
+ if meth.to_s == 'to_ary'
42
+ super
43
+ end
44
+
45
+ if meth.to_s.end_with? '!'
46
+ deep_merge_options meth[0..-2].to_sym, opts
47
+ else
48
+ merge_options meth, opts
49
+ end
50
+ end
51
+
52
+ # Add a simple series to the graph:
53
+ #
54
+ # data = [[0,5], [1,5], [2,5]]
55
+ # @high_chart.series :name=>'Updated', :data=>data
56
+ # @high_chart.series :name=>'Updated', :data=>[5, 1, 6, 1, 5, 4, 9]
57
+ def series(opts = {})
58
+ if not opts.empty?
59
+ @series_data << OptionsKeyFilter.filter(opts.merge(:name => opts[:name], :data => opts[:data]))
60
+ end
61
+ end
62
+
63
+ # Pre-processes and returns full set of options relevant to the chart. Identical to what happens in the high_charts
64
+ # view helper.
65
+ #
66
+ # @return [Hash] options JSON options hash
67
+ def full_options
68
+ options_collection = [generate_json_from_hash(OptionsKeyFilter.filter(self.options))]
69
+ options_collection << %|"series": [#{generate_json_from_array(self.data)}]|
70
+ <<-EOJS
71
+ { #{options_collection.join(', ')} }
72
+ EOJS
73
+ end
74
+
75
+ private
76
+
77
+ def random_canvas_id
78
+ canvas_id_length = 11
79
+ # Don't use SecureRandom.urlsafe_base64; it gives invalid characters.
80
+ ('a'..'z').to_a.shuffle.take(canvas_id_length).join
81
+ end
82
+
83
+ def series_options
84
+ @options.reject { |k, v| SERIES_OPTIONS.include?(k.to_s) == false }
85
+ end
86
+
87
+ def merge_options(name, opts)
88
+ @options.merge! name => opts
89
+ end
90
+
91
+ def deep_merge_options(name, opts)
92
+ @options.deep_merge! name => opts
93
+ end
94
+
95
+ def arguments_to_options(args)
96
+ if args.blank?
97
+ {:show => true}
98
+ elsif args.is_a? Array
99
+ args.first
100
+ else
101
+ args
102
+ end
103
+ end
104
+
105
+ end
106
+ end
@@ -0,0 +1,105 @@
1
+ # coding: utf-8
2
+
3
+ module JustHighCharts
4
+ module LayoutHelper
5
+ include ActionView::Helpers::TagHelper
6
+
7
+ def high_chart(placeholder, object, &block)
8
+ object.html_options.merge!({:id => placeholder})
9
+ object.options[:chart][:renderTo] = placeholder
10
+ high_graph(placeholder, object, &block).concat(content_tag("div", "", object.html_options))
11
+ end
12
+
13
+ def high_stock(placeholder, object, &block)
14
+ object.html_options.merge!({:id => placeholder})
15
+ object.options[:chart][:renderTo] = placeholder
16
+ high_graph_stock(placeholder, object, &block).concat(content_tag("div", "", object.html_options))
17
+ end
18
+
19
+ def high_graph(placeholder, object, &block)
20
+ build_html_output("Chart", placeholder, object, &block)
21
+ end
22
+
23
+ def high_graph_stock(placeholder, object, &block)
24
+ build_html_output("StockChart", placeholder, object, &block)
25
+ end
26
+
27
+ def build_html_output(type, placeholder, object, &block)
28
+ options_collection = [generate_json_from_hash(OptionsKeyFilter.filter(object.options))]
29
+ options_collection << %|"series": [#{generate_json_from_array(object.series_data)}]|
30
+
31
+ core_js =<<-EOJS
32
+ var options = { #{options_collection.join(',')} };
33
+ #{capture(&block) if block_given?}
34
+ window.chart_#{placeholder.underscore} = new Highcharts.#{type}(options);
35
+ EOJS
36
+
37
+ if defined?(request) && request.respond_to?(:xhr?) && request.xhr?
38
+ graph =<<-EOJS
39
+ <script type="text/javascript">
40
+ (function() {
41
+ #{core_js}
42
+ })()
43
+ </script>
44
+ EOJS
45
+ elsif defined?(Turbolinks) && request.headers["X-XHR-Referer"]
46
+ graph =<<-EOJS
47
+ <script type="text/javascript">
48
+ (function() {
49
+ var f = function(){
50
+ document.removeEventListener('page:load', f, true);
51
+ #{core_js}
52
+ };
53
+ document.addEventListener('page:load', f, true);
54
+ })()
55
+ </script>
56
+ EOJS
57
+ else
58
+ graph =<<-EOJS
59
+ <script type="text/javascript">
60
+ (function() {
61
+ var onload = window.onload;
62
+ window.onload = function(){
63
+ if (typeof onload == "function") onload();
64
+ #{core_js}
65
+ };
66
+ })()
67
+ </script>
68
+ EOJS
69
+ end
70
+
71
+ if defined?(raw)
72
+ return raw(graph)
73
+ else
74
+ return graph
75
+ end
76
+
77
+ end
78
+
79
+ private
80
+
81
+ def generate_json_from_hash hash
82
+ hash.each_pair.map do |key, value|
83
+ k = key.to_s.camelize.gsub!(/\b\w/) { $&.downcase }
84
+ %|"#{k}": #{generate_json_from_value value}|
85
+ end.flatten.join(',')
86
+ end
87
+
88
+ def generate_json_from_value value
89
+ if value.is_a? Hash
90
+ %|{ #{generate_json_from_hash value} }|
91
+ elsif value.is_a? Array
92
+ %|[ #{generate_json_from_array value} ]|
93
+ elsif value.respond_to?(:js_code) && value.js_code?
94
+ value
95
+ else
96
+ value.to_json
97
+ end
98
+ end
99
+
100
+ def generate_json_from_array array
101
+ array.map { |value| generate_json_from_value(value) }.join(",")
102
+ end
103
+
104
+ end
105
+ end
@@ -0,0 +1,39 @@
1
+ #
2
+ # A way to filter certain keys of data provided to the LazyHighCharts#series method and the LazyHighCharts#options
3
+ #
4
+ # Add methods or keys to the FILTER_MAP hash to have them applied to the options in a series
5
+ # In the FILTER_MAP, the hash keys are methods, and the values are arrays of the hash keys the filter should be
6
+ # applied to
7
+ #
8
+ # Be careful that it is OK to filter the hash keys you specify for every key of the options or series hash
9
+ #
10
+ module JustHighCharts
11
+ module OptionsKeyFilter
12
+ def self.milliseconds value
13
+ value * 1000
14
+ end
15
+
16
+ def self.date_to_js_code date
17
+ "Date.UTC(#{date.year}, #{date.month - 1}, #{date.day})".js_code
18
+ end
19
+
20
+ def self.filter options
21
+ new_options = options.map do |k, v|
22
+ if v.is_a? ::Hash
23
+ v = filter v
24
+ else
25
+ FILTER_MAP.each_pair do |method, matchers|
26
+ v = method.call(v) if matchers.include?(k)
27
+ end
28
+ end
29
+ [k, v]
30
+ end
31
+ Hash[new_options]
32
+ end
33
+
34
+ FILTER_MAP = {
35
+ method(:milliseconds) => [:pointInterval],
36
+ method(:date_to_js_code) => [:pointStart]
37
+ }
38
+ end
39
+ end
@@ -0,0 +1,159 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ Record = Struct.new(:frequency, :amplitude)
4
+
5
+ describe "HighChart" do
6
+ before(:each) do
7
+ @collection = [Record.new(1, 15), Record.new(2, 30), Record.new(4, 40)]
8
+ @data = [[1, 15], [2, 30], [4, 40]]
9
+
10
+ @placeholder = "placeholder"
11
+ @html_options = {:class => "stylin"}
12
+ @options = {:bars => {:show => true}}
13
+
14
+ @flot = JustHighCharts::HighChart.new(@placeholder, @html_options) { |chart| chart.options = @options }
15
+ end
16
+
17
+ # this is almost all flotomatic stuff
18
+ describe "initialization" do
19
+ it "should take an optional 'placeholder' argument" do
20
+ JustHighCharts::HighChart.new(@placeholder).placeholder.should == @placeholder
21
+ JustHighCharts::HighChart.new.placeholder.should_not == @placeholder
22
+ end
23
+
24
+ it "shouldn't generate a nil placeholder" do
25
+ JustHighCharts::HighChart.new.placeholder.should_not be_nil
26
+ end
27
+
28
+ it "should generate different placeholders for different charts" do
29
+ a_different_placeholder = JustHighCharts::HighChart.new.placeholder
30
+ JustHighCharts::HighChart.new.placeholder.should_not == a_different_placeholder
31
+ end
32
+
33
+ it "should take an optional html_options argument (defaulting to 300px height)" do
34
+ JustHighCharts::HighChart.new(@placeholder, @html_options).html_options.should == @html_options
35
+ end
36
+
37
+ it "should set options by default" do
38
+ JustHighCharts::HighChart.new.options.should == {
39
+ :title => {:text => nil},
40
+ :legend => {:layout => "vertical", :style => {}},
41
+ :xAxis => {},
42
+ :yAxis => {:title => {:text => nil}, :labels => {}},
43
+ :tooltip => {:enabled => true},
44
+ :credits => {:enabled => false},
45
+ :plotOptions => {:areaspline => {}},
46
+ :chart => {:defaultSeriesType => "line", :renderTo => nil},
47
+ :subtitle => {}}
48
+ end
49
+
50
+ it "should set data empty by default" do
51
+ JustHighCharts::HighChart.new.series_data.should == []
52
+ end
53
+
54
+ it "should take a block setting attributes" do
55
+ chart = JustHighCharts::HighChart.new { |f| f.series_data = @data; f.options = @options }
56
+ chart.series_data.should == @data
57
+ chart.options.should == @options
58
+ end
59
+
60
+ it "should take a block setting attributes" do
61
+ chart = JustHighCharts::HighChart.new { |f| f.options[:legend][:layout] = "horizontal" }
62
+ chart.options[:legend][:layout].should == "horizontal"
63
+ end
64
+
65
+ it "should take a block setting attributes" do
66
+ chart = JustHighCharts::HighChart.new { |f| f.options[:range_selector] = {}; f.options[:range_selector][:selected] = 1 }
67
+ chart.options[:range_selector][:selected].should == 1
68
+ end
69
+
70
+ it "should change a block data without overriding options" do
71
+ chart = JustHighCharts::HighChart.new('graph') do |f|
72
+ f.series(:name => 'John', :data => [3, 20])
73
+ f.series(:name => 'Jane', :data => [1, 3])
74
+ # without overriding
75
+ f.options[:chart][:defaultSeriesType] = "area"
76
+ f.options[:chart][:inverted] = true
77
+ f.options[:legend][:layout] = "horizontal"
78
+ f.options[:xAxis][:categories] = ["uno", "dos", "tres", "cuatro"]
79
+ end
80
+ chart.series_data.should == [{:name => "John", :data => [3, 20]}, {:name => "Jane", :data => [1, 3]}]
81
+ chart.options[:legend][:layout].should == "horizontal"
82
+ chart.options[:xAxis][:categories].should == ["uno", "dos", "tres", "cuatro"]
83
+ chart.options[:chart][:defaultSeriesType].should == "area"
84
+ chart.options[:chart][:inverted].should == true
85
+ end
86
+
87
+ it "should change a block data with overriding entire options" do
88
+ chart = JustHighCharts::HighChart.new('graph') do |f|
89
+ f.series(:name => 'John', :data => [3, 20])
90
+ f.series(:name => 'Jane', :data => [1, 3])
91
+ f.title({:text => nil})
92
+ # without overriding
93
+ f.xAxis(:categories => ["uno", "dos", "tres", "cuatro"], :labels => {:rotation => -45, :align => 'right'})
94
+ f.chart({:defaultSeriesType => "spline", :renderTo => "myRenderArea", :inverted => true})
95
+ end
96
+ chart.options[:xAxis][:categories].should == ["uno", "dos", "tres", "cuatro"]
97
+ chart.options[:xAxis][:labels][:rotation].should == -45
98
+ chart.options[:xAxis][:labels][:align].should == "right"
99
+ chart.options[:chart][:defaultSeriesType].should == "spline"
100
+ chart.options[:chart][:renderTo].should == "myRenderArea"
101
+ chart.options[:chart][:inverted].should == true
102
+ end
103
+
104
+ it "should have subtitles" do
105
+ chart = JustHighCharts::HighChart.new('graph') do |f|
106
+ f.series(:name => 'John', :data => [3, 20])
107
+ f.series(:name => 'Jane', :data => [1, 3])
108
+ f.title({:text => nil})
109
+ # without overriding
110
+ f.x_axis(:categories => ["uno", "dos", "tres", "cuatro"], :labels => {:rotation => -45, :align => 'right'})
111
+ f.chart({:defaultSeriesType => "spline", :renderTo => "myRenderArea", :inverted => true})
112
+ f.subtitle({:text => "Bar"})
113
+ end
114
+ chart.options[:subtitle][:text].should == "Bar"
115
+ end
116
+
117
+ it 'should override entire option by default when resetting it again' do
118
+ chart = JustHighCharts::HighChart.new('graph') do |f|
119
+ f.xAxis(categories: [3, 5, 7])
120
+ f.xAxis(title: {text: 'x title'})
121
+ end
122
+ chart.options[:xAxis][:categories].should == nil
123
+ chart.options[:xAxis][:title][:text].should == 'x title'
124
+ end
125
+
126
+ it 'should allow to build options step by step without overriding previously set values' do
127
+ chart = JustHighCharts::HighChart.new('graph') do |f|
128
+ f.xAxis!(categories: [3, 5, 7])
129
+ f.xAxis!(title: {text: 'x title'})
130
+ end
131
+ chart.options[:xAxis][:categories].should == [3, 5, 7]
132
+ chart.options[:xAxis][:title][:text].should == 'x title'
133
+ end
134
+
135
+ it 'should merge options and data into a full options hash' do
136
+ chart = JustHighCharts::HighChart.new('graph') do |f|
137
+ f.series(name: 'John', data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4])
138
+ f.series(name: 'Jane', data: [140.02, 41.63, 66.72, 113.21, 107.98, 105.71, 28.59, 114.23, 5.56, 93.71, 137.35, 93.16])
139
+ f.title({text: 'Example Data'})
140
+ f.xAxis(categories: %w(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec), labels: {rotation: -45, align: 'right'})
141
+ f.options[:tooltip][:formatter] = "function(){ return '<b>'+ this.point.name +'</b>: '+ Highcharts.numberFormat(this.percentage, 2) +' %'; }"
142
+ end
143
+
144
+ json = chart.full_options
145
+ json.should match /\"series\"/
146
+ json.should match /\"title\"/
147
+ json.should match /\"tooltip\": { \"enabled\": true,\"formatter\"/
148
+ end
149
+
150
+ end
151
+
152
+ describe '#to_ary' do
153
+ subject { JustHighCharts::HighChart.new }
154
+
155
+ it 'raises NoMethodError' do
156
+ expect { subject.to_ary }.to raise_error(NoMethodError)
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,141 @@
1
+ # coding: utf-8
2
+ require File.dirname(__FILE__) + '/spec_helper'
3
+
4
+ describe HighChartsHelper do
5
+ include JustHighCharts::LayoutHelper
6
+
7
+ before(:each) do
8
+ @class = "stylin"
9
+ @placeholder = "placeholder"
10
+ @chart = JustHighCharts::HighChart.new(@placeholder)
11
+ @data = "data"
12
+ @options = "options"
13
+ end
14
+
15
+ context "layout_helper" do
16
+ it "should return a div with an id of high_chart object" do
17
+ high_chart(@placeholder, @chart).should have_selector('div', :id => @placeholder)
18
+ end
19
+
20
+ it "should return a script" do
21
+ hc = JustHighCharts::HighChart.new("placeholder")
22
+ high_chart(hc.placeholder, hc).should have_selector('script')
23
+ end
24
+ end
25
+
26
+ context "high_chart_graph" do
27
+ describe "ready function" do
28
+ it "should be a javascript script" do
29
+ high_chart(@placeholder, @chart).should have_selector('script', :type => 'text/javascript')
30
+ high_chart(@placeholder, @chart).should match(/}\)\(\)/)
31
+ end
32
+
33
+ it "should assign to the onload event" do
34
+ high_chart(@placeholder, @chart).should include('window.onload = function(){')
35
+ end
36
+ it "should call any existing onload function" do
37
+ high_chart(@placeholder, @chart).should match(/onload = window.onload;/)
38
+ high_chart(@placeholder, @chart).should match(/if \(typeof onload == "function"\)\s*onload\(\)/)
39
+ end
40
+ end
41
+ describe "initialize HighChart" do
42
+ it "should set variables `chart` `options`" do
43
+ high_chart(@placeholder, @chart).should match(/var\s+options\s+=/)
44
+ high_chart(@placeholder, @chart).should match(/window.chart_placeholder\s=/)
45
+ end
46
+ it "should set Chart data" do
47
+ high_chart(@placeholder, @chart).should match(/window\.chart_placeholder\s=\snew\sHighcharts.Chart/)
48
+ end
49
+
50
+ it "should set chart renderTo" do
51
+ high_chart(@placeholder, @chart).should match(/"renderTo": "placeholder"/)
52
+ end
53
+
54
+ it "should set Chart Stock" do
55
+ high_stock(@placeholder, @chart).should match(/window\.chart_placeholder\s+=\s+new\s+Highcharts.StockChart/)
56
+ end
57
+ end
58
+
59
+ describe "HighChart Variable" do
60
+ it "should underscore chart_ variable" do
61
+ high_chart("place-holder", @chart).should match(/window.chart_place_holder\s=/)
62
+ high_chart("PlaceHolder", @chart).should match(/window.chart_place_holder\s=/)
63
+ end
64
+ end
65
+ end
66
+
67
+
68
+ it "should take a block setting attributes" do
69
+ chart = JustHighCharts::HighChart.new { |f|
70
+ f.options[:rangeSelector] = {:selected => 1};
71
+ f.series(:type => "spline",
72
+ :name => "Historias",
73
+ :pointInterval => (1.day.to_i * 1000),
74
+ :pointStart => (Time.now.to_i * 1000),
75
+ :data => [0, 1, 2, 3, 5, 6, 0, 7]
76
+ )
77
+ }
78
+ chart.options[:rangeSelector][:selected].should == 1
79
+ high_chart(@placeholder, chart).should match(/rangeSelector/)
80
+ high_chart(@placeholder, chart).should match(/xAxis/)
81
+ high_chart(@placeholder, chart).should match(/yAxis/)
82
+ high_chart(@placeholder, chart).should match(/series/)
83
+
84
+ end
85
+
86
+
87
+ it "should take a block setting attributes" do
88
+ chart = JustHighCharts::HighChart.new { |f|
89
+ f.others(:foo => "bar")
90
+ }
91
+ high_chart(@placeholder, chart).should match(/foo/)
92
+ end
93
+
94
+ it "should allow js code as attribute" do
95
+ chart = JustHighCharts::HighChart.new { |f|
96
+ f.options[:foo] = "function () { alert('hello') }".js_code
97
+ }
98
+
99
+ high_chart(@placeholder, chart).should match(/"foo": function \(\) { alert\('hello'\) }/)
100
+ end
101
+
102
+ it "should convert keys to proper format" do
103
+ chart = JustHighCharts::HighChart.new { |f|
104
+ f.options[:foo_bar] = {:bar_foo => "someattrib"}
105
+ }
106
+
107
+ high_chart(@placeholder, chart).should match(/fooBar/)
108
+ high_chart(@placeholder, chart).should match(/barFoo/)
109
+ end
110
+
111
+ # issue #62 .js_code setting ignored
112
+ # https://github.com/michelson/lazy_high_charts/issues/62
113
+ it "should allow js code in array && nest attributs" do
114
+ chart = JustHighCharts::HighChart.new { |f|
115
+ f.yAxis([{
116
+ :labels => {
117
+ :formatter => %|function() {return this.value + ' W';}|.js_code
118
+ }
119
+ }])
120
+ }
121
+ high_chart(@placeholder, chart).should match(/"formatter": function\(\) {return this.value \+ ' W';}/)
122
+ end
123
+
124
+ it "should support js_code in Individual data label for each point" do
125
+ chart = JustHighCharts::HighChart.new { |f|
126
+ f.series(
127
+ :data => [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, {
128
+ :dataLabels => {:enabled => true,
129
+ :align => 'left',
130
+ :x => 10,
131
+ :y => 4,
132
+ :style => {:fontWeight => 'bold'},
133
+ :formatter => "function() { return this.x; }".js_code
134
+ },
135
+ :y => 54.4}
136
+ ])
137
+ }
138
+ high_chart(@placeholder, chart).should match(/"formatter": function\(\) {\ return this.x;\ }/)
139
+ end
140
+
141
+ end
@@ -0,0 +1,28 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe JustHighCharts::OptionsKeyFilter do
4
+ it "should filter :pointInterval from seconds to milliseconds" do
5
+ hash = JustHighCharts::OptionsKeyFilter.filter(pointInterval: 1)
6
+ hash[:pointInterval].should == 1000
7
+ end
8
+
9
+ describe "filters :pointStart from a Date to a JavaScript compatible string" do
10
+ before(:each) do
11
+ hash = JustHighCharts::OptionsKeyFilter.filter(pointStart: Date.new(2012, 9, 13))
12
+ @value = hash[:pointStart]
13
+ end
14
+
15
+ it "should be the correct string" do
16
+ @value.should == "Date.UTC(2012, 8, 13)"
17
+ end
18
+
19
+ it "should be js_code" do
20
+ @value.js_code.should be_true
21
+ end
22
+ end
23
+
24
+ it "should filter keys recursively" do
25
+ hash = JustHighCharts::OptionsKeyFilter.filter({something: {another_thing: {pointInterval: 2}}})
26
+ hash[:something][:another_thing][:pointInterval].should == 2000
27
+ end
28
+ end
@@ -0,0 +1,22 @@
1
+ # coding: utf-8
2
+ require 'rubygems'
3
+ require 'bundler/setup'
4
+
5
+
6
+ require File.expand_path(File.join(File.dirname(__FILE__),
7
+ '../lib/just_high_charts'))
8
+ require File.expand_path(File.join(File.dirname(__FILE__),
9
+ '../lib/just_high_charts/layout_helper'))
10
+ require File.expand_path(File.join(File.dirname(__FILE__),
11
+ '../lib/just_high_charts/options_key_filter'))
12
+
13
+ require 'webrat'
14
+ require 'rspec'
15
+
16
+ RSpec.configure do |config|
17
+ config.include Webrat::Matchers
18
+ end
19
+
20
+ module HighChartsHelper
21
+ include ActionView::Helpers::TagHelper
22
+ end
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: just_high_charts
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Steven Clontz
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-03-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '1.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: hash-deep-merge
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: activesupport
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: actionview
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: ! " just_high_charts simply provides a HighCharts object for use with\n
79
+ \ Highcharts.js\n"
80
+ email:
81
+ - steven.clontz@gmail.com
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files:
85
+ - README.md
86
+ - CHANGELOG.md
87
+ files:
88
+ - .gitignore
89
+ - .rspec
90
+ - CHANGELOG.md
91
+ - GEM_VERSION
92
+ - Gemfile
93
+ - Guardfile
94
+ - README.md
95
+ - Rakefile
96
+ - just_high_charts.gemspec
97
+ - lib/just_high_charts.rb
98
+ - lib/just_high_charts/core_ext/string.rb
99
+ - lib/just_high_charts/high_chart.rb
100
+ - lib/just_high_charts/layout_helper.rb
101
+ - lib/just_high_charts/options_key_filter.rb
102
+ - spec/high_chart_spec.rb
103
+ - spec/just_high_charts_spec.rb
104
+ - spec/options_key_filter_spec.rb
105
+ - spec/spec_helper.rb
106
+ homepage: https://github.com/StevenClontz/just_high_charts
107
+ licenses: []
108
+ post_install_message:
109
+ rdoc_options:
110
+ - --charset=UTF-8
111
+ require_paths:
112
+ - lib
113
+ required_ruby_version: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
120
+ none: false
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '1.3'
125
+ requirements: []
126
+ rubyforge_project:
127
+ rubygems_version: 1.8.23
128
+ signing_key:
129
+ specification_version: 3
130
+ summary: extraction of HighCharts object from LazyHighCharts without Rails requirement
131
+ test_files: []