old_sql 1.10.0 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -2,7 +2,36 @@
2
2
 
3
3
  Old SQL is a Rails Engine database reporting gem that uses plain old SQL.
4
4
 
5
- = Installation
5
+ Some features of Old SQL are:
6
+
7
+ * Reports can be created using little or no Ruby code.
8
+ - This allows the SQL for the report to be designed by a DBA, or other database developer independent of Ruby.
9
+ - Reports can be designed using a design file that mocks the reports. This file can contain data from the SQL, as well as String literals, and formulas (that can also use numeric literals).
10
+ - The design documents, which are nothing more than csv files, can also serve as documentation, and describe the layout of the report in an intuitive way.
11
+ - If you want more fine grained control and report processor can parse the SQL.
12
+ - This also makes it simple to convert legacy reports into Old SQL reports.
13
+ * Multiple report views (jqGrid, HTML table) that can be configured using the old_sql initializer.
14
+ * Old SQL uses Devise for authentication, and will install it for you. It can
15
+ even add Devise support to an existing model (by default users).
16
+ * In the report design all data is rounded to a precision that can be set in the old_sql initializer. This feature can also be disabled in the initializer.
17
+ * Old SQL has rake tasks for running the reports and outputting the result as CSV. This can simplify testing. It also allows reports to be run as a cron task.
18
+ * The look of Old SQL can be customized.
19
+ * Support for printing and exporting to csv.
20
+
21
+ == Quick Setup and Demo
22
+
23
+ 1. Add gem 'old_sql', and gem 'devise' to your Gemfile.
24
+ 2. bundle instal
25
+ 3. rails g old_sql:install, or rails g old_sql:install <model>
26
+ 4. rake db:migrate
27
+ 5. Ensure you have at least one user record, and that old_sql_admin=true.
28
+ 6. if you didn't previously have Devise installed open rails console, and select your old_sql_admin user, and set password and password_confirmation. Save, and exit.
29
+ 7. Type rails s to start your rails server.
30
+ 8. Navigate to http://localhost:3000/sql/reports
31
+ 9. Authenticate using your old_sql_admin user.
32
+ 10. Select user from the Reports drop down list. Click run.
33
+
34
+ == Installation
6
35
 
7
36
  To install Old SQL type:
8
37
 
@@ -13,8 +42,43 @@ This will create the following directories:
13
42
  * config/old_sql
14
43
  * lib/old_sql
15
44
 
16
- Configure your reports config/old_sql/report.yml.
45
+ This generator will also create a migration that will add a old_sql_admin column to the model used for authentication (by default users).
46
+
47
+ If not already installed Devise is setup.
48
+
49
+ == Setup
50
+
51
+ Configure your reports config/old_sql/report.yml. An example configuration is created when you run the old_sql:install generator.
52
+
53
+ # Old SQL Reports YAML
54
+ # This is an example report. Replace it with your actual reports.
55
+ #
56
+ # 'description' is the value displayed in the 'SELECT A REPORT' drop down list.
57
+ #
58
+ # The 'report_sql' file should be located under config/old_sql/report_sql.
59
+ # See config/old_sql/report_sql/user_old_sql_demo.sql for an example.
60
+ #
61
+ # The 'processor' parameter is optional, and should point to a class in lib/old_sql.
62
+ # See lib/old_sql/user_old_sql_demo_processor.rb for an example.
63
+ #
64
+ # 'report_processor' names should be capitalized and separated with underscores. The file
65
+ # itself should follow normal ruby class naming conventions.
66
+ #
67
+ # 'report_design' is also optional, and should point to a file in config/old_sql/report_design.
68
+ # See config/old_sql/report_design/user_old_sql_demo.csv for an example.
69
+ #
70
+ # The 'fields' are the headers for the report.
71
+
72
+ user:
73
+ description: User
74
+ report_sql: user_old_sql_demo
75
+ report_design: user_old_sql_demo
76
+ #report_processor: User_Old_Sql_Demo_Processor
77
+ fields:
78
+ - 'id'
79
+ - 'name'
17
80
 
81
+ == Customize
18
82
 
19
83
  == Contributing to old_sql
20
84
 
@@ -2,7 +2,7 @@ require 'csv'
2
2
 
3
3
  module OldSql
4
4
  class ReportController < ApplicationController
5
- before_filter :authenticate_user!
5
+ before_filter :"authenticate_#{OldSql.devise_model}!"
6
6
  before_filter :ensure_old_sql_admin!
7
7
  before_filter :_init
8
8
  before_filter :_reports
@@ -22,7 +22,6 @@ module OldSql
22
22
  def jqgrid
23
23
  @start_date = params[:start_date]
24
24
  @end_date = params[:end_date]
