lazy_high_charts_tomgi 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +12 -0
- data/.rspec +3 -0
- data/CHANGELOG.md +43 -0
- data/Gemfile +14 -0
- data/MIT-LICENSE +20 -0
- data/README.md +171 -0
- data/Rakefile +17 -0
- data/autotest/discover.rb +1 -0
- data/init.rb +5 -0
- data/lazy_high_charts.gemspec +31 -0
- data/lib/generators/lazy_high_charts/install/install_generator.rb +17 -0
- data/lib/lazy_high_charts.rb +9 -0
- data/lib/lazy_high_charts/core_ext/string.rb +12 -0
- data/lib/lazy_high_charts/high_chart.rb +84 -0
- data/lib/lazy_high_charts/layout_helper.rb +93 -0
- data/lib/lazy_high_charts/options_key_filter.rb +39 -0
- data/lib/lazy_high_charts/railtie.rb +20 -0
- data/lib/lazy_high_charts/version.rb +3 -0
- data/rails/init.rb +2 -0
- data/spec/high_chart_spec.rb +128 -0
- data/spec/lazy_high_charts_spec.rb +134 -0
- data/spec/options_key_filter_spec.rb +28 -0
- data/spec/spec_helper.rb +46 -0
- metadata +111 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
* Aug 31, 2012
|
2
|
+
1. Correct highchart js location
|
3
|
+
[issue#74](https://github.com/michelson/lazy_high_charts/issues/74)
|
4
|
+
2. support series data add javascript event
|
5
|
+
[issue#73](https://github.com/michelson/lazy_high_charts/issues/73)
|
6
|
+
3. remove default html options.
|
7
|
+
[issue#72](https://github.com/michelson/lazy_high_charts/issues/72)
|
8
|
+
|
9
|
+
* Aug 26, 2012
|
10
|
+
1. Troy Anderson (laptop) <troy@tlainvestments.com>
|
11
|
+
Added ability to supply an array of axes or other objects and still use .js_code within the array of hashes.
|
12
|
+
2. David Biehl <lazylodr@gmail.com>
|
13
|
+
removing the window.onload function for AJAX requests
|
14
|
+
|
15
|
+
* Jun 27, 2012
|
16
|
+
update assets path for rails 3.x
|
17
|
+
|
18
|
+
* Jun 25, 2012
|
19
|
+
support inline javascript in click event on ruby runtime.
|
20
|
+
https://github.com/michelson/lazy_high_charts/issues/57
|
21
|
+
|
22
|
+
* Jul 14, 2011
|
23
|
+
add support rails 3.1 rc4 now
|
24
|
+
|
25
|
+
* Jul 13, 2011
|
26
|
+
HighStock support
|
27
|
+
remove some defaults
|
28
|
+
|
29
|
+
Jan 31, 2011
|
30
|
+
* backwards compatibility for rails 2.3.x in rendering callbacks options
|
31
|
+
|
32
|
+
Nov 30,2010
|
33
|
+
* dumped to gem 0.0.1
|
34
|
+
|
35
|
+
Sep 13,2010
|
36
|
+
* truely support rails 3.0(returning is deprecate function,use tap) deshi(xiaods@gmail.com)
|
37
|
+
|
38
|
+
Sep 14,2010
|
39
|
+
* update codebase to support rails3.0 and rspec2
|
40
|
+
|
41
|
+
Oct 8,2010
|
42
|
+
* update rake.it works now!
|
43
|
+
|
data/Gemfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
source "http://ruby.taobao.org"
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in lazy_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 'rails'
|
10
|
+
gem 'ZenTest'
|
11
|
+
gem 'autotest'
|
12
|
+
end
|
13
|
+
|
14
|
+
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2008-2010 Miguel Michelson Martinez
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
# LazyHighCharts
|
2
|
+
|
3
|
+
Easily displaying Highcharts graphs with gem style.
|
4
|
+
[![Build Status](https://secure.travis-ci.org/michelson/lazy_high_charts.png)](http://travis-ci.org/michelson/lazy_high_charts)
|
5
|
+
|
6
|
+
## Notice
|
7
|
+
latest version: 1.2.2
|
8
|
+
[ChangeLog](https://github.com/xiaods/lazy_high_charts/blob/master/CHANGELOG.md)
|
9
|
+
|
10
|
+
### Installation instructions for Rails 3
|
11
|
+
|
12
|
+
### Installing it by rubygems
|
13
|
+
To install it, you just need to add it to your Gemfile:
|
14
|
+
gem 'lazy_high_charts'
|
15
|
+
|
16
|
+
And then run this to install the javascript files:
|
17
|
+
rails g lazy_high_charts:install
|
18
|
+
|
19
|
+
### Installing it as a plugin for rails 2.3.x
|
20
|
+
|
21
|
+
script/plugin install git://github.com/michelson/lazy_high_charts.git ##(for rails 2)
|
22
|
+
|
23
|
+
rails plugin install git://github.com/michelson/lazy_high_charts.git ##(for rails 3)
|
24
|
+
|
25
|
+
### HighStocks
|
26
|
+
LazyHighCharts now compatible with beta HighStock, http://www.highcharts.com/stock/demo/
|
27
|
+
|
28
|
+
## Usage
|
29
|
+
|
30
|
+
About javascript Assets notes:
|
31
|
+
|
32
|
+
### For Rails 3.2.x
|
33
|
+
1. add your highcart js to app/assets/javascripts/application.js
|
34
|
+
````
|
35
|
+
//= require highcharts
|
36
|
+
````
|
37
|
+
|
38
|
+
### For Rails 2.x/3.0.x
|
39
|
+
|
40
|
+
1. you need manually put jquery/highcharts js to public/javascript
|
41
|
+
2. modify your layout html
|
42
|
+
Sample Code:
|
43
|
+
````
|
44
|
+
<%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" %>
|
45
|
+
<%= javascript_include_tag :highcharts %>
|
46
|
+
````
|
47
|
+
|
48
|
+
3. add gem name in your config/environment.rb
|
49
|
+
````
|
50
|
+
config.gem "lazy_high_charts"
|
51
|
+
````
|
52
|
+
4. Done!
|
53
|
+
|
54
|
+
### Demo Usage in Controller:
|
55
|
+
````
|
56
|
+
@h = LazyHighCharts::HighChart.new('graph') do |f|
|
57
|
+
f.options[:chart][:defaultSeriesType] = "area"
|
58
|
+
f.series(:name=>'John', :data=>[3, 20, 3, 5, 4, 10, 12 ,3, 5,6,7,7,80,9,9])
|
59
|
+
f.series(:name=>'Jane', :data=> [1, 3, 4, 3, 3, 5, 4,-46,7,8,8,9,9,0,0,9] )
|
60
|
+
end
|
61
|
+
````
|
62
|
+
|
63
|
+
Without overriding entire option , (only change a specific option index):
|
64
|
+
|
65
|
+
````
|
66
|
+
@h = LazyHighCharts::HighChart.new('graph') do |f|
|
67
|
+
#.....
|
68
|
+
f.options[:chart][:defaultSeriesType] = "area"
|
69
|
+
f.options[:chart][:inverted] = true
|
70
|
+
f.options[:legend][:layout] = "horizontal"
|
71
|
+
f.options[:xAxis][:categories] = ["uno" ,"dos" , "tres" , "cuatro"]
|
72
|
+
#......
|
73
|
+
````
|
74
|
+
|
75
|
+
Overriding entire option:
|
76
|
+
|
77
|
+
````
|
78
|
+
@h = LazyHighCharts::HighChart.new('graph') do |f|
|
79
|
+
#.....
|
80
|
+
f.xAxis(:categories => @days.reverse! , :labels=>{:rotation=>-45 , :align => 'right'})
|
81
|
+
f.chart({:defaultSeriesType=>"spline" , :renderTo => "myRenderArea" , :inverted => true})
|
82
|
+
#.....
|
83
|
+
````
|
84
|
+
|
85
|
+
If you want to use this syntax and still be able to build option step-by-step without overriding:
|
86
|
+
|
87
|
+
````
|
88
|
+
@h = LazyHighCharts::HighChart.new('graph') do |f|
|
89
|
+
#.....
|
90
|
+
f.xAxis!(:categories => @days.reverse! , :labels=>{:rotation=>-45 , :align => 'right'})
|
91
|
+
f.chart!({:defaultSeriesType=>"spline" , :renderTo => "myRenderArea" , :inverted => true})
|
92
|
+
#.....
|
93
|
+
````
|
94
|
+
|
95
|
+
Using the datetime axis type:
|
96
|
+
|
97
|
+
````
|
98
|
+
@h = LazyHighCharts::HighChart.new('graph', style: '') do |f|
|
99
|
+
f.options[:chart][:defaultSeriesType] = "area"
|
100
|
+
f.options[:plotOptions] = {area: {pointInterval: 1.day, pointStart: 10.days.ago}}
|
101
|
+
f.series(:name=>'John', :data=>[3, 20, 3, 5, 4, 10, 12 ,3, 5,6,7,7,80,9,9])
|
102
|
+
f.series(:name=>'Jane', :data=> [1, 3, 4, 3, 3, 5, 4,-46,7,8,8,9,9,0,0,9])
|
103
|
+
f.xAxis(type: :datetime)
|
104
|
+
end
|
105
|
+
````
|
106
|
+
A datetime axis [example](http://jsfiddle.net/gh/get/jquery/1.7.2/highslide-software/highcharts.com/tree/master/samples/highcharts/xaxis/type-datetime/)
|
107
|
+
|
108
|
+
|
109
|
+
Usage in layout:
|
110
|
+
````
|
111
|
+
<%= javascript_include_tag :highcharts %>
|
112
|
+
````
|
113
|
+
|
114
|
+
Usage in view:
|
115
|
+
````
|
116
|
+
<%= high_chart("my_id", @h) %>
|
117
|
+
````
|
118
|
+
|
119
|
+
You can pass in additional javascript into to the view with a block, this will be executed before the high chart is called
|
120
|
+
|
121
|
+
````
|
122
|
+
<%= high_chart("my_id", @h) do |c| %>
|
123
|
+
alert('hello')
|
124
|
+
<%end %>
|
125
|
+
````
|
126
|
+
To include javascript function calls or callbacks you can use the js_code method on your string`"function".js_code`:
|
127
|
+
|
128
|
+
````
|
129
|
+
f.options[:plotOptions] = {
|
130
|
+
:column => { :events => { :click => %|function() { window.location = "http://www.highcharts.com" }|.js_code } }
|
131
|
+
}
|
132
|
+
````
|
133
|
+
|
134
|
+
|
135
|
+
## HighStock Support:
|
136
|
+
|
137
|
+
Just call HighChart Helper this way:
|
138
|
+
````
|
139
|
+
<%= high_stock("my_id", @h) %>
|
140
|
+
````
|
141
|
+
|
142
|
+
## Option reference:
|
143
|
+
|
144
|
+
http://www.highcharts.com/ref/
|
145
|
+
|
146
|
+
## HighCharts License:
|
147
|
+
|
148
|
+
http://www.highcharts.com/license
|
149
|
+
|
150
|
+
|
151
|
+
## Contributing
|
152
|
+
|
153
|
+
We're open to any contribution. It has to be tested properly though.
|
154
|
+
|
155
|
+
* [Fork](http://help.github.com/forking/) the project
|
156
|
+
* Do your changes and commit them to your repository
|
157
|
+
* Test your changes. We won't accept any untested contributions (except if they're not testable).
|
158
|
+
* Create an [issue](https://github.com/michelson/lazy_high_charts/issues) with a link to your commits.
|
159
|
+
|
160
|
+
Contributer List:
|
161
|
+
* [Troy Anderson](https://github.com/troya2)
|
162
|
+
* [David Biehl](https://github.com/lazylodr)
|
163
|
+
|
164
|
+
Thanks for Troy & David
|
165
|
+
## Maintainers
|
166
|
+
* Miguel Michelson Martinez [github/michelson](https://github.com/michelson)
|
167
|
+
* Deshi Xiao [github/xiaods](https://github.com/xiaods)
|
168
|
+
|
169
|
+
## License
|
170
|
+
* Copyright (c) 2011,2012 Deshi Xiao,released under the MIT license
|
171
|
+
* Copyright (c) 2010 Miguel Michelson Martinez, released under the MIT license
|
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rake'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
require 'bundler'
|
6
|
+
|
7
|
+
Bundler::GemHelper.install_tasks
|
8
|
+
|
9
|
+
desc 'Default: run unit specs.'
|
10
|
+
task :default => :spec
|
11
|
+
|
12
|
+
desc 'Test the lazy_high_charts plugin.'
|
13
|
+
RSpec::Core::RakeTask.new('spec') do |t|
|
14
|
+
t.pattern = FileList['spec/**/*_spec.rb']
|
15
|
+
end
|
16
|
+
|
17
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
Autotest.add_discovery { "rspec2" }
|
data/init.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
3
|
+
require 'lazy_high_charts/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "lazy_high_charts_tomgi"
|
7
|
+
s.version = LazyHighCharts::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ['Miguel Michelson Martinez','Deshi Xiao']
|
10
|
+
s.email = ['miguelmichelson@gmail.com','xiaods@gmail.com']
|
11
|
+
s.homepage = "https://github.com/xiaods/lazy_high_charts"
|
12
|
+
s.summary = "lazy higcharts gem for rails"
|
13
|
+
s.description = "use highcharts js libary to visualization your data by rubygem/rails"
|
14
|
+
|
15
|
+
s.extra_rdoc_files = [ "README.md", "CHANGELOG.md" ]
|
16
|
+
s.rdoc_options = [ "--charset=UTF-8" ]
|
17
|
+
|
18
|
+
s.required_rubygems_version = "~> 1.3"
|
19
|
+
|
20
|
+
s.add_dependency "bundler", "~> 1.0"
|
21
|
+
s.add_dependency "hash-deep-merge"
|
22
|
+
|
23
|
+
s.description = <<-DESC
|
24
|
+
lazy_high_charts is a Rails 3.x gem for displaying Highcharts graphs.
|
25
|
+
DESC
|
26
|
+
|
27
|
+
s.files = `git ls-files`.split("\n")
|
28
|
+
s.executables = `git ls-files`.split("\n").select{|f| f =~ /^bin/}
|
29
|
+
s.require_path = 'lib'
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module LazyHighCharts
|
2
|
+
class InstallGenerator < Rails::Generators::Base
|
3
|
+
desc "This generator install highcharts javascripts"
|
4
|
+
|
5
|
+
def install_highcharts(opts = nil)
|
6
|
+
say_status("installing", "Highcharts javascript(code.highcharts.com/stock version)", :green)
|
7
|
+
if ::Rails::VERSION::MAJOR == 3 && ::Rails::VERSION::MINOR >= 1
|
8
|
+
get "http://code.highcharts.com/stock/highstock.js", "vendor/assets/javascripts/highcharts.js"
|
9
|
+
else
|
10
|
+
get "http://code.highcharts.com/stock/highstock.js","public/javascripts/highcharts.js"
|
11
|
+
end
|
12
|
+
rescue OpenURI::HTTPError
|
13
|
+
say_status("warning", "could not find Highcharts javascript file", :yellow)
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts core_ext string])
|
2
|
+
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts options_key_filter])
|
3
|
+
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts high_chart])
|
4
|
+
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts layout_helper])
|
5
|
+
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts railtie]) if defined?(::Rails::Railtie)
|
6
|
+
|
7
|
+
module LazyHighCharts
|
8
|
+
|
9
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module LazyHighCharts
|
2
|
+
class HighChart
|
3
|
+
SERIES_OPTIONS = %w(data dataParser dataURL index legendIndex name stack type xAxis yAxis)
|
4
|
+
|
5
|
+
attr_accessor :data, :options, :placeholder, :html_options
|
6
|
+
alias :canvas :placeholder
|
7
|
+
alias :canvas= :placeholder=
|
8
|
+
|
9
|
+
def initialize(canvas = nil, html_opts = {})
|
10
|
+
|
11
|
+
@collection_filter = nil
|
12
|
+
self.tap do |high_chart|
|
13
|
+
high_chart.data ||= []
|
14
|
+
high_chart.options ||= {}
|
15
|
+
high_chart.defaults_options
|
16
|
+
high_chart.html_options ||={}
|
17
|
+
high_chart.canvas = canvas if canvas
|
18
|
+
yield high_chart if block_given?
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# title: legend: xAxis: yAxis: tooltip: credits: :plotOptions
|
23
|
+
def defaults_options
|
24
|
+
self.title({ :text=>"example test title from highcharts gem"})
|
25
|
+
self.legend({ :layout=>"vertical", :style=>{} })
|
26
|
+
self.xAxis({})
|
27
|
+
self.yAxis({ :title=> {:text=> nil}, :labels=>{} })
|
28
|
+
self.tooltip({ :enabled=>true })
|
29
|
+
self.credits({ :enabled => false})
|
30
|
+
self.plotOptions({ :areaspline => { } })
|
31
|
+
self.chart({ :defaultSeriesType=>"line" , :renderTo => nil})
|
32
|
+
self.subtitle({})
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
# Pass other methods through to the javascript high_chart object.
|
37
|
+
#
|
38
|
+
# For instance: <tt>high_chart.grid(:color => "#699")</tt>
|
39
|
+
def method_missing(meth, opts = {})
|
40
|
+
if meth.to_s.end_with? '!'
|
41
|
+
deep_merge_options meth[0..-2].to_sym, opts
|
42
|
+
else
|
43
|
+
merge_options meth, opts
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# Add a simple series to the graph:
|
48
|
+
#
|
49
|
+
# data = [[0,5], [1,5], [2,5]]
|
50
|
+
# @high_chart.series :name=>'Updated', :data=>data
|
51
|
+
# @high_chart.series :name=>'Updated', :data=>[5, 1, 6, 1, 5, 4, 9]
|
52
|
+
def series(opts = {})
|
53
|
+
@data ||= []
|
54
|
+
if not opts.empty?
|
55
|
+
@data << OptionsKeyFilter.filter(opts.merge(:name => opts[:name], :data => opts[:data]))
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def series_options
|
62
|
+
@options.reject {|k,v| SERIES_OPTIONS.include?(k.to_s) == false}
|
63
|
+
end
|
64
|
+
|
65
|
+
def merge_options(name, opts)
|
66
|
+
@options.merge! name => opts
|
67
|
+
end
|
68
|
+
|
69
|
+
def deep_merge_options(name, opts)
|
70
|
+
@options.deep_merge! name => opts
|
71
|
+
end
|
72
|
+
|
73
|
+
def arguments_to_options(args)
|
74
|
+
if args.blank?
|
75
|
+
{:show => true}
|
76
|
+
elsif args.is_a? Array
|
77
|
+
args.first
|
78
|
+
else
|
79
|
+
args
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module LazyHighCharts
|
4
|
+
module LayoutHelper
|
5
|
+
|
6
|
+
def high_chart(placeholder, object , &block)
|
7
|
+
object.html_options.merge!({:id=>placeholder})
|
8
|
+
object.options[:chart][:renderTo] = placeholder
|
9
|
+
high_graph(placeholder,object , &block).concat(content_tag("div","", object.html_options))
|
10
|
+
end
|
11
|
+
|
12
|
+
def high_stock(placeholder, object , &block)
|
13
|
+
object.html_options.merge!({:id=>placeholder})
|
14
|
+
object.options[:chart][:renderTo] = placeholder
|
15
|
+
high_graph_stock(placeholder,object , &block).concat(content_tag("div","", object.html_options))
|
16
|
+
end
|
17
|
+
|
18
|
+
def high_graph(placeholder, object, &block)
|
19
|
+
build_html_output("Chart", placeholder, object, &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def high_graph_stock(placeholder, object, &block)
|
23
|
+
build_html_output("StockChart", placeholder, object, &block)
|
24
|
+
end
|
25
|
+
|
26
|
+
def build_html_output(type, placeholder, object, &block)
|
27
|
+
options_collection = [ generate_json_from_hash(OptionsKeyFilter.filter(object.options)) ]
|
28
|
+
options_collection << %|"series": [#{generate_json_from_array(object.data)}]|
|
29
|
+
|
30
|
+
core_js =<<-EOJS
|
31
|
+
var options, chart;
|
32
|
+
options = { #{options_collection.join(',')} };
|
33
|
+
#{capture(&block) if block_given?}
|
34
|
+
chart = 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
|
+
else
|
46
|
+
graph =<<-EOJS
|
47
|
+
<script type="text/javascript">
|
48
|
+
(function() {
|
49
|
+
var onload = window.onload;
|
50
|
+
window.onload = function(){
|
51
|
+
if (typeof onload == "function") onload();
|
52
|
+
#{core_js}
|
53
|
+
};
|
54
|
+
})()
|
55
|
+
</script>
|
56
|
+
EOJS
|
57
|
+
end
|
58
|
+
|
59
|
+
if defined?(raw)
|
60
|
+
return raw(graph)
|
61
|
+
else
|
62
|
+
return graph
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def generate_json_from_hash hash
|
70
|
+
hash.each_pair.map do |key, value|
|
71
|
+
k = key.to_s.camelize.gsub!(/\b\w/) { $&.downcase }
|
72
|
+
%|"#{k}": #{generate_json_from_value value}|
|
73
|
+
end.flatten.join(',')
|
74
|
+
end
|
75
|
+
|
76
|
+
def generate_json_from_value value
|
77
|
+
if value.is_a? Hash
|
78
|
+
%|{ #{generate_json_from_hash value} }|
|
79
|
+
elsif value.is_a? Array
|
80
|
+
%|[ #{generate_json_from_array value} ]|
|
81
|
+
elsif value.respond_to?(:js_code) && value.js_code?
|
82
|
+
value
|
83
|
+
else
|
84
|
+
value.to_json
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def generate_json_from_array array
|
89
|
+
array.map{|value| generate_json_from_value(value)}.join(",")
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
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 LazyHighCharts
|
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,20 @@
|
|
1
|
+
require 'lazy_high_charts'
|
2
|
+
require 'lazy_high_charts/layout_helper.rb'
|
3
|
+
|
4
|
+
require 'rails'
|
5
|
+
|
6
|
+
module LazyHighCharts
|
7
|
+
|
8
|
+
class Railtie < ::Rails::Railtie
|
9
|
+
config.before_configuration do
|
10
|
+
config.action_view.javascript_expansions[:high_charts] = %w(highcharts)
|
11
|
+
end
|
12
|
+
|
13
|
+
initializer 'lazy_high_charts.initialize' do
|
14
|
+
ActiveSupport.on_load(:action_view) do
|
15
|
+
include LazyHighCharts::LayoutHelper
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
data/rails/init.rb
ADDED
@@ -0,0 +1,128 @@
|
|
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 = LazyHighCharts::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
|
+
LazyHighCharts::HighChart.new(@placeholder).placeholder.should == @placeholder
|
21
|
+
LazyHighCharts::HighChart.new.placeholder.should == nil
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should take an optional html_options argument (defaulting to 300px height)" do
|
25
|
+
LazyHighCharts::HighChart.new(@html_options).placeholder.should == @html_options
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should set options by default" do
|
29
|
+
LazyHighCharts::HighChart.new.options.should == {
|
30
|
+
:title=>{:text=>"example test title from highcharts gem"},
|
31
|
+
:legend=>{:layout=>"vertical", :style=>{}},
|
32
|
+
:xAxis=>{},
|
33
|
+
:yAxis=>{:title=>{:text=>nil}, :labels=>{}},
|
34
|
+
:tooltip=>{:enabled=>true},
|
35
|
+
:credits=>{:enabled=>false},
|
36
|
+
:plotOptions=>{:areaspline=>{}},
|
37
|
+
:chart=>{:defaultSeriesType=>"line", :renderTo=>nil},
|
38
|
+
:subtitle=>{}}
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should set data empty by default" do
|
42
|
+
LazyHighCharts::HighChart.new.data.should == []
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should take a block setting attributes" do
|
46
|
+
chart = LazyHighCharts::HighChart.new {|f| f.data = @data ; f.options = @options }
|
47
|
+
chart.data.should == @data
|
48
|
+
chart.options.should == @options
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should take a block setting attributes" do
|
52
|
+
chart = LazyHighCharts::HighChart.new {|f| f.options[:legend][:layout] = "horizontal" }
|
53
|
+
chart.options[:legend][:layout].should == "horizontal"
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should take a block setting attributes" do
|
57
|
+
chart = LazyHighCharts::HighChart.new {|f| f.options[:range_selector] = {}; f.options[:range_selector][:selected] = 1}
|
58
|
+
chart.options[:range_selector][:selected].should == 1
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should change a block data without overriding options" do
|
62
|
+
chart = LazyHighCharts::HighChart.new('graph') do |f|
|
63
|
+
f.series(:name=>'John', :data=>[3, 20])
|
64
|
+
f.series(:name=>'Jane',:data=> [1, 3] )
|
65
|
+
# without overriding
|
66
|
+
f.options[:chart][:defaultSeriesType] = "area"
|
67
|
+
f.options[:chart][:inverted] = true
|
68
|
+
f.options[:legend][:layout] = "horizontal"
|
69
|
+
f.options[:xAxis][:categories] = ["uno" ,"dos" , "tres" , "cuatro"]
|
70
|
+
end
|
71
|
+
chart.data.should == [{:name=>"John", :data=>[3, 20]}, {:name=>"Jane", :data=>[1, 3]}]
|
72
|
+
chart.options[:legend][:layout].should == "horizontal"
|
73
|
+
chart.options[:xAxis][:categories].should == ["uno" ,"dos" , "tres" , "cuatro"]
|
74
|
+
chart.options[:chart][:defaultSeriesType].should == "area"
|
75
|
+
chart.options[:chart][:inverted].should == true
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should change a block data with overriding entire options" do
|
79
|
+
chart = LazyHighCharts::HighChart.new('graph') do |f|
|
80
|
+
f.series(:name=>'John', :data=>[3, 20])
|
81
|
+
f.series(:name=>'Jane', :data=>[1, 3] )
|
82
|
+
f.title({ :text=>"example test title from controller"})
|
83
|
+
# without overriding
|
84
|
+
f.xAxis(:categories => ["uno" ,"dos" , "tres" , "cuatro"] , :labels=>{:rotation=>-45 , :align => 'right'})
|
85
|
+
f.chart({:defaultSeriesType=>"spline" , :renderTo => "myRenderArea" , :inverted => true})
|
86
|
+
end
|
87
|
+
chart.options[:xAxis][:categories].should == ["uno" ,"dos" , "tres" , "cuatro"]
|
88
|
+
chart.options[:xAxis][:labels][:rotation].should == -45
|
89
|
+
chart.options[:xAxis][:labels][:align].should == "right"
|
90
|
+
chart.options[:chart][:defaultSeriesType].should == "spline"
|
91
|
+
chart.options[:chart][:renderTo].should == "myRenderArea"
|
92
|
+
chart.options[:chart][:inverted].should == true
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should have subtitles" do
|
96
|
+
chart = LazyHighCharts::HighChart.new('graph') do |f|
|
97
|
+
f.series(:name=>'John',:data=> [3, 20])
|
98
|
+
f.series(:name=>'Jane', :data=>[1, 3] )
|
99
|
+
f.title({ :text=>"example test title from controller"})
|
100
|
+
# without overriding
|
101
|
+
f.x_axis(:categories => ["uno" ,"dos" , "tres" , "cuatro"] , :labels=>{:rotation=>-45 , :align => 'right'})
|
102
|
+
f.chart({:defaultSeriesType=>"spline" , :renderTo => "myRenderArea" , :inverted => true})
|
103
|
+
f.subtitle({:text=>"Bar"})
|
104
|
+
end
|
105
|
+
chart.options[:subtitle][:text].should == "Bar"
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'should override entire option by default when resetting it again' do
|
109
|
+
chart = LazyHighCharts::HighChart.new('graph') do |f|
|
110
|
+
f.xAxis(categories: [3, 5, 7])
|
111
|
+
f.xAxis(title: {text: 'x title'})
|
112
|
+
end
|
113
|
+
chart.options[:xAxis][:categories].should == nil
|
114
|
+
chart.options[:xAxis][:title][:text].should == 'x title'
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'should allow to build options step by step without overriding previously set values' do
|
118
|
+
chart = LazyHighCharts::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 == [3, 5, 7]
|
123
|
+
chart.options[:xAxis][:title][:text].should == 'x title'
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
+
|
4
|
+
describe HighChartsHelper do
|
5
|
+
include LazyHighCharts::LayoutHelper
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@class = "stylin"
|
9
|
+
@placeholder = "placeholder"
|
10
|
+
@chart = LazyHighCharts::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 = LazyHighCharts::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 include('var options, chart;')
|
44
|
+
end
|
45
|
+
it "should set Chart data" do
|
46
|
+
high_chart(@placeholder, @chart).should match(/chart\s+=\s+new\s+Highcharts.Chart/)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should set chart renderTo" do
|
50
|
+
high_chart(@placeholder, @chart).should match(/"renderTo": "placeholder"/)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should set Chart Stock" do
|
54
|
+
high_stock(@placeholder, @chart).should match(/chart\s+=\s+new\s+Highcharts.StockChart/)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
it "should take a block setting attributes" do
|
62
|
+
chart = LazyHighCharts::HighChart.new {|f|
|
63
|
+
f.options[:rangeSelector] = {:selected=>1};
|
64
|
+
f.series(:type =>"spline",
|
65
|
+
:name =>"Historias",
|
66
|
+
:pointInterval => (1.day.to_i * 1000) ,
|
67
|
+
:pointStart => (Time.now.to_i * 1000),
|
68
|
+
:data => [0,1,2,3,5,6,0,7]
|
69
|
+
)
|
70
|
+
}
|
71
|
+
chart.options[:rangeSelector][:selected].should == 1
|
72
|
+
high_chart(@placeholder, chart).should match(/rangeSelector/)
|
73
|
+
high_chart(@placeholder, chart).should match(/xAxis/)
|
74
|
+
high_chart(@placeholder, chart).should match(/yAxis/)
|
75
|
+
high_chart(@placeholder, chart).should match(/series/)
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
it "should take a block setting attributes" do
|
81
|
+
chart = LazyHighCharts::HighChart.new {|f|
|
82
|
+
f.others(:foo =>"bar")
|
83
|
+
}
|
84
|
+
high_chart(@placeholder, chart).should match(/foo/)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should allow js code as attribute" do
|
88
|
+
chart = LazyHighCharts::HighChart.new {|f|
|
89
|
+
f.options[:foo] = "function () { alert('hello') }".js_code
|
90
|
+
}
|
91
|
+
|
92
|
+
high_chart(@placeholder, chart).should match(/"foo": function \(\) { alert\('hello'\) }/)
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should convert keys to proper format" do
|
96
|
+
chart = LazyHighCharts::HighChart.new {|f|
|
97
|
+
f.options[:foo_bar] = { :bar_foo => "someattrib"}
|
98
|
+
}
|
99
|
+
|
100
|
+
high_chart(@placeholder, chart).should match(/fooBar/)
|
101
|
+
high_chart(@placeholder, chart).should match(/barFoo/)
|
102
|
+
end
|
103
|
+
|
104
|
+
# issue #62 .js_code setting ignored
|
105
|
+
# https://github.com/michelson/lazy_high_charts/issues/62
|
106
|
+
it "should allow js code in array && nest attributs" do
|
107
|
+
chart = LazyHighCharts::HighChart.new {|f|
|
108
|
+
f.yAxis([{
|
109
|
+
:labels => {
|
110
|
+
:formatter => %|function() {return this.value + ' W';}|.js_code
|
111
|
+
}
|
112
|
+
}])
|
113
|
+
}
|
114
|
+
high_chart(@placeholder,chart).should match(/"formatter": function\(\) {return this.value \+ ' W';}/)
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should support js_code in Individual data label for each point" do
|
118
|
+
chart = LazyHighCharts::HighChart.new {|f|
|
119
|
+
f.series(
|
120
|
+
:data => [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, {
|
121
|
+
:dataLabels => {:enabled => true,
|
122
|
+
:align => 'left',
|
123
|
+
:x => 10,
|
124
|
+
:y => 4,
|
125
|
+
:style => {:fontWeight => 'bold'},
|
126
|
+
:formatter => "function() { return this.x; }".js_code
|
127
|
+
},
|
128
|
+
:y => 54.4}
|
129
|
+
])
|
130
|
+
}
|
131
|
+
high_chart(@placeholder,chart).should match(/"formatter": function\(\) {\ return this.x;\ }/)
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe LazyHighCharts::OptionsKeyFilter do
|
4
|
+
it "should filter :pointInterval from seconds to milliseconds" do
|
5
|
+
hash = LazyHighCharts::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 = LazyHighCharts::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 = LazyHighCharts::OptionsKeyFilter.filter({something: {another_thing: {pointInterval: 2}}})
|
26
|
+
hash[:something][:another_thing][:pointInterval].should == 2000
|
27
|
+
end
|
28
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'rubygems'
|
3
|
+
require 'bundler'
|
4
|
+
Bundler.setup
|
5
|
+
|
6
|
+
require 'active_support'
|
7
|
+
require 'action_pack'
|
8
|
+
require 'action_view'
|
9
|
+
require 'action_controller'
|
10
|
+
require 'rails'
|
11
|
+
#require 'action_mailer'
|
12
|
+
require "active_support/core_ext"
|
13
|
+
|
14
|
+
|
15
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/lazy_high_charts'))
|
16
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/lazy_high_charts/layout_helper'))
|
17
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/lazy_high_charts/options_key_filter'))
|
18
|
+
|
19
|
+
require 'webrat'
|
20
|
+
require 'rspec'
|
21
|
+
|
22
|
+
# RSpec 1.x and 2.x compatibility
|
23
|
+
if defined?(RSpec)
|
24
|
+
RSPEC_NAMESPACE = RSPEC_CONFIGURER = RSpec
|
25
|
+
elsif defined?(Spec)
|
26
|
+
RSPEC_NAMESPACE = Spec
|
27
|
+
RSPEC_CONFIGURER = Spec::Runner
|
28
|
+
else
|
29
|
+
begin
|
30
|
+
require 'rspec'
|
31
|
+
RSPEC_NAMESPACE = RSPEC_CONFIGURER = Rspec
|
32
|
+
rescue LoadError
|
33
|
+
require 'spec'
|
34
|
+
RSPEC_NAMESPACE = Spec
|
35
|
+
RSPEC_CONFIGURER = Spec::Runner
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
RSPEC_CONFIGURER.configure do |config|
|
40
|
+
config.include ActionView::Helpers
|
41
|
+
config.include Webrat::Matchers
|
42
|
+
end
|
43
|
+
|
44
|
+
module HighChartsHelper
|
45
|
+
include ActionView::Helpers::TagHelper
|
46
|
+
end
|
metadata
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lazy_high_charts_tomgi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.2.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Miguel Michelson Martinez
|
9
|
+
- Deshi Xiao
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2012-10-22 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: bundler
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '1.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '1.0'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: hash-deep-merge
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
type: :runtime
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
description: ! ' lazy_high_charts is a Rails 3.x gem for displaying Highcharts
|
48
|
+
graphs.
|
49
|
+
|
50
|
+
'
|
51
|
+
email:
|
52
|
+
- miguelmichelson@gmail.com
|
53
|
+
- xiaods@gmail.com
|
54
|
+
executables: []
|
55
|
+
extensions: []
|
56
|
+
extra_rdoc_files:
|
57
|
+
- README.md
|
58
|
+
- CHANGELOG.md
|
59
|
+
files:
|
60
|
+
- .gitignore
|
61
|
+
- .rspec
|
62
|
+
- CHANGELOG.md
|
63
|
+
- Gemfile
|
64
|
+
- MIT-LICENSE
|
65
|
+
- README.md
|
66
|
+
- Rakefile
|
67
|
+
- autotest/discover.rb
|
68
|
+
- init.rb
|
69
|
+
- lazy_high_charts.gemspec
|
70
|
+
- lib/generators/lazy_high_charts/install/install_generator.rb
|
71
|
+
- lib/lazy_high_charts.rb
|
72
|
+
- lib/lazy_high_charts/core_ext/string.rb
|
73
|
+
- lib/lazy_high_charts/high_chart.rb
|
74
|
+
- lib/lazy_high_charts/layout_helper.rb
|
75
|
+
- lib/lazy_high_charts/options_key_filter.rb
|
76
|
+
- lib/lazy_high_charts/railtie.rb
|
77
|
+
- lib/lazy_high_charts/version.rb
|
78
|
+
- rails/init.rb
|
79
|
+
- spec/high_chart_spec.rb
|
80
|
+
- spec/lazy_high_charts_spec.rb
|
81
|
+
- spec/options_key_filter_spec.rb
|
82
|
+
- spec/spec_helper.rb
|
83
|
+
homepage: https://github.com/xiaods/lazy_high_charts
|
84
|
+
licenses: []
|
85
|
+
post_install_message:
|
86
|
+
rdoc_options:
|
87
|
+
- --charset=UTF-8
|
88
|
+
require_paths:
|
89
|
+
- lib
|
90
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ! '>='
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
segments:
|
97
|
+
- 0
|
98
|
+
hash: 2261933756179286063
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ~>
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '1.3'
|
105
|
+
requirements: []
|
106
|
+
rubyforge_project:
|
107
|
+
rubygems_version: 1.8.24
|
108
|
+
signing_key:
|
109
|
+
specification_version: 3
|
110
|
+
summary: lazy higcharts gem for rails
|
111
|
+
test_files: []
|