lazy_high_charts 1.5.4 → 1.5.5
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -2
- data/GEM_VERSION +1 -1
- data/Gemfile +1 -1
- data/README.md +47 -10
- data/lazy_high_charts.gemspec +1 -1
- data/lib/lazy_high_charts.rb +1 -0
- data/lib/lazy_high_charts/high_chart.rb +8 -7
- data/lib/lazy_high_charts/high_chart_globals.rb +29 -0
- data/lib/lazy_high_charts/layout_helper.rb +75 -44
- data/lib/lazy_high_charts/options_key_filter.rb +29 -26
- data/spec/high_chart_globals_spec.rb +51 -0
- data/spec/high_chart_spec.rb +32 -31
- data/spec/lazy_high_charts_spec.rb +59 -25
- data/spec/options_key_filter_spec.rb +5 -5
- data/spec/spec_helper.rb +1 -1
- metadata +16 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5bbd30727f041d725287ddc99426ca728f86c1f
|
4
|
+
data.tar.gz: f352a46256674acb86897ea76e04033a5d2fa035
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1b2c1ef228afe7aef43fff3839f1edf99d11b4a07f9f7876e67367270b4d4169ed79d543ba1923caa2842dabb53a498b4e5e47a40e104fec68c013226ac0ee1
|
7
|
+
data.tar.gz: d446f3a1b9dcb9414210ebb9dbbde9605bde6d46774051d850f23f4e5288b94894349a55786c00ce307ffa7fc4aed0d7eb357885ef76b2f3eeda53fd4fd6c040
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
# VERSION 1.5.5
|
2
|
+
* Mon Oct 19, 2015
|
3
|
+
1. Support for HighChart global settings.
|
4
|
+
[#149](https://github.com/michelson/lazy_high_charts/issues/149)
|
5
|
+
2. Minor code refactorings.
|
6
|
+
|
1
7
|
# VERSION 1.5.4
|
2
8
|
* Fri May 21
|
3
9
|
1. Include ActionView::Helpers::TagHelper to the layout helper to avoid method conflict in object.
|
@@ -5,14 +11,14 @@
|
|
5
11
|
# VERSION 1.5.3
|
6
12
|
* Fri Apr 18
|
7
13
|
1. update HighChart js lib to latest.
|
8
|
-
|
14
|
+
|
9
15
|
# VERSION 1.5.2
|
10
16
|
* Sun Mar 11, 2014
|
11
17
|
1. Merge some requirement tweaks to use gem in NON-Rails contexts
|
12
18
|
|
13
19
|
# VERSION 1.5.1
|
14
20
|
* Sun Dec 22, 2013
|
15
|
-
1. Share highcharts:update rake task for gem and rails host app
|
21
|
+
1. Share highcharts:update rake task for gem and rails host app
|
16
22
|
|
17
23
|
# VERSION 1.5.0
|
18
24
|
* Sun Jul 21, 2013
|
data/GEM_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.5.
|
1
|
+
1.5.5
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# LazyHighCharts
|
2
2
|
|
3
|
+
[](https://gitter.im/michelson/lazy_high_charts?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
4
|
+
|
3
5
|
This gem provides a simple and extremely flexible way to use HighCharts from ruby code.
|
4
6
|
Tested on Ruby on Rails, Sinatra and Nanoc, but it should work with others too.
|
5
7
|
|
@@ -40,6 +42,19 @@ then run
|
|
40
42
|
bundle install
|
41
43
|
```
|
42
44
|
|
45
|
+
and add this in the application.js
|
46
|
+
|
47
|
+
```js
|
48
|
+
//= require jquery
|
49
|
+
//= require jquery_ujs
|
50
|
+
//= require_tree .
|
51
|
+
//= require turbolinks
|
52
|
+
|
53
|
+
//= require highcharts/highcharts
|
54
|
+
//= require highcharts/highcharts-more
|
55
|
+
//= require highcharts/highstock
|
56
|
+
```
|
57
|
+
|
43
58
|
to install it.
|
44
59
|
|
45
60
|
## Usage:
|
@@ -47,26 +62,48 @@ to install it.
|
|
47
62
|
### Controller code:
|
48
63
|
```ruby
|
49
64
|
@chart = LazyHighCharts::HighChart.new('graph') do |f|
|
50
|
-
f.title(:
|
51
|
-
f.xAxis(:
|
52
|
-
f.series(:
|
53
|
-
f.series(:
|
65
|
+
f.title(text: "Population vs GDP For 5 Big Countries [2009]")
|
66
|
+
f.xAxis(categories: ["United States", "Japan", "China", "Germany", "France"])
|
67
|
+
f.series(name: "GDP in Billions", yAxis: 0, data: [14119, 5068, 4985, 3339, 2656])
|
68
|
+
f.series(name: "Population in Millions", yAxis: 1, data: [310, 127, 1340, 81, 65])
|
54
69
|
|
55
70
|
f.yAxis [
|
56
|
-
{:
|
57
|
-
{:
|
71
|
+
{title: {text: "GDP in Billions", margin: 70} },
|
72
|
+
{title: {text: "Population in Millions"}, opposite: true},
|
58
73
|
]
|
59
74
|
|
60
|
-
f.legend(:
|
61
|
-
f.chart({:
|
75
|
+
f.legend(align: 'right', verticalAlign: 'top', y: 75, x: -50, layout: 'vertical')
|
76
|
+
f.chart({defaultSeriesType: "column"})
|
77
|
+
end
|
78
|
+
|
79
|
+
@chart_globals = LazyHighCharts::HighChartGlobals.new do |f|
|
80
|
+
f.global(useUTC: false)
|
81
|
+
f.chart(
|
82
|
+
backgroundColor: {
|
83
|
+
linearGradient: [0, 0, 500, 500],
|
84
|
+
stops: [
|
85
|
+
[0, "rgb(255, 255, 255)"],
|
86
|
+
[1, "rgb(240, 240, 255)"]
|
87
|
+
]
|
88
|
+
},
|
89
|
+
borderWidth: 2,
|
90
|
+
plotBackgroundColor: "rgba(255, 255, 255, .9)",
|
91
|
+
plotShadow: true,
|
92
|
+
plotBorderWidth: 1
|
93
|
+
)
|
94
|
+
f.lang(thousandsSep: ",")
|
95
|
+
f.colors(["#90ed7d", "#f7a35c", "#8085e9", "#f15c80", "#e4d354"])
|
62
96
|
end
|
63
97
|
```
|
64
98
|
|
65
99
|
### View Helpers:
|
66
100
|
```ruby
|
101
|
+
<%= high_chart_globals(@chart_globals) %>
|
67
102
|
<%= high_chart("some_id", @chart) %>
|
68
103
|
```
|
69
104
|
|
105
|
+
`high_chart_globals` is optional. Use it to set the global options of all charts that are currently displayed on the page. More info [here](http://api.highcharts.com/highcharts#global).
|
106
|
+
|
70
107
|
###Demo projects:
|
71
108
|
|
72
109
|
[Nanoc App](spec/dummy_nanoc/README.md)
|
@@ -76,7 +113,7 @@ end
|
|
76
113
|
[Sinatra App](spec/dummy_sinatra/README.md)
|
77
114
|
|
78
115
|
|
79
|
-
### Update to latest js library.
|
116
|
+
### Update to latest js library. Additional command line
|
80
117
|
|
81
118
|
To update to the current highcharts.js directly from http://code.highcharts.com/", you can always run
|
82
119
|
|
@@ -97,7 +134,7 @@ We're open to any contribution. It has to be tested properly though.
|
|
97
134
|
* Test your changes. We won't accept any untested contributions (except if they're not testable).
|
98
135
|
* Create an [issue](https://github.com/michelson/lazy_high_charts/issues) with a link to your commits.
|
99
136
|
|
100
|
-
Thanks for all [
|
137
|
+
Thanks for all [contributors](https://github.com/michelson/lazy_high_charts/contributors)
|
101
138
|
|
102
139
|
## Maintainers
|
103
140
|
* Deshi Xiao [github/xiaods](https://github.com/xiaods)
|
data/lazy_high_charts.gemspec
CHANGED
data/lib/lazy_high_charts.rb
CHANGED
@@ -5,6 +5,7 @@ require File.join(File.dirname(__FILE__), *%w[lazy_high_charts core_ext string])
|
|
5
5
|
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts options_key_filter])
|
6
6
|
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts layout_helper])
|
7
7
|
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts high_chart])
|
8
|
+
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts high_chart_globals])
|
8
9
|
if defined?(::Rails::Railtie)
|
9
10
|
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts railtie])
|
10
11
|
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts engine]) if ::Rails.version.to_s >= '3.1'
|
@@ -34,7 +34,6 @@ module LazyHighCharts
|
|
34
34
|
self.subtitle({})
|
35
35
|
end
|
36
36
|
|
37
|
-
|
38
37
|
# Pass other methods through to the javascript high_chart object.
|
39
38
|
#
|
40
39
|
# For instance: <tt>high_chart.grid(:color => "#699")</tt>
|
@@ -66,11 +65,13 @@ module LazyHighCharts
|
|
66
65
|
#
|
67
66
|
# @return [Hash] options JSON options hash
|
68
67
|
def full_options
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
68
|
+
options_collection_as_string self
|
69
|
+
end
|
70
|
+
|
71
|
+
def to_json
|
72
|
+
data = self.options.clone
|
73
|
+
data[:series] = self.series_data.clone
|
74
|
+
data
|
74
75
|
end
|
75
76
|
|
76
77
|
private
|
@@ -82,7 +83,7 @@ module LazyHighCharts
|
|
82
83
|
end
|
83
84
|
|
84
85
|
def series_options
|
85
|
-
@options.reject { |k,
|
86
|
+
@options.reject { |k, _| SERIES_OPTIONS.include?(k.to_s) == false }
|
86
87
|
end
|
87
88
|
|
88
89
|
def merge_options(name, opts)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module LazyHighCharts
|
2
|
+
class HighChartGlobals
|
3
|
+
include LayoutHelper
|
4
|
+
|
5
|
+
attr_accessor :options
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
self.tap do |chart_globals|
|
9
|
+
chart_globals.options ||= {}
|
10
|
+
yield chart_globals if block_given?
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# Pass other methods through to the high_chart_globals object.
|
15
|
+
#
|
16
|
+
# For instance: <tt>high_chart_globals.global(:useUTC => false)</tt>
|
17
|
+
def method_missing(meth, opts = {})
|
18
|
+
if meth.to_s == 'to_ary'
|
19
|
+
super
|
20
|
+
end
|
21
|
+
merge_options meth, opts
|
22
|
+
end
|
23
|
+
|
24
|
+
def merge_options(name, opts)
|
25
|
+
@options.merge! name => opts
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -16,6 +16,10 @@ module LazyHighCharts
|
|
16
16
|
high_graph_stock(placeholder, object, &block).concat(content_tag("div", "", object.html_options))
|
17
17
|
end
|
18
18
|
|
19
|
+
def high_chart_globals(object)
|
20
|
+
build_globals_html_output(object)
|
21
|
+
end
|
22
|
+
|
19
23
|
def high_graph(placeholder, object, &block)
|
20
24
|
build_html_output("Chart", placeholder, object, &block)
|
21
25
|
end
|
@@ -24,59 +28,27 @@ module LazyHighCharts
|
|
24
28
|
build_html_output("StockChart", placeholder, object, &block)
|
25
29
|
end
|
26
30
|
|
27
|
-
|
28
|
-
options_collection = [generate_json_from_hash(OptionsKeyFilter.filter(object.options))]
|
29
|
-
options_collection << %|"series": [#{generate_json_from_array(object.series_data)}]|
|
31
|
+
private
|
30
32
|
|
33
|
+
def build_html_output(type, placeholder, object, &block)
|
31
34
|
core_js =<<-EOJS
|
32
|
-
var options =
|
35
|
+
var options = #{options_collection_as_string(object)};
|
33
36
|
#{capture(&block) if block_given?}
|
34
37
|
window.chart_#{placeholder.underscore} = new Highcharts.#{type}(options);
|
35
38
|
EOJS
|
36
39
|
|
37
|
-
|
38
|
-
|
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
|
40
|
+
encapsulate_js core_js
|
41
|
+
end
|
70
42
|
|
71
|
-
|
72
|
-
|
73
|
-
else
|
74
|
-
return graph
|
75
|
-
end
|
43
|
+
def build_globals_html_output(object)
|
44
|
+
options_collection = [generate_json_from_hash(OptionsKeyFilter.filter(object.options))]
|
76
45
|
|
77
|
-
|
46
|
+
core_js =<<-EOJS
|
47
|
+
Highcharts.setOptions({ #{options_collection.join(',')} });
|
48
|
+
EOJS
|
78
49
|
|
79
|
-
|
50
|
+
encapsulate_js core_js
|
51
|
+
end
|
80
52
|
|
81
53
|
def generate_json_from_hash hash
|
82
54
|
hash.each_pair.map do |key, value|
|
@@ -101,6 +73,65 @@ module LazyHighCharts
|
|
101
73
|
array.map { |value| generate_json_from_value(value) }.join(",")
|
102
74
|
end
|
103
75
|
|
76
|
+
def request_is_xhr?
|
77
|
+
defined?(request) && request.respond_to?(:xhr?) && request.xhr?
|
78
|
+
end
|
79
|
+
|
80
|
+
def request_is_referrer?
|
81
|
+
defined?(request) && request.respond_to?(:headers) && request.headers["X-XHR-Referer"]
|
82
|
+
end
|
83
|
+
|
84
|
+
def options_collection_as_string object
|
85
|
+
options_collection = [generate_json_from_hash(OptionsKeyFilter.filter(object.options))]
|
86
|
+
options_collection << %|"series": [#{generate_json_from_array(object.series_data)}]|
|
87
|
+
"{ #{options_collection.join(',')} }"
|
88
|
+
end
|
89
|
+
|
90
|
+
def encapsulate_js(core_js)
|
91
|
+
if request_is_xhr?
|
92
|
+
js_output = "#{js_start} #{core_js} #{js_end}"
|
93
|
+
elsif defined?(Turbolinks) && request_is_referrer?
|
94
|
+
js_output =<<-EOJS
|
95
|
+
#{js_start}
|
96
|
+
var f = function(){
|
97
|
+
document.removeEventListener('page:load', f, true);
|
98
|
+
#{core_js}
|
99
|
+
};
|
100
|
+
document.addEventListener('page:load', f, true);
|
101
|
+
#{js_end}
|
102
|
+
EOJS
|
103
|
+
else
|
104
|
+
js_output =<<-EOJS
|
105
|
+
#{js_start}
|
106
|
+
var onload = window.onload;
|
107
|
+
window.onload = function(){
|
108
|
+
if (typeof onload == "function") onload();
|
109
|
+
#{core_js}
|
110
|
+
};
|
111
|
+
#{js_end}
|
112
|
+
EOJS
|
113
|
+
end
|
114
|
+
|
115
|
+
if defined?(raw)
|
116
|
+
return raw(js_output)
|
117
|
+
else
|
118
|
+
return js_output
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def js_start
|
123
|
+
<<-EOJS
|
124
|
+
<script type="text/javascript">
|
125
|
+
(function() {
|
126
|
+
EOJS
|
127
|
+
end
|
128
|
+
|
129
|
+
def js_end
|
130
|
+
<<-EOJS
|
131
|
+
})()
|
132
|
+
</script>
|
133
|
+
EOJS
|
134
|
+
end
|
104
135
|
end
|
105
136
|
end
|
106
137
|
|
@@ -1,39 +1,42 @@
|
|
1
|
-
#
|
2
1
|
# A way to filter certain keys of data provided to the LazyHighCharts#series method and the LazyHighCharts#options
|
3
2
|
#
|
4
|
-
# Add
|
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
|
3
|
+
# Add keys and methods to the FILTER_MAP hash to have them applied to the options in a series
|
7
4
|
#
|
8
5
|
# Be careful that it is OK to filter the hash keys you specify for every key of the options or series hash
|
9
6
|
#
|
10
7
|
module LazyHighCharts
|
11
8
|
module OptionsKeyFilter
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
def self.date_to_js_code date
|
17
|
-
"Date.UTC(#{date.year}, #{date.month - 1}, #{date.day})".js_code
|
18
|
-
end
|
9
|
+
FILTER_MAP = {
|
10
|
+
:pointInterval => [:milliseconds],
|
11
|
+
:pointStart => [:date_to_js_code]
|
12
|
+
}
|
19
13
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
14
|
+
class << self
|
15
|
+
def filter options
|
16
|
+
{}.tap do |hash|
|
17
|
+
options.each do |key, value|
|
18
|
+
if value.is_a?(::Hash)
|
19
|
+
hash[key] = filter(value)
|
20
|
+
else
|
21
|
+
hash[key] = value
|
22
|
+
methods = Array(FILTER_MAP[key])
|
23
|
+
methods.each do |method_name|
|
24
|
+
hash[key] = send(method_name, hash[key])
|
25
|
+
end
|
26
|
+
end
|
27
27
|
end
|
28
28
|
end
|
29
|
-
[k, v]
|
30
29
|
end
|
31
|
-
Hash[new_options]
|
32
|
-
end
|
33
30
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
31
|
+
private
|
32
|
+
|
33
|
+
def milliseconds value
|
34
|
+
value * 1_000
|
35
|
+
end
|
36
|
+
|
37
|
+
def date_to_js_code date
|
38
|
+
"Date.UTC(#{date.year}, #{date.month - 1}, #{date.day})".js_code
|
39
|
+
end
|
40
|
+
end
|
38
41
|
end
|
39
|
-
end
|
42
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe "HighChartGlobals" do
|
4
|
+
before(:each) do
|
5
|
+
@chart_globals = LazyHighCharts::HighChartGlobals.new do |chart|
|
6
|
+
chart.global( useUTC: false )
|
7
|
+
chart.chart(
|
8
|
+
backgroundColor: {
|
9
|
+
linearGradient: [0, 0, 500, 500],
|
10
|
+
stops: [
|
11
|
+
[0, "rgb(255, 255, 255)"],
|
12
|
+
[1, "rgb(240, 240, 255)"]
|
13
|
+
]
|
14
|
+
},
|
15
|
+
borderWidth: 2,
|
16
|
+
plotBackgroundColor: "rgba(255, 255, 255, .9)",
|
17
|
+
plotShadow: true,
|
18
|
+
plotBorderWidth: 1
|
19
|
+
)
|
20
|
+
chart.lang(
|
21
|
+
thousandsSep: ","
|
22
|
+
)
|
23
|
+
chart.colors([
|
24
|
+
"#90ed7d", "#f7a35c", "#8085e9", "#f15c80", "#e4d354"
|
25
|
+
])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# this is almost all flotomatic stuff
|
30
|
+
describe "initialization" do
|
31
|
+
|
32
|
+
it "should set options hash by default" do
|
33
|
+
@chart_globals.options.is_a?(Hash).should == true
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should take a block and set attributes" do
|
37
|
+
@chart_globals.options[:lang][:thousandsSep].should == ","
|
38
|
+
@chart_globals.options[:global][:useUTC].should == false
|
39
|
+
@chart_globals.options[:chart][:backgroundColor][:linearGradient].should == [0, 0, 500, 500]
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should override options" do
|
43
|
+
chart = LazyHighCharts::HighChartGlobals.new
|
44
|
+
chart.global({ useUTC: true })
|
45
|
+
chart.options[:global][:useUTC].should == true
|
46
|
+
chart.global({ useUTC: false })
|
47
|
+
chart.options[:global][:useUTC].should == false
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
data/spec/high_chart_spec.rb
CHANGED
@@ -17,25 +17,25 @@ describe "HighChart" do
|
|
17
17
|
# this is almost all flotomatic stuff
|
18
18
|
describe "initialization" do
|
19
19
|
it "should take an optional 'placeholder' argument" do
|
20
|
-
LazyHighCharts::HighChart.new(@placeholder).placeholder.
|
21
|
-
LazyHighCharts::HighChart.new.placeholder.
|
20
|
+
expect(LazyHighCharts::HighChart.new(@placeholder).placeholder).to eq(@placeholder)
|
21
|
+
expect(LazyHighCharts::HighChart.new.placeholder).not_to eq(@placeholder)
|
22
22
|
end
|
23
23
|
|
24
24
|
it "shouldn't generate a nil placeholder" do
|
25
|
-
LazyHighCharts::HighChart.new.placeholder.
|
25
|
+
expect(LazyHighCharts::HighChart.new.placeholder).not_to be_nil
|
26
26
|
end
|
27
27
|
|
28
28
|
it "should generate different placeholders for different charts" do
|
29
29
|
a_different_placeholder = LazyHighCharts::HighChart.new.placeholder
|
30
|
-
LazyHighCharts::HighChart.new.placeholder.
|
30
|
+
expect(LazyHighCharts::HighChart.new.placeholder).not_to eq(a_different_placeholder)
|
31
31
|
end
|
32
32
|
|
33
33
|
it "should take an optional html_options argument (defaulting to 300px height)" do
|
34
|
-
LazyHighCharts::HighChart.new(@placeholder, @html_options).html_options.
|
34
|
+
expect(LazyHighCharts::HighChart.new(@placeholder, @html_options).html_options).to eq(@html_options)
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should set options by default" do
|
38
|
-
LazyHighCharts::HighChart.new.options.
|
38
|
+
expect(LazyHighCharts::HighChart.new.options).to eq({
|
39
39
|
:title => {:text => nil},
|
40
40
|
:legend => {:layout => "vertical", :style => {}},
|
41
41
|
:xAxis => {},
|
@@ -44,27 +44,27 @@ describe "HighChart" do
|
|
44
44
|
:credits => {:enabled => false},
|
45
45
|
:plotOptions => {:areaspline => {}},
|
46
46
|
:chart => {:defaultSeriesType => "line", :renderTo => nil},
|
47
|
-
:subtitle => {}}
|
47
|
+
:subtitle => {}})
|
48
48
|
end
|
49
49
|
|
50
50
|
it "should set data empty by default" do
|
51
|
-
LazyHighCharts::HighChart.new.series_data.
|
51
|
+
expect(LazyHighCharts::HighChart.new.series_data).to eq([])
|
52
52
|
end
|
53
53
|
|
54
54
|
it "should take a block setting attributes" do
|
55
55
|
chart = LazyHighCharts::HighChart.new { |f| f.series_data = @data; f.options = @options }
|
56
|
-
chart.series_data.
|
57
|
-
chart.options.
|
56
|
+
expect(chart.series_data).to eq(@data)
|
57
|
+
expect(chart.options).to eq(@options)
|
58
58
|
end
|
59
59
|
|
60
60
|
it "should take a block setting attributes" do
|
61
61
|
chart = LazyHighCharts::HighChart.new { |f| f.options[:legend][:layout] = "horizontal" }
|
62
|
-
chart.options[:legend][:layout].
|
62
|
+
expect(chart.options[:legend][:layout]).to eq("horizontal")
|
63
63
|
end
|
64
64
|
|
65
65
|
it "should take a block setting attributes" do
|
66
66
|
chart = LazyHighCharts::HighChart.new { |f| f.options[:range_selector] = {}; f.options[:range_selector][:selected] = 1 }
|
67
|
-
chart.options[:range_selector][:selected].
|
67
|
+
expect(chart.options[:range_selector][:selected]).to eq(1)
|
68
68
|
end
|
69
69
|
|
70
70
|
it "should change a block data without overriding options" do
|
@@ -77,11 +77,11 @@ describe "HighChart" do
|
|
77
77
|
f.options[:legend][:layout] = "horizontal"
|
78
78
|
f.options[:xAxis][:categories] = ["uno", "dos", "tres", "cuatro"]
|
79
79
|
end
|
80
|
-
chart.series_data.
|
81
|
-
chart.options[:legend][:layout].
|
82
|
-
chart.options[:xAxis][:categories].
|
83
|
-
chart.options[:chart][:defaultSeriesType].
|
84
|
-
chart.options[:chart][:inverted].
|
80
|
+
expect(chart.series_data).to eq([{:name => "John", :data => [3, 20]}, {:name => "Jane", :data => [1, 3]}])
|
81
|
+
expect(chart.options[:legend][:layout]).to eq("horizontal")
|
82
|
+
expect(chart.options[:xAxis][:categories]).to eq(["uno", "dos", "tres", "cuatro"])
|
83
|
+
expect(chart.options[:chart][:defaultSeriesType]).to eq("area")
|
84
|
+
expect(chart.options[:chart][:inverted]).to eq(true)
|
85
85
|
end
|
86
86
|
|
87
87
|
it "should change a block data with overriding entire options" do
|
@@ -93,12 +93,12 @@ describe "HighChart" do
|
|
93
93
|
f.xAxis(:categories => ["uno", "dos", "tres", "cuatro"], :labels => {:rotation => -45, :align => 'right'})
|
94
94
|
f.chart({:defaultSeriesType => "spline", :renderTo => "myRenderArea", :inverted => true})
|
95
95
|
end
|
96
|
-
chart.options[:xAxis][:categories].
|
97
|
-
chart.options[:xAxis][:labels][:rotation].
|
98
|
-
chart.options[:xAxis][:labels][:align].
|
99
|
-
chart.options[:chart][:defaultSeriesType].
|
100
|
-
chart.options[:chart][:renderTo].
|
101
|
-
chart.options[:chart][:inverted].
|
96
|
+
expect(chart.options[:xAxis][:categories]).to eq(["uno", "dos", "tres", "cuatro"])
|
97
|
+
expect(chart.options[:xAxis][:labels][:rotation]).to eq(-45)
|
98
|
+
expect(chart.options[:xAxis][:labels][:align]).to eq("right")
|
99
|
+
expect(chart.options[:chart][:defaultSeriesType]).to eq("spline")
|
100
|
+
expect(chart.options[:chart][:renderTo]).to eq("myRenderArea")
|
101
|
+
expect(chart.options[:chart][:inverted]).to eq(true)
|
102
102
|
end
|
103
103
|
|
104
104
|
it "should have subtitles" do
|
@@ -111,7 +111,7 @@ describe "HighChart" do
|
|
111
111
|
f.chart({:defaultSeriesType => "spline", :renderTo => "myRenderArea", :inverted => true})
|
112
112
|
f.subtitle({:text => "Bar"})
|
113
113
|
end
|
114
|
-
chart.options[:subtitle][:text].
|
114
|
+
expect(chart.options[:subtitle][:text]).to eq("Bar")
|
115
115
|
end
|
116
116
|
|
117
117
|
it 'should override entire option by default when resetting it again' do
|
@@ -119,8 +119,8 @@ describe "HighChart" do
|
|
119
119
|
f.xAxis(categories: [3, 5, 7])
|
120
120
|
f.xAxis(title: {text: 'x title'})
|
121
121
|
end
|
122
|
-
chart.options[:xAxis][:categories].
|
123
|
-
chart.options[:xAxis][:title][:text].
|
122
|
+
expect(chart.options[:xAxis][:categories]).to eq(nil)
|
123
|
+
expect(chart.options[:xAxis][:title][:text]).to eq('x title')
|
124
124
|
end
|
125
125
|
|
126
126
|
it 'should allow to build options step by step without overriding previously set values' do
|
@@ -128,8 +128,8 @@ describe "HighChart" do
|
|
128
128
|
f.xAxis!(categories: [3, 5, 7])
|
129
129
|
f.xAxis!(title: {text: 'x title'})
|
130
130
|
end
|
131
|
-
chart.options[:xAxis][:categories].
|
132
|
-
chart.options[:xAxis][:title][:text].
|
131
|
+
expect(chart.options[:xAxis][:categories]).to eq([3, 5, 7])
|
132
|
+
expect(chart.options[:xAxis][:title][:text]).to eq('x title')
|
133
133
|
end
|
134
134
|
|
135
135
|
it 'should merge options and data into a full options hash' do
|
@@ -142,9 +142,10 @@ describe "HighChart" do
|
|
142
142
|
end
|
143
143
|
|
144
144
|
json = chart.full_options
|
145
|
-
json.
|
146
|
-
json.
|
147
|
-
json.
|
145
|
+
expect(json).to match /\"series\"/
|
146
|
+
expect(json).to match /\"title\"/
|
147
|
+
expect(json).to match /\"tooltip\": { \"enabled\": true,\"formatter\"/
|
148
|
+
expect(json).to match /\"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 \]/
|
148
149
|
end
|
149
150
|
|
150
151
|
end
|
@@ -10,56 +10,90 @@ describe HighChartsHelper do
|
|
10
10
|
@chart = LazyHighCharts::HighChart.new(@placeholder)
|
11
11
|
@data = "data"
|
12
12
|
@options = "options"
|
13
|
+
@chart_globals = LazyHighCharts::HighChartGlobals.new do |chart|
|
14
|
+
chart.global({ useUTC: false })
|
15
|
+
chart.chart({
|
16
|
+
backgroundColor: {
|
17
|
+
linearGradient: [0, 0, 500, 500],
|
18
|
+
stops: [
|
19
|
+
[0, "rgb(255, 255, 255)"],
|
20
|
+
[1, "rgb(240, 240, 255)"]
|
21
|
+
]
|
22
|
+
},
|
23
|
+
borderWidth: 2,
|
24
|
+
plotBackgroundColor: "rgba(255, 255, 255, .9)",
|
25
|
+
plotShadow: true,
|
26
|
+
plotBorderWidth: 1
|
27
|
+
})
|
28
|
+
chart.lang({
|
29
|
+
thousandsSep: ","
|
30
|
+
})
|
31
|
+
chart.colors([
|
32
|
+
"#90ed7d", "#f7a35c", "#8085e9", "#f15c80", "#e4d354"
|
33
|
+
])
|
34
|
+
end
|
13
35
|
end
|
14
36
|
|
15
37
|
context "layout_helper" do
|
16
38
|
it "should return a div with an id of high_chart object" do
|
17
|
-
high_chart(@placeholder, @chart).
|
39
|
+
expect(high_chart(@placeholder, @chart)).to have_selector('div', :id => @placeholder)
|
18
40
|
end
|
19
41
|
|
20
42
|
it "should return a script" do
|
21
43
|
hc = LazyHighCharts::HighChart.new("placeholder")
|
22
|
-
high_chart(hc.placeholder, hc).
|
44
|
+
expect(high_chart(hc.placeholder, hc)).to have_selector('script')
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "high_chart_globals" do
|
49
|
+
it "should return a script" do
|
50
|
+
high_chart_globals(@chart_globals).should have_selector('script')
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should take a block and set attributes" do
|
54
|
+
high_chart_globals(@chart_globals).should match(/useUTC/)
|
55
|
+
high_chart_globals(@chart_globals).should match(/backgroundColor/)
|
56
|
+
high_chart_globals(@chart_globals).should match(/thousandsSep/)
|
23
57
|
end
|
24
58
|
end
|
25
59
|
|
26
60
|
context "high_chart_graph" do
|
27
61
|
describe "ready function" do
|
28
62
|
it "should be a javascript script" do
|
29
|
-
high_chart(@placeholder, @chart).
|
30
|
-
high_chart(@placeholder, @chart).
|
63
|
+
expect(high_chart(@placeholder, @chart)).to have_selector('script', :type => 'text/javascript')
|
64
|
+
expect(high_chart(@placeholder, @chart)).to match(/}\)\(\)/)
|
31
65
|
end
|
32
66
|
|
33
67
|
it "should assign to the onload event" do
|
34
|
-
high_chart(@placeholder, @chart).
|
68
|
+
expect(high_chart(@placeholder, @chart)).to include('window.onload = function(){')
|
35
69
|
end
|
36
70
|
it "should call any existing onload function" do
|
37
|
-
high_chart(@placeholder, @chart).
|
38
|
-
high_chart(@placeholder, @chart).
|
71
|
+
expect(high_chart(@placeholder, @chart)).to match(/onload = window.onload;/)
|
72
|
+
expect(high_chart(@placeholder, @chart)).to match(/if \(typeof onload == "function"\)\s*onload\(\)/)
|
39
73
|
end
|
40
74
|
end
|
41
75
|
describe "initialize HighChart" do
|
42
76
|
it "should set variables `chart` `options`" do
|
43
|
-
high_chart(@placeholder, @chart).
|
44
|
-
high_chart(@placeholder, @chart).
|
77
|
+
expect(high_chart(@placeholder, @chart)).to match(/var\s+options\s+=/)
|
78
|
+
expect(high_chart(@placeholder, @chart)).to match(/window.chart_placeholder\s=/)
|
45
79
|
end
|
46
80
|
it "should set Chart data" do
|
47
|
-
high_chart(@placeholder, @chart).
|
81
|
+
expect(high_chart(@placeholder, @chart)).to match(/window\.chart_placeholder\s=\snew\sHighcharts.Chart/)
|
48
82
|
end
|
49
83
|
|
50
84
|
it "should set chart renderTo" do
|
51
|
-
high_chart(@placeholder, @chart).
|
85
|
+
expect(high_chart(@placeholder, @chart)).to match(/"renderTo": "placeholder"/)
|
52
86
|
end
|
53
87
|
|
54
88
|
it "should set Chart Stock" do
|
55
|
-
high_stock(@placeholder, @chart).
|
89
|
+
expect(high_stock(@placeholder, @chart)).to match(/window\.chart_placeholder\s+=\s+new\s+Highcharts.StockChart/)
|
56
90
|
end
|
57
91
|
end
|
58
92
|
|
59
93
|
describe "HighChart Variable" do
|
60
94
|
it "should underscore chart_ variable" do
|
61
|
-
high_chart("place-holder", @chart).
|
62
|
-
high_chart("PlaceHolder", @chart).
|
95
|
+
expect(high_chart("place-holder", @chart)).to match(/window.chart_place_holder\s=/)
|
96
|
+
expect(high_chart("PlaceHolder", @chart)).to match(/window.chart_place_holder\s=/)
|
63
97
|
end
|
64
98
|
end
|
65
99
|
end
|
@@ -75,11 +109,11 @@ describe HighChartsHelper do
|
|
75
109
|
:data => [0, 1, 2, 3, 5, 6, 0, 7]
|
76
110
|
)
|
77
111
|
}
|
78
|
-
chart.options[:rangeSelector][:selected].
|
79
|
-
high_chart(@placeholder, chart).
|
80
|
-
high_chart(@placeholder, chart).
|
81
|
-
high_chart(@placeholder, chart).
|
82
|
-
high_chart(@placeholder, chart).
|
112
|
+
expect(chart.options[:rangeSelector][:selected]).to eq(1)
|
113
|
+
expect(high_chart(@placeholder, chart)).to match(/rangeSelector/)
|
114
|
+
expect(high_chart(@placeholder, chart)).to match(/xAxis/)
|
115
|
+
expect(high_chart(@placeholder, chart)).to match(/yAxis/)
|
116
|
+
expect(high_chart(@placeholder, chart)).to match(/series/)
|
83
117
|
|
84
118
|
end
|
85
119
|
|
@@ -88,7 +122,7 @@ describe HighChartsHelper do
|
|
88
122
|
chart = LazyHighCharts::HighChart.new { |f|
|
89
123
|
f.others(:foo => "bar")
|
90
124
|
}
|
91
|
-
high_chart(@placeholder, chart).
|
125
|
+
expect(high_chart(@placeholder, chart)).to match(/foo/)
|
92
126
|
end
|
93
127
|
|
94
128
|
it "should allow js code as attribute" do
|
@@ -96,7 +130,7 @@ describe HighChartsHelper do
|
|
96
130
|
f.options[:foo] = "function () { alert('hello') }".js_code
|
97
131
|
}
|
98
132
|
|
99
|
-
high_chart(@placeholder, chart).
|
133
|
+
expect(high_chart(@placeholder, chart)).to match(/"foo": function \(\) { alert\('hello'\) }/)
|
100
134
|
end
|
101
135
|
|
102
136
|
it "should convert keys to proper format" do
|
@@ -104,8 +138,8 @@ describe HighChartsHelper do
|
|
104
138
|
f.options[:foo_bar] = {:bar_foo => "someattrib"}
|
105
139
|
}
|
106
140
|
|
107
|
-
high_chart(@placeholder, chart).
|
108
|
-
high_chart(@placeholder, chart).
|
141
|
+
expect(high_chart(@placeholder, chart)).to match(/fooBar/)
|
142
|
+
expect(high_chart(@placeholder, chart)).to match(/barFoo/)
|
109
143
|
end
|
110
144
|
|
111
145
|
# issue #62 .js_code setting ignored
|
@@ -118,7 +152,7 @@ describe HighChartsHelper do
|
|
118
152
|
}
|
119
153
|
}])
|
120
154
|
}
|
121
|
-
high_chart(@placeholder, chart).
|
155
|
+
expect(high_chart(@placeholder, chart)).to match(/"formatter": function\(\) {return this.value \+ ' W';}/)
|
122
156
|
end
|
123
157
|
|
124
158
|
it "should support js_code in Individual data label for each point" do
|
@@ -135,7 +169,7 @@ describe HighChartsHelper do
|
|
135
169
|
:y => 54.4}
|
136
170
|
])
|
137
171
|
}
|
138
|
-
high_chart(@placeholder, chart).
|
172
|
+
expect(high_chart(@placeholder, chart)).to match(/"formatter": function\(\) {\ return this.x;\ }/)
|
139
173
|
end
|
140
174
|
|
141
175
|
end
|
@@ -3,7 +3,7 @@ require File.dirname(__FILE__) + '/spec_helper'
|
|
3
3
|
describe LazyHighCharts::OptionsKeyFilter do
|
4
4
|
it "should filter :pointInterval from seconds to milliseconds" do
|
5
5
|
hash = LazyHighCharts::OptionsKeyFilter.filter(pointInterval: 1)
|
6
|
-
hash[:pointInterval].
|
6
|
+
expect(hash[:pointInterval]).to eq(1000)
|
7
7
|
end
|
8
8
|
|
9
9
|
describe "filters :pointStart from a Date to a JavaScript compatible string" do
|
@@ -13,16 +13,16 @@ describe LazyHighCharts::OptionsKeyFilter do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should be the correct string" do
|
16
|
-
@value.
|
16
|
+
expect(@value).to eq("Date.UTC(2012, 8, 13)")
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should be js_code" do
|
20
|
-
@value.js_code.
|
20
|
+
expect(@value.js_code).to be_truthy
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
it "should filter keys recursively" do
|
25
25
|
hash = LazyHighCharts::OptionsKeyFilter.filter({something: {another_thing: {pointInterval: 2}}})
|
26
|
-
hash[:something][:another_thing][:pointInterval].
|
26
|
+
expect(hash[:something][:another_thing][:pointInterval]).to eq(2000)
|
27
27
|
end
|
28
|
-
end
|
28
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -6,7 +6,7 @@ require 'active_support'
|
|
6
6
|
require 'action_pack'
|
7
7
|
require 'action_view'
|
8
8
|
require 'action_controller'
|
9
|
-
require
|
9
|
+
require 'active_support/core_ext'
|
10
10
|
|
11
11
|
|
12
12
|
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/lazy_high_charts'))
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lazy_high_charts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Michelson
|
@@ -9,34 +9,34 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-03-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '1.0'
|
21
|
-
type: :
|
21
|
+
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '1.0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: hash-deep-merge
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '0'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
description: |2
|
@@ -50,9 +50,9 @@ extra_rdoc_files:
|
|
50
50
|
- README.md
|
51
51
|
- CHANGELOG.md
|
52
52
|
files:
|
53
|
-
- .gitignore
|
54
|
-
- .rspec
|
55
|
-
- .travis.yml
|
53
|
+
- ".gitignore"
|
54
|
+
- ".rspec"
|
55
|
+
- ".travis.yml"
|
56
56
|
- CHANGELOG.md
|
57
57
|
- GEM_VERSION
|
58
58
|
- Gemfile
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- lib/lazy_high_charts/core_ext/string.rb
|
67
67
|
- lib/lazy_high_charts/engine.rb
|
68
68
|
- lib/lazy_high_charts/high_chart.rb
|
69
|
+
- lib/lazy_high_charts/high_chart_globals.rb
|
69
70
|
- lib/lazy_high_charts/layout_helper.rb
|
70
71
|
- lib/lazy_high_charts/options_key_filter.rb
|
71
72
|
- lib/lazy_high_charts/railtie.rb
|
@@ -136,6 +137,7 @@ files:
|
|
136
137
|
- spec/dummy_sinatra/config.ru
|
137
138
|
- spec/dummy_sinatra/views/index.erb
|
138
139
|
- spec/dummy_sinatra/views/layout.erb
|
140
|
+
- spec/high_chart_globals_spec.rb
|
139
141
|
- spec/high_chart_spec.rb
|
140
142
|
- spec/lazy_high_charts_spec.rb
|
141
143
|
- spec/options_key_filter_spec.rb
|
@@ -155,22 +157,22 @@ licenses: []
|
|
155
157
|
metadata: {}
|
156
158
|
post_install_message:
|
157
159
|
rdoc_options:
|
158
|
-
- --charset=UTF-8
|
160
|
+
- "--charset=UTF-8"
|
159
161
|
require_paths:
|
160
162
|
- lib
|
161
163
|
required_ruby_version: !ruby/object:Gem::Requirement
|
162
164
|
requirements:
|
163
|
-
- -
|
165
|
+
- - ">="
|
164
166
|
- !ruby/object:Gem::Version
|
165
167
|
version: '0'
|
166
168
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
167
169
|
requirements:
|
168
|
-
- -
|
170
|
+
- - ">="
|
169
171
|
- !ruby/object:Gem::Version
|
170
172
|
version: '1.3'
|
171
173
|
requirements: []
|
172
174
|
rubyforge_project:
|
173
|
-
rubygems_version: 2.
|
175
|
+
rubygems_version: 2.4.8
|
174
176
|
signing_key:
|
175
177
|
specification_version: 4
|
176
178
|
summary: rubyist way to render variant chart by highcharts without write javascript
|