reports_kit 0.2.0 → 0.3.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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -0
  3. data/.travis.yml +20 -0
  4. data/README.md +17 -19
  5. data/app/assets/javascripts/reports_kit/lib/_init.js +2 -1
  6. data/app/assets/javascripts/reports_kit/lib/chart.js +25 -16
  7. data/app/assets/javascripts/reports_kit/lib/report.js +42 -25
  8. data/app/assets/javascripts/reports_kit/lib/table.js +37 -2
  9. data/app/assets/stylesheets/reports_kit/reports.css.sass +3 -0
  10. data/docs/dimensions.md +26 -34
  11. data/docs/display_options.md +12 -15
  12. data/docs/filters.md +54 -63
  13. data/docs/measures.md +3 -4
  14. data/lib/reports_kit.rb +12 -10
  15. data/lib/reports_kit/base_controller.rb +1 -2
  16. data/lib/reports_kit/configuration.rb +19 -4
  17. data/lib/reports_kit/entity.rb +3 -0
  18. data/lib/reports_kit/helper.rb +17 -21
  19. data/lib/reports_kit/model_configuration.rb +1 -1
  20. data/lib/reports_kit/report_builder.rb +11 -11
  21. data/lib/reports_kit/reports/{abstract_measure.rb → abstract_series.rb} +1 -1
  22. data/lib/reports_kit/reports/{composite_measure.rb → composite_series.rb} +12 -8
  23. data/lib/reports_kit/reports/data/add_table_aggregations.rb +105 -0
  24. data/lib/reports_kit/reports/data/{composite_aggregation.rb → aggregate_composite.rb} +28 -27
  25. data/lib/reports_kit/reports/data/{one_dimension.rb → aggregate_one_dimension.rb} +9 -7
  26. data/lib/reports_kit/reports/data/{two_dimensions.rb → aggregate_two_dimensions.rb} +9 -8
  27. data/lib/reports_kit/reports/data/chart_options.rb +6 -11
  28. data/lib/reports_kit/reports/data/format_one_dimension.rb +56 -36
  29. data/lib/reports_kit/reports/data/format_table.rb +65 -0
  30. data/lib/reports_kit/reports/data/format_two_dimensions.rb +10 -8
  31. data/lib/reports_kit/reports/data/generate.rb +51 -28
  32. data/lib/reports_kit/reports/data/generate_for_properties.rb +52 -30
  33. data/lib/reports_kit/reports/data/populate_one_dimension.rb +30 -12
  34. data/lib/reports_kit/reports/data/populate_two_dimensions.rb +31 -31
  35. data/lib/reports_kit/reports/data/utils.rb +28 -24
  36. data/lib/reports_kit/reports/dimension.rb +4 -0
  37. data/lib/reports_kit/reports/{dimension_with_measure.rb → dimension_with_series.rb} +8 -9
  38. data/lib/reports_kit/reports/filter.rb +4 -0
  39. data/lib/reports_kit/reports/filter_types/base.rb +4 -3
  40. data/lib/reports_kit/reports/filter_types/boolean.rb +4 -4
  41. data/lib/reports_kit/reports/filter_types/datetime.rb +13 -3
  42. data/lib/reports_kit/reports/filter_types/number.rb +5 -5
  43. data/lib/reports_kit/reports/{filter_with_measure.rb → filter_with_series.rb} +7 -7
  44. data/lib/reports_kit/reports/generate_autocomplete_results.rb +2 -2
  45. data/lib/reports_kit/reports/inferrable_configuration.rb +6 -6
  46. data/lib/reports_kit/reports/{measure.rb → series.rb} +28 -15
  47. data/lib/reports_kit/reports_controller.rb +25 -5
  48. data/lib/reports_kit/value.rb +3 -0
  49. data/lib/reports_kit/version.rb +1 -1
  50. data/spec/fixtures/generate_inputs.yml +116 -63
  51. data/spec/fixtures/generate_outputs.yml +64 -0
  52. data/spec/reports_kit/report_builder_spec.rb +10 -12
  53. data/spec/reports_kit/reports/data/generate_spec.rb +559 -140
  54. data/spec/reports_kit/reports/{dimension_with_measure_spec.rb → dimension_with_series_spec.rb} +5 -7
  55. data/spec/reports_kit/reports/{filter_with_measure_spec.rb → filter_with_series_spec.rb} +3 -3
  56. data/spec/spec_helper.rb +5 -5
  57. data/spec/support/config.rb +31 -1
  58. data/spec/support/helpers.rb +6 -2
  59. metadata +17 -14
  60. data/lib/reports_kit/reports/data/entity.rb +0 -7
  61. data/lib/reports_kit/reports/data/value.rb +0 -7
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe ReportsKit::Reports::DimensionWithMeasure do
4
- subject { described_class.new(dimension: dimension, measure: measure) }
3
+ describe ReportsKit::Reports::DimensionWithSeries do
4
+ subject { described_class.new(dimension: dimension, series: series) }
5
5
  let(:dimension) { ReportsKit::Reports::Dimension.new(properties) }
