mochigome 0.1.15 → 0.1.16

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/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