prawn_charts 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +87 -17
- data/lib/prawn_charts.rb +1 -2
- data/lib/prawn_charts/core_extensions.rb +7 -0
- data/lib/prawn_charts/data_collector.rb +68 -0
- data/lib/prawn_charts/data_points.rb +16 -0
- data/lib/prawn_charts/examples/linear_example.rb +55 -0
- data/lib/prawn_charts/examples/log_example.rb +56 -133
- data/lib/prawn_charts/helpers.rb +26 -0
- data/lib/prawn_charts/linear_vertical_data_collector.rb +23 -0
- data/lib/prawn_charts/log_vertical_data_collector.rb +27 -0
- data/lib/prawn_charts/prawn_chart_renderer.rb +139 -0
- data/lib/prawn_charts/renderer_assistant.rb +146 -0
- data/lib/prawn_charts/version.rb +1 -1
- data/spec/data_collector_spec.rb +64 -0
- data/spec/linear_vertical_data_collector_spec.rb +17 -0
- data/spec/log_vertical_data_collector.rb +12 -0
- data/todo +5 -0
- metadata +18 -31
- data/lib/prawn_charts/data_collectors/container/container_data_collector.rb +0 -59
- data/lib/prawn_charts/data_collectors/container/graph_title_data_collector.rb +0 -15
- data/lib/prawn_charts/data_collectors/graph/horizontal_lines_data_collector.rb +0 -22
- data/lib/prawn_charts/data_collectors/graph/linear_y_pdf_data_collector.rb +0 -23
- data/lib/prawn_charts/data_collectors/graph/log_y_pdf_data_collector.rb +0 -21
- data/lib/prawn_charts/data_collectors/graph/pdf_data_collector.rb +0 -26
- data/lib/prawn_charts/data_collectors/graph/x_labels_data_collector.rb +0 -29
- data/lib/prawn_charts/data_collectors/graph/x_pdf_data_collector.rb +0 -16
- data/lib/prawn_charts/data_collectors/graph/y_labels_data_collector.rb +0 -35
- data/lib/prawn_charts/data_collectors/graph/y_pdf_data_collector.rb +0 -21
- data/lib/prawn_charts/examples/simple_linear_example.rb +0 -59
- data/lib/prawn_charts/examples/simple_log_example.rb +0 -59
- data/lib/prawn_charts/renderers/prawn_chart_renderer.rb +0 -31
- data/spec/data_collectors/container/container_data_collector_spec.rb +0 -59
- data/spec/data_collectors/graph/horizontal_lines_data_collector_spec.rb +0 -19
- data/spec/data_collectors/graph/linear_y_pdf_data_collector_spec.rb +0 -19
- data/spec/data_collectors/graph/log_y_pdf_data_collector_spec.rb +0 -26
- data/spec/data_collectors/graph/pdf_data_collector_spec.rb +0 -49
- data/spec/data_collectors/graph/x_labels_data_collector_spec.rb +0 -20
- data/spec/data_collectors/graph/x_pdf_data_collector_spec.rb +0 -23
- data/spec/data_collectors/graph/y_labels_data_collector_spec.rb +0 -21
@@ -1,31 +0,0 @@
|
|
1
|
-
module PrawnCharts
|
2
|
-
module PrawnChartRenderer
|
3
|
-
def draw_chart(pdf_data)
|
4
|
-
pdf_data.each_index do |i|
|
5
|
-
stroke_line(pdf_data[i], pdf_data[i + 1]) unless pdf_data[i + 1].nil?
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
def draw_dots(pdf_data, dot_radius)
|
10
|
-
pdf_data.each do |point|
|
11
|
-
fill_circle(point, dot_radius)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def draw_horizontal_lines(horizontal_lines_data)
|
16
|
-
horizontal_lines_data.each do |start_x, end_x, y|
|
17
|
-
stroke_horizontal_line start_x, end_x, at: y
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def draw_labels(label_data, width, height, options = {})
|
22
|
-
label_data.each do |label, pdf_point|
|
23
|
-
text_box(label, { at: pdf_point, width: width, height: height }.merge(options))
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def draw_title(inputs, options = {})
|
28
|
-
text_box(inputs[:title], { at: inputs[:at], width: inputs[:width], height: inputs[:height] }.merge(options))
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
module PrawnCharts
|
4
|
-
describe ContainerDataCollector do
|
5
|
-
before do
|
6
|
-
container_inputs = {
|
7
|
-
container_left_padding: 7,
|
8
|
-
y_label_offset: 50,
|
9
|
-
y_label_width: 25,
|
10
|
-
y_title_width: 30,
|
11
|
-
container_right_padding: 20,
|
12
|
-
container_top_padding: 9,
|
13
|
-
graph_title_height: 25,
|
14
|
-
container_bottom_padding: 40,
|
15
|
-
x_label_height: 22,
|
16
|
-
x_title_height: 43,
|
17
|
-
graph_height: 400,
|
18
|
-
graph_width: 500
|
19
|
-
}
|
20
|
-
@container_data_collector = ContainerDataCollector.new(container_inputs)
|
21
|
-
end
|
22
|
-
|
23
|
-
context "#height" do
|
24
|
-
it "returns the pdf_height of the graph container" do
|
25
|
-
expect(@container_data_collector.height).to eq(539)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context "#width" do
|
30
|
-
it "returns the pdf_width of the graph container" do
|
31
|
-
expect(@container_data_collector.width).to eq(632)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context "#graph_top_left_corner" do
|
36
|
-
it "returns the point for the top-left corner of the graph" do
|
37
|
-
expect(@container_data_collector.graph_top_left).to eq([112, 505])
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context "#graph_title_top_left" do
|
42
|
-
it "returns x, y coordinate for placement of graph title" do
|
43
|
-
expect(@container_data_collector.graph_title_top_left).to eq([112, 530])
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
context "#y_title_top_left" do
|
48
|
-
it "returns x, y coordinate for placement of y title" do
|
49
|
-
expect(@container_data_collector.y_title_top_left).to eq([7, 505])
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
context "#x_title_top_left" do
|
54
|
-
it "returns x, y coordinate for placement of x title" do
|
55
|
-
expect(@container_data_collector.x_title_top_left).to eq([112, 83])
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
module PrawnCharts
|
4
|
-
describe HorizontalLinesDataCollector do
|
5
|
-
before do
|
6
|
-
graph_height_pdf = 60
|
7
|
-
graph_width_pdf = 80
|
8
|
-
y_labels = [0, 10, 100, 1_000, 10_000, 100_000, 1_000_000]
|
9
|
-
@horizontal_lines_data_collector = HorizontalLinesDataCollector.new(graph_height_pdf, graph_width_pdf, y_labels)
|
10
|
-
end
|
11
|
-
|
12
|
-
context "#collect" do
|
13
|
-
it "returns an array with the start, end, and y position of the horizontal lines" do
|
14
|
-
expected = [[0, 80, 0.0], [0, 80, 10.0], [0, 80, 20.0], [0, 80, 30.0], [0, 80, 40.0], [0, 80, 50.0], [0, 80, 60.0]]
|
15
|
-
expect(@horizontal_lines_data_collector.collect).to eq(expected)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module PrawnCharts
|
4
|
-
describe LinearYPdfDataCollector do
|
5
|
-
before do
|
6
|
-
input_data = [["Jan 11", 5], ["Feb 11", 2], ["Mar 11", 12]]
|
7
|
-
graph_height_pdf = 160
|
8
|
-
y_labels = [0, 4, 8, 12, 16]
|
9
|
-
@linear_y_pdf_data_collector = LinearYPdfDataCollector.new(input_data, graph_height_pdf, y_labels)
|
10
|
-
end
|
11
|
-
|
12
|
-
context "#collect" do
|
13
|
-
it "returns an array of y values in pdf points" do
|
14
|
-
expected = [50, 20, 120]
|
15
|
-
expect(@linear_y_pdf_data_collector.collect).to eq(expected)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
module PrawnCharts
|
4
|
-
describe LogYPdfDataCollector do
|
5
|
-
before do
|
6
|
-
@graph_height_pdf = 60
|
7
|
-
@y_labels = [0, 10, 100, 1_000, 10_000, 100_000, 1_000_000]
|
8
|
-
end
|
9
|
-
|
10
|
-
context "#collect" do
|
11
|
-
it "returns an array of [x_pdf, y_pdf] for all data points" do
|
12
|
-
input_data = [["Jan 11", 5], ["Feb 11", 900], ["Mar 11", 800_000]]
|
13
|
-
log_y_pdf_data_collector = LogYPdfDataCollector.new(input_data, @graph_height_pdf, @y_labels)
|
14
|
-
expected = [10 * Math.log10(5), 10 * Math.log10(900), 10 * Math.log10(800_000)]
|
15
|
-
expect(log_y_pdf_data_collector.collect).to eq(expected)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "it returns nil when a value is nil" do
|
19
|
-
input_data = [["Jan 11", 5], ["Feb 11", nil], ["Mar 11", 800_000]]
|
20
|
-
log_y_pdf_data_collector = LogYPdfDataCollector.new(input_data, @graph_height_pdf, @y_labels)
|
21
|
-
expected = [10 * Math.log10(5), nil, 10 * Math.log10(800_000)]
|
22
|
-
expect(log_y_pdf_data_collector.collect).to eq(expected)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
module PrawnCharts
|
4
|
-
describe PdfDataCollector do
|
5
|
-
context "linear" do
|
6
|
-
before do
|
7
|
-
scale = :linear
|
8
|
-
input_data = [["Jan 11", 5], ["Feb 11", 2], ["Mar 11", 12]]
|
9
|
-
graph_width_pdf = 100
|
10
|
-
graph_height_pdf = 120
|
11
|
-
y_labels = [0, 3, 6, 9, 12]
|
12
|
-
@linear_pdf_data_collector = PdfDataCollector.new(scale, input_data, graph_width_pdf, graph_height_pdf, y_labels)
|
13
|
-
end
|
14
|
-
|
15
|
-
it "returns an array of pdf points where line should be plotted" do
|
16
|
-
expected = [[0, 50], [50, 20], [100, 120]]
|
17
|
-
expect(@linear_pdf_data_collector.collect).to eq(expected)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
context "log" do
|
22
|
-
before do
|
23
|
-
scale = :log
|
24
|
-
input_data = [["Jan 11", 5], ["Feb 11", 900], ["Mar 11", 800_000]]
|
25
|
-
graph_width_pdf = 200
|
26
|
-
graph_height_pdf = 120
|
27
|
-
y_labels = [0, 10, 100, 1_000, 10_000, 100_000, 1_000_000]
|
28
|
-
@log_pdf_data_collector = PdfDataCollector.new(scale, input_data, graph_width_pdf, graph_height_pdf, y_labels)
|
29
|
-
end
|
30
|
-
|
31
|
-
it "returns an array of pdf points where line should be plotted" do
|
32
|
-
expected = [[0.0, Math.log10(5) * 20], [100.0, Math.log10(900) * 20], [200.0, Math.log10(800_000) * 20]]
|
33
|
-
expect(@log_pdf_data_collector.collect).to eq(expected)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
context "invalid scale input" do
|
38
|
-
it "raises an error unless scale is :linear or :log" do
|
39
|
-
scale = :phattie
|
40
|
-
input_data = [["Jan 11", 5], ["Feb 11", 900], ["Mar 11", 800_000]]
|
41
|
-
graph_width_pdf = 200
|
42
|
-
graph_height_pdf = 120
|
43
|
-
y_labels = [0, 10, 100, 1_000, 10_000, 100_000, 1_000_000]
|
44
|
-
log_pdf_data_collector = PdfDataCollector.new(scale, input_data, graph_width_pdf, graph_height_pdf, y_labels)
|
45
|
-
expect{log_pdf_data_collector.collect}.to raise_error(RuntimeError)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
module PrawnCharts
|
4
|
-
describe XLabelsDataCollector do
|
5
|
-
before do
|
6
|
-
input_data = [["Jan 11", 5], ["Feb 11", 2], ["Mar 11", 12]]
|
7
|
-
graph_width_pdf = 160
|
8
|
-
vertical_offset = 20
|
9
|
-
label_width = 50
|
10
|
-
@x_labels_data_collector = XLabelsDataCollector.new(input_data, graph_width_pdf, vertical_offset, label_width)
|
11
|
-
end
|
12
|
-
|
13
|
-
context "#collect" do
|
14
|
-
it "returns array of labels and [x, y] coordinate where the label should be plotted" do
|
15
|
-
expected = [["Jan 11", [-25.0, -20]], ["Feb 11", [55.0, -20]], ["Mar 11", [135.0, -20]]]
|
16
|
-
expect(@x_labels_data_collector.collect).to eq(expected)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module PrawnCharts
|
4
|
-
describe XPdfDataCollector do
|
5
|
-
before do
|
6
|
-
input_data = [["Jan 11", 5], ["Feb 11", 2], ["Mar 11", 12]]
|
7
|
-
graph_width_pdf = 160
|
8
|
-
@x_pdf_data_collector = XPdfDataCollector.new(input_data, graph_width_pdf)
|
9
|
-
end
|
10
|
-
|
11
|
-
context "#pdf_points_per_unit" do
|
12
|
-
it "returns number of pdf points per unit on x axis" do
|
13
|
-
expect(@x_pdf_data_collector.pdf_points_per_unit).to eq(80.0)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context "#collect" do
|
18
|
-
it "returns an array of x pdf points" do
|
19
|
-
expect(@x_pdf_data_collector.collect).to eq([0, 80, 160])
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
module PrawnCharts
|
4
|
-
describe YLabelsDataCollector do
|
5
|
-
before do
|
6
|
-
y_labels = [0, 10, 100, 1_000, 10_000, 100_000, 1_000_000, 10_000_000]
|
7
|
-
graph_height_pdf = 560
|
8
|
-
label_width = 15
|
9
|
-
label_height = 20
|
10
|
-
y_label_offset = 30
|
11
|
-
@y_data_collector = YLabelsDataCollector.new(y_labels, graph_height_pdf, label_width, label_height, y_label_offset)
|
12
|
-
end
|
13
|
-
|
14
|
-
context "#collect" do
|
15
|
-
it "returns an array of y_labels and points where they should be plotted" do
|
16
|
-
expected = [["0", [-45, 10.0]], ["10", [-45, 90.0]], ["100", [-45, 170.0]], ["1,000", [-45, 250.0]], ["10,000", [-45, 330.0]], ["100,000", [-45, 410.0]], ["1,000,000", [-45, 490.0]], ["10,000,000", [-45, 570.0]]]
|
17
|
-
expect(@y_data_collector.collect).to eq(expected)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|