compendium 1.1.3.4 → 1.2.0

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