reports_kit 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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