mochigome 0.1.15 → 0.1.16

Sign up to get free protection for your applications and to get access to all the features.
data/lib/mochigome_ver.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Mochigome
2
- VERSION = "0.1.15"
2
+ VERSION = "0.1.16"
3
3
  end
data/lib/query.rb CHANGED
@@ -86,6 +86,10 @@ module Mochigome
86
86
 
87
87
  private
88
88
 
89
+ def connection
90
+ ActiveRecord::Base.connection
91
+ end
92
+
89
93
  def create_node_tree(cond)
90
94
  root = DataNode.new(:report, @name)
91
95
  root.comment = <<-eos
@@ -100,8 +104,11 @@ module Mochigome
100
104
 
101
105
  r = @ids_rel.clone
102
106
  r.apply_condition(cond)
103
- ids_table = @layer_types.first.connection.select_all(r.to_sql)
104
- fill_layers(ids_table, {[] => root}, @layer_types)
107
+ ids_sql = r.to_sql
108
+ if ids_sql
109
+ ids_table = connection.select_all(ids_sql)
110
+ fill_layers(ids_table, {[] => root}, @layer_types)
111
+ end
105
112
 
106
113
  root
107
114
  end
@@ -153,7 +160,7 @@ module Mochigome
153
160
  rel_funcs.each do |rel_func|
154
161
  q = rel_func.call(cond)
155
162
  data_tree = {}
156
- @layer_types.first.connection.select_all(q.to_sql).each do |row|
163
+ connection.select_all(q.to_sql).each do |row|
157
164
  group_values = row.keys.select{|k| k.start_with?("g")}.sort.map{|k| row[k]}
158
165
  data_values = row.keys.select{|k| k.start_with?("d")}.sort.map{|k| row[k]}
159
166
  if group_values.empty?
data/lib/relation.rb CHANGED
@@ -13,34 +13,34 @@ module Mochigome
13
13
  @joins = []
14
14
 
15
15
  @spine_layers.map(&:to_real_model).uniq.each do |m|
16
- if @rel
17
- join_to_model(m)
18
- else
19
- @rel = @model_graph.relation_init(m)
20
- @models.add m
21
- end
16
+ join_to_model(m)
22
17
  @spine << m
23
18
  end
24
19
  @spine_layers.each{|m| select_model_id(m)}
25
20
  end
26
21
 
27
22
  def to_arel
28
- @rel.clone
23
+ @rel.try(:clone)
29
24
  end
30
25
 
31
26
  def to_sql
32
- @rel.to_sql
27
+ @rel.try(:to_sql)
33
28
  end
34
29
 
35
30
  def clone
36
31
  c = super
37
32
  c.instance_variable_set :@models, @models.clone
38
- c.instance_variable_set :@rel, @rel.clone
33
+ c.instance_variable_set :@rel, @rel.clone if @rel
39
34
  c
40
35
  end
41
36
 
42
37
  def join_to_model(model)
43
38
  return if @models.include?(model)
39
+ unless @rel
40
+ @rel = @model_graph.relation_init(model)
41
+ @models.add model
42
+ return
43
+ end
44
44
 
45
45
  # Route to it in as few steps as possible, closer to spine end if tie.
46
46
  best_path = nil
@@ -84,6 +84,7 @@ module Mochigome
84
84
  end
85
85
 
86
86
  def select_model_id(m)
87
+ join_to_model(m)
87
88
  @rel = @rel.project(m.arel_primary_key.as("#{m.name}_id"))
88
89
  end
89
90
 
@@ -275,6 +275,18 @@ describe Mochigome::Query do
275
275
  assert_equal (2*@product_c.price).to_f.to_s, (data_node/1/0/0)['Gross'].to_f.to_s
276
276
  end
277
277
 
278
+ it "can collect aggregate data without any layers" do
279
+ q = Mochigome::Query.new(
280
+ [],
281
+ :aggregate_sources => [Product]
282
+ )
283
+
284
+ data_node = q.run
285
+ assert_equal Product.all.map(&:price).sum.to_s,
286
+ data_node["Products sum price"].to_s
287
+ assert_empty data_node.children
288
+ end
289
+
278
290
  it "can use a named aggregate data setting" do
279
291
  q = Mochigome::Query.new(
280
292
  [Owner],
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mochigome
3
3
  version: !ruby/object:Gem::Version
4
- hash: 5
4
+ hash: 59
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 15
10
- version: 0.1.15
9
+ - 16
10
+ version: 0.1.16
11
11
  platform: ruby
12
12
  authors:
13
13
  - David Mike Simon
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-06-04 00:00:00 Z
18
+ date: 2012-06-05 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  version_requirements: &id001 !ruby/object:Gem::Requirement