chartify 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2f754d491ce71c728183aefc7185bfafa1640e5d
4
+ data.tar.gz: 7dac10f51fc23054e640b775ea81faebe53eb7c7
5
+ SHA512:
6
+ metadata.gz: b9b855fa25fb15fb6ec2da9c9adb192664c6300686cd9b3b7f2b03ae66b4b0ba3b5c43f360e31d26bb60b8da34e33c773489db790f35e56f5aa12e5d01744cfb
7
+ data.tar.gz: 852b34561415658344c9ab8a1be2583988d5a86056ea551de2ac7f33d65eba80d5c9d5880930f0a4a93ae6663ea77105033ce81272416c3b72358eb86c54f478
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2014 YOURNAME
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,48 @@
1
+ Charter
2
+ =======
3
+ The purpose of this gem is to capture data to create a chart, in an object, so that we can do the following things
4
+
5
+ - Render javascript graph, (which can be chart library agnostic)
6
+ - Create the chart data using ruby only (no js to render chart)
7
+ - Export chart as image (Needed when you want to email a chart)
8
+ - Configuration for chart colors
9
+
10
+ Note
11
+ ----
12
+ The project is in progress. So please wait for the release.
13
+
14
+ The project is similar to [chartkick](http://chartkick.com/). The reason I am planning to create another project
15
+ is because it does not support to export charts in image.
16
+
17
+ Charts supported
18
+ ----------------
19
+ * Line chart
20
+ * Bar chart
21
+ * Pie chart
22
+
23
+ For generating image from the chart data we are using [Gruff](https://github.com/topfunky/gruff)
24
+
25
+ Here are some sample code to generate graph object and render to web.
26
+ ```ruby
27
+ @chart = Charter::Factory.build(:line) do |chart|
28
+ chart.data = [{hours_remain: 100, estimated_hours_remain: 100, day: 3.days.ago.to_date},
29
+ {hours_remain: 50, estimated_hours_remain: 45, day: 2.days.ago.to_date},
30
+ {hours_remain: 5, estimated_hours_remain: 10, day: 1.days.ago.to_date}]
31
+ chart.columns = {hours_remain: 'Hours remaining', estimated_hours_remain: 'Estimated hours remaining'}
32
+ chart.label_column = :day
33
+ end
34
+ ```
35
+ In the web page,
36
+ ```erb
37
+ <div id="chart" style="width: 900px; height: 180px;"></div>
38
+ <%= @chart.render_chart('chart') %>
39
+ ```
40
+ To export the chart as image,
41
+ ```ruby
42
+ @chart.to_blob
43
+ ```
44
+ Now you can attach the blob to email or in the PDF file.
45
+
46
+ License
47
+ -------
48
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env rake
2
+ # encoding: utf-8
3
+
4
+ require 'bundler'
5
+ Bundler::GemHelper.install_tasks
6
+
7
+ require 'rspec/core'
8
+ require 'rspec/core/rake_task'
9
+
10
+ RSpec::Core::RakeTask.new(:spec) do |spec|
11
+ spec.pattern = FileList['spec/**/*_spec.rb']
12
+ end
13
+
14
+ task :default => "spec:all"
15
+
16
+ namespace :spec do
17
+ desc "Run Tests against all ORMs"
18
+ task :all do
19
+ sh "bundle --quiet"
20
+ sh "bundle exec rake spec"
21
+ end
22
+ end
23
+
24
+ begin
25
+ require 'rdoc/task'
26
+
27
+ Rake::RDocTask.new do |rdoc|
28
+ require 'charter/version'
29
+
30
+ rdoc.rdoc_dir = 'rdoc'
31
+ rdoc.title = "Charter #{Charter::VERSION}"
32
+ rdoc.rdoc_files.include('README*')
33
+ rdoc.rdoc_files.include('lib/**/*.rb')
34
+ end
35
+ rescue LoadError
36
+ puts 'RDocTask is not supported on this VM and platform combination.'
37
+ end
data/lib/charter.rb ADDED
@@ -0,0 +1,29 @@
1
+ module Charter
2
+ autoload :Configuration, "charter/config"
3
+
4
+ def self.configure(&block)
5
+ yield @config ||= Charter::Configuration.new
6
+ end
7
+
8
+ def self.config
9
+ @config
10
+ end
11
+
12
+ configure do |config|
13
+ config.web_api_name = :google_chart
14
+
15
+ config.web do |wc|
16
+ wc.background_color = '#FFFFFF'
17
+ wc.colors = ['#3366CC', # blue
18
+ '#DC3912', # red
19
+ '#FF9900', # yellow
20
+ '#109618', # green
21
+ '#990099', # dk purple
22
+ '#0099C6', # sky
23
+ '#DD4477' # grey
24
+ ]
25
+ wc.text_color = '#666666'
26
+ wc.line_width = 2
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,28 @@
1
+ require 'charter/chart_base'
2
+ require 'gruff'
3
+
4
+ module Charter
5
+ class BarChart < ChartBase
6
+ def to_blob
7
+ g = prepare_gruff(:bar)
8
+
9
+ columns.each do |column|
10
+ if column.kind_of?(Array)
11
+ key, text = column[0], column[1]
12
+ else
13
+ key, text = column, column.to_s.humanize
14
+ end
15
+
16
+ g.data(text, data_for_column(key))
17
+ end
18
+
19
+ labels = {}
20
+ data_for_column(label_column).each_with_index do |label, index|
21
+ labels[index] = label.to_s
22
+ end
23
+
24
+ g.labels = labels
25
+ g.to_blob
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,119 @@
1
+ require 'charter/gruff_themes'
2
+
3
+ module Charter
4
+ class ChartBase
5
+ attr_accessor :title, :data, :columns, :label_column
6
+
7
+ # data: array of hash
8
+ # [{date: 2013-1-2, hours_remain: 2, estimated_hours_remain: 10},
9
+ # {date: 2013-1-3, hours_remain: 4, estimated_hours_remain: 10},
10
+ # {date: 2013-1-4, hours_remain: 10, estimated_hours_remain: 10}]
11
+
12
+ def initialize
13
+ columns, data = [], []
14
+ end
15
+
16
+ def add_row(row)
17
+ data << row
18
+ end
19
+
20
+ def render_chart(html_dom_id, options = {})
21
+ api_name = options[:web_api_name] || Charter.config.web_api_name.to_s
22
+ class_name = self.class.name.split("::")[1]
23
+ load "charter/web_chart/#{api_name}/#{class_name.underscore}.rb"
24
+ chart = "Charter::WebChart::#{api_name.camelize}::#{class_name}".constantize.new
25
+ chart.data, chart.columns, chart.label_column = self.data, self.columns, self.label_column
26
+ html = <<-HTML
27
+ #{chart.include_js if chart.respond_to?(:include_js)}
28
+ <script type="application/javascript" class="chart_script">
29
+ #{chart.render(html_dom_id)}
30
+ </script>
31
+ HTML
32
+ html.html_safe
33
+ end
34
+
35
+ def self.evaluate_js
36
+ "eval($('script.chart_script').text());"
37
+ end
38
+
39
+ protected
40
+ # @param type - type of the Gruff. It's a factory to create the appropriate
41
+ def prepare_gruff(type)
42
+ chart_type = type.to_s.classify
43
+ chart_type = "Gruff::#{chart_type}".constantize
44
+
45
+ g = chart_type.new
46
+ g.theme = Charter::Themes::GOOGLE_CHART
47
+ g.title = self.title
48
+ g
49
+ end
50
+
51
+ def data_for_column(column_name)
52
+ data.map { |row| row[column_name] }
53
+ end
54
+
55
+ def column_names
56
+ @column_names ||= begin
57
+ columns.collect do |column|
58
+ column.kind_of?(Array) ? column[1] : column.to_s.humanize
59
+ end
60
+ end
61
+ end
62
+
63
+ def column_keys
64
+ @column_keys ||= begin
65
+ columns.collect do |column|
66
+ column.kind_of?(Array) ? column[0] : column
67
+ end
68
+ end
69
+ end
70
+
71
+ def text_color
72
+ web_config.text_color
73
+ end
74
+
75
+ def baseline_color
76
+ text_color
77
+ end
78
+
79
+ def grid_color
80
+ text_color
81
+ end
82
+
83
+ def bg_color
84
+ web_config.background_color
85
+ end
86
+
87
+ def web_colors
88
+ web_config.colors
89
+ end
90
+
91
+ # Amount should be a decimal between 0 and 1. Lower means darker
92
+ def darken_color(hex_color, amount=0.4)
93
+ hex_color = hex_color.gsub('#','')
94
+ rgb = hex_color.scan(/../).map {|color| color.hex}
95
+ rgb[0] = (rgb[0].to_i * amount).round
96
+ rgb[1] = (rgb[1].to_i * amount).round
97
+ rgb[2] = (rgb[2].to_i * amount).round
98
+ "#%02x%02x%02x" % rgb
99
+ end
100
+
101
+ # Amount should be a decimal between 0 and 1. Higher means lighter
102
+ def lighten_color(hex_color, amount=0.6)
103
+ hex_color = hex_color.gsub('#','')
104
+ rgb = hex_color.scan(/../).map {|color| color.hex}
105
+ rgb[0] = [(rgb[0].to_i + 255 * amount).round, 255].min
106
+ rgb[1] = [(rgb[1].to_i + 255 * amount).round, 255].min
107
+ rgb[2] = [(rgb[2].to_i + 255 * amount).round, 255].min
108
+ "#%02x%02x%02x" % rgb
109
+ end
110
+
111
+ def config
112
+ @config ||= Charter.config
113
+ end
114
+
115
+ def web_config
116
+ @web_config ||= Charter.config.web_config
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,23 @@
1
+ module Charter
2
+ class Configuration
3
+ include ActiveSupport::Configurable
4
+ config_accessor :web_api_name
5
+ config_accessor :chart
6
+
7
+ def web(&block)
8
+ yield @web_config ||= Charter::WebConfiguration.new
9
+ end
10
+
11
+ def web_config
12
+ @web_config
13
+ end
14
+ end
15
+
16
+ class WebConfiguration
17
+ include ActiveSupport::Configurable
18
+ config_accessor :background_color
19
+ config_accessor :colors
20
+ config_accessor :text_color
21
+ config_accessor :line_width
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ require 'charter/gruff_themes'
2
+ require 'charter/line_chart'
3
+ require 'charter/pie_chart'
4
+ require 'charter/bar_chart'
5
+
6
+ module Charter
7
+ class Factory
8
+ # @param type can be of line, pie, bar etc
9
+ def self.build(type, &block)
10
+ raise "type has to be a symbol" unless type.kind_of? Symbol
11
+ chart = "Charter::#{type.to_s.camelize}Chart".constantize.new
12
+ block.call chart
13
+ chart
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ module Charter
2
+ module Themes
3
+ GOOGLE_CHART = {
4
+ :colors => [
5
+ '#3366CC', # blue
6
+ '#DC3912', # red
7
+ '#FF9900', # yellow
8
+ '#109618', # green
9
+ '#990099', # dk purple
10
+ '#0099C6', # sky
11
+ '#DD4477' # grey
12
+ ],
13
+ :marker_color => '#aea9a9', # Grey
14
+ :font_color => 'black',
15
+ :background_colors => 'white'
16
+ }
17
+ end
18
+ end
@@ -0,0 +1,38 @@
1
+ require 'charter/chart_base'
2
+ require 'gruff'
3
+
4
+ # Example
5
+ # -------
6
+ # Charter::Factory.build(:line) do |chart|
7
+ # chart.data = [{hours_remain: 100, estimated_hours_remain: 100, day: 3.days.ago.to_date},
8
+ # {hours_remain: 50, estimated_hours_remain: 45, day: 2.days.ago.to_date},
9
+ # {hours_remain: 5, estimated_hours_remain: 10, day: 1.days.ago.to_date}]
10
+ # chart.columns = {hours_remain: 'Hours remaining', estimated_hours_remain: 'Estimated hours remaining'}
11
+ # chart.label_column = :day
12
+ # end
13
+
14
+ module Charter
15
+ class LineChart < ChartBase
16
+ def to_blob
17
+ g = prepare_gruff(:line)
18
+
19
+ columns.each do |column|
20
+ if column.kind_of?(Array)
21
+ key, text = column[0], column[1]
22
+ else
23
+ key, text = column, column.to_s.humanize
24
+ end
25
+
26
+ g.data(text, data_for_column(key))
27
+ end
28
+
29
+ labels = {}
30
+ data_for_column(label_column).each_with_index do |label, index|
31
+ labels[index] = label.to_s
32
+ end
33
+
34
+ g.labels = labels
35
+ g.to_blob
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,27 @@
1
+ require 'charter/chart_base'
2
+ require 'gruff'
3
+
4
+ # Example
5
+ # -------
6
+ # Charter::Factory.build(:pie) do |chart|
7
+ # chart.data = {'ruby' => 100,
8
+ # 'python' => 12}
9
+ # chart.columns = ['Language', 'Usage']
10
+ # end
11
+ module Charter
12
+ class PieChart < ChartBase
13
+ def to_blob
14
+ g = prepare_gruff(:pie)
15
+
16
+ data.each do |row|
17
+ if row.kind_of?(Array)
18
+ key, val = row[0], row[1]
19
+ else
20
+ key, val = row.key, row.val
21
+ end
22
+ g.data(key, val)
23
+ end
24
+ g.to_blob
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module Charter
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,24 @@
1
+ require 'charter/bar_chart'
2
+ require 'charter/web_chart/google_chart/google_chart_module'
3
+
4
+ module Charter
5
+ module WebChart
6
+ module GoogleChart
7
+ class BarChart < Charter::BarChart
8
+ include Charter::WebChart::GoogleChart::GoogleChartModule
9
+
10
+ def render(html_dom_id)
11
+ js = <<-JS
12
+ google.load("visualization", "1", {packages:["corechart"]});
13
+ google.setOnLoadCallback(function () {
14
+ var data = google.visualization.arrayToDataTable(#{array_data_table.to_json});
15
+ var chart = new google.visualization.BarChart(document.getElementById('#{html_dom_id}'));
16
+ chart.draw(data, #{chart_options.to_json});
17
+ });
18
+ JS
19
+ js.html_safe
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,37 @@
1
+ require 'charter/bar_chart'
2
+
3
+ module Charter
4
+ module WebChart
5
+ module GoogleChart
6
+ module GoogleChartModule
7
+ def chart_options
8
+ {
9
+ title: title,
10
+ backgroundColor: bg_color,
11
+ colors: web_colors,
12
+ vAxis: {baselineColor: baseline_color,
13
+ gridlines: {color: grid_color},
14
+ textStyle: {color: text_color}},
15
+ hAxis: {baselineColor: baseline_color,
16
+ gridlines: {color: grid_color},
17
+ textStyle: {color: text_color}},
18
+ legend: {textStyle: {color: text_color}},
19
+ lineWidth: config.web_config.line_width
20
+ }
21
+ end
22
+
23
+ def array_data_table
24
+ array_data = [[label_column] + column_names]
25
+ array_data + data.collect do |row|
26
+ [row[label_column]] + column_keys.collect { |col| row[col] }
27
+ end
28
+ end
29
+
30
+ def include_js
31
+ %q{<script type="text/javascript" src="https://www.google.com/jsapi?autoload={'modules':[{'name':'visualization',
32
+ 'version':'1','packages':['timeline']}]}"></script>}
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,24 @@
1
+ require 'charter/line_chart'
2
+ require 'charter/web_chart/google_chart/google_chart_module'
3
+
4
+ module Charter
5
+ module WebChart
6
+ module GoogleChart
7
+ class LineChart < Charter::LineChart
8
+ include Charter::WebChart::GoogleChart::GoogleChartModule
9
+
10
+ def render(html_dom_id)
11
+ js = <<-JS
12
+ google.load("visualization", "1", {packages:["corechart"]});
13
+ google.setOnLoadCallback(function () {
14
+ var data = google.visualization.arrayToDataTable(#{array_data_table.to_json});
15
+ var chart = new google.visualization.LineChart(document.getElementById('#{html_dom_id}'));
16
+ chart.draw(data, #{chart_options.to_json});
17
+ });
18
+ JS
19
+ js.html_safe
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,43 @@
1
+ require 'charter/pie_chart'
2
+ require 'charter/web_chart/google_chart/google_chart_module'
3
+
4
+ module Charter
5
+ module WebChart
6
+ module GoogleChart
7
+ class PieChart < Charter::PieChart
8
+ include Charter::WebChart::GoogleChart::GoogleChartModule
9
+
10
+ # Js data
11
+ # var data = google.visualization.arrayToDataTable([
12
+ # ['Task', 'Hours per Day'],
13
+ # ['Work', 11],
14
+ # ['Eat', 2],
15
+ # ['Commute', 2],
16
+ # ['Watch TV', 2],
17
+ # ['Sleep', 7]
18
+ # ]);
19
+ def render(html_dom_id)
20
+ datasets = data.collect do |column|
21
+ if column.kind_of?(Array)
22
+ title, val = column[0], column[1]
23
+ else
24
+ title, val = column, column.to_s.humanize
25
+ end
26
+ [title, val]
27
+ end
28
+ datasets.insert 0, column_names
29
+
30
+ js = <<-JS
31
+ google.load("visualization", "1", {packages:["corechart"]});
32
+ google.setOnLoadCallback(function () {
33
+ var data = google.visualization.arrayToDataTable(#{datasets.to_json});
34
+ var chart = new google.visualization.PieChart(document.getElementById('#{html_dom_id}'));
35
+ chart.draw(data, #{chart_options.to_json});
36
+ });
37
+ JS
38
+ js.html_safe
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :charter do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,194 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: chartify
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - A.K.M. Ashrafuzzaman
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-06-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: gruff
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.5.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.5.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: railties
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '3'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '5'
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '3'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '5'
47
+ - !ruby/object:Gem::Dependency
48
+ name: sqlite3
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rake
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '10.3'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '10.3'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rspec
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '3'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '3'
89
+ - !ruby/object:Gem::Dependency
90
+ name: rspec-mocks
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '3'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '3'
103
+ - !ruby/object:Gem::Dependency
104
+ name: activerecord
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '4'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '4'
117
+ - !ruby/object:Gem::Dependency
118
+ name: activesupport
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '4'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '4'
131
+ - !ruby/object:Gem::Dependency
132
+ name: database_cleaner
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '1.2'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '1.2'
145
+ description: A gem to manage online chart so that it can be exportable in image from
146
+ ruby code.
147
+ email:
148
+ - ashrafuzzaman.g2@gmail.com
149
+ executables: []
150
+ extensions: []
151
+ extra_rdoc_files: []
152
+ files:
153
+ - MIT-LICENSE
154
+ - README.md
155
+ - Rakefile
156
+ - lib/charter.rb
157
+ - lib/charter/bar_chart.rb
158
+ - lib/charter/chart_base.rb
159
+ - lib/charter/config.rb
160
+ - lib/charter/factory.rb
161
+ - lib/charter/gruff_themes.rb
162
+ - lib/charter/line_chart.rb
163
+ - lib/charter/pie_chart.rb
164
+ - lib/charter/version.rb
165
+ - lib/charter/web_chart/google_chart/bar_chart.rb
166
+ - lib/charter/web_chart/google_chart/google_chart_module.rb
167
+ - lib/charter/web_chart/google_chart/line_chart.rb
168
+ - lib/charter/web_chart/google_chart/pie_chart.rb
169
+ - lib/tasks/charter_tasks.rake
170
+ homepage: https://github.com/ashrafuzzaman/charter
171
+ licenses: []
172
+ metadata: {}
173
+ post_install_message:
174
+ rdoc_options: []
175
+ require_paths:
176
+ - lib
177
+ required_ruby_version: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ required_rubygems_version: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ requirements: []
188
+ rubyforge_project:
189
+ rubygems_version: 2.2.2
190
+ signing_key:
191
+ specification_version: 4
192
+ summary: A gem to manage online chart so that it can be exportable in image from ruby
193
+ code.
194
+ test_files: []