reports_kit 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  module ReportsKit
2
- VERSION = '0.0.4'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -14,11 +14,12 @@ Gem::Specification.new do |s|
14
14
  s.license = 'MIT'
15
15
 
16
16
  s.add_dependency 'rails', '>= 3'
17
- s.add_dependency 'pg', '>= 0.15'
18
17
 
18
+ s.add_development_dependency 'appraisal'
19
19
  s.add_development_dependency 'rspec', '~> 3'
20
20
  s.add_development_dependency 'database_cleaner', '~> 1'
21
21
  s.add_development_dependency 'factory_girl', '~> 4'
22
+ s.add_development_dependency 'pg', '>= 0.15'
22
23
  s.add_development_dependency 'pry', '~> 0'
23
24
  s.add_development_dependency 'timecop', '~> 0'
24
25
  end
@@ -12,6 +12,11 @@
12
12
  - repo
13
13
  chart:
14
14
  foo: bar
15
+ - measure: issue
16
+ dimensions:
17
+ - repo
18
+ chart:
19
+ type: pie
15
20
  - measure:
16
21
  key: issue
17
22
  dimensions:
@@ -25,6 +25,7 @@
25
25
  :legend:
26
26
  :labels:
27
27
  :usePointStyle: true
28
+ :maintainAspectRatio: false
28
29
  :tooltips:
29
30
  :xPadding: 8
30
31
  :yPadding: 7
@@ -55,6 +56,7 @@
55
56
  :legend:
56
57
  :labels:
57
58
  :usePointStyle: true
59
+ :maintainAspectRatio: false
58
60
  :tooltips:
59
61
  :xPadding: 8
60
62
  :yPadding: 7
@@ -86,10 +88,19 @@
86
88
  :legend:
87
89
  :labels:
88
90
  :usePointStyle: true
91
+ :maintainAspectRatio: false
89
92
  :tooltips:
90
93
  :xPadding: 8
91
94
  :yPadding: 7
92
95
  :type: bar
96
+ - :chart_data:
97
+ :labels: []
98
+ :datasets:
99
+ - :label: Issues
100
+ :data: []
101
+ :backgroundColor: []
102
+ :options: {}
103
+ :type: pie
93
104
  - :chart_data:
94
105
  :labels: []
95
106
  :datasets:
@@ -116,6 +127,7 @@
116
127
  :legend:
117
128
  :labels:
118
129
  :usePointStyle: true
130
+ :maintainAspectRatio: false
119
131
  :tooltips:
120
132
  :xPadding: 8
121
133
  :yPadding: 7
@@ -146,6 +158,7 @@
146
158
  :legend:
147
159
  :labels:
148
160
  :usePointStyle: true
161
+ :maintainAspectRatio: false
149
162
  :tooltips:
150
163
  :xPadding: 8
151
164
  :yPadding: 7
@@ -172,6 +185,7 @@
172
185
  :legend:
173
186
  :labels:
174
187
  :usePointStyle: true
188
+ :maintainAspectRatio: false
175
189
  :tooltips:
176
190
  :xPadding: 8
177
191
  :yPadding: 7
@@ -202,6 +216,7 @@
202
216
  :legend:
203
217
  :labels:
204
218
  :usePointStyle: true
219
+ :maintainAspectRatio: false
205
220
  :tooltips:
206
221
  :xPadding: 8
207
222
  :yPadding: 7
@@ -18,66 +18,99 @@ describe ReportsKit::Reports::Data::Generate do
18
18
  let(:chart_options) { subject[:chart_data][:options] }
19
19
 
20
20
  context 'with a datetime dimension' do
21
- let(:properties) do
22
- {
23
- measure: 'issue',
24
- dimensions: %w(opened_at)
25
- }
26
- end
27
- let!(:issues) do
28
- [
29
- create(:issue, repo: repo, opened_at: now - 2.weeks),
30
- create(:issue, repo: repo, opened_at: now - 2.weeks),
31
- create(:issue, repo: repo, opened_at: now)
32
- ]
33
- end
21
+ context 'with default granularity' do
22
+ let(:properties) do
23
+ {
24
+ measure: 'issue',
25
+ dimensions: %w(opened_at)
26
+ }
27
+ end
28
+ let!(:issues) do
29
+ [
30
+ create(:issue, repo: repo, opened_at: now - 2.weeks),
31
+ create(:issue, repo: repo, opened_at: now - 2.weeks),
32
+ create(:issue, repo: repo, opened_at: now)
33
+ ]
34
+ end
34
35
 
