clark_kent 0.1.5 → 0.1.6

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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/clark_kent/report_filters_controller.rb +1 -1
  3. data/app/helpers/clark_kent/application_helper.rb +10 -2
  4. data/app/models/clark_kent/report.rb +18 -16
  5. data/app/models/clark_kent/report_column.rb +8 -1
  6. data/app/models/clark_kent/report_config.rb +5 -1
  7. data/app/models/clark_kent/reportable.rb +16 -11
  8. data/app/models/clark_kent/sharing_scope_kind.rb +0 -4
  9. data/app/views/clark_kent/report_filters/_object_filter_edit.html.erb +1 -1
  10. data/app/views/clark_kent/reports/show.html.erb +2 -2
  11. data/lib/clark_kent/version.rb +1 -1
  12. data/test/controllers/clark_kent/reports_controller_test.rb +1 -0
  13. data/test/dummy/app/controllers/orders_controller.rb +5 -0
  14. data/test/dummy/app/models/reporting/order.rb +6 -6
  15. data/test/dummy/app/views/orders/show.html.erb +14 -0
  16. data/test/dummy/config/routes.rb +2 -0
  17. data/test/dummy/db/development.sqlite3 +0 -0
  18. data/test/dummy/db/test.sqlite3 +0 -0
  19. data/test/dummy/log/development.log +2952 -0
  20. data/test/dummy/log/test.log +3051 -0
  21. data/test/dummy/tmp/cache/assets/development/sprockets/0ec37c0a58c1be93659732a3efc73581 +0 -0
  22. data/test/dummy/tmp/cache/assets/development/sprockets/0fd54fd98cd2fa0085b77e6743046927 +0 -0
  23. data/test/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  24. data/test/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  25. data/test/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  26. data/test/dummy/tmp/cache/assets/development/sprockets/8aa37926d964a9eb59cf9b940e4fe2f4 +0 -0
  27. data/test/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  28. data/test/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  29. data/test/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  30. data/test/dummy/tmp/cache/assets/test/sprockets/0ec37c0a58c1be93659732a3efc73581 +0 -0
  31. data/test/dummy/tmp/cache/assets/test/sprockets/0fd54fd98cd2fa0085b77e6743046927 +0 -0
  32. data/test/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  33. data/test/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  34. data/test/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  35. data/test/dummy/tmp/cache/assets/test/sprockets/8aa37926d964a9eb59cf9b940e4fe2f4 +0 -0
  36. data/test/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  37. data/test/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  38. data/test/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  39. metadata +10 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 850ed846818d8897924c6cd76e106f85e6e110f7
4
- data.tar.gz: 7b65fde1b3ccae2a9ecc3100303ab69becff2b6d
3
+ metadata.gz: 7a5cb2db96ead480ab3da69947c4adb9d3d224d6
4
+ data.tar.gz: 1ea114b60fb78c8b7e8aed2484fc908345df6ee9
5
5
  SHA512:
6
- metadata.gz: 899afb286e6e2939fc8597b93fd1d6c261e47ee1bf5bfed928317bcb0b2b18308f7357c0168fa1f9c47655510c1767609de94789e11aa44753412e1a370b00e5
7
- data.tar.gz: dde2e535cea8a86fde691e299aae03fd85ca219d61f654bfe23ec571eda0a06bebae263d7633ab18ccdc55813c621aa8bc30a19871629e018da9e7789227e065
6
+ metadata.gz: 8c46a94dfc0fead2b2c8ca15ae1e8b4db836a870749812ad43033f722e0dfbd812e1d3c4e6796735b12ad944e7349efedd9ea8e5c11241b895cfcc1720b1c0a8
7
+ data.tar.gz: c2008aeaca8c54ce0d9c644c7acd9ddaa5050c44320e05da0f5a5bd20d86256fb9340d004b5f93a6fe66a3512f8925f72112bc015428b1834cfcc6e3eb983412
@@ -50,7 +50,7 @@ class ClarkKent::ReportFiltersController < ClarkKent::ApplicationController
50
50
 
51
51
  def report_filter_params
52
52
  if @report_filter
