activewarehouse 0.2.0 → 0.3.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.
- data/README +27 -14
- data/Rakefile +16 -5
- data/doc/references.txt +4 -0
- data/generators/bridge/templates/migration.rb +9 -2
- data/generators/bridge/templates/unit_test.rb +8 -0
- data/generators/date_dimension/USAGE +1 -0
- data/generators/date_dimension/date_dimension_generator.rb +16 -0
- data/generators/date_dimension/templates/fixture.yml +5 -0
- data/generators/date_dimension/templates/migration.rb +31 -0
- data/generators/date_dimension/templates/model.rb +3 -0
- data/generators/date_dimension/templates/unit_test.rb +8 -0
- data/generators/dimension/templates/migration.rb +1 -10
- data/generators/dimension_view/dimension_view_generator.rb +2 -2
- data/generators/dimension_view/templates/migration.rb +8 -2
- data/generators/fact/templates/migration.rb +2 -0
- data/generators/time_dimension/USAGE +1 -0
- data/generators/time_dimension/templates/fixture.yml +5 -0
- data/generators/time_dimension/templates/migration.rb +12 -0
- data/generators/time_dimension/templates/model.rb +3 -0
- data/generators/time_dimension/templates/unit_test.rb +8 -0
- data/generators/time_dimension/time_dimension_generator.rb +14 -0
- data/lib/active_warehouse.rb +13 -2
- data/lib/active_warehouse/aggregate.rb +54 -253
- data/lib/active_warehouse/aggregate/dwarf/node.rb +36 -0
- data/lib/active_warehouse/aggregate/dwarf_aggregate.rb +369 -0
- data/lib/active_warehouse/aggregate/dwarf_common.rb +44 -0
- data/lib/active_warehouse/aggregate/dwarf_printer.rb +34 -0
- data/lib/active_warehouse/aggregate/no_aggregate.rb +194 -0
- data/lib/active_warehouse/aggregate/pid_aggregate.rb +29 -0
- data/lib/active_warehouse/aggregate/pipelined_rolap_aggregate.rb +129 -0
- data/lib/active_warehouse/aggregate/rolap_aggregate.rb +181 -0
- data/lib/active_warehouse/aggregate/rolap_common.rb +89 -0
- data/lib/active_warehouse/aggregate/templates/pipelined_rollup_1.sql +12 -0
- data/lib/active_warehouse/aggregate/templates/pipelined_rollup_10.sql +7166 -0
- data/lib/active_warehouse/aggregate/templates/pipelined_rollup_11.sql +14334 -0
- data/lib/active_warehouse/aggregate/templates/pipelined_rollup_12.sql +28670 -0
- data/lib/active_warehouse/aggregate/templates/pipelined_rollup_13.sql +57342 -0
- data/lib/active_warehouse/aggregate/templates/pipelined_rollup_2.sql +26 -0
- data/lib/active_warehouse/aggregate/templates/pipelined_rollup_3.sql +54 -0
- data/lib/active_warehouse/aggregate/templates/pipelined_rollup_4.sql +110 -0
- data/lib/active_warehouse/aggregate/templates/pipelined_rollup_5.sql +222 -0
- data/lib/active_warehouse/aggregate/templates/pipelined_rollup_6.sql +446 -0
- data/lib/active_warehouse/aggregate/templates/pipelined_rollup_7.sql +894 -0
- data/lib/active_warehouse/aggregate/templates/pipelined_rollup_8.sql +1790 -0
- data/lib/active_warehouse/aggregate/templates/pipelined_rollup_9.sql +3582 -0
- data/lib/active_warehouse/aggregate_field.rb +49 -0
- data/lib/active_warehouse/{dimension/bridge.rb → bridge.rb} +7 -3
- data/lib/active_warehouse/bridge/hierarchy_bridge.rb +46 -0
- data/lib/active_warehouse/builder.rb +2 -1
- data/lib/active_warehouse/builder/date_dimension_builder.rb +5 -2
- data/lib/active_warehouse/builder/generator/generator.rb +13 -0
- data/lib/active_warehouse/builder/generator/name_generator.rb +20 -0
- data/lib/active_warehouse/builder/generator/paragraph_generator.rb +11 -0
- data/lib/active_warehouse/builder/random_data_builder.rb +21 -11
- data/lib/active_warehouse/builder/test_data_builder.rb +54 -0
- data/lib/active_warehouse/calculated_field.rb +27 -0
- data/lib/active_warehouse/compat/compat.rb +4 -4
- data/lib/active_warehouse/cube.rb +126 -225
- data/lib/active_warehouse/cube_query_result.rb +69 -0
- data/lib/active_warehouse/dimension.rb +64 -29
- data/lib/active_warehouse/dimension/date_dimension.rb +15 -0
- data/lib/active_warehouse/dimension/dimension_reflection.rb +21 -0
- data/lib/active_warehouse/dimension/dimension_view.rb +17 -2
- data/lib/active_warehouse/dimension/hierarchical_dimension.rb +43 -5
- data/lib/active_warehouse/dimension/slowly_changing_dimension.rb +22 -12
- data/lib/active_warehouse/fact.rb +119 -40
- data/lib/active_warehouse/field.rb +74 -0
- data/lib/active_warehouse/ordered_hash.rb +34 -0
- data/lib/active_warehouse/prejoin_fact.rb +97 -0
- data/lib/active_warehouse/report/abstract_report.rb +40 -14
- data/lib/active_warehouse/report/chart_report.rb +3 -3
- data/lib/active_warehouse/report/table_report.rb +8 -3
- data/lib/active_warehouse/version.rb +1 -1
- data/lib/active_warehouse/view/report_helper.rb +144 -34
- data/tasks/active_warehouse_tasks.rake +28 -10
- metadata +107 -30
@@ -1,6 +1,6 @@
|
|
1
|
-
module ActiveWarehouse
|
2
|
-
module Report
|
3
|
-
class ChartReport < ActiveRecord::Base
|
1
|
+
module ActiveWarehouse #:nodoc:
|
2
|
+
module Report #:nodoc:
|
3
|
+
class ChartReport < ActiveRecord::Base #:nodoc:
|
4
4
|
include AbstractReport
|
5
5
|
before_save :to_storage
|
6
6
|
after_save :from_storage
|
@@ -1,20 +1,25 @@
|
|
1
|
-
module ActiveWarehouse
|
2
|
-
module Report
|
1
|
+
module ActiveWarehouse #:nodoc:
|
2
|
+
module Report #:nodoc:
|
3
3
|
# A report which is used to represent a tabular report.
|
4
4
|
class TableReport < ActiveRecord::Base
|
5
5
|
include AbstractReport
|
6
6
|
before_save :to_storage
|
7
7
|
after_save :from_storage
|
8
|
-
attr_accessor :format
|
8
|
+
attr_accessor :format
|
9
|
+
attr_accessor :link_cell
|
10
|
+
attr_accessor :html_params
|
9
11
|
|
12
|
+
# Get any format options
|
10
13
|
def format
|
11
14
|
@format ||= {}
|
12
15
|
end
|
13
16
|
|
17
|
+
# Set to true if cells should be linked
|
14
18
|
def link_cell
|
15
19
|
@link_cell ||= false
|
16
20
|
end
|
17
21
|
|
22
|
+
# Hash of HTML parameters
|
18
23
|
def html_params
|
19
24
|
@html_params ||= {}
|
20
25
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# Helper module for rendering reports.
|
1
2
|
module ReportHelper
|
2
3
|
|
3
4
|
# Render the report.
|
@@ -26,12 +27,16 @@ module ReportHelper
|
|
26
27
|
|
27
28
|
column_hierarchy = report.column_hierarchy
|
28
29
|
column_hierarchy_constraints = report.column_constraints
|
30
|
+
column_filters = report.column_filters
|
29
31
|
|
30
32
|
row_hierarchy = report.row_hierarchy
|
31
33
|
row_hierarchy_constraints = report.row_constraints
|
34
|
+
row_filters = report.row_filters
|
32
35
|
|
33
36
|
fact_attributes = report.fact_attributes
|
34
37
|
|
38
|
+
conditions = report.conditions
|
39
|
+
|
35
40
|
html_params = report.html_params
|
36
41
|
|
37
42
|
cstage = (params[:cstage] || report.column_stage).to_i
|
@@ -44,11 +49,31 @@ module ReportHelper
|
|
44
49
|
format = report.format
|
45
50
|
|
46
51
|
# Get the dimension instances
|
47
|
-
col_dims = find_column_dimensions(column_dimension_class, column_hierarchy, cstage, col_param_prefix)
|
48
|
-
row_dims = find_row_dimensions(row_dimension_class, row_hierarchy, rstage, row_param_prefix)
|
52
|
+
#col_dims = find_column_dimensions(column_dimension_class, column_hierarchy, cstage, col_param_prefix)
|
53
|
+
#row_dims = find_row_dimensions(row_dimension_class, row_hierarchy, rstage, row_param_prefix)
|
54
|
+
|
55
|
+
# Get the filters
|
56
|
+
filters = {}
|
57
|
+
params.each do |key, value|
|
58
|
+
if key =~ /^#{col_param_prefix}_(.*)/
|
59
|
+
filters["#{column_dimension}.#{$1}"] = value
|
60
|
+
end
|
61
|
+
if key =~ /^#{row_param_prefix}_(.*)/
|
62
|
+
filters["#{row_dimension}.#{$1}"] = value
|
63
|
+
end
|
64
|
+
end
|
49
65
|
|
50
|
-
#
|
51
|
-
|
66
|
+
# Query the cube
|
67
|
+
query_result = cube.query(
|
68
|
+
:column_dimension_name => column_dimension,
|
69
|
+
:column_hierarchy_name => column_hierarchy,
|
70
|
+
:row_dimension_name => row_dimension,
|
71
|
+
:row_hierarchy_name => row_hierarchy,
|
72
|
+
:conditions => conditions,
|
73
|
+
:cstage => cstage,
|
74
|
+
:rstage => rstage,
|
75
|
+
:filters => filters
|
76
|
+
)
|
52
77
|
|
53
78
|
table_attributes = {}
|
54
79
|
table_attributes[:class] = html_options[:report_class] ||= 'report'
|
@@ -58,6 +83,27 @@ module ReportHelper
|
|
58
83
|
col_group = column_dimension_class.hierarchy(column_hierarchy)[cstage]
|
59
84
|
row_group = row_dimension_class.hierarchy(row_hierarchy)[rstage]
|
60
85
|
|
86
|
+
#puts "col group: #{col_group.inspect}"
|
87
|
+
|
88
|
+
drill_down_col_dim_values = find_column_dimension_values(column_dimension_class, column_hierarchy, cstage, col_param_prefix)
|
89
|
+
drill_down_row_dim_values = find_row_dimension_values(row_dimension_class, row_hierarchy, rstage, row_param_prefix)
|
90
|
+
|
91
|
+
col_dim_values = column_dimension_class.available_values(col_group).collect { |v| v.to_s }
|
92
|
+
row_dim_values = row_dimension_class.available_values(row_group).collect { |v| v.to_s }
|
93
|
+
#puts "col dim values: #{col_dim_values.inspect}"
|
94
|
+
|
95
|
+
col_dim_values = col_dim_values.delete_if{ |v| !drill_down_col_dim_values.include?(v) }
|
96
|
+
row_dim_values = row_dim_values.delete_if{ |v| !drill_down_row_dim_values.include?(v) }
|
97
|
+
|
98
|
+
if column_filters[col_group] && column_filters[col_group].length > 0
|
99
|
+
col_dim_values = col_dim_values.delete_if{ |v| !column_filters[col_group].include?(v) }
|
100
|
+
end
|
101
|
+
if row_filters[row_group] && row_filters[row_group].length > 0
|
102
|
+
row_dim_values = row_dim_values.delete_if{ |v| !row_filters[row_group].include?(v) }
|
103
|
+
end
|
104
|
+
|
105
|
+
#puts "col dim values: #{col_dim_values.inspect}"
|
106
|
+
|
61
107
|
# build the paths back to the top of the two dimension hierarchies
|
62
108
|
col_path = []
|
63
109
|
row_path = []
|
@@ -77,8 +123,7 @@ module ReportHelper
|
|
77
123
|
x.table(table_attributes) do |x|
|
78
124
|
x.tr do |x| # column dimension
|
79
125
|
x.th
|
80
|
-
|
81
|
-
col_dim_value = col_dim.send(col_group)
|
126
|
+
col_dim_values.each do |col_dim_value|
|
82
127
|
x.th({:colspan => fact_attributes.length}) do |x|
|
83
128
|
x << link_to_if((cstage < col_hierarchy_length - 1), col_dim_value, {
|
84
129
|
:cstage => cstage + 1,
|
@@ -90,17 +135,21 @@ module ReportHelper
|
|
90
135
|
|
91
136
|
x.tr do |x| # aggregated fact headers
|
92
137
|
x.th
|
93
|
-
|
138
|
+
col_dim_values.each do |col_dim_value|
|
94
139
|
#fact_class.aggregate_fields.each do |field_name, options|
|
95
140
|
# x.th(options[:label].to_s || field_name.to_s.humanize)
|
96
141
|
fact_attributes.each do |fact_attribute|
|
97
|
-
|
142
|
+
case fact_attribute
|
143
|
+
when Symbol, String
|
144
|
+
fact_attribute = fact_class.field_for_name(fact_attribute.to_s.dup)
|
145
|
+
raise "Field name #{field_name} not defined in the fact #{fact_class}" if fact_attribute.nil?
|
146
|
+
end
|
147
|
+
x.th(fact_attribute.label.humanize.titleize) # TODO replace with sortable column header
|
98
148
|
end
|
99
149
|
end
|
100
150
|
end
|
101
151
|
|
102
|
-
|
103
|
-
row_dim_value = row_dim.send(row_group)
|
152
|
+
row_dim_values.each do |row_dim_value| # rows
|
104
153
|
cell_row_path = row_path + [row_dim_value]
|
105
154
|
x.tr do |x|
|
106
155
|
x.td do |x| # row dimension label
|
@@ -110,25 +159,47 @@ module ReportHelper
|
|
110
159
|
"#{row_param_prefix}_#{row_group}" => row_dim_value}.merge(cube_params).merge(html_params))
|
111
160
|
end
|
112
161
|
|
113
|
-
|
114
|
-
col_dim_value = col_dim.send(col_group)
|
162
|
+
col_dim_values.each do |col_dim_value| # aggregated facts
|
115
163
|
cell_col_path = col_path + [col_dim_value]
|
116
164
|
fact_attributes.each_with_index do |fact_attribute, index|
|
117
165
|
x.td do |x|
|
118
|
-
#
|
119
|
-
#
|
166
|
+
# If a list of fact attributes to be displayed is defined then pull them
|
167
|
+
# out of the fact class
|
168
|
+
case fact_attribute
|
169
|
+
when Symbol, String
|
170
|
+
field_name = fact_attribute.to_s.dup
|
171
|
+
fact_attribute = fact_class.field_for_name(fact_attribute)
|
172
|
+
if fact_attribute.nil?
|
173
|
+
raise "Field name #{field_name} not defined in the fact #{fact_class}"
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
# Get the value
|
178
|
+
value = ''
|
179
|
+
case fact_attribute
|
180
|
+
when ActiveWarehouse::AggregateField
|
181
|
+
value = query_result.value(cell_row_path.last, cell_col_path.last, fact_attribute.label)
|
182
|
+
when ActiveWarehouse::CalculatedField
|
183
|
+
value = fact_attribute.calculate(query_result.values(cell_row_path.last, cell_col_path.last))
|
184
|
+
end
|
120
185
|
|
121
|
-
block
|
122
|
-
|
123
|
-
|
186
|
+
# Handle custom formatting if a formatting block is defined
|
187
|
+
block = format[fact_attribute.name.to_sym]
|
188
|
+
if block
|
189
|
+
value = block.call(value)
|
190
|
+
else
|
191
|
+
value = value.to_s
|
192
|
+
end
|
124
193
|
|
125
|
-
x << link_to_if(
|
126
|
-
|
194
|
+
x << link_to_if(
|
195
|
+
(cstage < col_hierarchy_length - 1 && rstage < row_hierarchy_length - 1 && link_cell),
|
127
196
|
value, {
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
197
|
+
:cstage => cstage + 1,
|
198
|
+
:rstage => rstage + 1,
|
199
|
+
"#{col_param_prefix}_#{col_group}" => col_dim_value,
|
200
|
+
"#{row_param_prefix}_#{row_group}" => row_dim_value
|
201
|
+
}.merge(cube_params).merge(html_params)
|
202
|
+
)
|
132
203
|
end
|
133
204
|
end
|
134
205
|
end
|
@@ -153,10 +224,18 @@ module ReportHelper
|
|
153
224
|
find_dimensions(dimension_class, hierarchy, current_stage, param_prefix)
|
154
225
|
end
|
155
226
|
|
227
|
+
def find_column_dimension_values(dimension_class, hierarchy, current_stage, param_prefix='c')
|
228
|
+
find_dimension_values(dimension_class, hierarchy, current_stage, param_prefix)
|
229
|
+
end
|
230
|
+
|
156
231
|
def find_row_dimensions(dimension_class, hierarchy, current_stage, param_prefix='r')
|
157
232
|
find_dimensions(dimension_class, hierarchy, current_stage, param_prefix)
|
158
233
|
end
|
159
234
|
|
235
|
+
def find_row_dimension_values(dimension_class, hierarchy, current_stage, param_prefix='r')
|
236
|
+
find_dimension_values(dimension_class, hierarchy, current_stage, param_prefix)
|
237
|
+
end
|
238
|
+
|
160
239
|
def find_dimensions(dimension_class, hierarchy, current_stage, param_prefix)
|
161
240
|
# Construct the column find options
|
162
241
|
find_options = {}
|
@@ -179,6 +258,37 @@ module ReportHelper
|
|
179
258
|
dimension_class.find(:all, find_options)
|
180
259
|
end
|
181
260
|
|
261
|
+
def find_dimension_values(dimension_class, hierarchy, current_stage, param_prefix)
|
262
|
+
# Construct the column find options
|
263
|
+
find_options = {}
|
264
|
+
group_by = []
|
265
|
+
conditions_sql = []
|
266
|
+
conditions_args = []
|
267
|
+
current_stage.to_i.downto(0) do |stage|
|
268
|
+
level = dimension_class.hierarchy(hierarchy)[stage]
|
269
|
+
group_by << level
|
270
|
+
unless stage == current_stage
|
271
|
+
param_name = "#{param_prefix}_#{level}"
|
272
|
+
conditions_sql << "#{level} = '#{params[param_name]}'" # TODO protect against injection
|
273
|
+
else
|
274
|
+
find_options[:select] = level
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
find_options[:conditions] = nil
|
279
|
+
find_options[:conditions] = conditions_sql.join(" AND ") if conditions_sql.length > 0
|
280
|
+
find_options[:group] = find_options[:order] = group_by.join(',')
|
281
|
+
|
282
|
+
q = "SELECT #{find_options[:select]} FROM #{dimension_class.table_name}"
|
283
|
+
q << " WHERE #{find_options[:conditions]}" if find_options[:conditions]
|
284
|
+
q << " GROUP BY #{find_options[:group]}" if find_options[:group]
|
285
|
+
q << " ORDER BY #{find_options[:order]}" if find_options[:order]
|
286
|
+
|
287
|
+
puts "query: #{q}"
|
288
|
+
|
289
|
+
dimension_class.connection.select_values(q)
|
290
|
+
end
|
291
|
+
|
182
292
|
public
|
183
293
|
# Create a sortable column header.
|
184
294
|
#
|
@@ -194,17 +304,17 @@ module ReportHelper
|
|
194
304
|
def sortable_column_header(column_name, order_by, link_parameters={}, attributes={}) # TODO get this thing back into the mix
|
195
305
|
order = 'desc'
|
196
306
|
if params[:order_by].to_s == order_by.to_s
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
307
|
+
sorted = 'sorted'
|
308
|
+
if params[:order] == 'desc' || params[:order].nil?
|
309
|
+
order_css_class = 'order_down'
|
310
|
+
order = 'asc'
|
311
|
+
elsif params[:order] == 'asc'
|
312
|
+
order_css_class = 'order_up'
|
313
|
+
order = 'desc'
|
314
|
+
end
|
315
|
+
else
|
316
|
+
sorted = ''
|
317
|
+
end
|
208
318
|
|
209
319
|
attributes.merge!({:class => "sortable #{sorted} #{order_css_class}"})
|
210
320
|
x.th(attributes) do |th|
|
@@ -16,6 +16,11 @@ namespace :warehouse do
|
|
16
16
|
start_date = (ENV['START_DATE'] ? Time.parse(ENV['START_DATE']) : Time.now.years_ago(5))
|
17
17
|
end_date = (ENV['END_DATE'] ? Time.parse(ENV['END_DATE']) : Time.now )
|
18
18
|
|
19
|
+
if ENV['TRUNCATE']
|
20
|
+
puts "Truncating date dimension"
|
21
|
+
DateDimension.connection.execute("TRUNCATE TABLE date_dimension")
|
22
|
+
end
|
23
|
+
|
19
24
|
puts "Building date dimension"
|
20
25
|
|
21
26
|
ddb = ActiveWarehouse::Builder::DateDimensionBuilder.new(start_date, end_date)
|
@@ -34,18 +39,26 @@ namespace :warehouse do
|
|
34
39
|
ActiveRecord::Base.establish_connection(abcs[RAILS_ENV])
|
35
40
|
require 'pp'
|
36
41
|
|
37
|
-
truncate = true if ENV['TRUNCATE']
|
38
42
|
name = ENV['NAME']
|
43
|
+
options = {}
|
44
|
+
options[:truncate] = true if ENV['TRUNCATE']
|
45
|
+
options[:facts] = ENV['FACTS'].to_i if ENV['FACTS']
|
46
|
+
options[:dimensions] = ENV['DIMENSIONS'].to_i if ENV['DIMENSIONS']
|
39
47
|
|
40
48
|
if name
|
41
|
-
build_and_load(name,
|
49
|
+
build_and_load(name, options)
|
42
50
|
else
|
43
51
|
models_dir = File.join(File.dirname(__FILE__), '../../../../app/models')
|
44
|
-
Dir.glob(File.join(models_dir, "**", "
|
52
|
+
Dir.glob(File.join(models_dir, "**", "*_dimension.rb")).each do |f|
|
45
53
|
name = File.basename(f, '.rb')
|
46
|
-
next unless name =~ /_dimension$|_fact$/
|
47
54
|
next if name == 'date_dimension'
|
48
|
-
|
55
|
+
options[:rows] = options[:dimensions]
|
56
|
+
build_and_load(name, options)
|
57
|
+
end
|
58
|
+
Dir.glob(File.join(models_dir, "**", "*_fact.rb")).each do |f|
|
59
|
+
name = File.basename(f, '.rb')
|
60
|
+
options[:rows] = options[:facts]
|
61
|
+
build_and_load(name, options)
|
49
62
|
end
|
50
63
|
end
|
51
64
|
end
|
@@ -88,14 +101,19 @@ namespace :warehouse do
|
|
88
101
|
end
|
89
102
|
end
|
90
103
|
|
91
|
-
def build_and_load(name,
|
104
|
+
def build_and_load(name, options)
|
92
105
|
builder = ActiveWarehouse::Builder::RandomDataBuilder.new
|
93
|
-
|
106
|
+
|
94
107
|
clazz = name.classify.constantize
|
95
|
-
if truncate # TODO: Handle through adapter by adding a truncate method to the adapter
|
96
|
-
|
108
|
+
if options[:truncate] # TODO: Handle through adapter by adding a truncate method to the adapter
|
109
|
+
puts "Truncating #{name}"
|
110
|
+
clazz.connection.execute("TRUNCATE TABLE #{clazz.table_name}")
|
97
111
|
end
|
98
|
-
|
112
|
+
|
113
|
+
options[:fk_limit] = {}
|
114
|
+
options[:fk_limit]['date_id'] = DateDimension.count
|
115
|
+
|
116
|
+
puts "Building #{name}"
|
99
117
|
builder.build(name, options).each do |record|
|
100
118
|
clazz.create(record)
|
101
119
|
end
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
rubygems_version: 0.9.2
|
3
3
|
specification_version: 1
|
4
4
|
name: activewarehouse
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.3.0
|
7
|
+
date: 2007-05-13 00:00:00 -04:00
|
8
8
|
summary: Build data warehouses with Rails.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -36,74 +36,133 @@ files:
|
|
36
36
|
- Rakefile
|
37
37
|
- db/migrations
|
38
38
|
- db/migrations/001_create_table_reports.rb
|
39
|
+
- doc/references.txt
|
39
40
|
- generators/bridge
|
40
|
-
- generators/cube
|
41
|
-
- generators/dimension
|
42
|
-
- generators/dimension_view
|
43
|
-
- generators/fact
|
44
41
|
- generators/bridge/bridge_generator.rb
|
45
42
|
- generators/bridge/templates
|
46
|
-
- generators/bridge/USAGE
|
47
43
|
- generators/bridge/templates/fixture.yml
|
48
44
|
- generators/bridge/templates/migration.rb
|
49
45
|
- generators/bridge/templates/model.rb
|
46
|
+
- generators/bridge/templates/unit_test.rb
|
47
|
+
- generators/bridge/USAGE
|
48
|
+
- generators/cube
|
50
49
|
- generators/cube/cube_generator.rb
|
51
50
|
- generators/cube/templates
|
52
|
-
- generators/cube/USAGE
|
53
51
|
- generators/cube/templates/model.rb
|
54
52
|
- generators/cube/templates/unit_test.rb
|
53
|
+
- generators/cube/USAGE
|
54
|
+
- generators/date_dimension
|
55
|
+
- generators/date_dimension/date_dimension_generator.rb
|
56
|
+
- generators/date_dimension/templates
|
57
|
+
- generators/date_dimension/templates/fixture.yml
|
58
|
+
- generators/date_dimension/templates/migration.rb
|
59
|
+
- generators/date_dimension/templates/model.rb
|
60
|
+
- generators/date_dimension/templates/unit_test.rb
|
61
|
+
- generators/date_dimension/USAGE
|
62
|
+
- generators/dimension
|
55
63
|
- generators/dimension/dimension_generator.rb
|
56
64
|
- generators/dimension/templates
|
57
|
-
- generators/dimension/USAGE
|
58
65
|
- generators/dimension/templates/fixture.yml
|
59
66
|
- generators/dimension/templates/migration.rb
|
60
67
|
- generators/dimension/templates/model.rb
|
61
68
|
- generators/dimension/templates/unit_test.rb
|
69
|
+
- generators/dimension/USAGE
|
70
|
+
- generators/dimension_view
|
62
71
|
- generators/dimension_view/dimension_view_generator.rb
|
63
72
|
- generators/dimension_view/templates
|
64
|
-
- generators/dimension_view/USAGE
|
65
73
|
- generators/dimension_view/templates/migration.rb
|
66
74
|
- generators/dimension_view/templates/model.rb
|
67
75
|
- generators/dimension_view/templates/unit_test.rb
|
76
|
+
- generators/dimension_view/USAGE
|
77
|
+
- generators/fact
|
68
78
|
- generators/fact/fact_generator.rb
|
69
79
|
- generators/fact/templates
|
70
|
-
- generators/fact/USAGE
|
71
80
|
- generators/fact/templates/fixture.yml
|
72
81
|
- generators/fact/templates/migration.rb
|
73
82
|
- generators/fact/templates/model.rb
|
74
83
|
- generators/fact/templates/unit_test.rb
|
84
|
+
- generators/fact/USAGE
|
85
|
+
- generators/hierarchy
|
86
|
+
- generators/time_dimension
|
87
|
+
- generators/time_dimension/templates
|
88
|
+
- generators/time_dimension/templates/fixture.yml
|
89
|
+
- generators/time_dimension/templates/migration.rb
|
90
|
+
- generators/time_dimension/templates/model.rb
|
91
|
+
- generators/time_dimension/templates/unit_test.rb
|
92
|
+
- generators/time_dimension/time_dimension_generator.rb
|
93
|
+
- generators/time_dimension/USAGE
|
75
94
|
- lib/active_warehouse
|
76
|
-
- lib/active_warehouse
|
95
|
+
- lib/active_warehouse/aggregate
|
96
|
+
- lib/active_warehouse/aggregate/dwarf
|
97
|
+
- lib/active_warehouse/aggregate/dwarf/node.rb
|
98
|
+
- lib/active_warehouse/aggregate/dwarf_aggregate.rb
|
99
|
+
- lib/active_warehouse/aggregate/dwarf_common.rb
|
100
|
+
- lib/active_warehouse/aggregate/dwarf_printer.rb
|
101
|
+
- lib/active_warehouse/aggregate/no_aggregate.rb
|
102
|
+
- lib/active_warehouse/aggregate/pid_aggregate.rb
|
103
|
+
- lib/active_warehouse/aggregate/pipelined_rolap_aggregate.rb
|
104
|
+
- lib/active_warehouse/aggregate/rolap_aggregate.rb
|
105
|
+
- lib/active_warehouse/aggregate/rolap_common.rb
|
106
|
+
- lib/active_warehouse/aggregate/templates
|
107
|
+
- lib/active_warehouse/aggregate/templates/pipelined_rollup_1.sql
|
108
|
+
- lib/active_warehouse/aggregate/templates/pipelined_rollup_10.sql
|
109
|
+
- lib/active_warehouse/aggregate/templates/pipelined_rollup_11.sql
|
110
|
+
- lib/active_warehouse/aggregate/templates/pipelined_rollup_12.sql
|
111
|
+
- lib/active_warehouse/aggregate/templates/pipelined_rollup_13.sql
|
112
|
+
- lib/active_warehouse/aggregate/templates/pipelined_rollup_2.sql
|
113
|
+
- lib/active_warehouse/aggregate/templates/pipelined_rollup_3.sql
|
114
|
+
- lib/active_warehouse/aggregate/templates/pipelined_rollup_4.sql
|
115
|
+
- lib/active_warehouse/aggregate/templates/pipelined_rollup_5.sql
|
116
|
+
- lib/active_warehouse/aggregate/templates/pipelined_rollup_6.sql
|
117
|
+
- lib/active_warehouse/aggregate/templates/pipelined_rollup_7.sql
|
118
|
+
- lib/active_warehouse/aggregate/templates/pipelined_rollup_8.sql
|
119
|
+
- lib/active_warehouse/aggregate/templates/pipelined_rollup_9.sql
|
77
120
|
- lib/active_warehouse/aggregate.rb
|
121
|
+
- lib/active_warehouse/aggregate_field.rb
|
122
|
+
- lib/active_warehouse/bridge
|
123
|
+
- lib/active_warehouse/bridge/hierarchy_bridge.rb
|
124
|
+
- lib/active_warehouse/bridge.rb
|
78
125
|
- lib/active_warehouse/builder
|
126
|
+
- lib/active_warehouse/builder/date_dimension_builder.rb
|
127
|
+
- lib/active_warehouse/builder/generator
|
128
|
+
- lib/active_warehouse/builder/generator/generator.rb
|
129
|
+
- lib/active_warehouse/builder/generator/name_generator.rb
|
130
|
+
- lib/active_warehouse/builder/generator/paragraph_generator.rb
|
131
|
+
- lib/active_warehouse/builder/random_data_builder.rb
|
132
|
+
- lib/active_warehouse/builder/test_data_builder.rb
|
79
133
|
- lib/active_warehouse/builder.rb
|
134
|
+
- lib/active_warehouse/calculated_field.rb
|
80
135
|
- lib/active_warehouse/compat
|
136
|
+
- lib/active_warehouse/compat/compat.rb
|
81
137
|
- lib/active_warehouse/core_ext
|
138
|
+
- lib/active_warehouse/core_ext/time
|
139
|
+
- lib/active_warehouse/core_ext/time/calculations.rb
|
140
|
+
- lib/active_warehouse/core_ext/time.rb
|
82
141
|
- lib/active_warehouse/core_ext.rb
|
83
142
|
- lib/active_warehouse/cube.rb
|
143
|
+
- lib/active_warehouse/cube_query_result.rb
|
84
144
|
- lib/active_warehouse/dimension
|
145
|
+
- lib/active_warehouse/dimension/date_dimension.rb
|
146
|
+
- lib/active_warehouse/dimension/dimension_reflection.rb
|
147
|
+
- lib/active_warehouse/dimension/dimension_view.rb
|
148
|
+
- lib/active_warehouse/dimension/hierarchical_dimension.rb
|
149
|
+
- lib/active_warehouse/dimension/slowly_changing_dimension.rb
|
85
150
|
- lib/active_warehouse/dimension.rb
|
86
151
|
- lib/active_warehouse/fact.rb
|
152
|
+
- lib/active_warehouse/field.rb
|
87
153
|
- lib/active_warehouse/migrations.rb
|
154
|
+
- lib/active_warehouse/ordered_hash.rb
|
155
|
+
- lib/active_warehouse/prejoin_fact.rb
|
88
156
|
- lib/active_warehouse/report
|
89
|
-
- lib/active_warehouse/report.rb
|
90
|
-
- lib/active_warehouse/version.rb
|
91
|
-
- lib/active_warehouse/view
|
92
|
-
- lib/active_warehouse/view.rb
|
93
|
-
- lib/active_warehouse/builder/date_dimension_builder.rb
|
94
|
-
- lib/active_warehouse/builder/random_data_builder.rb
|
95
|
-
- lib/active_warehouse/compat/compat.rb
|
96
|
-
- lib/active_warehouse/core_ext/time
|
97
|
-
- lib/active_warehouse/core_ext/time.rb
|
98
|
-
- lib/active_warehouse/core_ext/time/calculations.rb
|
99
|
-
- lib/active_warehouse/dimension/bridge.rb
|
100
|
-
- lib/active_warehouse/dimension/dimension_view.rb
|
101
|
-
- lib/active_warehouse/dimension/hierarchical_dimension.rb
|
102
|
-
- lib/active_warehouse/dimension/slowly_changing_dimension.rb
|
103
157
|
- lib/active_warehouse/report/abstract_report.rb
|
104
158
|
- lib/active_warehouse/report/chart_report.rb
|
105
159
|
- lib/active_warehouse/report/table_report.rb
|
160
|
+
- lib/active_warehouse/report.rb
|
161
|
+
- lib/active_warehouse/version.rb
|
162
|
+
- lib/active_warehouse/view
|
106
163
|
- lib/active_warehouse/view/report_helper.rb
|
164
|
+
- lib/active_warehouse/view.rb
|
165
|
+
- lib/active_warehouse.rb
|
107
166
|
- tasks/active_warehouse_tasks.rake
|
108
167
|
test_files: []
|
109
168
|
|
@@ -128,6 +187,15 @@ dependencies:
|
|
128
187
|
- !ruby/object:Gem::Version
|
129
188
|
version: 0.7.1
|
130
189
|
version:
|
190
|
+
- !ruby/object:Gem::Dependency
|
191
|
+
name: fastercsv
|
192
|
+
version_requirement:
|
193
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
194
|
+
requirements:
|
195
|
+
- - ">="
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: 1.1.0
|
198
|
+
version:
|
131
199
|
- !ruby/object:Gem::Dependency
|
132
200
|
name: activesupport
|
133
201
|
version_requirement:
|
@@ -135,7 +203,7 @@ dependencies:
|
|
135
203
|
requirements:
|
136
204
|
- - ">="
|
137
205
|
- !ruby/object:Gem::Version
|
138
|
-
version: 1.3.1
|
206
|
+
version: 1.3.1
|
139
207
|
version:
|
140
208
|
- !ruby/object:Gem::Dependency
|
141
209
|
name: activerecord
|
@@ -144,7 +212,7 @@ dependencies:
|
|
144
212
|
requirements:
|
145
213
|
- - ">="
|
146
214
|
- !ruby/object:Gem::Version
|
147
|
-
version: 1.14.4
|
215
|
+
version: 1.14.4
|
148
216
|
version:
|
149
217
|
- !ruby/object:Gem::Dependency
|
150
218
|
name: actionpack
|
@@ -153,7 +221,7 @@ dependencies:
|
|
153
221
|
requirements:
|
154
222
|
- - ">="
|
155
223
|
- !ruby/object:Gem::Version
|
156
|
-
version: 1.12.5
|
224
|
+
version: 1.12.5
|
157
225
|
version:
|
158
226
|
- !ruby/object:Gem::Dependency
|
159
227
|
name: rails_sql_views
|
@@ -164,3 +232,12 @@ dependencies:
|
|
164
232
|
- !ruby/object:Gem::Version
|
165
233
|
version: 0.1.0
|
166
234
|
version:
|
235
|
+
- !ruby/object:Gem::Dependency
|
236
|
+
name: adapter_extensions
|
237
|
+
version_requirement:
|
238
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
239
|
+
requirements:
|
240
|
+
- - ">="
|
241
|
+
- !ruby/object:Gem::Version
|
242
|
+
version: 0.1.0
|
243
|
+
version:
|