report_cat 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +147 -0
  4. data/Rakefile +24 -0
  5. data/app/assets/javascripts/report_cat/application.js +13 -0
  6. data/app/assets/stylesheets/report_cat/application.css +13 -0
  7. data/app/controllers/report_cat/reports_controller.rb +43 -0
  8. data/app/helpers/report_cat/reports_helper.rb +132 -0
  9. data/app/models/report_cat/date_range.rb +94 -0
  10. data/app/views/report_cat/reports/_google_charts.html.erb +61 -0
  11. data/app/views/report_cat/reports/index.html.erb +2 -0
  12. data/app/views/report_cat/reports/show.html.erb +15 -0
  13. data/config/locales/en.yml +26 -0
  14. data/config/routes.rb +7 -0
  15. data/db/migrate/20130918075200_create_date_ranges.rb +13 -0
  16. data/lib/report_cat/config.rb +30 -0
  17. data/lib/report_cat/core/chart.rb +50 -0
  18. data/lib/report_cat/core/column.rb +70 -0
  19. data/lib/report_cat/core/param.rb +35 -0
  20. data/lib/report_cat/core/report.rb +127 -0
  21. data/lib/report_cat/engine.rb +11 -0
  22. data/lib/report_cat/matchers/have_chart.rb +58 -0
  23. data/lib/report_cat/matchers/have_column.rb +45 -0
  24. data/lib/report_cat/matchers/have_param.rb +52 -0
  25. data/lib/report_cat/reports/cohort_report.rb +113 -0
  26. data/lib/report_cat/reports/date_range_report.rb +66 -0
  27. data/lib/report_cat/version.rb +3 -0
  28. data/lib/report_cat.rb +39 -0
  29. data/lib/tasks/report_cat.rake +4 -0
  30. data/spec/controllers/report_cat/reports_controller_spec.rb +100 -0
  31. data/spec/coverage_spec.rb +18 -0
  32. data/spec/data/helpers/report_charts.html +1 -0
  33. data/spec/data/helpers/report_charts.html.tmp +1 -0
  34. data/spec/data/helpers/report_form.html +63 -0
  35. data/spec/data/helpers/report_form.html.tmp +63 -0
  36. data/spec/data/helpers/report_form_param.html +1 -0
  37. data/spec/data/helpers/report_form_param.html.tmp +1 -0
  38. data/spec/data/helpers/report_list.html +1 -0
  39. data/spec/data/helpers/report_list.html.tmp +1 -0
  40. data/spec/data/helpers/report_param_checkbox.html +1 -0
  41. data/spec/data/helpers/report_param_checkbox.html.tmp +1 -0
  42. data/spec/data/helpers/report_param_date.html +60 -0
  43. data/spec/data/helpers/report_param_date.html.tmp +60 -0
  44. data/spec/data/helpers/report_param_hidden.html +1 -0
  45. data/spec/data/helpers/report_param_hidden.html.tmp +1 -0
  46. data/spec/data/helpers/report_param_select.html +3 -0
  47. data/spec/data/helpers/report_param_select.html.tmp +3 -0
  48. data/spec/data/helpers/report_param_text_field.html +1 -0
  49. data/spec/data/helpers/report_param_text_field.html.tmp +1 -0
  50. data/spec/data/helpers/report_table.html +1 -0
  51. data/spec/data/helpers/report_table.html.tmp +1 -0
  52. data/spec/data/helpers/report_table_hidden.html +1 -0
  53. data/spec/data/helpers/report_table_hidden.html.tmp +1 -0
  54. data/spec/data/lib/chart_columns.json +1 -0
  55. data/spec/data/lib/chart_columns.json.tmp +1 -0
  56. data/spec/data/lib/chart_data.json +1 -0
  57. data/spec/data/lib/chart_data.json.tmp +1 -0
  58. data/spec/data/lib/date_range_report_where.sql +6 -0
  59. data/spec/data/lib/date_range_report_where.sql.tmp +6 -0
  60. data/spec/data/lib/report.csv +3 -0
  61. data/spec/data/lib/report.csv.tmp +3 -0
  62. data/spec/data/lib/report.sql +1 -0
  63. data/spec/data/lib/report.sql.tmp +1 -0
  64. data/spec/data/models/sql_intersect.sql +5 -0
  65. data/spec/data/models/sql_intersect.sql.tmp +5 -0
  66. data/spec/dummy/README.rdoc +28 -0
  67. data/spec/dummy/Rakefile +6 -0
  68. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  69. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  70. data/spec/dummy/app/controllers/application_controller.rb +21 -0
  71. data/spec/dummy/app/controllers/root_controller.rb +20 -0
  72. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  73. data/spec/dummy/app/models/user.rb +13 -0
  74. data/spec/dummy/app/models/visit.rb +16 -0
  75. data/spec/dummy/app/reports/retention_cohort_report.rb +19 -0
  76. data/spec/dummy/app/reports/retention_report.rb +30 -0
  77. data/spec/dummy/app/reports/user_report.rb +23 -0
  78. data/spec/dummy/app/views/layouts/admin.html.erb +19 -0
  79. data/spec/dummy/app/views/layouts/application.html.erb +19 -0
  80. data/spec/dummy/app/views/root/index.html.erb +8 -0
  81. data/spec/dummy/bin/bundle +3 -0
  82. data/spec/dummy/bin/rails +4 -0
  83. data/spec/dummy/bin/rake +4 -0
  84. data/spec/dummy/config/application.rb +30 -0
  85. data/spec/dummy/config/boot.rb +5 -0
  86. data/spec/dummy/config/database.yml +25 -0
  87. data/spec/dummy/config/environment.rb +5 -0
  88. data/spec/dummy/config/environments/development.rb +31 -0
  89. data/spec/dummy/config/environments/production.rb +80 -0
  90. data/spec/dummy/config/environments/test.rb +36 -0
  91. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  92. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  93. data/spec/dummy/config/initializers/inflections.rb +16 -0
  94. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  95. data/spec/dummy/config/initializers/report_cat.rb +15 -0
  96. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  97. data/spec/dummy/config/initializers/session_store.rb +3 -0
  98. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  99. data/spec/dummy/config/locales/en.yml +38 -0
  100. data/spec/dummy/config/routes.rb +13 -0
  101. data/spec/dummy/config.ru +4 -0
  102. data/spec/dummy/db/development.sqlite3 +0 -0
  103. data/spec/dummy/db/schema.rb +26 -0
  104. data/spec/dummy/db/test.sqlite3 +0 -0
  105. data/spec/dummy/log/development.log +61 -0
  106. data/spec/dummy/log/test.log +26478 -0
  107. data/spec/dummy/public/404.html +58 -0
  108. data/spec/dummy/public/422.html +58 -0
  109. data/spec/dummy/public/500.html +57 -0
  110. data/spec/dummy/public/favicon.ico +0 -0
  111. data/spec/helpers/report_cat/reports_helper_spec.rb +224 -0
  112. data/spec/lib/report_cat/config_spec.rb +96 -0
  113. data/spec/lib/report_cat/core/chart_spec.rb +67 -0
  114. data/spec/lib/report_cat/core/column_spec.rb +156 -0
  115. data/spec/lib/report_cat/core/param_spec.rb +95 -0
  116. data/spec/lib/report_cat/core/report_spec.rb +342 -0
  117. data/spec/lib/report_cat/engine_spec.rb +9 -0
  118. data/spec/lib/report_cat/matchers/have_chart_spec.rb +36 -0
  119. data/spec/lib/report_cat/matchers/have_column_spec.rb +30 -0
  120. data/spec/lib/report_cat/matchers/have_param_spec.rb +33 -0
  121. data/spec/lib/report_cat/reports/cohort_report_spec.rb +215 -0
  122. data/spec/lib/report_cat/reports/date_range_report_spec.rb +125 -0
  123. data/spec/lib/report_cat/version_spec.rb +11 -0
  124. data/spec/lib/report_cat_spec.rb +62 -0
  125. data/spec/lib/tasks/report_cat.rake_spec.rb +13 -0
  126. data/spec/models/report_cat/date_range_spec.rb +144 -0
  127. data/spec/rails_helper.rb +49 -0
  128. data/spec/spec_helper.rb +23 -0
  129. data/spec/support/setup_reports.rb +28 -0
  130. data/spec/views/report_cat/reports/index.html.erb_spec.rb +16 -0
  131. data/spec/views/report_cat/reports/show.html.erb_spec.rb +19 -0
  132. metadata +489 -0
