reportable 1.0.0 → 1.0.1
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.
data/HISTORY.md
CHANGED
@@ -6,7 +6,7 @@ class <%= class_name %> < ActiveRecord::Migration
|
|
6
6
|
t.string :report_name, :null => false
|
7
7
|
t.string :grouping, :null => false
|
8
8
|
t.string :aggregation, :null => false
|
9
|
-
t.string :
|
9
|
+
t.string :conditions, :null => false
|
10
10
|
t.float :value, :null => false, :default => 0
|
11
11
|
t.datetime :reporting_period, :null => false
|
12
12
|
|
@@ -6,8 +6,8 @@ module Saulabs
|
|
6
6
|
#
|
7
7
|
# @example Cumulated reports as opposed to regular reports
|
8
8
|
#
|
9
|
-
# [[<DateTime today>, 1], [<DateTime yesterday>, 2], etc.]
|
10
|
-
# [[<DateTime today>,
|
9
|
+
# [[<DateTime today>, 1], [<DateTime yesterday>, 2], [<DateTime two days ago>, 4], etc.] # result of a regular report
|
10
|
+
# [[<DateTime today>, 7], [<DateTime yesterday>, 6], [<DateTime two days ago>, 4], etc.] # result of a cumulated report for the same dataset
|
11
11
|
#
|
12
12
|
class CumulatedReport < Report
|
13
13
|
|
@@ -92,13 +92,13 @@ module Saulabs
|
|
92
92
|
data ? data[1] : 0.0
|
93
93
|
end
|
94
94
|
|
95
|
-
def self.build_cached_data(report, grouping,
|
95
|
+
def self.build_cached_data(report, grouping, conditions, reporting_period, value)
|
96
96
|
self.new(
|
97
97
|
:model_name => report.klass.to_s,
|
98
98
|
:report_name => report.name.to_s,
|
99
99
|
:grouping => grouping.identifier.to_s,
|
100
100
|
:aggregation => report.aggregation.to_s,
|
101
|
-
:
|
101
|
+
:conditions => conditions.to_s,
|
102
102
|
:reporting_period => reporting_period.date_time,
|
103
103
|
:value => value
|
104
104
|
)
|
@@ -106,7 +106,9 @@ module Saulabs
|
|
106
106
|
|
107
107
|
def self.read_cached_data(report, options)
|
108
108
|
conditions = [
|
109
|
-
|
109
|
+
%w(model_name report_name grouping aggregation conditions).map do |column_name|
|
110
|
+
"#{self.connection.quote_column_name(column_name)} = ?"
|
111
|
+
end.join(' AND '),
|
110
112
|
report.klass.to_s,
|
111
113
|
report.name.to_s,
|
112
114
|
options[:grouping].identifier.to_s,
|
@@ -122,7 +122,9 @@ describe Saulabs::Reportable::ReportCache do
|
|
122
122
|
it 'should read existing data from the cache' do
|
123
123
|
Saulabs::Reportable::ReportCache.should_receive(:all).once.with(
|
124
124
|
:conditions => [
|
125
|
-
|
125
|
+
%w(model_name report_name grouping aggregation conditions).map do |column_name|
|
126
|
+
"#{Saulabs::Reportable::ReportCache.connection.quote_column_name(column_name)} = ?"
|
127
|
+
end.join(' AND ') + ' AND reporting_period >= ?',
|
126
128
|
@report.klass.to_s,
|
127
129
|
@report.name.to_s,
|
128
130
|
@report.options[:grouping].identifier.to_s,
|
@@ -141,7 +143,9 @@ describe Saulabs::Reportable::ReportCache do
|
|
141
143
|
end_date = Time.now
|
142
144
|
Saulabs::Reportable::ReportCache.should_receive(:all).once.with(
|
143
145
|
:conditions => [
|
144
|
-
|
146
|
+
%w(model_name report_name grouping aggregation conditions).map do |column_name|
|
147
|
+
"#{Saulabs::Reportable::ReportCache.connection.quote_column_name(column_name)} = ?"
|
148
|
+
end.join(' AND ') + ' AND reporting_period BETWEEN ? AND ?',
|
145
149
|
@report.klass.to_s,
|
146
150
|
@report.name.to_s,
|
147
151
|
@report.options[:grouping].identifier.to_s,
|
@@ -162,7 +166,9 @@ describe Saulabs::Reportable::ReportCache do
|
|
162
166
|
Saulabs::Reportable::ReportCache.should_receive(:find).once.with(
|
163
167
|
:all,
|
164
168
|
:conditions => [
|
165
|
-
|
169
|
+
%w(model_name report_name grouping aggregation conditions).map do |column_name|
|
170
|
+
"#{Saulabs::Reportable::ReportCache.connection.quote_column_name(column_name)} = ?"
|
171
|
+
end.join(' AND ') + ' AND reporting_period >= ?',
|
166
172
|
@report.klass.to_s,
|
167
173
|
@report.name.to_s,
|
168
174
|
grouping.identifier.to_s,
|
data/spec/db/schema.rb
CHANGED
@@ -13,7 +13,7 @@ ActiveRecord::Schema.define(:version => 1) do
|
|
13
13
|
t.string :report_name, :null => false
|
14
14
|
t.string :grouping, :null => false
|
15
15
|
t.string :aggregation, :null => false
|
16
|
-
t.string :
|
16
|
+
t.string :conditions, :null => false
|
17
17
|
t.float :value, :null => false, :default => 0
|
18
18
|
t.datetime :reporting_period, :null => false
|
19
19
|
|
@@ -24,14 +24,14 @@ ActiveRecord::Schema.define(:version => 1) do
|
|
24
24
|
:report_name,
|
25
25
|
:grouping,
|
26
26
|
:aggregation,
|
27
|
-
:
|
27
|
+
:conditions
|
28
28
|
], :name => :name_model_grouping_agregation
|
29
29
|
add_index :reportable_cache, [
|
30
30
|
:model_name,
|
31
31
|
:report_name,
|
32
32
|
:grouping,
|
33
33
|
:aggregation,
|
34
|
-
:
|
34
|
+
:conditions,
|
35
35
|
:reporting_period
|
36
36
|
], :unique => true, :name => :name_model_grouping_aggregation_period
|
37
37
|
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reportable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 1.0.1
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Marco Otte-Witte
|
@@ -15,24 +20,32 @@ default_executable:
|
|
15
20
|
dependencies:
|
16
21
|
- !ruby/object:Gem::Dependency
|
17
22
|
name: activerecord
|
18
|
-
|
19
|
-
|
20
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
21
25
|
requirements:
|
22
26
|
- - ">="
|
23
27
|
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 2
|
30
|
+
- 0
|
31
|
+
- 0
|
24
32
|
version: 2.0.0
|
25
|
-
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
26
35
|
- !ruby/object:Gem::Dependency
|
27
36
|
name: activesupport
|
28
|
-
|
29
|
-
|
30
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
39
|
requirements:
|
32
40
|
- - ">="
|
33
41
|
- !ruby/object:Gem::Version
|
42
|
+
segments:
|
43
|
+
- 2
|
44
|
+
- 0
|
45
|
+
- 0
|
34
46
|
version: 2.0.0
|
35
|
-
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id002
|
36
49
|
description: Reportable allows for easy report generation from ActiveRecord and DataMapper models by the addition of the reportable method.
|
37
50
|
email: reportable@saulabs.com
|
38
51
|
executables: []
|
@@ -81,18 +94,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
81
94
|
requirements:
|
82
95
|
- - ">="
|
83
96
|
- !ruby/object:Gem::Version
|
97
|
+
segments:
|
98
|
+
- 0
|
84
99
|
version: "0"
|
85
|
-
version:
|
86
100
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
101
|
requirements:
|
88
102
|
- - ">="
|
89
103
|
- !ruby/object:Gem::Version
|
104
|
+
segments:
|
105
|
+
- 0
|
90
106
|
version: "0"
|
91
|
-
version:
|
92
107
|
requirements: []
|
93
108
|
|
94
109
|
rubyforge_project:
|
95
|
-
rubygems_version: 1.3.
|
110
|
+
rubygems_version: 1.3.6
|
96
111
|
signing_key:
|
97
112
|
specification_version: 2
|
98
113
|
summary: Easy report generation for Ruby on Rails
|