53
- these_params = params[@report_filter.class.name.underscore]
53
+ these_params = params[@report_filter.class.name.underscore.gsub(/.*\//,'')]
54
54
  else
55
55
  these_params = params[:report_filter]
56
56
  end
@@ -33,9 +33,9 @@ module ClarkKent
33
33
  (value =~ /\d/) && (value =~ /\./) && !(value =~ /[a-zA-Z]/)
34
34
  end
35
35
 
36
- def display_for_value(value, column_name=nil)
36
+ def display_for_value(value, column=nil)
37
37
  ##TODO, genericize this link display. link info must come from model config.
38
- return link_to(value, main_app.edit_manage_reservation_path(value)) if column_name == 'reservation_id'
38
+ return link_to(value, main_app.send(column.link, id: value)) if column.try(:link) && value.present?
39
39
  return value.join(', ') if value.is_a? Array
40
40
  return value.to_formatted_s(:datepicker) if value.is_a? Date
41
41
  return number_to_currency(value) if value.is_a? Float or value.is_a? BigDecimal or is_decimal?(value)
@@ -67,5 +67,13 @@ module ClarkKent
67
67
  onclick: raw(onclick_str)
68
68
  end
69
69
  end
70
+
71
+ def collection_for(report_filter,name)
72
+ if report_filter.filterable.collection_for(name).is_a? Symbol
73
+ @filter_collections.send(report_filter.filterable.collection_for(name))
74
+ else
75
+ report_filter.filterable.collection_for(name)
76
+ end
77
+ end
70
78
  end
71
79
  end
@@ -20,7 +20,6 @@ module ClarkKent
20
20
  validates :sharing_scope_id, presence: true, if: ->(r) { r.sharing_scope_type.present? }
21
21
 
22
22
  def self.send_report_to_s3(report_id, params)
23
- params = params
24
23
  report_class = params['report_class'].constantize if params['report_class']
25
24
  report_class ||= ::ClarkKent::Report
26
25
  reportable = report_class.find(report_id)
@@ -114,35 +113,35 @@ module ClarkKent
114
113
  def arel_includes
115
114
  self.report_columns.map{|column|
116
115
  column_info = self.column_options_for(column.column_name)
117
- column_info.includes if column_info.respond_to? :includes
116
+ column_info.includes
118
117
  }.compact
119
118
  end
120
119
 
121
120
  def arel_joins
122
121
  self.report_columns.map{|column|
123
122
  column_info = self.column_options_for(column.column_name)
124
- column_info.joins if column_info.respond_to? :joins
123
+ column_info.joins
125
124
  }.compact
126
125
  end
127
126
 
128
127
  def extra_scopes
129
128
  self.report_columns.map{|column|
130
129
  column_info = self.column_options_for(column.column_name)
131
- column_info.extra_scopes if column_info.respond_to? :extra_scopes
130
+ column_info.extra_scopes
132
131
  }.flatten.compact
133
132
  end
134
133
 
135
134
  def extra_filters
136
135
  self.report_columns.map{|column|
137
136
  column_info = self.column_options_for(column.column_name)
138
- column_info.where if column_info.respond_to? :where
137
+ column_info.where
139
138
  }.flatten.compact
140
139
  end
141
140
 
142
141
  def groups
143
142
  self.report_columns.map{|column|
144
143
  column_info = self.column_options_for(column.column_name)
145
- column_info.group if column_info.respond_to? :group
144
+ column_info.group
146
145
  }.flatten.compact
147
146
  end
148
147
 
@@ -158,27 +157,30 @@ module ClarkKent
158
157
  @selects = []
159
158
  self.report_columns.each do |report_column|
160
159
  column_option = self.column_options_for(report_column.column_name)
161
- @selects.push column_option.custom_select if column_option.respond_to? :custom_select
160
+ @selects.push column_option.custom_select
162
161
  end
163
162
  self.report_filters.each do |report_filter|
164
- column_option = self.column_options_for(report_filter.filter_name)
165
- @selects.push column_option.custom_select if column_option.respond_to? :custom_select
163
+ column_option = self.column_options_for(report_filter.filter_name.to_sym)
164
+ @selects.push column_option.custom_select if column_option.present?
166
165
  end
167
166
  @selects
168
167
  end
169
168
 
170
-
171
169
  def filter_options_for(filter_name)
172
170
  self.resource_class::REPORT_FILTER_OPTIONS.detect{|filter| filter.param == filter_name}
173
171
  end
174
172
 
173
+ def column_options
174
+ @column_options ||= self.resource_class::REPORT_COLUMN_OPTIONS
175
+ end
176
+
175
177
  def column_options_for(column_name)
176
- if self.resource_class::REPORT_COLUMN_OPTIONS.has_key? column_name.to_sym
177
- self.resource_class::REPORT_COLUMN_OPTIONS[column_name.to_sym]
178
+ if column_options.any?{|co| co.name == column_name.to_sym}
179
+ column_options.detect{|co| co.name == column_name.to_sym}
178
180
  else
179
181
  column_name = column_name.to_s.split('_')[0..-2].join('_')
180
- if self.resource_class::REPORT_COLUMN_OPTIONS.has_key? column_name.to_sym
181
- self.resource_class::REPORT_COLUMN_OPTIONS[column_name.to_sym]
182
+ if column_options.any?{|co| co.name == column_name.to_sym}
183
+ column_options.detect{|co| co.name == column_name.to_sym}
182
184
  end
183
185
  end
184
186
  end
@@ -220,11 +222,11 @@ module ClarkKent
220
222
  ## This is the set of columns not chosed to use in the report. These are the ones available to add
221
223
  ## when updating a report.
222
224
  def available_columns
223
- self.resource_class::REPORT_COLUMN_OPTIONS.keys.reject{|column| self.report_columns.pluck(:column_name).include? column.to_s}
225
+ column_options.reject{|column| self.report_columns.pluck(:column_name).include? column.name.to_s}
224
226
  end
225
227
 
226
228
  def sortable?(column)
227
- !!(self.column_options_for(column.column_name).respond_to? :order_sql)
229
+ self.column_options_for(column.column_name).order_sql.present?
228
230
  end
229
231
 
230
232
  def sharing_scope_pretty
@@ -18,13 +18,20 @@ module ClarkKent
18
18
  end
19
19
 
20
20
  def summarizable?
21
- report.column_options_for(self.column_name).summarizable
21
+ report.column_options_for(self.column_name.to_sym).summarizable
22
22
  end
23
23
 
24
24
  def calculator
25
25
  ('ClarkKent::' + summary_method.camelcase + 'Calculator').constantize
26
26
  end
27
27
 
28
+ def name
29
+ column_name
30
+ end
31
+
32
+ def link
33
+ report.column_options_for(self.name.to_sym).link
34
+ end
28
35
  end
29
36
 
30
37
  class AbstractCalculator
@@ -16,9 +16,13 @@ module ClarkKent
16
16
  end
17
17
  end
18
18
  class ReportColumnConfig
19
- attr_accessor :custom_select, :order_sql, :summarizable
19
+ attr_accessor :name, :order_sql, :custom_select, :link, :summarizable, :includes, :joins, :extra_scopes, :where, :group
20
20
  def initialize params = {}
21
21
  params.each { |key, value| send "#{key}=", value }
22
22
  end
23
+
24
+ def id
25
+ name
26
+ end
23
27
  end
24
28
  end
@@ -72,16 +72,17 @@ module ClarkKent
72
72
  arel_method_name = self.arel_method_for(param_type)
73
73
  if arel_method_name.present?
74
74
  query = self.send(arel_method_name, query, param_type, param_value)
75
- report_column_options = report.column_options_for(param_type)
76
- if(report_column_options.respond_to? :joins) && (@joins.exclude? report_column_options.joins)
77
- @joins.push report_column_options.joins
78
- end
79
- if(report_column_options.respond_to? :includes) && (@includes.exclude? report_column_options.includes)
80
- @includes.push report_column_options.includes
81
- end
82
- if (count == false) && (report_column_options.respond_to? :custom_select) && (@selects.exclude? report_column_options.custom_select)
83
- @selects.push report_column_options.custom_select
84
- end
75
+ if report_column_options = column_options_for(param_type)
76
+ if(report_column_options.joins.present?) && (@joins.exclude? report_column_options.joins)
77
+ @joins.push report_column_options.joins
78
+ end
79
+ if(report_column_options.includes.present?) && (@includes.exclude? report_column_options.includes)
80
+ @includes.push report_column_options.includes
81
+ end
82
+ if (count == false) && (report_column_options.custom_select.present?) && (@selects.exclude? report_column_options.custom_select)
83
+ @selects.push report_column_options.custom_select
84
+ end
85
+ end
85
86
  end
86
87
  end
87
88
  end
@@ -115,6 +116,10 @@ module ClarkKent
115
116
 
116
117
  end
117
118
 
119
+ def column_options_for(column_name)
120
+ self::REPORT_COLUMN_OPTIONS.detect{|co| column_name == co.name}
121
+ end
122
+
118
123
  def arel_method_for(param_type)
119
124
  method_name = self::AREL_METHODS[param_type.to_s]
120
125
  method_name ||= "#{param_type}_arel" if self.respond_to? "#{param_type}_arel"
@@ -153,7 +158,7 @@ module ClarkKent
153
158
  else
154
159
  order_column, order_direction = match_value.split('-')
155
160
  end
156
- column_info = self::REPORT_COLUMN_OPTIONS[order_column.to_sym]
161
+ column_info = column_options_for(order_column.to_sym)
157
162
  if column_info.respond_to? :order_sql
158
163
  order_sql = column_info.order_sql
159
164
  order_sql = "#{order_sql} #{order_direction}"
@@ -49,10 +49,7 @@ module ClarkKent
49
49
  def self.select_options_for_user(user)
50
50
  sharing_scope_options = {}
51
51
  self.all.each do |sharing_scope_kind|
52
- puts sharing_scope_kind.to_yaml
53
52
  if custom.exclude?(sharing_scope_kind) || has_some(sharing_scope_kind.associated_containers_for(user))
54
- puts sharing_scope_kind.class_name
55
- puts sharing_scope_kind.human_name
56
53
  sharing_scope_options[sharing_scope_kind.human_name] = sharing_scope_kind.class_name
57
54
  end
58
55
  end
@@ -76,7 +73,6 @@ module ClarkKent
76
73
  else
77
74
  @human_name = @class_name.humanize
78
75
  end
79
- puts @human_name
80
76
  @human_name
81
77
  end
82
78
 
@@ -1 +1 @@
1
- <%= f.input :filter_value, collection: @filter_collections.send(report_filter.filterable.collection_for(name)) %>
1
+ <%= f.input :filter_value, collection: collection_for(report_filter, name) %>
@@ -1,6 +1,6 @@
1
1
  <h1><%= @report.name %></h1>
2
2
  <%= link_to "&larr; back to report index".html_safe, reports_url, id: 'report_index' %>
3
-
3
+ <%= controller_name %>
4
4
  <% if @errors %>
5
5
  <div class="error">
6
6
  <%= @errors %>
@@ -33,7 +33,7 @@
33
33
  <% @rows.each do |row| %>
34
34
  <tr>
35
35
  <% @report.report_columns.each do |column| %>
36
- <td><%= display_for_value(row[column.column_name], column.column_name) %></td>
36
+ <td><%= display_for_value(row[column.column_name], column) %></td>
37
37
  <% end %>
38
38
  </tr>
39
39
  <% end if @rows.present? %>
@@ -1,3 +1,3 @@
1
1
  module ClarkKent
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
@@ -39,6 +39,7 @@ module ClarkKent
39
39
  test "should show report results" do
40
40
  get :show, id: @report, current_user_id: @current_user.id, run_report: true, created_at_until: Date.today, created_at_from: Date.yesterday
41
41
  assert_response :success
42
+ assert_not_nil assigns(:rows)
42
43
  @response.body.must_match 'Guitar strings'
43
44
  end
44
45
 
@@ -0,0 +1,5 @@
1
+ class OrdersController < ApplicationController
2
+ def show
3
+ @order = Order.find(params[:id])
4
+ end
5
+ end
@@ -23,17 +23,17 @@ module Reporting
23
23
  ]
24
24
 
25
25
  # These are the available column options for building reports from this resource
26
- REPORT_COLUMN_OPTIONS ||= {
27
- user_name: column_config(
26
+ REPORT_COLUMN_OPTIONS ||= [
27
+ column_config(name: :user_name,
28
28
  custom_select: "
29
29
  (SELECT u.name
30
30
  FROM users u
31
31
  WHERE u.id = orders.user_id)
32
32
  as user_name"),
33
- id: column_config(order_sql: 'orders.id'),
34
- amount: column_config(order_sql: 'orders.amount', summarizable: true),
35
- description: column_config(order_sql: 'orders.description')
36
- }
33
+ column_config(name: :id, order_sql: 'orders.id', link: :order_path),
34
+ column_config(name: :amount, order_sql: 'orders.amount', summarizable: true),
35
+ column_config(name: :description, order_sql: 'orders.description')
36
+ ]
37
37
 
38
38
  def self.included(base)
39
39
  base.extend ClassMethods
@@ -0,0 +1,14 @@
1
+ <table>
2
+ <tr>
3
+ <td>id</td>
4
+ <td><%= @order.id %></td>
5
+ </tr>
6
+ <tr>
7
+ <td>amount</td>
8
+ <td><%= @order.amount %></td>
9
+ </tr>
10
+ <tr>
11
+ <td>user</td>
12
+ <td><%= @order.user.name %></td>
13
+ </tr>
14
+ </table>
@@ -1,4 +1,6 @@
1
1
  Rails.application.routes.draw do
2
2
 
3
3
  mount ClarkKent::Engine => "/reports"
4
+
5
+ resources :orders, only: [:show]
4
6
  end
Binary file
Binary file