6
- let(:measure) { ReportsKit::Reports::Measure.new(key: 'issue', dimensions: [properties]) }
6
+ let(:series) { ReportsKit::Reports::Series.new(measure: 'issue', dimensions: [properties]) }
7
7
 
8
8
  describe 'settings' do
9
9
  context 'with a datetime dimension' do
@@ -18,7 +18,7 @@ describe ReportsKit::Reports::DimensionWithMeasure do
18
18
  let(:properties) { 'title' }
19
19
 
20
20
  it 'returns the settings' do
21
- expect(subject.settings).to eq({ column: 'issues.title', group: "issues.title" })
21
+ expect(subject.settings).to eq({ column: 'issues.title', group: 'issues.title' })
22
22
  end
23
23
  end
24
24
 
@@ -26,7 +26,7 @@ describe ReportsKit::Reports::DimensionWithMeasure do
26
26
  let(:properties) { 'description' }
27
27
 
28
28
  it 'returns the settings' do
29
- expect(subject.settings).to eq({ column: 'issues.description', group: "issues.description" })
29
+ expect(subject.settings).to eq({ column: 'issues.description', group: 'issues.description' })
30
30
  end
31
31
  end
32
32
 
@@ -63,7 +63,5 @@ describe ReportsKit::Reports::DimensionWithMeasure do
63
63
  end
64
64
  end
65
65
  end
66
-
67
66
  end
68
-
69
67
  end
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe ReportsKit::Reports::FilterWithMeasure do
4
- subject { described_class.new(filter: filter, measure: measure) }
3
+ describe ReportsKit::Reports::FilterWithSeries do
4
+ subject { described_class.new(filter: filter, series: series) }
5
5
  let(:filter) { ReportsKit::Reports::Filter.new(properties) }
6
- let(:measure) { ReportsKit::Reports::Measure.new(key: 'issue', dimensions: %w(repo)) }
6
+ let(:series) { ReportsKit::Reports::Series.new(measure: 'issue', dimensions: %w(repo)) }
7
7
 
8
8
  context 'with a datetime filter' do
9
9
  let(:properties) { 'opened_at' }
@@ -13,12 +13,12 @@ Dir.glob("#{directory}/factories/*.rb") { |file| require file }
13
13
  Time.zone = ActiveSupport::TimeZone.new('UTC')
14
14
  ActiveRecord::Base.default_timezone = :utc
15
15
 
16
- if Gem.loaded_specs.has_key?('mysql2')
16
+ if Gem.loaded_specs.key?('mysql2')
17
17
  REPORTS_KIT_DATABASE_ADAPTER = ReportsKit::Reports::Adapters::Mysql
18
18
  REPORTS_KIT_DATABASE_TYPE = :mysql
19
19
  ActiveRecord::Base.establish_connection(
20
20
  adapter: 'mysql2',
21
- host: 'localhost',
21
+ host: ENV['MYSQL_HOST'] || 'localhost',
22
22
  database: 'reports_kit_test',
23
23
  username: 'root'
24
24
  )
@@ -27,7 +27,7 @@ else
27
27
  REPORTS_KIT_DATABASE_TYPE = :postgresql