35
- it 'returns the type' do
36
- expect(chart_type).to eq('bar')
37
- end
36
+ it 'returns the type' do
37
+ expect(chart_type).to eq('bar')
38
+ end
38
39
 
39
- it 'returns the data' do
40
- expect(chart_data).to eq({
41
- labels: [
42
- format_time(2),
43
- format_time(1),
44
- format_time(0)
45
- ],
46
- datasets: [
40
+ it 'returns the data' do
41
+ expect(chart_data).to eq({
42
+ labels: [
43
+ format_week_offset(2),
44
+ format_week_offset(1),
45
+ format_week_offset(0)
46
+ ],
47
+ datasets: [
48
+ {
49
+ label: 'Issues',
50
+ data: [2, 0, 1]
51
+ }
52
+ ]
53
+ })
54
+ end
55
+
56
+ context 'with a datetime filter' do
57
+ let(:properties) do
47
58
  {
48
- label: 'Issues',
49
- data: [2, 0, 1]
59
+ measure: {
60
+ key: 'issue',
61
+ filters: [
62
+ {
63
+ key: 'opened_at',
64
+ criteria: {
65
+ operator: 'between',
66
+ value: "#{date_string_for_filter(now - 1.week)} - #{date_string_for_filter(now)}"
67
+ }
68
+ }
69
+ ]
70
+ },
71
+ dimensions: %w(opened_at)
50
72
  }
51
- ]
52
- })
53
- end
73
+ end
54
74
 
