ztk 2.2.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ztk.rb +1 -0
- data/lib/ztk/google_chart.rb +26 -0
- data/lib/ztk/google_chart/annotation.rb +14 -0
- data/lib/ztk/google_chart/bar.rb +14 -0
- data/lib/ztk/google_chart/base.rb +77 -0
- data/lib/ztk/google_chart/base/array_to_data_table.rb +42 -0
- data/lib/ztk/google_chart/base/data_table.rb +53 -0
- data/lib/ztk/google_chart/base/dates.rb +76 -0
- data/lib/ztk/google_chart/base/options.rb +40 -0
- data/lib/ztk/google_chart/base/ticks.rb +24 -0
- data/lib/ztk/google_chart/candlestick.rb +14 -0
- data/lib/ztk/google_chart/column.rb +14 -0
- data/lib/ztk/google_chart/combo.rb +14 -0
- data/lib/ztk/google_chart/line.rb +14 -0
- data/lib/ztk/google_chart/pie.rb +14 -0
- data/lib/ztk/google_chart/sankey.rb +14 -0
- data/lib/ztk/version.rb +1 -1
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cabc2aa0f97fee6c28a6995a880ddbad7efaca29
|
4
|
+
data.tar.gz: fb80e691347422cb146335bb270de4b84677e284
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b8b4757fec35497d303641a3494cebef779357cce9a74869a28c79fae7de17283acc93841472de15b660b4c49eca7c84e2348677ca25781f4ca6da468ba23c2
|
7
|
+
data.tar.gz: 74afc96e8b46e75c7b7f39c8df2456e717ce7c6f83de33e77a0d85370a20bea5d3ae0a981316d2accba541ccfd785887bd828f1c669f49c71d5db194231d37e1
|
data/lib/ztk.rb
CHANGED
@@ -0,0 +1,26 @@
|
|
1
|
+
module ZTK
|
2
|
+
|
3
|
+
# GoogleChart Class
|
4
|
+
#
|
5
|
+
# @author Zachary Patten <zachary AT jovelabs DOT com>
|
6
|
+
module GoogleChart
|
7
|
+
|
8
|
+
# GoogleChart Error Class
|
9
|
+
#
|
10
|
+
# @author Zachary Patten <zachary AT jovelabs DOT com>
|
11
|
+
class GoogleChartError < Error; end
|
12
|
+
|
13
|
+
require 'ztk/google_chart/base'
|
14
|
+
|
15
|
+
require 'ztk/google_chart/annotation'
|
16
|
+
require 'ztk/google_chart/bar'
|
17
|
+
require 'ztk/google_chart/candlestick'
|
18
|
+
require 'ztk/google_chart/column'
|
19
|
+
require 'ztk/google_chart/combo'
|
20
|
+
require 'ztk/google_chart/line'
|
21
|
+
require 'ztk/google_chart/pie'
|
22
|
+
require 'ztk/google_chart/sankey'
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
class String
|
2
|
+
def __fix_date
|
3
|
+
self.gsub(/"new/, 'new').gsub(/\)"/, ')')
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
module ZTK
|
8
|
+
module GoogleChart
|
9
|
+
|
10
|
+
# GoogleChart Base Class
|
11
|
+
class Base < ZTK::Base
|
12
|
+
require 'ztk/google_chart/base/array_to_data_table'
|
13
|
+
require 'ztk/google_chart/base/data_table'
|
14
|
+
require 'ztk/google_chart/base/dates'
|
15
|
+
require 'ztk/google_chart/base/options'
|
16
|
+
require 'ztk/google_chart/base/ticks'
|
17
|
+
|
18
|
+
include ZTK::GoogleChart::Base::ArrayToDataTable
|
19
|
+
include ZTK::GoogleChart::Base::DataTable
|
20
|
+
include ZTK::GoogleChart::Base::Dates
|
21
|
+
include ZTK::GoogleChart::Base::Options
|
22
|
+
include ZTK::GoogleChart::Base::Ticks
|
23
|
+
|
24
|
+
# @param [Hash] configuration Configuration options hash.
|
25
|
+
def initialize(configuration={})
|
26
|
+
super({ :id => generate_id }, configuration)
|
27
|
+
|
28
|
+
@id = config.id.to_s.underscore.gsub(/ /, '')
|
29
|
+
@chart_name_tag = "chart_#{@id}"
|
30
|
+
@chart_data_tag = "#{@chart_name_tag}_data"
|
31
|
+
@chart_options_tag = "#{@chart_name_tag}_options"
|
32
|
+
@chart_draw_tag = "#{@chart_name_tag}_draw"
|
33
|
+
@chart_div_tag = "#{@chart_name_tag}_div"
|
34
|
+
@chart_type_tag = config.type
|
35
|
+
end
|
36
|
+
|
37
|
+
def render(content=nil)
|
38
|
+
case @chart_method
|
39
|
+
when :data_table
|
40
|
+
data_table_render
|
41
|
+
when :array_to_data_table
|
42
|
+
array_to_data_table_render
|
43
|
+
else
|
44
|
+
raise "You must supply chart data via DataTable or ArrayToDataTable!"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def body(&block)
|
49
|
+
<<-EOCHART
|
50
|
+
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
|
51
|
+
<script type="text/javascript">
|
52
|
+
var #{@chart_data_tag};
|
53
|
+
var #{@chart_name_tag};
|
54
|
+
|
55
|
+
google.load('visualization', '1', {'packages':['corechart']});
|
56
|
+
google.load('visualization', '1.1', {'packages':['annotationchart']});
|
57
|
+
google.load('visualization', '1.1', {'packages':['sankey']});
|
58
|
+
google.setOnLoadCallback(#{@chart_draw_tag});
|
59
|
+
|
60
|
+
#{block.call.chomp}
|
61
|
+
</script>
|
62
|
+
<div id="#{@chart_div_tag}"></div>
|
63
|
+
EOCHART
|
64
|
+
end
|
65
|
+
|
66
|
+
def generate_id
|
67
|
+
generated_id = Array.new
|
68
|
+
|
69
|
+
generated_id << SecureRandom.hex(16)
|
70
|
+
|
71
|
+
generated_id.join('_')
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module ZTK
|
2
|
+
module GoogleChart
|
3
|
+
class Base
|
4
|
+
|
5
|
+
module ArrayToDataTable
|
6
|
+
|
7
|
+
def array_to_data_table(data)
|
8
|
+
@chart_method = :array_to_data_table
|
9
|
+
@chart_data = data
|
10
|
+
|
11
|
+
config.ui.logger.info { "array_to_data_table(#{data.inspect})" }
|
12
|
+
|
13
|
+
@chart_data
|
14
|
+
end
|
15
|
+
|
16
|
+
def array_to_data_table_function
|
17
|
+
<<-EOCHART
|
18
|
+
function #{@chart_draw_tag}() {
|
19
|
+
|
20
|
+
#{@chart_data_tag} = new google.visualization.arrayToDataTable(
|
21
|
+
#{@chart_data.to_json}
|
22
|
+
);
|
23
|
+
|
24
|
+
var #{@chart_options_tag} = #{JSON.pretty_generate(@chart_options)};
|
25
|
+
|
26
|
+
#{@chart_name_tag} = new google.visualization.#{@chart_type_tag}(document.getElementById('#{@chart_div_tag}'));
|
27
|
+
#{@chart_name_tag}.draw(#{@chart_data_tag}, #{@chart_options_tag});
|
28
|
+
}
|
29
|
+
EOCHART
|
30
|
+
end
|
31
|
+
|
32
|
+
def array_to_data_table_render
|
33
|
+
body do
|
34
|
+
array_to_data_table_function
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module ZTK
|
2
|
+
module GoogleChart
|
3
|
+
class Base
|
4
|
+
|
5
|
+
module DataTable
|
6
|
+
|
7
|
+
def data_table(function, *args)
|
8
|
+
@chart_method = :data_table
|
9
|
+
@chart_data_table ||= Array.new
|
10
|
+
|
11
|
+
@chart_data_table << [function, *args]
|
12
|
+
end
|
13
|
+
|
14
|
+
def data_table_function(&block)
|
15
|
+
<<-EOCHART
|
16
|
+
function #{@chart_draw_tag}() {
|
17
|
+
|
18
|
+
#{@chart_data_tag} = new google.visualization.DataTable();
|
19
|
+
#{block.call.chomp}
|
20
|
+
|
21
|
+
var #{@chart_options_tag} = #{JSON.pretty_generate(@chart_options).__fix_date};
|
22
|
+
|
23
|
+
#{@chart_name_tag} = new google.visualization.#{@chart_type_tag}(document.getElementById('#{@chart_div_tag}'));
|
24
|
+
#{@chart_name_tag}.draw(#{@chart_data_tag}, #{@chart_options_tag});
|
25
|
+
}
|
26
|
+
EOCHART
|
27
|
+
end
|
28
|
+
|
29
|
+
def data_table_render
|
30
|
+
data_table_blob = Array.new
|
31
|
+
@chart_data_table.each do |function, *args|
|
32
|
+
args = args.collect do |arg|
|
33
|
+
if arg.is_a?(Array)
|
34
|
+
JSON.pretty_generate(arg).__fix_date
|
35
|
+
else
|
36
|
+
arg.to_json
|
37
|
+
end
|
38
|
+
end.join(', ')
|
39
|
+
data_table_blob << %( #{@chart_data_tag}.#{function}(#{args});)
|
40
|
+
end
|
41
|
+
|
42
|
+
body do
|
43
|
+
data_table_function do
|
44
|
+
data_table_blob.join("\n")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module ZTK
|
2
|
+
module GoogleChart
|
3
|
+
class Base
|
4
|
+
|
5
|
+
module Dates
|
6
|
+
|
7
|
+
DATE_HELPERS = {
|
8
|
+
:second => -1,
|
9
|
+
:minute => -2,
|
10
|
+
:hour => -3,
|
11
|
+
:day => -4,
|
12
|
+
:month => -5,
|
13
|
+
:year => -6
|
14
|
+
}
|
15
|
+
|
16
|
+
def date_scale(scale, *args)
|
17
|
+
case scale
|
18
|
+
when :year then
|
19
|
+
send(:date_month, *args)
|
20
|
+
when :month, :week then
|
21
|
+
send(:date_day, *args)
|
22
|
+
when :day then
|
23
|
+
send(:date_hour, *args)
|
24
|
+
when :hour then
|
25
|
+
send(:date_minute, *args)
|
26
|
+
when :minute then
|
27
|
+
send(:date_second, *args)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def date_seed(start_time, end_time, unit, default)
|
32
|
+
start_time = start_time.dup
|
33
|
+
timeline = Hash.new
|
34
|
+
|
35
|
+
scale = case unit
|
36
|
+
when :year then
|
37
|
+
:month
|
38
|
+
when :month, :week then
|
39
|
+
:day
|
40
|
+
when :day then
|
41
|
+
:hour
|
42
|
+
when :hour then
|
43
|
+
:minute
|
44
|
+
when :minute then
|
45
|
+
:second
|
46
|
+
end
|
47
|
+
|
48
|
+
loop do
|
49
|
+
timeline.merge!(date_scale(unit, start_time) => default.dup)
|
50
|
+
start_time += 1.send(scale)
|
51
|
+
break if (start_time > end_time)
|
52
|
+
end
|
53
|
+
|
54
|
+
timeline
|
55
|
+
end
|
56
|
+
|
57
|
+
def date_wrapper(value)
|
58
|
+
"new Date(#{value})"
|
59
|
+
end
|
60
|
+
|
61
|
+
def date_format(*args)
|
62
|
+
%w( %Y %%d %-d %-H %-M %-S )[*args].join(',')
|
63
|
+
end
|
64
|
+
|
65
|
+
DATE_HELPERS.each do |unit, offset|
|
66
|
+
method_name = "date_#{unit}".downcase.to_sym
|
67
|
+
define_method(method_name) do |date=Time.now.utc|
|
68
|
+
date_wrapper(date.strftime(date_format(0..offset)) % [ (date.month - 1) ])
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module ZTK
|
2
|
+
module GoogleChart
|
3
|
+
class Base
|
4
|
+
|
5
|
+
module Options
|
6
|
+
|
7
|
+
def options=(value)
|
8
|
+
set_options(value)
|
9
|
+
end
|
10
|
+
|
11
|
+
def options(value=nil)
|
12
|
+
set_options(value)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def default_width
|
18
|
+
900
|
19
|
+
end
|
20
|
+
|
21
|
+
def set_options(value=nil)
|
22
|
+
if @chart_options.nil?
|
23
|
+
@chart_options = Hash.new
|
24
|
+
@chart_options.merge!(:width => default_width.to_i, :height => default_width.div(2).to_i)
|
25
|
+
end
|
26
|
+
|
27
|
+
if !value.nil? && !value.empty?
|
28
|
+
@chart_options.merge!(value)
|
29
|
+
end
|
30
|
+
|
31
|
+
config.ui.logger.info { "options(#{value.inspect}) -> #{@chart_options.inspect}" }
|
32
|
+
|
33
|
+
@chart_options
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module ZTK
|
2
|
+
module GoogleChart
|
3
|
+
class Base
|
4
|
+
|
5
|
+
module Ticks
|
6
|
+
|
7
|
+
def tick_seed(start_time, end_time, unit)
|
8
|
+
start_time = start_time.dup
|
9
|
+
ticks = Array.new
|
10
|
+
|
11
|
+
loop do
|
12
|
+
ticks << date_scale(unit, start_time)
|
13
|
+
start_time += 1.send(unit)
|
14
|
+
break if (start_time > end_time)
|
15
|
+
end
|
16
|
+
|
17
|
+
ticks
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/ztk/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ztk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zachary Patten
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -297,6 +297,21 @@ files:
|
|
297
297
|
- lib/ztk/dsl/core/relations.rb
|
298
298
|
- lib/ztk/dsl/core/relations/belongs_to.rb
|
299
299
|
- lib/ztk/dsl/core/relations/has_many.rb
|
300
|
+
- lib/ztk/google_chart.rb
|
301
|
+
- lib/ztk/google_chart/annotation.rb
|
302
|
+
- lib/ztk/google_chart/bar.rb
|
303
|
+
- lib/ztk/google_chart/base.rb
|
304
|
+
- lib/ztk/google_chart/base/array_to_data_table.rb
|
305
|
+
- lib/ztk/google_chart/base/data_table.rb
|
306
|
+
- lib/ztk/google_chart/base/dates.rb
|
307
|
+
- lib/ztk/google_chart/base/options.rb
|
308
|
+
- lib/ztk/google_chart/base/ticks.rb
|
309
|
+
- lib/ztk/google_chart/candlestick.rb
|
310
|
+
- lib/ztk/google_chart/column.rb
|
311
|
+
- lib/ztk/google_chart/combo.rb
|
312
|
+
- lib/ztk/google_chart/line.rb
|
313
|
+
- lib/ztk/google_chart/pie.rb
|
314
|
+
- lib/ztk/google_chart/sankey.rb
|
300
315
|
- lib/ztk/locator.rb
|
301
316
|
- lib/ztk/logger.rb
|
302
317
|
- lib/ztk/parallel.rb
|