mochigome 0.1.18 → 0.1.19

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.18"
2
+ VERSION = "0.1.19"
3
3
  end
data/lib/model_graph.rb CHANGED
@@ -27,8 +27,23 @@ module Mochigome
27
27
  r += expr_models(e.send(m)) if e.respond_to?(m)
28
28
  end
29
29
  if e.respond_to?(:relation)
30
- model = @table_to_model[e.relation.name] or
31
- raise ModelSetupError.new("Table lookup error: #{e.relation.name}")
30
+ model = nil
31
+ begin
32
+ model = @table_to_model[e.relation.name] or
33
+ raise ModelSetupError.new("Table lookup error: #{e.relation.name}")
34
+ rescue ModelSetupError
35
+ Dir.glob(RAILS_ROOT + '/app/models/*.rb').each do |path|
36
+ clsname = File.basename(path).sub(/\.rb$/, "").classify
37
+ require File.expand_path(path) unless Object.const_defined?(clsname)
38
+ end
39
+ Object.subclasses_of(ActiveRecord::Base).each do |m|
40
+ if m.table_name == e.relation.name
41
+ model = m
42
+ break
43
+ end
44
+ end
45
+ raise unless model
46
+ end
32
47
  r.add model
33
48
  end
34
49
  r
data/lib/query.rb CHANGED
@@ -107,16 +107,18 @@ module Mochigome
107
107
  end
108
108
  root.comment.gsub!(/(\n|^) +/, "\\1")
109
109
 
110
- r = @ids_rel.clone
111
- r.apply_condition(cond)
112
- ids_sql = r.to_sql
113
- if ids_sql
114
- ids_table = connection.select_all(ids_sql).map do |row|
115
- row.each do |k,v|
116
- row[k] = denilify(v)
110
+ unless @layer_types.empty?
111
+ r = @ids_rel.clone
112
+ r.apply_condition(cond)
113
+ ids_sql = r.to_sql
114
+ if ids_sql
115
+ ids_table = connection.select_all(ids_sql).map do |row|
116
+ row.each do |k,v|
117
+ row[k] = denilify(v)
118
+ end
117
119
  end
120
+ fill_layers(ids_table, {[] => root}, @layer_types)
118
121
  end
119
- fill_layers(ids_table, {[] => root}, @layer_types)
120
122
  end
121
123
 
122
124
  root
@@ -287,6 +287,18 @@ describe Mochigome::Query do
287
287
  assert_empty data_node.children
288
288
  end
289
289
 
290
+ it "can collect filtered aggregate data without any layers" do
291
+ q = Mochigome::Query.new(
292
+ [],
293
+ :aggregate_sources => [Product]
294
+ )
295
+
296
+ data_node = q.run(@store_x)
297
+ assert_equal [@product_a, @product_c].map(&:price).sum.to_f.to_s,
298
+ data_node["Products sum price"].to_f.to_s
299
+ assert_empty data_node.children
300
+ end
301
+
290
302
  it "can use a named aggregate data setting" do
291
303
  q = Mochigome::Query.new(
292
304
  [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: 63
4
+ hash: 61
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 18
10
- version: 0.1.18
9
+ - 19
10
+ version: 0.1.19
11
11
  platform: ruby
12
12
  authors:
13
13
  - David Mike Simon