28
28
  ActiveRecord::Base.establish_connection(
29
29
  adapter: 'postgresql',
30
- host: 'localhost',
30
+ host: ENV['POSTGRESQL_HOST'] || 'localhost',
31
31
  database: 'reports_kit_test',
32
32
  username: 'postgres'
33
33
  )
@@ -60,8 +60,8 @@ RSpec.configure do |config|
60
60
  end
61
61
 
62
62
  config.before(:suite) do
63
- DatabaseCleaner.strategy = :transaction
64
- DatabaseCleaner.clean_with(:truncation)
63
+ # To support multi-threaded ActiveRecord queries, we need to use :truncation instead of :transaction.
64
+ DatabaseCleaner.strategy = [:truncation, pre_count: true]
65
65
  end
66
66
 
67
67
  config.around(:each) do |example|
@@ -1,11 +1,41 @@
1
1
  ReportsKit.configure do |config|
2
2
  config.custom_methods = {
3
3
  format_percentage: -> (value) { "#{value.round(0)}%" },
4
- add_label_suffix: -> (data) {
4
+ add_label_link: -> (data:, properties:, context_record:) {
5
+ data[:entities].each do |entity|
6
+ entity.label = "<a href='#'>#{entity.label}</a> Bar" if entity.label
7
+ end
8
+ data
9
+ },
10
+ add_label_suffix: -> (data:, properties:, context_record:) {
5
11
  data[:entities].each do |entity|
6
12
  entity.label = "#{entity.label} Foo" if entity.label
7
13
  end
8
14
  data
15
+ },
16
+ add_context_record_suffix: -> (data:, properties:, context_record:) {
17
+ data[:entities].each do |entity|
18
+ entity.label = "#{entity.label} #{context_record}" if entity.label
19
+ end
20
+ data
21
+ },
22
+ empty_result_set_for_relation: -> (relation) {
23
+ relation.where('0 = 1')
24
+ },
25
+ prepend_column: -> (data:, properties:, context_record:) {
26
+ values = data[:entities].map do |entity|
27
+ value = entity.instance.is_a?(Date) ? entity.instance.mday : nil
28
+ ReportsKit::Value.new(value, value)
29
+ end
30
+ new_dataset = {
31
+ entity: ReportsKit::Entity.new('day_of_month', 'Day of Month', 'day_of_month'),
32
+ values: values
33
+ }
34
+ data[:datasets] = [new_dataset] + data[:datasets]
35
+ data
36
+ },
37
+ all_repo_ids: -> (dimension_keys:, properties:, context_record:) {
38
+ Repo.pluck(:id)
9
39
  }
10
40
  }
11
41
  end
@@ -7,8 +7,12 @@ module Helpers
7
7
  REPORTS_KIT_DATABASE_ADAPTER
8
8
  end
9
9
 
10
- def format_criteria_time(time)
11
- time.strftime('%b %-d, %Y')
10
+ def format_configuration_time(time)
11
+ ReportsKit::Reports::Data::Utils.format_configuration_time(time)
12
+ end
13
+
14
+ def format_csv_week_offset(week_offset)
15
+ ReportsKit::Reports::Data::Utils.format_csv_time((now - week_offset.weeks).beginning_of_week(ReportsKit.configuration.first_day_of_week))
12
16
  end
13
17
 
14
18
  def format_day_offset(day_offset)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reports_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Benner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-26 00:00:00.000000000 Z
11
+ date: 2017-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -160,6 +160,7 @@ extra_rdoc_files: []
160
160
  files:
161
161
  - ".gitignore"
162
162
  - ".rubocop.yml"
163
+ - ".travis.yml"
163
164
  - Appraisals
164
165
  - Gemfile
165
166
  - MIT-LICENSE
@@ -224,31 +225,32 @@ files:
224
225
  - lib/reports_kit/cache.rb
225
226
  - lib/reports_kit/configuration.rb
226
227
  - lib/reports_kit/engine.rb
228
+ - lib/reports_kit/entity.rb
227
229
  - lib/reports_kit/helper.rb
228
230
  - lib/reports_kit/model.rb
229
231
  - lib/reports_kit/model_configuration.rb
230
232
  - lib/reports_kit/order.rb
231
233
  - lib/reports_kit/relative_time.rb
232
234
  - lib/reports_kit/report_builder.rb
233
- - lib/reports_kit/reports/abstract_measure.rb
235
+ - lib/reports_kit/reports/abstract_series.rb
234
236
  - lib/reports_kit/reports/adapters/mysql.rb
235
237
  - lib/reports_kit/reports/adapters/postgresql.rb
236
- - lib/reports_kit/reports/composite_measure.rb
238
+ - lib/reports_kit/reports/composite_series.rb
239
+ - lib/reports_kit/reports/data/add_table_aggregations.rb
240
+ - lib/reports_kit/reports/data/aggregate_composite.rb
241
+ - lib/reports_kit/reports/data/aggregate_one_dimension.rb
242
+ - lib/reports_kit/reports/data/aggregate_two_dimensions.rb
237
243
  - lib/reports_kit/reports/data/chart_options.rb
238
- - lib/reports_kit/reports/data/composite_aggregation.rb
239
- - lib/reports_kit/reports/data/entity.rb
240
244
  - lib/reports_kit/reports/data/format_one_dimension.rb
245
+ - lib/reports_kit/reports/data/format_table.rb
241
246
  - lib/reports_kit/reports/data/format_two_dimensions.rb
242
247
  - lib/reports_kit/reports/data/generate.rb
243
248
  - lib/reports_kit/reports/data/generate_for_properties.rb
244
- - lib/reports_kit/reports/data/one_dimension.rb
245
249
  - lib/reports_kit/reports/data/populate_one_dimension.rb
246
250
  - lib/reports_kit/reports/data/populate_two_dimensions.rb
247
- - lib/reports_kit/reports/data/two_dimensions.rb
248
251
  - lib/reports_kit/reports/data/utils.rb
249
- - lib/reports_kit/reports/data/value.rb
250
252
  - lib/reports_kit/reports/dimension.rb
251
- - lib/reports_kit/reports/dimension_with_measure.rb
253
+ - lib/reports_kit/reports/dimension_with_series.rb
252
254
  - lib/reports_kit/reports/filter.rb
253
255
  - lib/reports_kit/reports/filter_types/base.rb
254
256
  - lib/reports_kit/reports/filter_types/boolean.rb
@@ -256,12 +258,13 @@ files:
256
258
  - lib/reports_kit/reports/filter_types/number.rb
257
259
  - lib/reports_kit/reports/filter_types/records.rb
258
260
  - lib/reports_kit/reports/filter_types/string.rb
259
- - lib/reports_kit/reports/filter_with_measure.rb
261
+ - lib/reports_kit/reports/filter_with_series.rb
260
262
  - lib/reports_kit/reports/generate_autocomplete_results.rb
261
263
  - lib/reports_kit/reports/inferrable_configuration.rb
262
- - lib/reports_kit/reports/measure.rb
264
+ - lib/reports_kit/reports/series.rb
263
265
  - lib/reports_kit/reports_controller.rb
264
266
  - lib/reports_kit/resources_controller.rb
267
+ - lib/reports_kit/value.rb
265
268
  - lib/reports_kit/version.rb
266
269
  - reports_kit.gemspec
267
270
  - spec/factories/issue_factory.rb
@@ -274,8 +277,8 @@ files:
274
277
  - spec/reports_kit/relative_time_spec.rb
275
278
  - spec/reports_kit/report_builder_spec.rb
276
279
  - spec/reports_kit/reports/data/generate_spec.rb
277
- - spec/reports_kit/reports/dimension_with_measure_spec.rb
278
- - spec/reports_kit/reports/filter_with_measure_spec.rb
280
+ - spec/reports_kit/reports/dimension_with_series_spec.rb
281
+ - spec/reports_kit/reports/filter_with_series_spec.rb
279
282
  - spec/spec_helper.rb
280
283
  - spec/support/config.rb
281
284
  - spec/support/factory_girl.rb
@@ -1,7 +0,0 @@
1
- module ReportsKit
2
- module Reports
3
- module Data
4
- Entity = Struct.new(:key, :label, :instance)
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module ReportsKit
2
- module Reports
3
- module Data
4
- Value = Struct.new(:raw, :formatted)
5
- end
6
- end
7
- end