@@ -0,0 +1,100 @@
1
+ require 'spec_helper'
2
+
3
+ describe ReportCat::ReportsController do
4
+
5
+ include SetupReports
6
+
7
+ routes { ReportCat::Engine.routes }
8
+
9
+ before( :each ) do
10
+ setup_reports
11
+ end
12
+
13
+ it 'is a subclass of ApplicationController' do
14
+ expect( @controller ).to be_a_kind_of( ApplicationController )
15
+ end
16
+
17
+ #############################################################################
18
+ # index
19
+
20
+ describe '#index' do
21
+
22
+ it 'gets successfully' do
23
+ get :index
24
+ expect( response ).to be_success
25
+ end
26
+
27
+ it 'assigns reports' do
28
+ get :index
29
+ expect( assigns( :reports ) ).to be_an_instance_of( HashWithIndifferentAccess )
30
+ end
31
+
32
+ pending 'uses the configured before authentication filter' do
33
+ expect( @controller ).to receive( :instance_eval ).with( &ReportCat.config.authenticate_with )
34
+ expect( @controller ).to receive( :instance_eval ).with( &ReportCat.config.authorize_with )
35
+ get :index
36
+ end
37
+
38
+ it 'renders with the configured layout' do
39
+ get :index
40
+ expect( response ).to render_template( ReportCat.config.layout )
41
+ end
42
+
43
+ end
44
+
45
+ #############################################################################
46
+ # show
47
+
48
+ describe '#show' do
49
+
50
+ before( :each ) do
51
+ allow( @report ).to receive( :query )
52
+ allow( ReportCat ).to receive( :reports ).and_return( @reports )
53
+ end
54
+
55
+ it 'gets successfully' do
56
+ get :show, :id => @report.name
57
+ expect( response ).to be_success
58
+ end
59
+
60
+ it 'assigns report' do
61
+ get :show, :id => @report.name
62
+ expect( assigns( :report ) ).to be_an_instance_of( Report )
63
+ end
64
+
65
+ context 'formatting CSV' do
66
+
67
+ it 'renders CSV' do
68
+ get :show, :id => @report.name, :format => 'csv'
69
+ expect( response ).to be_success
70
+ expect( response.content_type ).to eql( 'text/csv' )
71
+ end
72
+
73
+ end
74
+
75
+ context 'formatting HTML' do
76
+
77
+ it 'renders HTML' do
78
+ get :show, :id => @report.name, :format => 'html'
79
+ expect( response ).to be_success
80
+ expect( response.content_type ).to eql( 'text/html' )
81
+ end
82
+
83
+ end
84
+
85
+ end
86
+
87
+ #############################################################################
88
+ # set_reports
89
+
90
+ describe '#set_reports' do
91
+
92
+ it 'memoizes get_reports in @reports' do
93
+ expect( ReportCat ).to receive( :reports ).and_return( @reports )
94
+ controller.send( :set_reports )
95
+ expect( assigns( :reports ) ).to eql( @reports )
96
+ end
97
+
98
+ end
99
+
100
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'coverage' do
4
+
5
+ it 'has a spec for every file' do
6
+ [
7
+ 'app',
8
+ 'lib',
9
+ ].each do |dir|
10
+ Dir.glob( File.join( ENGINE_ROOT, dir, '**', '*.{rb,erb,rake}' ) ) do |path|
11
+ next if File.basename( path ) =~ /^_/
12
+ path = path.sub( /#{ENGINE_ROOT}\//, '' )
13
+ expect( path ).to have_a_spec
14
+ end
15
+ end
16
+ end
17
+
18
+ end
@@ -0,0 +1 @@
1
+ <div chart="pie" class="chart" columns="[[&quot;string&quot;,&quot;day&quot;],[&quot;number&quot;,&quot;total&quot;]]" data="[[&quot;2013-09-17&quot;,27],[&quot;2013-09-18&quot;,270]]" name="Pie Chart Test" options="{}"></div><div chart="bar" class="chart" columns="[[&quot;string&quot;,&quot;day&quot;],[&quot;number&quot;,&quot;total&quot;]]" data="[[&quot;2013-09-17&quot;,27],[&quot;2013-09-18&quot;,270]]" name="Bar Chart Test" options="{}"></div><div chart="line" class="chart" columns="[[&quot;string&quot;,&quot;day&quot;],[&quot;number&quot;,&quot;total&quot;]]" data="[[&quot;2013-09-17&quot;,27],[&quot;2013-09-18&quot;,270]]" name="Line Chart Test" options="{}"></div>
@@ -0,0 +1 @@
1
+ <div chart="pie" class="chart" columns="[[&quot;string&quot;,&quot;day&quot;],[&quot;number&quot;,&quot;total&quot;]]" data="[[&quot;2013-09-17&quot;,27],[&quot;2013-09-18&quot;,270]]" name="Pie Chart Test" options="{}"></div><div chart="bar" class="chart" columns="[[&quot;string&quot;,&quot;day&quot;],[&quot;number&quot;,&quot;total&quot;]]" data="[[&quot;2013-09-17&quot;,27],[&quot;2013-09-18&quot;,270]]" name="Bar Chart Test" options="{}"></div><div chart="line" class="chart" columns="[[&quot;string&quot;,&quot;day&quot;],[&quot;number&quot;,&quot;total&quot;]]" data="[[&quot;2013-09-17&quot;,27],[&quot;2013-09-18&quot;,270]]" name="Line Chart Test" options="{}"></div>
@@ -0,0 +1,63 @@
1
+ <form accept-charset="UTF-8" action="" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div><label for="_span_class__translation_missing__title__translation_missing:_en.report_cat.params.check_box_test__Check_Box_Test__span_">&lt;span class=&quot;translation missing&quot; title=&quot;translation missing: en.report cat.params.check box test&quot;&gt;check box test&lt;/span&gt;</label><input id="check_box_test" name="check_box_test" type="checkbox" value="1" /></div><div><label for="_span_class__translation_missing__title__translation_missing:_en.report_cat.params.date_test__Date_Test__span_">&lt;span class=&quot;translation missing&quot; title=&quot;translation missing: en.report cat.params.date test&quot;&gt;date test&lt;/span&gt;</label><select id="date_test_year" name="date_test[year]">
2
+ <option value="2008">2008</option>
3
+ <option value="2009">2009</option>
4
+ <option value="2010">2010</option>
5
+ <option value="2011">2011</option>
6
+ <option value="2012">2012</option>
7
+ <option selected="selected" value="2013">2013</option>
8
+ <option value="2014">2014</option>
9
+ <option value="2015">2015</option>
10
+ <option value="2016">2016</option>
11
+ <option value="2017">2017</option>
12
+ <option value="2018">2018</option>
13
+ </select>
14
+ <select id="date_test_month" name="date_test[month]">
15
+ <option value="1">January</option>
16
+ <option value="2">February</option>
17
+ <option value="3">March</option>
18
+ <option value="4">April</option>
19
+ <option value="5">May</option>
20
+ <option value="6">June</option>
21
+ <option value="7">July</option>
22
+ <option value="8">August</option>
23
+ <option selected="selected" value="9">September</option>
24
+ <option value="10">October</option>
25
+ <option value="11">November</option>
26
+ <option value="12">December</option>
27
+ </select>
28
+ <select id="date_test_day" name="date_test[day]">
29
+ <option value="1">1</option>
30
+ <option value="2">2</option>
31
+ <option value="3">3</option>
32
+ <option value="4">4</option>
33
+ <option value="5">5</option>
34
+ <option value="6">6</option>
35
+ <option value="7">7</option>
36
+ <option value="8">8</option>
37
+ <option value="9">9</option>
38
+ <option value="10">10</option>
39
+ <option value="11">11</option>
40
+ <option value="12">12</option>
41
+ <option value="13">13</option>
42
+ <option value="14">14</option>
43
+ <option value="15">15</option>
44
+ <option selected="selected" value="16">16</option>
45
+ <option value="17">17</option>
46
+ <option value="18">18</option>
47
+ <option value="19">19</option>
48
+ <option value="20">20</option>
49
+ <option value="21">21</option>
50
+ <option value="22">22</option>
51
+ <option value="23">23</option>
52
+ <option value="24">24</option>
53
+ <option value="25">25</option>
54
+ <option value="26">26</option>
55
+ <option value="27">27</option>
56
+ <option value="28">28</option>
57
+ <option value="29">29</option>
58
+ <option value="30">30</option>
59
+ <option value="31">31</option>
60
+ </select>
61
+ </div><div><label></label><input id="hidden_test" name="hidden_test" type="hidden" value="true" /></div><div><label for="_span_class__translation_missing__title__translation_missing:_en.report_cat.params.select_test__Select_Test__span_">&lt;span class=&quot;translation missing&quot; title=&quot;translation missing: en.report cat.params.select test&quot;&gt;select test&lt;/span&gt;</label><select id="select_test" name="select_test"><option selected="selected" value="1">1</option>
62
+ <option value="2">2</option>
63
+ <option value="3">3</option></select></div><div><label for="_span_class__translation_missing__title__translation_missing:_en.report_cat.params.text_field_test__Text_Field_Test__span_">&lt;span class=&quot;translation missing&quot; title=&quot;translation missing: en.report cat.params.text field test&quot;&gt;text field test&lt;/span&gt;</label><input id="text_field_test" name="text_field_test" type="text" /></div><input name="commit" type="submit" value="Report" /></form>
@@ -0,0 +1,63 @@
1
+ <form accept-charset="UTF-8" action="" method="get"><div style="display:none"><input name="utf8" type="hidden" value="&#x2713;" /></div><div><label for="_span_class__translation_missing__title__translation_missing:_en.report_cat.params.check_box_test__Check_Box_Test__span_">&lt;span class=&quot;translation missing&quot; title=&quot;translation missing: en.report cat.params.check box test&quot;&gt;check box test&lt;/span&gt;</label><input id="check_box_test" name="check_box_test" type="checkbox" value="1" /></div><div><label for="_span_class__translation_missing__title__translation_missing:_en.report_cat.params.date_test__Date_Test__span_">&lt;span class=&quot;translation missing&quot; title=&quot;translation missing: en.report cat.params.date test&quot;&gt;date test&lt;/span&gt;</label><select id="date_test_year" name="date_test[year]">
2
+ <option value="2008">2008</option>
3
+ <option value="2009">2009</option>
4
+ <option value="2010">2010</option>
5
+ <option value="2011">2011</option>
6
+ <option value="2012">2012</option>
7
+ <option selected="selected" value="2013">2013</option>
8
+ <option value="2014">2014</option>
9
+ <option value="2015">2015</option>
10
+ <option value="2016">2016</option>
11
+ <option value="2017">2017</option>
12
+ <option value="2018">2018</option>
13
+ </select>
14
+ <select id="date_test_month" name="date_test[month]">
15
+ <option value="1">January</option>
16
+ <option value="2">February</option>
17
+ <option value="3">March</option>
18
+ <option value="4">April</option>
19
+ <option value="5">May</option>
20
+ <option value="6">June</option>
21
+ <option value="7">July</option>
22
+ <option value="8">August</option>
23
+ <option selected="selected" value="9">September</option>
24
+ <option value="10">October</option>
25
+ <option value="11">November</option>
26
+ <option value="12">December</option>
27
+ </select>
28
+ <select id="date_test_day" name="date_test[day]">
29
+ <option value="1">1</option>
30
+ <option value="2">2</option>
31
+ <option value="3">3</option>
32
+ <option value="4">4</option>
33
+ <option value="5">5</option>
34
+ <option value="6">6</option>
35
+ <option value="7">7</option>
36
+ <option value="8">8</option>
37
+ <option value="9">9</option>
38
+ <option value="10">10</option>
39
+ <option value="11">11</option>
40
+ <option value="12">12</option>
41
+ <option value="13">13</option>
42
+ <option value="14">14</option>
43
+ <option value="15">15</option>
44
+ <option selected="selected" value="16">16</option>
45
+ <option value="17">17</option>
46
+ <option value="18">18</option>
47
+ <option value="19">19</option>
48
+ <option value="20">20</option>
49
+ <option value="21">21</option>
50
+ <option value="22">22</option>
51
+ <option value="23">23</option>
52
+ <option value="24">24</option>
53
+ <option value="25">25</option>
54
+ <option value="26">26</option>
55
+ <option value="27">27</option>
56
+ <option value="28">28</option>
57
+ <option value="29">29</option>
58
+ <option value="30">30</option>
59
+ <option value="31">31</option>
60
+ </select>
61
+ </div><input id="hidden_test" name="hidden_test" type="hidden" value="true" /><div><label for="_span_class__translation_missing__title__translation_missing:_en.report_cat.params.select_test__Select_Test__span_">&lt;span class=&quot;translation missing&quot; title=&quot;translation missing: en.report cat.params.select test&quot;&gt;select test&lt;/span&gt;</label><select id="select_test" name="select_test"><option selected="selected" value="1">1</option>
62
+ <option value="2">2</option>
63
+ <option value="3">3</option></select></div><div><label for="_span_class__translation_missing__title__translation_missing:_en.report_cat.params.text_field_test__Text_Field_Test__span_">&lt;span class=&quot;translation missing&quot; title=&quot;translation missing: en.report cat.params.text field test&quot;&gt;text field test&lt;/span&gt;</label><input id="text_field_test" name="text_field_test" type="text" /></div><input name="commit" type="submit" value="Report" /></form>
@@ -0,0 +1 @@
1
+ <div><label for="_span_class__translation_missing__title__translation_missing:_en.report_cat.params.check_box_test__Check_Box_Test__span_">&lt;span class=&quot;translation missing&quot; title=&quot;translation missing: en.report cat.params.check box test&quot;&gt;check box test&lt;/span&gt;</label><input id="check_box_test" name="check_box_test" type="checkbox" value="1" /></div>
@@ -0,0 +1 @@
1
+ <div><label for="_span_class__translation_missing__title__translation_missing:_en.report_cat.params.check_box_test__Check_Box_Test__span_">&lt;span class=&quot;translation missing&quot; title=&quot;translation missing: en.report cat.params.check box test&quot;&gt;check box test&lt;/span&gt;</label><input id="check_box_test" name="check_box_test" type="checkbox" value="1" /></div>
@@ -0,0 +1 @@
1
+ <ul><li><a href="/report_cat/reports/test"><span class="translation_missing" title="translation missing: en.report_cat.instances.test.name">Name</span></a> - <span class="translation_missing" title="translation missing: en.report_cat.instances.test.description">Description</span></li></ul>
@@ -0,0 +1 @@
1
+ <ul><li><a href="/report_cat/reports/test"><span class="translation_missing" title="translation missing: en.report_cat.instances.test.name">Name</span></a> - <span class="translation_missing" title="translation missing: en.report_cat.instances.test.description">Description</span></li></ul>
@@ -0,0 +1 @@
1
+ <input id="check_box_test" name="check_box_test" type="checkbox" value="1" />
@@ -0,0 +1 @@
1
+ <input id="check_box_test" name="check_box_test" type="checkbox" value="1" />
@@ -0,0 +1,60 @@
1
+ <select id="date_test_year" name="date_test[year]">
2
+ <option value="2008">2008</option>
3
+ <option value="2009">2009</option>
4
+ <option value="2010">2010</option>
5
+ <option value="2011">2011</option>
6
+ <option value="2012">2012</option>
7
+ <option selected="selected" value="2013">2013</option>
8
+ <option value="2014">2014</option>
9
+ <option value="2015">2015</option>
10
+ <option value="2016">2016</option>
11
+ <option value="2017">2017</option>
12
+ <option value="2018">2018</option>
13
+ </select>
14
+ <select id="date_test_month" name="date_test[month]">
15
+ <option value="1">January</option>
16
+ <option value="2">February</option>
17
+ <option value="3">March</option>
18
+ <option value="4">April</option>
19
+ <option value="5">May</option>
20
+ <option value="6">June</option>
21
+ <option value="7">July</option>
22
+ <option value="8">August</option>
23
+ <option selected="selected" value="9">September</option>
24
+ <option value="10">October</option>
25
+ <option value="11">November</option>
26
+ <option value="12">December</option>
27
+ </select>
28
+ <select id="date_test_day" name="date_test[day]">
29
+ <option value="1">1</option>
30
+ <option value="2">2</option>
31
+ <option value="3">3</option>
32
+ <option value="4">4</option>
33
+ <option value="5">5</option>
34
+ <option value="6">6</option>
35
+ <option value="7">7</option>
36
+ <option value="8">8</option>
37
+ <option value="9">9</option>
38
+ <option value="10">10</option>
39
+ <option value="11">11</option>
40
+ <option value="12">12</option>
41
+ <option value="13">13</option>
42
+ <option value="14">14</option>
43
+ <option value="15">15</option>
44
+ <option selected="selected" value="16">16</option>
45
+ <option value="17">17</option>
46
+ <option value="18">18</option>
47
+ <option value="19">19</option>
48
+ <option value="20">20</option>
49
+ <option value="21">21</option>
50
+ <option value="22">22</option>
51
+ <option value="23">23</option>
52
+ <option value="24">24</option>
53
+ <option value="25">25</option>
54
+ <option value="26">26</option>
55
+ <option value="27">27</option>
56
+ <option value="28">28</option>
57
+ <option value="29">29</option>
58
+ <option value="30">30</option>
59
+ <option value="31">31</option>
60
+ </select>
@@ -0,0 +1,60 @@
1
+ <select id="date_test_year" name="date_test[year]">
2
+ <option value="2008">2008</option>
3
+ <option value="2009">2009</option>
4
+ <option value="2010">2010</option>
5
+ <option value="2011">2011</option>
6
+ <option value="2012">2012</option>
7
+ <option selected="selected" value="2013">2013</option>
8
+ <option value="2014">2014</option>
9
+ <option value="2015">2015</option>
10
+ <option value="2016">2016</option>
11
+ <option value="2017">2017</option>
12
+ <option value="2018">2018</option>
13
+ </select>
14
+ <select id="date_test_month" name="date_test[month]">
15
+ <option value="1">January</option>
16
+ <option value="2">February</option>
17
+ <option value="3">March</option>
18
+ <option value="4">April</option>
19
+ <option value="5">May</option>
20
+ <option value="6">June</option>
21
+ <option value="7">July</option>
22
+ <option value="8">August</option>
23
+ <option selected="selected" value="9">September</option>
24
+ <option value="10">October</option>
25
+ <option value="11">November</option>
26
+ <option value="12">December</option>
27
+ </select>
28
+ <select id="date_test_day" name="date_test[day]">
29
+ <option value="1">1</option>
30
+ <option value="2">2</option>
31
+ <option value="3">3</option>
32
+ <option value="4">4</option>
33
+ <option value="5">5</option>
34
+ <option value="6">6</option>
35
+ <option value="7">7</option>
36
+ <option value="8">8</option>
37
+ <option value="9">9</option>
38
+ <option value="10">10</option>
39
+ <option value="11">11</option>
40
+ <option value="12">12</option>
41
+ <option value="13">13</option>
42
+ <option value="14">14</option>
43
+ <option value="15">15</option>
44
+ <option selected="selected" value="16">16</option>
45
+ <option value="17">17</option>
46
+ <option value="18">18</option>
47
+ <option value="19">19</option>
48
+ <option value="20">20</option>
49
+ <option value="21">21</option>
50
+ <option value="22">22</option>
51
+ <option value="23">23</option>
52
+ <option value="24">24</option>
53
+ <option value="25">25</option>
54
+ <option value="26">26</option>
55
+ <option value="27">27</option>
56
+ <option value="28">28</option>
57
+ <option value="29">29</option>
58
+ <option value="30">30</option>
59
+ <option value="31">31</option>
60
+ </select>
@@ -0,0 +1 @@
1
+ <input id="hidden_test" name="hidden_test" type="hidden" value="true" />
@@ -0,0 +1 @@
1
+ <input id="hidden_test" name="hidden_test" type="hidden" value="true" />
@@ -0,0 +1,3 @@
1
+ <select id="select_test" name="select_test"><option selected="selected" value="1">1</option>
2
+ <option value="2">2</option>
3
+ <option value="3">3</option></select>
@@ -0,0 +1,3 @@
1
+ <select id="select_test" name="select_test"><option selected="selected" value="1">1</option>
2
+ <option value="2">2</option>
3
+ <option value="3">3</option></select>
@@ -0,0 +1 @@
1
+ <input id="text_field_test" name="text_field_test" type="text" />
@@ -0,0 +1 @@
1
+ <input id="text_field_test" name="text_field_test" type="text" />
@@ -0,0 +1 @@
1
+ <table border="1"><tr><th>day</th><th>total</th></tr><tr><td>2013-09-17</td><td>27</td></tr><tr><td>2013-09-18</td><td>270</td></tr></table>
@@ -0,0 +1 @@
1
+ <table border="1"><tr><th>day</th><th>total</th></tr><tr><td>2013-09-17</td><td>27</td></tr><tr><td>2013-09-18</td><td>270</td></tr></table>
@@ -0,0 +1 @@
1
+ <table border="1"><tr></tr><tr></tr><tr></tr></table>
@@ -0,0 +1 @@
1
+ <table border="1"><tr></tr><tr></tr><tr></tr></table>
@@ -0,0 +1 @@
1
+ [["string","day"],["number","day"],["number","total"]]
@@ -0,0 +1 @@
1
+ [["string","day"],["number","day"],["number","total"]]
@@ -0,0 +1 @@
1
+ [["2013-09-17","2013-09-17",27],["2013-09-18","2013-09-18",270]]
@@ -0,0 +1 @@
1
+ [["2013-09-17","2013-09-17",27],["2013-09-18","2013-09-18",270]]
@@ -0,0 +1,6 @@
1
+ (
2
+ report_cat_date_ranges.start_date between '2013-09-01' and '2013-09-18'
3
+ or
4
+ '2013-09-01' between report_cat_date_ranges.start_date and report_cat_date_ranges.stop_date
5
+ )
6
+ and report_cat_date_ranges.period = 'weekly'
@@ -0,0 +1,6 @@
1
+ (
2
+ report_cat_date_ranges.start_date between '2013-09-01' and '2013-09-18'
3
+ or
4
+ '2013-09-01' between report_cat_date_ranges.start_date and report_cat_date_ranges.stop_date
5
+ )
6
+ and report_cat_date_ranges.period = 'weekly'
@@ -0,0 +1,3 @@
1
+ "day","total"
2
+ "2013-09-17","27"
3
+ "2013-09-18","270"
@@ -0,0 +1,3 @@
1
+ "day","total"
2
+ "2013-09-17","27"
3
+ "2013-09-18","270"
@@ -0,0 +1 @@
1
+ select day,total from
@@ -0,0 +1 @@
1
+ select day,total from
@@ -0,0 +1,5 @@
1
+ (
2
+ report_cat_date_ranges.start_date between '2013-09-01' and '2013-09-18'
3
+ or
4
+ '2013-09-01' between report_cat_date_ranges.start_date and report_cat_date_ranges.stop_date
5
+ )
@@ -0,0 +1,5 @@
1
+ (
2
+ report_cat_date_ranges.start_date between '2013-09-01' and '2013-09-18'
3
+ or
4
+ '2013-09-01' between report_cat_date_ranges.start_date and report_cat_date_ranges.stop_date
5
+ )
@@ -0,0 +1,28 @@
1
+ == README
2
+
3
+ This README would normally document whatever steps are necessary to get the
4
+ application up and running.
5
+
6
+ Things you may want to cover:
7
+
8
+ * Ruby version
9
+
10
+ * System dependencies
11
+
12
+ * Configuration
13
+
14
+ * Database creation
15
+
16
+ * Database initialization
17
+
18
+ * How to run the test suite
19
+
20
+ * Services (job queues, cache servers, search engines, etc.)
21
+
22
+ * Deployment instructions
23
+
24
+ * ...
25
+
26
+
27
+ Please feel free to use a different markup language if you do not plan to run
28
+ <tt>rake doc:app</tt>.
@@ -0,0 +1,6 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require File.expand_path('../config/application', __FILE__)
5
+
6
+ Dummy::Application.load_tasks
@@ -0,0 +1,13 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file.
9
+ //
10
+ // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require_tree .
@@ -0,0 +1,13 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require_self
12
+ *= require_tree .
13
+ */
@@ -0,0 +1,21 @@
1
+ class ApplicationController < ActionController::Base
2
+ # Prevent CSRF attacks by raising an exception.
3
+ # For APIs, you may want to use :null_session instead.
4
+ protect_from_forgery with: :exception
5
+
6
+ # This just makes the reports reload in development
7
+
8
+ before_filter :require_reports if Rails.env.development?
9
+
10
+ def authenticate!
11
+ render :text => 'forbidden' unless cookies[ :login ]
12
+ end
13
+
14
+ def authorize!
15
+ end
16
+
17
+ def require_reports
18
+ Dir[Rails.root + 'app/reports/**/*.rb'].each { |path| require_dependency path }
19
+ end
20
+
21
+ end
@@ -0,0 +1,20 @@
1
+ class RootController < ApplicationController
2
+
3
+ def index
4
+ end
5
+
6
+ def login
7
+ cookies[ :login ] = { :value => true, :expires => 10.years.from_now }
8
+ redirect_to :action => :index
9
+ end
10
+
11
+ def logout
12
+ cookies.delete( :login )
13
+ redirect_to :action => :index
14
+ end
15
+
16
+ def admin
17
+ redirect_to root_path
18
+ end
19
+
20
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,13 @@
1
+ class User < ActiveRecord::Base
2
+
3
+ def self.random( total, days )
4
+ User.record_timestamps = false
5
+
6
+ (1..total).each do |i|
7
+ User.create( :created_at => Time.now - rand( days ).days, :activated => ( rand >= 0.5 ) )
8
+ end
9
+
10
+ User.record_timestamps = true
11
+ end
12
+
13
+ end