25
- @generation = params[:generation]
26
25
  @report_name = params[:report]
27
26
  @report_sql = params[:report_sql]
28
27
 
@@ -37,7 +36,6 @@ module OldSql
37
36
  def table
38
37
  @start_date = params[:start_date]
39
38
  @end_date = params[:end_date]
40
- @generation = params[:generation]
41
39
  @report_name = params[:report]
42
40
  @report_sql = params[:report_sql].downcase
43
41
  @report_sql_orig = params[:report_sql].downcase
@@ -45,10 +43,6 @@ module OldSql
45
43
  @width = OldSql.report_width
46
44
  @height = OldSql.report_height
47
45
 
48
- if !@generation.nil? && @generation.to_i >= 0
49
- @report_sql << "_gen_#{@generation}"
50
- end
51
-
52
46
  processor = load_base_processor
53
47
  @report = processor.execute_query(@report_sql,@start_date,@end_date,query_vars(@report_name),@reports[@report_name]['report_design'],
54
48
  @reports[@report_name]['report_processor'])
@@ -59,15 +53,10 @@ module OldSql
59
53
  def query
60
54
  @start_date = params[:start_date]
61
55
  @end_date = params[:end_date]
62
- @generation = params[:generation]
63
56
  @report_name = params[:report]
64
57
  @report_sql = params[:report_sql].downcase
65
58
  @report_sql_orig = params[:report_sql].downcase
66
59
 
67
- if !@generation.nil? && @generation.to_i >= 0
68
- @report_sql << "_gen_#{@generation}"
69
- end
70
-
71
60
  processor = load_base_processor
72
61
  @report = processor.execute_query(@report_sql,@start_date,@end_date,query_vars(@report_name),@reports[@report_name]['report_design'],
73
62
  @reports[@report_name]['report_processor'])
@@ -101,16 +90,11 @@ module OldSql
101
90
  def print
102
91
  @start_date = params[:start_date]
103
92
  @end_date = params[:end_date]
104
- @generation = params[:generation]
105
93
  @report_name = params[:report]
106
94
  @desc = params[:desc]
107
95
  @report_sql = params[:report_sql].downcase
108
96
  @report_sql_orig = params[:report_sql].downcase
109
97
 
110
- if !@generation.nil? && @generation.to_i >= 0
111
- @report_sql << "_gen_#{@generation}"
112
- end
113
-
114
98
  processor = load_base_processor
115
99
  @report = processor.execute_query(@report_sql,@start_date,@end_date,query_vars(@report_name),@reports[@report_name]['report_design'],
116
100
  @reports[@report_name]['report_processor'])
@@ -121,7 +105,7 @@ module OldSql
121
105
 
122
106
  private
123
107
  def ensure_old_sql_admin!
124
- render_error(Exception.new "Old SQL Access Denied.") unless current_user.old_sql_admin?
108
+ render_error(Exception.new "Old SQL Access Denied.") unless eval("current_user.old_sql_admin?")
125
109
  end
126
110
 
127
111
  def _init
@@ -166,6 +150,8 @@ module OldSql
166
150
  end
167
151
 
168
152
  def jqgrid_col_names
153
+ logger.info @reports
154
+ logger.info "REPORT NAME #{@report_name}"
169
155
  json = @reports[@report_name]['fields'].to_json
170
156
  json.html_safe
171
157
  end
@@ -6,7 +6,7 @@
6
6
  <script>
