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.
Files changed (44) hide show
  1. checksums.yaml +5 -13
  2. data/.travis.yml +12 -0
  3. data/CHANGELOG.md +18 -0
  4. data/Gemfile +4 -0
  5. data/README.md +185 -4
  6. data/app/assets/stylesheets/compendium/options.css.scss +2 -3
  7. data/app/classes/compendium/presenters/chart.rb +1 -1
  8. data/app/classes/compendium/presenters/csv.rb +32 -0
  9. data/app/classes/compendium/presenters/query.rb +4 -2
  10. data/app/classes/compendium/presenters/settings/query.rb +10 -2
  11. data/app/classes/compendium/presenters/settings/table.rb +24 -4
  12. data/app/classes/compendium/presenters/table.rb +33 -18
  13. data/app/controllers/compendium/reports_controller.rb +28 -7
  14. data/app/views/compendium/reports/setup.haml +16 -2
  15. data/compendium.gemspec +4 -3
  16. data/config/locales/en.yml +6 -1
  17. data/config/locales/es.yml +11 -0
  18. data/config/locales/fr.yml +11 -0
  19. data/lib/compendium.rb +1 -0
  20. data/lib/compendium/collection_query.rb +1 -1
  21. data/lib/compendium/count_query.rb +7 -1
  22. data/lib/compendium/dsl.rb +45 -4
  23. data/lib/compendium/engine/mount.rb +13 -5
  24. data/lib/compendium/errors.rb +6 -0
  25. data/lib/compendium/metric.rb +1 -1
  26. data/lib/compendium/open_hash.rb +1 -1
  27. data/lib/compendium/param_types.rb +2 -2
  28. data/lib/compendium/params.rb +1 -1
  29. data/lib/compendium/query.rb +23 -4
  30. data/lib/compendium/report.rb +14 -10
  31. data/lib/compendium/sum_query.rb +3 -1
  32. data/lib/compendium/through_query.rb +7 -2
  33. data/lib/compendium/version.rb +1 -1
  34. data/spec/count_query_spec.rb +41 -5
  35. data/spec/dsl_spec.rb +77 -2
  36. data/spec/presenters/csv_spec.rb +30 -0
  37. data/spec/presenters/settings/query_spec.rb +26 -0
  38. data/spec/presenters/settings/table_spec.rb +64 -0
  39. data/spec/presenters/table_spec.rb +83 -0
  40. data/spec/query_spec.rb +55 -8
  41. data/spec/report_spec.rb +24 -1
  42. data/spec/sum_query_spec.rb +40 -5
  43. metadata +73 -30
  44. 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(:query) { described_class.new(:test, {}, -> * { [1, 2, 3] }) }
31
- before { query.stub(:fetch_results) { |c| c } }
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).should == [1, 2, 3]
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(&:odd?) })
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(&:odd?) })
60
- query.add_filter(-> data { data.reject(&:even?) })
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.should include filter_proc
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
@@ -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 => 123, 2 => 456, 3 => 789 }
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
- it "should return a hash if given" do
33
- @counter = MultipleSummer.new
34
- subject.run(nil, self).should == { 1 => 123, 2 => 456, 3 => 789 }
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::SumQuery::InvalidCommand
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.1.3.4
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: 2015-06-26 00:00:00.000000000 Z
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.5
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.5
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.1.5
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:
@@ -1,6 +0,0 @@
1
- class Hash
2
- # Remove nil values
3
- def compact
4
- delete_if{ |_, v| v.blank? }
5
- end unless method_defined?(:compact)
6
- end