55
- context 'with a datetime filter' do
56
- let(:properties) do
57
- {
58
- measure: {
59
- key: 'issue',
60
- filters: [
75
+ it 'returns the chart_data' do
76
+ expect(chart_data).to eq({
77
+ labels: [format_week_offset(1), format_week_offset(0)],
78
+ datasets: [
61
79
  {
62
- key: 'opened_at',
63
- criteria: {
64
- operator: 'between',
65
- value: "#{date_string_for_filter(now - 1.week)} - #{date_string_for_filter(now)}"
66
- }
80
+ label: "Issues",
81
+ data: [0, 1]
67
82
  }
68
83
  ]
69
- },
70
- dimensions: %w(opened_at)
84
+ })
85
+ end
86
+ end
87
+ end
88
+
89
+ context 'with day granularity' do
90
+ let(:properties) do
91
+ {
92
+ measure: 'issue',
93
+ dimensions: [{ key: 'opened_at', granularity: 'day' }]
71
94
  }
72
95
  end
96
+ let!(:issues) do
97
+ [
98
+ create(:issue, repo: repo, opened_at: now - 2.days),
99
+ create(:issue, repo: repo, opened_at: now)
100
+ ]
101
+ end
73
102
 
74
- it 'returns the chart_data' do
103
+ it 'returns the data' do
75
104
  expect(chart_data).to eq({
76
- labels: [format_time(0)],
105
+ labels: [
106
+ format_day_offset(2),
107
+ format_day_offset(1),
108
+ format_day_offset(0)
109
+ ],
77
110
  datasets: [
78
111
  {
79
- label: "Issues",
80
- data: [1.0]
112
+ label: 'Issues',
113
+ data: [1, 0, 1]
81
114
  }
82
115
  ]
83
116
  })
@@ -226,7 +259,7 @@ describe ReportsKit::Reports::Data::Generate do
226
259
 
227
260
  it 'returns the chart_data' do
228
261
  expect(chart_data).to eq({
229
- labels: [format_time(2), format_time(1), format_time(0)],
262
+ labels: [format_week_offset(2), format_week_offset(1), format_week_offset(0)],
230
263
  datasets: [
231
264
  {
232
265
  label: repo.to_s,
@@ -8,7 +8,23 @@ describe ReportsKit::Reports::Dimension do
8
8
  let(:properties) { 'opened_at' }
9
9
 
10
10
  it 'returns the settings' do
11
- expect(subject.settings).to eq({ column: 'issues.opened_at', group: "date_trunc('week', issues.opened_at::timestamp)" })
11
+ expect(subject.settings).to eq({ column: 'issues.opened_at', group: database_adapter.truncate_to_week('issues.opened_at') })
12
+ end
13
+ end
14
+
15
+ context 'with a string dimension' do
16
+ let(:properties) { 'title' }
17
+
18
+ it 'returns the settings' do
19
+ expect(subject.settings).to eq({ column: 'issues.title', group: "issues.title" })
20
+ end
21
+ end
22
+
23
+ context 'with a text dimension' do
24
+ let(:properties) { 'description' }
25
+
26
+ it 'returns the settings' do
27
+ expect(subject.settings).to eq({ column: 'issues.description', group: "issues.description" })
12
28
  end
13
29
  end
14
30
 
@@ -12,13 +12,24 @@ Dir.glob("#{directory}/support/models/*.rb") { |file| require file }
12
12
 
13
13
  Time.zone = ActiveSupport::TimeZone.new('UTC')
14
14
  ActiveRecord::Base.default_timezone = :utc
15
- ActiveRecord::Base.establish_connection(
16
- adapter: 'postgresql',
17
- host: 'localhost',
18
- database: 'reports_kit_test',
19
- username: 'postgres',
20
- encoding: 'unicode'
21
- )
15
+
16
+ if Gem.loaded_specs.has_key?('mysql2')
17
+ REPORTS_KIT_DATABASE_ADAPTER = ReportsKit::Reports::Adapters::Mysql
18
+ ActiveRecord::Base.establish_connection(
19
+ adapter: 'mysql2',
20
+ host: 'localhost',
21
+ database: 'reports_kit_test',
22
+ username: 'root'
23
+ )
24
+ else
25
+ REPORTS_KIT_DATABASE_ADAPTER = ReportsKit::Reports::Adapters::Postgresql
26
+ ActiveRecord::Base.establish_connection(
27
+ adapter: 'postgresql',
28
+ host: 'localhost',
29
+ database: 'reports_kit_test',
30
+ username: 'postgres'
31
+ )
32
+ end
22
33
  require 'support/schema'
23
34
 
24
35
  RSpec.configure do |config|
@@ -3,11 +3,19 @@ module Helpers
3
3
  Time.zone.now
4
4
  end
5
5
 
6
+ def database_adapter
7
+ REPORTS_KIT_DATABASE_ADAPTER
8
+ end
9
+
6
10
  def date_string_for_filter(time)
7
11
  time.strftime('%b %-d, %Y')
8
12
  end
9
13
 
10
- def format_time(week_offset)
14
+ def format_day_offset(day_offset)
15
+ ReportsKit::Reports::Data::Utils.format_time((now - day_offset.days))
16
+ end
17
+
18
+ def format_week_offset(week_offset)
11
19
  ReportsKit::Reports::Data::Utils.format_time((now - week_offset.weeks).beginning_of_week)
12
20
  end
13
21
  end
@@ -4,6 +4,7 @@ ActiveRecord::Schema.define do
4
4
  create_table :issues, :force => :cascade do |t|
5
5
  t.integer :repo_id
6
6
  t.string :title
7
+ t.text :description
7
8
  t.integer :source_user_id
8
9
  t.string :state
9
10
  t.boolean :locked
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.0.4
4
+ version: 0.1.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-06-04 00:00:00.000000000 Z
11
+ date: 2017-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -25,19 +25,19 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3'
27
27
  - !ruby/object:Gem::Dependency
28
- name: pg
28
+ name: appraisal
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0.15'
34
- type: :runtime
33
+ version: '0'
34
+ type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '0.15'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '4'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pg
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0.15'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0.15'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: pry
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -118,6 +132,7 @@ extra_rdoc_files: []
118
132
  files:
119
133
  - ".gitignore"
120
134
  - ".rubocop.yml"
135
+ - Appraisals
121
136
  - Gemfile
122
137
  - MIT-LICENSE
123
138
  - README.md
@@ -169,6 +184,10 @@ files:
169
184
  - docs/images/users_by_created_at.png
170
185
  - docs/images/users_by_created_at_with_filter.png
171
186
  - docs/measures.md
187
+ - gemfiles/mysql.gemfile
188
+ - gemfiles/mysql.gemfile.lock
189
+ - gemfiles/postgresql.gemfile
190
+ - gemfiles/postgresql.gemfile.lock
172
191
  - lib/reports_kit.rb
173
192
  - lib/reports_kit/base_controller.rb
174
193
  - lib/reports_kit/configuration.rb
@@ -177,6 +196,8 @@ files:
177
196
  - lib/reports_kit/model.rb
178
197
  - lib/reports_kit/model_configuration.rb
179
198
  - lib/reports_kit/report_builder.rb
199
+ - lib/reports_kit/reports/adapters/mysql.rb
200
+ - lib/reports_kit/reports/adapters/postgresql.rb
180
201
  - lib/reports_kit/reports/data/chart_options.rb
181
202
  - lib/reports_kit/reports/data/generate.rb
182
203
  - lib/reports_kit/reports/data/one_dimension.rb