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.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -0
- data/.travis.yml +20 -0
- data/README.md +17 -19
- data/app/assets/javascripts/reports_kit/lib/_init.js +2 -1
- data/app/assets/javascripts/reports_kit/lib/chart.js +25 -16
- data/app/assets/javascripts/reports_kit/lib/report.js +42 -25
- data/app/assets/javascripts/reports_kit/lib/table.js +37 -2
- data/app/assets/stylesheets/reports_kit/reports.css.sass +3 -0
- data/docs/dimensions.md +26 -34
- data/docs/display_options.md +12 -15
- data/docs/filters.md +54 -63
- data/docs/measures.md +3 -4
- data/lib/reports_kit.rb +12 -10
- data/lib/reports_kit/base_controller.rb +1 -2
- data/lib/reports_kit/configuration.rb +19 -4
- data/lib/reports_kit/entity.rb +3 -0
- data/lib/reports_kit/helper.rb +17 -21
- data/lib/reports_kit/model_configuration.rb +1 -1
- data/lib/reports_kit/report_builder.rb +11 -11
- data/lib/reports_kit/reports/{abstract_measure.rb → abstract_series.rb} +1 -1
- data/lib/reports_kit/reports/{composite_measure.rb → composite_series.rb} +12 -8
- data/lib/reports_kit/reports/data/add_table_aggregations.rb +105 -0
- data/lib/reports_kit/reports/data/{composite_aggregation.rb → aggregate_composite.rb} +28 -27
- data/lib/reports_kit/reports/data/{one_dimension.rb → aggregate_one_dimension.rb} +9 -7
- data/lib/reports_kit/reports/data/{two_dimensions.rb → aggregate_two_dimensions.rb} +9 -8
- data/lib/reports_kit/reports/data/chart_options.rb +6 -11
- data/lib/reports_kit/reports/data/format_one_dimension.rb +56 -36
- data/lib/reports_kit/reports/data/format_table.rb +65 -0
- data/lib/reports_kit/reports/data/format_two_dimensions.rb +10 -8
- data/lib/reports_kit/reports/data/generate.rb +51 -28
- data/lib/reports_kit/reports/data/generate_for_properties.rb +52 -30
- data/lib/reports_kit/reports/data/populate_one_dimension.rb +30 -12
- data/lib/reports_kit/reports/data/populate_two_dimensions.rb +31 -31
- data/lib/reports_kit/reports/data/utils.rb +28 -24
- data/lib/reports_kit/reports/dimension.rb +4 -0
- data/lib/reports_kit/reports/{dimension_with_measure.rb → dimension_with_series.rb} +8 -9
- data/lib/reports_kit/reports/filter.rb +4 -0
- data/lib/reports_kit/reports/filter_types/base.rb +4 -3
- data/lib/reports_kit/reports/filter_types/boolean.rb +4 -4
- data/lib/reports_kit/reports/filter_types/datetime.rb +13 -3
- data/lib/reports_kit/reports/filter_types/number.rb +5 -5
- data/lib/reports_kit/reports/{filter_with_measure.rb → filter_with_series.rb} +7 -7
- data/lib/reports_kit/reports/generate_autocomplete_results.rb +2 -2
- data/lib/reports_kit/reports/inferrable_configuration.rb +6 -6
- data/lib/reports_kit/reports/{measure.rb → series.rb} +28 -15
- data/lib/reports_kit/reports_controller.rb +25 -5
- data/lib/reports_kit/value.rb +3 -0
- data/lib/reports_kit/version.rb +1 -1
- data/spec/fixtures/generate_inputs.yml +116 -63
- data/spec/fixtures/generate_outputs.yml +64 -0
- data/spec/reports_kit/report_builder_spec.rb +10 -12
- data/spec/reports_kit/reports/data/generate_spec.rb +559 -140
- data/spec/reports_kit/reports/{dimension_with_measure_spec.rb → dimension_with_series_spec.rb} +5 -7
- data/spec/reports_kit/reports/{filter_with_measure_spec.rb → filter_with_series_spec.rb} +3 -3
- data/spec/spec_helper.rb +5 -5
- data/spec/support/config.rb +31 -1
- data/spec/support/helpers.rb +6 -2
- metadata +17 -14
- data/lib/reports_kit/reports/data/entity.rb +0 -7
- data/lib/reports_kit/reports/data/value.rb +0 -7
data/spec/reports_kit/reports/{dimension_with_measure_spec.rb → dimension_with_series_spec.rb}
RENAMED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe ReportsKit::Reports::
|
4
|
-
subject { described_class.new(dimension: dimension,
|
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(:
|
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:
|
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:
|
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::
|
4
|
-
subject { described_class.new(filter: filter,
|
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(:
|
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' }
|
data/spec/spec_helper.rb
CHANGED
@@ -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.
|
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
|
-
|
64
|
-
DatabaseCleaner.
|
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|
|
data/spec/support/config.rb
CHANGED
@@ -1,11 +1,41 @@
|
|
1
1
|
ReportsKit.configure do |config|
|
2
2
|
config.custom_methods = {
|
3
3
|
format_percentage: -> (value) { "#{value.round(0)}%" },
|
4
|
-
|
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
|
data/spec/support/helpers.rb
CHANGED
@@ -7,8 +7,12 @@ module Helpers
|
|
7
7
|
REPORTS_KIT_DATABASE_ADAPTER
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
|
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.
|
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-
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
278
|
-
- spec/reports_kit/reports/
|
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
|