dynamic_reports 0.0.0 → 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
data/README
CHANGED
@@ -22,6 +22,8 @@
|
|
22
22
|
First we define a report in app/reports/orders_report.rb, something like:
|
23
23
|
|
24
24
|
class OrdersReport < DynamicReports::Report
|
25
|
+
title "Orders Report"
|
26
|
+
subtitle "All orders recorded in database"
|
25
27
|
columns :total, :created_at
|
26
28
|
end
|
27
29
|
|
@@ -47,39 +49,47 @@
|
|
47
49
|
|
48
50
|
Note that erb is the default templating engine since it is available by default in Ruby.
|
49
51
|
|
50
|
-
One may also surpress the default rendered styles you may specify that as an option as well:
|
51
|
-
|
52
|
-
render :text => OrdersReport.on(@orders).to_html(:style => false), :layout => "application"
|
53
|
-
|
54
52
|
Now let us extend our report definition to specify a template to use!
|
55
53
|
|
56
54
|
class OrdersReport < DynamicReports::Report
|
55
|
+
title "Orders Report"
|
56
|
+
subtitle "All orders recorded in database"
|
57
57
|
columns :total, :created_at
|
58
|
-
|
58
|
+
|
59
|
+
template :my_custom_template
|
59
60
|
end
|
60
61
|
|
61
|
-
This will look in app/views/reports/ for a template named "
|
62
|
-
If you specify :engine => :haml then it will look for "
|
62
|
+
This will look in app/views/reports/ for a template named "my_custom_template.html.erb" by default.
|
63
|
+
If you specify :engine => :haml then it will look for "my_custom_template.html.haml"
|
63
64
|
|
64
65
|
If you happen to have your report templates in a different location you can specify this as follows:
|
65
66
|
|
66
67
|
class OrdersReport < DynamicReports::Report
|
68
|
+
title "Orders Report"
|
69
|
+
subtitle "All orders recorded in database"
|
67
70
|
columns :total, :created_at
|
68
|
-
|
71
|
+
|
72
|
+
template :my_custom_template
|
69
73
|
views "app/views/admin/reports/"
|
70
74
|
end
|
71
75
|
|
72
76
|
And DynamicReports will look for the specified template in app/views/reports as well as app/views/admin/reports.
|
73
77
|
|
78
|
+
It is also worth pointing out that you can have as many dynamic reports in a view as you wish, simply include
|
79
|
+
each report render where desired within the view.
|
80
|
+
|
74
81
|
== Charts
|
75
82
|
|
76
83
|
Charts can be defined on a report easily. Let's say we wish to chart the total versus the item quantity sold for our Orders Report exmaple:
|
77
84
|
|
78
85
|
class OrdersReport < DynamicReports::Report
|
86
|
+
title "Orders Report"
|
87
|
+
subtitle "All orders recorded in database"
|
79
88
|
columns :total, :created_at
|
80
89
|
|
81
90
|
chart :total_vs_quantity do
|
82
91
|
columns :total, :quantity
|
92
|
+
label_column "created_at"
|
83
93
|
end
|
84
94
|
end
|
85
95
|
|
@@ -94,7 +104,40 @@
|
|
94
104
|
* :bar
|
95
105
|
* :pie
|
96
106
|
|
97
|
-
|
107
|
+
Since DynamicReport's charts utilize the Google Chart API, you can easily extend each chart by passing a hash of chart options as part
|
108
|
+
of the block. The options are appended onto the request to the API so they should follow the Google's API commands (http://code.google.com/apis/chart/)
|
109
|
+
|
110
|
+
For example, to add min, max and average labels to the example chart, you would do something like this:
|
111
|
+
|
112
|
+
chart :total_vs_quantity, {:chxt => "r", :chxl => "0:|min|average|max"} do
|
113
|
+
columns :total, :quantity
|
114
|
+
label_column "created_at"
|
115
|
+
end
|
116
|
+
|
117
|
+
== Stylizing
|
118
|
+
|
119
|
+
The reports are, by default, stylized with an inline style sheet. The styles produce a nicely formatted grid with
|
120
|
+
a white on black header row and black on white columns with a gray border througout.
|
121
|
+
|
122
|
+
You can create your own styles by simply adding a class_name object to the report definition as such:
|
123
|
+
|
124
|
+
class OrdersReport < DynamicReports::Report
|
125
|
+
title "Orders Report"
|
126
|
+
subtitle "All orders recorded in database"
|
127
|
+
columns :total, :created_at
|
128
|
+
|
129
|
+
class_name "my_class_name"
|
130
|
+
end
|
131
|
+
|
132
|
+
This will cause DR to simply not include the inline style. From there you can customer the styles using the
|
133
|
+
following sub-classes for your class name, for example:
|
134
|
+
|
135
|
+
.my_class_name .report_title {}
|
136
|
+
.my_class_name .report_subtitle {}
|
137
|
+
.my_class_name table tr th {}
|
138
|
+
.my_class_name table tr td {}
|
139
|
+
.my_class_name .report_charts {} // all charts are displayed within this div
|
140
|
+
.my_class_name .report_chart {} // represents an individual chart
|
98
141
|
|
99
142
|
== Rails Usage
|
100
143
|
|
data/gemspec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require "rubygems"
|
2
2
|
|
3
3
|
library="dynamic_reports"
|
4
|
-
version="0.0.
|
4
|
+
version="0.0.1"
|
5
5
|
|
6
6
|
Gem::Specification::new do |spec|
|
7
7
|
$VERBOSE = nil
|
@@ -18,7 +18,7 @@ Gem::Specification::new do |spec|
|
|
18
18
|
spec.email = "wayneeseguin@gmail.com, jlippiner@gmail.com"
|
19
19
|
spec.homepage = "http://github.com/wayneeseguin/direct_reports"
|
20
20
|
# spec.test_suite_file = "test/#{library}.rb" if File::directory?("test")
|
21
|
-
#spec.add_dependency "
|
21
|
+
#spec.add_dependency "", ">= 0.0"
|
22
22
|
spec.extensions << "extconf.rb" if File::exists?("extconf.rb")
|
23
23
|
spec.rubyforge_project = library
|
24
24
|
end
|
@@ -8,7 +8,7 @@ module DynamicReports
|
|
8
8
|
class Report
|
9
9
|
@@default_engine = "erb"
|
10
10
|
|
11
|
-
attr_accessor :name, :title, :sub_title, :columns, :charts, :records, :template, :
|
11
|
+
attr_accessor :name, :title, :sub_title, :columns, :charts, :records, :template, :class_name, :styles
|
12
12
|
|
13
13
|
# views accessor, array of view paths.
|
14
14
|
def views
|
@@ -79,13 +79,13 @@ module DynamicReports
|
|
79
79
|
options[:styles] ||= false
|
80
80
|
end
|
81
81
|
|
82
|
-
def
|
82
|
+
def class_name(value = nil)
|
83
83
|
if value
|
84
|
-
options[:
|
85
|
-
elsif options[:
|
86
|
-
options[:
|
84
|
+
options[:class_name] = value
|
85
|
+
elsif options[:class_name].empty?
|
86
|
+
options[:class_name] = self.to_s
|
87
87
|
else
|
88
|
-
options[:
|
88
|
+
options[:class_name]
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<% if report.
|
1
|
+
<% if report.class_name.nil? %>
|
2
2
|
<style type="text/css">
|
3
3
|
.dynamic_report .report_title {
|
4
4
|
font-size:16pt;
|
@@ -29,7 +29,7 @@
|
|
29
29
|
</style>
|
30
30
|
<% end %>
|
31
31
|
|
32
|
-
<div id="<%= report.
|
32
|
+
<div id="<%= report.class_name %>" class="dynamic_report">
|
33
33
|
<%= "<div class='report_title'>#{report.title}</div>" if report.title %>
|
34
34
|
<%= "<div class='report_subtitle'>#{report.sub_title}</div>" if report.sub_title %>
|
35
35
|
<table class="report" border="0" cellpadding="0" cellspacing="0">
|
@@ -1,4 +1,4 @@
|
|
1
|
-
- if report.
|
1
|
+
- if report.class_name.nil?
|
2
2
|
%style{type => "text/css"}
|
3
3
|
\.dynamic_report .report_title {
|
4
4
|
font-size:16pt;
|
@@ -26,7 +26,7 @@
|
|
26
26
|
margin:15px;
|
27
27
|
}
|
28
28
|
|
29
|
-
.dynamic_report{ :id => report.
|
29
|
+
.dynamic_report{ :id => report.class_name }
|
30
30
|
- if report.title
|
31
31
|
%h2.report_title
|
32
32
|
= report.title
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dynamic_reports
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wayne E. Seguin & Joshua Lippiner
|
@@ -36,7 +36,6 @@ files:
|
|
36
36
|
- lib/dynamic_reports/vendor/google_chart/scatter_chart.rb
|
37
37
|
- lib/dynamic_reports/vendor/google_chart/venn_diagram.rb
|
38
38
|
- lib/dynamic_reports/vendor/google_chart.rb
|
39
|
-
- lib/dynamic_reports/views/default_chart.html.erb
|
40
39
|
- lib/dynamic_reports/views/default_layout.html.erb
|
41
40
|
- lib/dynamic_reports/views/default_report.html.erb
|
42
41
|
- lib/dynamic_reports/views/default_report.html.haml
|
File without changes
|