7
7
  jQuery(document).ready(function(){
8
8
  jQuery("#rowed1").jqGrid({
9
- url:"http://<%=@host%>:<%=@port%>/sql/reports/query.json/?report=<%=@report_name%>&report_sql=<%=@report_sql%>&generation=<%=@generation%>&start_date=<%=@start_date%>&end_date=<%=@end_date%>",
9
+ url:"http://<%=@host%>:<%=@port%>/sql/reports/query.json/?report=<%=@report_name%>&report_sql=<%=@report_sql%>&start_date=<%=@start_date%>&end_date=<%=@end_date%>",
10
10
  datatype: "json",
11
11
  pager: false,
12
12
  colNames: <%=jqgrid_col_names%>,
@@ -17,24 +17,12 @@ var report_view = "<%=@report_view%>";
17
17
  onchange="report_selected()">
18
18
  <option></option>
19
19
  <% @reports.each do |report, data| %>
20
- <option value="<%= data['name'] %>" virality="<%= data['virality'] %>" report_sql="<%= data['report_sql'] %>" desc="<%= data['value'] %>"><%= data['value'] %></option>
20
+ <option value="<%= data['name'] %>" report_sql="<%= data['report_sql'] %>" desc="<%= data['description'] %>" name="<%=report%>"><%= data['description'] %></option>
21
21
  <% end %>
22
22
  </select>
23
23
  </div>
24
24
  </div>
25
25
 
26
- <div class="report-form-row">
27
- <div class="report-form-label">GENERATION:</div>
28
- <div class="report-form-input">
29
- <select name="generation" id="select-generation">
30
- <option value="-1"></option>
31
- <option value="0">0</option>
32
- <option value="1">1</option>
33
- <option value="2">2</option>
34
- </select>
35
- </div>
36
- </div>
37
-
38
26
  <div class="report-form-row">
39
27
  <div class="report-form-label">START DATE:</div>
40
28
  <div class="report-form-input">
@@ -15,6 +15,7 @@ module OldSql
15
15
 
16
16
  def copy_old_sql_files
17
17
  copy_file "#{gem_path}/public/stylesheets/old_sql/old_sql.css", "#{app_path}/public/stylesheets/old_sql/old_sql.css"
18
+ copy_file "#{gem_path}/public/stylesheets/old_sql/old_sql.css", "#{app_path}/public/stylesheets/old_sql/table.css"
18
19
  copy_file "#{gem_path}/app/views/layouts/old_sql/report.html.erb", "#{app_path}/app/views/layouts/old_sql/report.html.erb"
19
20
  end
20
21
 
@@ -61,6 +61,11 @@ module OldSql
61
61
  copy_file "user_design_template.csv", "#{app_path}/config/old_sql/report_design/user_old_sql_demo.csv"
62
62
  end
63
63
 
64
+ def configure_initializer
65
+ initializer_path = "#{app_path}/config/initializers/old_sql.rb"
66
+ gsub_file initializer_path, /DeviseModel/, "#{model_name.downcase}"
67
+ end
68
+
64
69
  ################ PRIVATE ################
65
70
 
66
71
  private
@@ -1,5 +1,8 @@
1
1
  # Use this hook to configure the default report view, etc.
2
2
  OldSql.setup do |config|
3
+ # The model used by devise. Ensure that the devise columns are installed in the model.
4
+ config.devise_model = 'DeviseModel'
5
+
3
6
  # ==> Default Report View Configuration
4
7
  # The title of the Report Selection View.
5
8
  config.report_select_page_title = 'Old SQL Reports'
@@ -1,14 +1,25 @@
1
1
  # Old SQL Reports YAML
2
2
  # This is an example report. Replace it with your actual reports.
3
3
  #
4
- # 'processor:' is optional, and should point to a class in lib/old_sql.
5
- # See lib/old_sql/user_processor.rb for an example.
4
+ # 'description' is the value displayed in the 'SELECT A REPORT' drop down list.
5
+ #
6
+ # The 'report_sql' file should be located under config/old_sql/report_sql.
7
+ # See config/old_sql/report_sql/user_old_sql_demo.sql for an example.
8
+ #
9
+ # The 'processor' parameter is optional, and should point to a class in lib/old_sql.
10
+ # See lib/old_sql/user_old_sql_demo_processor.rb for an example.
11
+ #
12
+ # 'report_processor' names should be capitalized and separated with underscores. The file
13
+ # itself should follow normal ruby class naming conventions.
14
+ #
15
+ # 'report_design' is also optional, and should point to a file in config/old_sql/report_design.
16
+ # See config/old_sql/report_design/user_old_sql_demo.csv for an example.
17
+ #
18
+ # The 'fields' are the headers for the report.
6
19
 
7
20
  user:
8
- name: user
9
- value: User
21
+ description: User
10
22
  report_sql: user_old_sql_demo
11
- virality: false
12
23
  report_design: user_old_sql_demo
13
24
  #report_processor: User_Old_Sql_Demo_Processor
14
25
  fields:
data/lib/old_sql.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  module OldSql
2
2
  require 'old_sql/engine' if defined?(Rails)
3
3
 
4
+ # The model used by devise. Ensure that the devise columns are installed in the model.
5
+ mattr_accessor :devise_model
6
+ @@devise_model = 'user'
7
+
4
8
  # The title of the Report Selection View.
5
9
  mattr_accessor :report_select_page_title
6
10
  @@report_select_page_title = 'Old SQL Reports'
@@ -1,28 +1,13 @@
1
- var _report_sql = '';
2
- var _report_loaded = false;
3
-
4
- function report_selected()
5
- {
6
- var virality = jQuery("#report option:selected").attr('virality');
7
- _report_sql = jQuery("#report option:selected").attr('report_sql');
8
-
9
- if (virality == 'true')
10
- {
11
- jQuery("#select-generation").removeAttr('disabled');
12
- }
13
- else
14
- {
15
- jQuery("#select-generation").attr('disabled', 'disabled');
16
- jQuery("#select-generation option:first").attr('selected','selected');
17
- }
18
- }
19
-
20
1
  function load_report()
21
2
  {
22
- var src = "http://"+host+":"+port+"/sql/reports/"+report_view+"/?report="+jQuery("#report").val()+
23
- "&start_date="+jQuery("#datepicker-start").val()+"&end_date="+jQuery("#datepicker-end").val()+"&generation="+
24
- jQuery("#select-generation").val()+"&report_sql="+
25
- _report_sql;
3
+ report_name = jQuery("#report option:selected").attr('name');
4
+ report_sql = jQuery("#report option:selected").attr('report_sql');
5
+
6
+ if (!reported_selected(report_name)) return;
7
+
8
+ var src = "http://"+host+":"+port+"/sql/reports/"+report_view+"/?report="+report_name+
9
+ "&start_date="+jQuery("#datepicker-start").val()+"&end_date="+jQuery("#datepicker-end").val()+"&report_sql="+
10
+ report_sql;
26
11
 
27
12
  jQuery('iframe').attr('src', src);
28
13
 
@@ -31,40 +16,45 @@ function load_report()
31
16
 
32
17
  function print_report()
33
18
  {
34
- if(_report_loaded == false)
35
- {
36
- alert("You must select a report, and run it before continuing.");
37
- return;
38
- }
19
+ report_name = jQuery("#report option:selected").attr('name');
20
+ report_sql = jQuery("#report option:selected").attr('report_sql');
21
+
22
+ if (!reported_selected(report_name)) return;
39
23
 
40
- var src = "http://"+host+":"+port+"/sql/reports/print/?report="+jQuery("#report").val()+
41
- "&start_date="+jQuery("#datepicker-start").val()+"&end_date="+jQuery("#datepicker-end").val()+"&generation="+
42
- jQuery("#select-generation").val()+"&report_sql="+_report_sql+"&desc="+jQuery("#report option:selected").attr('desc');
24
+ var src = "http://"+host+":"+port+"/sql/reports/print/?report="+report_name+
25
+ "&start_date="+jQuery("#datepicker-start").val()+"&end_date="+jQuery("#datepicker-end").val()+
26
+ "&report_sql="+report_sql+"&desc="+jQuery("#report option:selected").attr('desc');
43
27
  window.open(src,'Old SQL Report')
44
28
  }
45
29
 
46
30
  function export_report_to_excel()
47
31
  {
48
- if(_report_loaded == false)
49
- {
50
- alert("You must select a report, and run it before continuing.");
51
- return;
52
- }
32
+ report_name = jQuery("#report option:selected").attr('name');
33
+ report_sql = jQuery("#report option:selected").attr('report_sql');
34
+
35
+ if (!reported_selected(report_name)) return;
53
36
 
54
- var src = "http://"+host+":"+port+"/sql/reports/query.csv/?report="+jQuery("#report").val()+
37
+ var src = "http://"+host+":"+port+"/sql/reports/query.csv/?report="+report_name+
55
38
  "&start_date="+jQuery("#datepicker-start").val()+"&end_date="+jQuery("#datepicker-end").val()+
56
- "&generation="+jQuery("#select-generation").val()+"&report_sql="+
57
- _report_sql+"&desc="+jQuery("#report option:selected").attr('desc');
39
+ "&report_sql="+ report_sql+"&desc="+jQuery("#report option:selected").attr('desc');
58
40
  window.open(src,'DB Report')
59
41
  }
60
42
 
43
+ function reported_selected(report_name)
44
+ {
45
+ if (!report_name) {
46
+ alert("You must select a report, and run it before continuing.");
47
+ return false;
48
+ } else {
49
+ return true;
50
+ }
51
+ }
52
+
61
53
  jQuery(document).ready(function($){
62
54
  jQuery("#datepicker-start").datetimepicker();
63
55
  jQuery("#datepicker-start").datetimepicker( "option", "dateFormat", "yy/mm/dd" );
64
56
  jQuery("#datepicker-end").datetimepicker();
65
57
  jQuery("#datepicker-end").datetimepicker( "option", "dateFormat", "yy/mm/dd" );
66
-
67
- jQuery("#select-generation").attr('disabled', 'disabled');
68
58
 
69
59
  var now = new Date();
70
60
  var tomorrow = new Date();
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: old_sql
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.10.0
5
+ version: 1.11.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Eddie Gonzales
@@ -185,7 +185,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
185
185
  requirements:
186
186
  - - ">="
187
187
  - !ruby/object:Gem::Version
188
- hash: -1338027586824661245
188
+ hash: 780971945359697670
189
189
  segments:
190
190
  - 0
191
191
  version: "0"