compendium 1.1.3.4 → 1.2.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.
- checksums.yaml +5 -13
- data/.travis.yml +12 -0
- data/CHANGELOG.md +18 -0
- data/Gemfile +4 -0
- data/README.md +185 -4
- data/app/assets/stylesheets/compendium/options.css.scss +2 -3
- data/app/classes/compendium/presenters/chart.rb +1 -1
- data/app/classes/compendium/presenters/csv.rb +32 -0
- data/app/classes/compendium/presenters/query.rb +4 -2
- data/app/classes/compendium/presenters/settings/query.rb +10 -2
- data/app/classes/compendium/presenters/settings/table.rb +24 -4
- data/app/classes/compendium/presenters/table.rb +33 -18
- data/app/controllers/compendium/reports_controller.rb +28 -7
- data/app/views/compendium/reports/setup.haml +16 -2
- data/compendium.gemspec +4 -3
- data/config/locales/en.yml +6 -1
- data/config/locales/es.yml +11 -0
- data/config/locales/fr.yml +11 -0
- data/lib/compendium.rb +1 -0
- data/lib/compendium/collection_query.rb +1 -1
- data/lib/compendium/count_query.rb +7 -1
- data/lib/compendium/dsl.rb +45 -4
- data/lib/compendium/engine/mount.rb +13 -5
- data/lib/compendium/errors.rb +6 -0
- data/lib/compendium/metric.rb +1 -1
- data/lib/compendium/open_hash.rb +1 -1
- data/lib/compendium/param_types.rb +2 -2
- data/lib/compendium/params.rb +1 -1
- data/lib/compendium/query.rb +23 -4
- data/lib/compendium/report.rb +14 -10
- data/lib/compendium/sum_query.rb +3 -1
- data/lib/compendium/through_query.rb +7 -2
- data/lib/compendium/version.rb +1 -1
- data/spec/count_query_spec.rb +41 -5
- data/spec/dsl_spec.rb +77 -2
- data/spec/presenters/csv_spec.rb +30 -0
- data/spec/presenters/settings/query_spec.rb +26 -0
- data/spec/presenters/settings/table_spec.rb +64 -0
- data/spec/presenters/table_spec.rb +83 -0
- data/spec/query_spec.rb +55 -8
- data/spec/report_spec.rb +24 -1
- data/spec/sum_query_spec.rb +40 -5
- metadata +73 -30
- data/config/initializers/ruby/hash.rb +0 -6
data/spec/query_spec.rb
CHANGED
@@ -27,11 +27,19 @@ describe Compendium::Query do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
describe "#run" do
|
30
|
-
let(:
|
31
|
-
|
30
|
+
let(:command) { -> * { [{ value: 1 }, { value: 2 }] } }
|
31
|
+
let(:query) do
|
32
|
+
described_class.new(:test, {}, command)
|
33
|
+
end
|
34
|
+
|
35
|
+
before do
|
36
|
+
query.stub(:fetch_results) { |c| c }
|
37
|
+
end
|
32
38
|
|
33
39
|
it "should return the result of the query" do
|
34
|
-
query.run(nil)
|
40
|
+
results = query.run(nil)
|
41
|
+
results.should be_a Compendium::ResultSet
|
42
|
+
results.to_a.should == [{ 'value' => 1 }, { 'value' => 2 }]
|
35
43
|
end
|
36
44
|
|
37
45
|
it "should mark the query as having ran" do
|
@@ -51,14 +59,53 @@ describe Compendium::Query do
|
|
51
59
|
end
|
52
60
|
|
53
61
|
it "should filter the result set if a filter is provided" do
|
54
|
-
query.add_filter(-> data { data.reject
|
55
|
-
query.run(nil).should == [2]
|
62
|
+
query.add_filter(-> data { data.reject{ |d| d[:value].odd? } })
|
63
|
+
query.run(nil).to_a.should == [{ 'value' => 2 }]
|
56
64
|
end
|
57
65
|
|
58
66
|
it "should run multiple filters if given" do
|
59
|
-
query.add_filter(-> data { data.reject
|
60
|
-
query.add_filter(-> data { data.reject
|
61
|
-
query.run(nil).should
|
67
|
+
query.add_filter(-> data { data.reject{ |d| d[:value].odd? } })
|
68
|
+
query.add_filter(-> data { data.reject{ |d| d[:value].even? } })
|
69
|
+
query.run(nil).should be_empty
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should allow the result set to be a single hash when filters are present' do
|
73
|
+
query = described_class.new(:test, {}, -> * { { value1: 1, value2: 2, value3: 3 } })
|
74
|
+
query.stub(:fetch_results) { |c| c }
|
75
|
+
|
76
|
+
query.add_filter(-> d { d })
|
77
|
+
query.run(nil)
|
78
|
+
query.results.records.should == { value1: 1, value2: 2, value3: 3 }.with_indifferent_access
|
79
|
+
end
|
80
|
+
|
81
|
+
context 'ordering' do
|
82
|
+
let(:cmd) do
|
83
|
+
cmd = double('Command')
|
84
|
+
cmd.stub(order: cmd, reverse_order: cmd)
|
85
|
+
cmd
|
86
|
+
end
|
87
|
+
|
88
|
+
let(:command) do
|
89
|
+
-> c { -> * { c } }.(cmd)
|
90
|
+
end
|
91
|
+
|
92
|
+
before { query.options[:order] = 'col1' }
|
93
|
+
|
94
|
+
it 'should order the query' do
|
95
|
+
cmd.should_receive(:order)
|
96
|
+
query.run(nil)
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'should not reverse the order by default' do
|
100
|
+
cmd.should_not_receive(:reverse_order)
|
101
|
+
query.run(nil)
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'should reverse order if the query is given reverse: true' do
|
105
|
+
query.options[:reverse] = true
|
106
|
+
cmd.should_receive(:reverse_order)
|
107
|
+
query.run(nil)
|
108
|
+
end
|
62
109
|
end
|
63
110
|
|
64
111
|
context "when the query belongs to a report class" do
|
data/spec/report_spec.rb
CHANGED
@@ -288,7 +288,7 @@ describe Compendium::Report do
|
|
288
288
|
end
|
289
289
|
|
290
290
|
it 'should add filters by inheritence' do
|
291
|
-
subclass3.main_query.filters.
|
291
|
+
subclass3.main_query.filters.should_not be_empty
|
292
292
|
end
|
293
293
|
|
294
294
|
it 'should not bleed filters from a subclass into other subclasses' do
|
@@ -296,4 +296,27 @@ describe Compendium::Report do
|
|
296
296
|
subclass2.main_query.filters.should be_empty
|
297
297
|
end
|
298
298
|
end
|
299
|
+
|
300
|
+
describe '#exports?' do
|
301
|
+
let(:report_class) do
|
302
|
+
Class.new(described_class) do
|
303
|
+
exports :csv, :main_query
|
304
|
+
exports :pdf, false
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
subject { report_class.new }
|
309
|
+
|
310
|
+
it 'should return true if there is an export for the given type' do
|
311
|
+
subject.exports?(:csv).should be_true
|
312
|
+
end
|
313
|
+
|
314
|
+
it 'should return false if there is no export for the given type explicitly' do
|
315
|
+
subject.exports?(:pdf).should be_false
|
316
|
+
end
|
317
|
+
|
318
|
+
it 'should return false if there is no export for the given type implicitly' do
|
319
|
+
subject.exports?(:xls).should be_false
|
320
|
+
end
|
321
|
+
end
|
299
322
|
end
|
data/spec/sum_query_spec.rb
CHANGED
@@ -9,14 +9,37 @@ class SingleSummer
|
|
9
9
|
end
|
10
10
|
|
11
11
|
class MultipleSummer
|
12
|
+
def order(*)
|
13
|
+
@order = true
|
14
|
+
self
|
15
|
+
end
|
16
|
+
|
17
|
+
def reverse_order
|
18
|
+
@reverse = true
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
12
22
|
def sum(col)
|
13
|
-
{ 1 =>
|
23
|
+
results = { 1 => 340, 2 => 204, 3 => 983 }
|
24
|
+
|
25
|
+
if @order
|
26
|
+
results = results.sort_by{ |r| r[1] }
|
27
|
+
results.reverse! if @reverse
|
28
|
+
results = Hash[results]
|
29
|
+
end
|
30
|
+
|
31
|
+
results
|
14
32
|
end
|
15
33
|
end
|
16
34
|
|
17
35
|
describe Compendium::SumQuery do
|
18
36
|
subject { described_class.new(:counted_query, :col, { sum: :col }, -> * { @counter }) }
|
19
37
|
|
38
|
+
it 'should have a default order' do
|
39
|
+
subject.options[:order].should == 'SUM(col)'
|
40
|
+
subject.options[:reverse].should == true
|
41
|
+
end
|
42
|
+
|
20
43
|
describe "#run" do
|
21
44
|
it "should call sum on the proc result" do
|
22
45
|
@counter = SingleSummer.new
|
@@ -29,14 +52,26 @@ describe Compendium::SumQuery do
|
|
29
52
|
subject.run(nil, self).should == [1792]
|
30
53
|
end
|
31
54
|
|
32
|
-
|
33
|
-
@counter = MultipleSummer.new
|
34
|
-
|
55
|
+
context 'when given a hash' do
|
56
|
+
before { @counter = MultipleSummer.new }
|
57
|
+
|
58
|
+
it "should return a hash if given" do
|
59
|
+
subject.run(nil, self).should == { 3 => 983, 1 => 340, 2 => 204 }
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should be ordered in descending order' do
|
63
|
+
subject.run(nil, self).keys.should == [3, 1, 2]
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should use the given options' do
|
67
|
+
subject.options[:reverse] = false
|
68
|
+
subject.run(nil, self).keys.should == [2, 1, 3]
|
69
|
+
end
|
35
70
|
end
|
36
71
|
|
37
72
|
it "should raise an error if the proc does not respond to sum" do
|
38
73
|
@counter = Class.new
|
39
|
-
expect { subject.run(nil, self) }.to raise_error Compendium::
|
74
|
+
expect { subject.run(nil, self) }.to raise_error Compendium::InvalidCommand
|
40
75
|
end
|
41
76
|
end
|
42
77
|
end
|
metadata
CHANGED
@@ -1,99 +1,131 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: compendium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Vandersluis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
type: :runtime
|
15
|
-
prerelease: false
|
16
14
|
name: rails
|
17
15
|
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 3.0.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '4'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: 3.0.0
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '4'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
|
-
type: :runtime
|
29
|
-
prerelease: false
|
30
34
|
name: sass-rails
|
31
35
|
requirement: !ruby/object:Gem::Requirement
|
32
36
|
requirements:
|
33
|
-
- -
|
37
|
+
- - ">="
|
34
38
|
- !ruby/object:Gem::Version
|
35
39
|
version: 3.0.0
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
36
42
|
version_requirements: !ruby/object:Gem::Requirement
|
37
43
|
requirements:
|
38
|
-
- -
|
44
|
+
- - ">="
|
39
45
|
- !ruby/object:Gem::Version
|
40
46
|
version: 3.0.0
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
|
-
type: :runtime
|
43
|
-
prerelease: false
|
44
48
|
name: compass-rails
|
45
49
|
requirement: !ruby/object:Gem::Requirement
|
46
50
|
requirements:
|
47
|
-
- -
|
51
|
+
- - ">="
|
48
52
|
- !ruby/object:Gem::Version
|
49
53
|
version: 1.0.0
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
|
-
- -
|
58
|
+
- - ">="
|
53
59
|
- !ruby/object:Gem::Version
|
54
60
|
version: 1.0.0
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
|
-
type: :runtime
|
57
|
-
prerelease: false
|
58
62
|
name: collection_of
|
59
63
|
requirement: !ruby/object:Gem::Requirement
|
60
64
|
requirements:
|
61
65
|
- - '='
|
62
66
|
- !ruby/object:Gem::Version
|
63
|
-
version: 1.0.
|
67
|
+
version: 1.0.6
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
65
71
|
requirements:
|
66
72
|
- - '='
|
67
73
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.0.
|
74
|
+
version: 1.0.6
|
69
75
|
- !ruby/object:Gem::Dependency
|
70
|
-
type: :runtime
|
71
|
-
prerelease: false
|
72
76
|
name: inheritable_attr
|
73
77
|
requirement: !ruby/object:Gem::Requirement
|
74
78
|
requirements:
|
75
|
-
- -
|
79
|
+
- - ">="
|
76
80
|
- !ruby/object:Gem::Version
|
77
81
|
version: 1.0.0
|
82
|
+
type: :runtime
|
83
|
+
prerelease: false
|
78
84
|
version_requirements: !ruby/object:Gem::Requirement
|
79
85
|
requirements:
|
80
|
-
- -
|
86
|
+
- - ">="
|
81
87
|
- !ruby/object:Gem::Version
|
82
88
|
version: 1.0.0
|
83
89
|
- !ruby/object:Gem::Dependency
|
90
|
+
name: rake
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 11.0.1
|
96
|
+
- - "<"
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '12'
|
84
99
|
type: :development
|
85
100
|
prerelease: false
|
101
|
+
version_requirements: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">"
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: 11.0.1
|
106
|
+
- - "<"
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '12'
|
109
|
+
- !ruby/object:Gem::Dependency
|
86
110
|
name: rspec
|
87
111
|
requirement: !ruby/object:Gem::Requirement
|
88
112
|
requirements:
|
89
|
-
- - ~>
|
113
|
+
- - "~>"
|
90
114
|
- !ruby/object:Gem::Version
|
91
115
|
version: '2.0'
|
116
|
+
- - "<"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '2.99'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
92
121
|
version_requirements: !ruby/object:Gem::Requirement
|
93
122
|
requirements:
|
94
|
-
- - ~>
|
123
|
+
- - "~>"
|
95
124
|
- !ruby/object:Gem::Version
|
96
125
|
version: '2.0'
|
126
|
+
- - "<"
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '2.99'
|
97
129
|
description: Ruby on Rails reporting framework
|
98
130
|
email:
|
99
131
|
- dvandersluis@selfmgmt.com
|
@@ -101,7 +133,8 @@ executables: []
|
|
101
133
|
extensions: []
|
102
134
|
extra_rdoc_files: []
|
103
135
|
files:
|
104
|
-
- .gitignore
|
136
|
+
- ".gitignore"
|
137
|
+
- ".travis.yml"
|
105
138
|
- CHANGELOG.md
|
106
139
|
- Gemfile
|
107
140
|
- LICENSE.txt
|
@@ -112,6 +145,7 @@ files:
|
|
112
145
|
- app/assets/stylesheets/compendium/report.css.scss
|
113
146
|
- app/classes/compendium/presenters/base.rb
|
114
147
|
- app/classes/compendium/presenters/chart.rb
|
148
|
+
- app/classes/compendium/presenters/csv.rb
|
115
149
|
- app/classes/compendium/presenters/metric.rb
|
116
150
|
- app/classes/compendium/presenters/option.rb
|
117
151
|
- app/classes/compendium/presenters/query.rb
|
@@ -125,9 +159,10 @@ files:
|
|
125
159
|
- app/views/compendium/reports/setup.haml
|
126
160
|
- compendium.gemspec
|
127
161
|
- config/initializers/rails/active_record/connection_adapters/quoting.rb
|
128
|
-
- config/initializers/ruby/hash.rb
|
129
162
|
- config/initializers/ruby/numeric.rb
|
130
163
|
- config/locales/en.yml
|
164
|
+
- config/locales/es.yml
|
165
|
+
- config/locales/fr.yml
|
131
166
|
- lib/compendium.rb
|
132
167
|
- lib/compendium/abstract_chart_provider.rb
|
133
168
|
- lib/compendium/collection_query.rb
|
@@ -136,6 +171,7 @@ files:
|
|
136
171
|
- lib/compendium/dsl.rb
|
137
172
|
- lib/compendium/engine.rb
|
138
173
|
- lib/compendium/engine/mount.rb
|
174
|
+
- lib/compendium/errors.rb
|
139
175
|
- lib/compendium/metric.rb
|
140
176
|
- lib/compendium/open_hash.rb
|
141
177
|
- lib/compendium/option.rb
|
@@ -157,7 +193,11 @@ files:
|
|
157
193
|
- spec/params_spec.rb
|
158
194
|
- spec/presenters/base_spec.rb
|
159
195
|
- spec/presenters/chart_spec.rb
|
196
|
+
- spec/presenters/csv_spec.rb
|
160
197
|
- spec/presenters/option_spec.rb
|
198
|
+
- spec/presenters/settings/query_spec.rb
|
199
|
+
- spec/presenters/settings/table_spec.rb
|
200
|
+
- spec/presenters/table_spec.rb
|
161
201
|
- spec/query_spec.rb
|
162
202
|
- spec/report_spec.rb
|
163
203
|
- spec/result_set_spec.rb
|
@@ -174,17 +214,17 @@ require_paths:
|
|
174
214
|
- lib
|
175
215
|
required_ruby_version: !ruby/object:Gem::Requirement
|
176
216
|
requirements:
|
177
|
-
- -
|
217
|
+
- - ">="
|
178
218
|
- !ruby/object:Gem::Version
|
179
219
|
version: '0'
|
180
220
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
221
|
requirements:
|
182
|
-
- -
|
222
|
+
- - ">="
|
183
223
|
- !ruby/object:Gem::Version
|
184
224
|
version: '0'
|
185
225
|
requirements: []
|
186
226
|
rubyforge_project:
|
187
|
-
rubygems_version: 2.
|
227
|
+
rubygems_version: 2.6.8
|
188
228
|
signing_key:
|
189
229
|
specification_version: 4
|
190
230
|
summary: Ruby on Rails reporting framework
|
@@ -199,11 +239,14 @@ test_files:
|
|
199
239
|
- spec/params_spec.rb
|
200
240
|
- spec/presenters/base_spec.rb
|
201
241
|
- spec/presenters/chart_spec.rb
|
242
|
+
- spec/presenters/csv_spec.rb
|
202
243
|
- spec/presenters/option_spec.rb
|
244
|
+
- spec/presenters/settings/query_spec.rb
|
245
|
+
- spec/presenters/settings/table_spec.rb
|
246
|
+
- spec/presenters/table_spec.rb
|
203
247
|
- spec/query_spec.rb
|
204
248
|
- spec/report_spec.rb
|
205
249
|
- spec/result_set_spec.rb
|
206
250
|
- spec/spec_helper.rb
|
207
251
|
- spec/sum_query_spec.rb
|
208
252
|
- spec/through_query_spec.rb
|
209
|
-
has_rdoc:
|