comma-heaven 0.6.0 → 0.6.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.
@@ -8,7 +8,7 @@ module CommaHeaven
8
8
  end
9
9
 
10
10
  def joins
11
- case parent
11
+ sql = case parent
12
12
  when HasManyColumns
13
13
  if parent.options[:by] == 'row'
14
14
  <<-EOS
@@ -33,7 +33,11 @@ module CommaHeaven
33
33
  ON #{parent.parent.table_alias}.#{model.primary_key} = #{table_alias}.#{association.primary_key_name}
34
34
  EOS
35
35
  else ''
36
- end.gsub(/\n/, '').squeeze(' ').strip
36
+ end
37
+
38
+ sql << " AND #{table_alias}.#{association.klass.primary_key} IN (SELECT #{association.klass.primary_key} FROM #{association.quoted_table_name} WHERE #{model.send(:sanitize_sql, association.options[:conditions])})" if parent.respond_to?(:association) && association.options[:conditions]
39
+
40
+ sql.gsub(/\n/, '').squeeze(' ').strip
37
41
  end
38
42
 
39
43
  def sql_as
@@ -32,12 +32,12 @@ module CommaHeaven
32
32
  end
33
33
 
34
34
  def table_alias(method = :pluralize)
35
- return prefix + case method
36
- when :pluralize then
37
- [((parent && parent.parent) ? parent.table_alias(method) : nil), table, index].compact.join('_')
38
- when :singularize then
39
- [((parent && parent.parent) ? parent.table_alias(method) : nil), model.name.underscore, index].compact.join('_')
40
- end
35
+ t = case self
36
+ when HasManyColumns, BelongsToColumns, HasOneColumns then association.name.to_s.send(method)
37
+ else table.to_s.send(method)
38
+ end
39
+
40
+ return prefix + [((parent && parent.parent) ? parent.table_alias(method) : nil), t, index].compact.join('_')
41
41
  end
42
42
 
43
43
  def prefix
@@ -243,5 +243,20 @@ Ulivo,150,0
243
243
  Pero (marzo 2011),10,
244
244
  EOS
245
245
  end
246
-
246
+
247
+ it "should allow export of multiple relationships referring to same table" do
248
+ export = {
249
+ :name => {0 => {:include => '1', :as => ''}},
250
+ :age => {1 => {:include => '0', :as => ''}},
251
+ :leafs => {2 => {:export => {
252
+ :position => {3 => {:include => '1', :as => ''}}}, :limit => 3}},
253
+ :matching_o_leafs => {4 => {:export => {
254
+ :position => {5 => {:include => '1', :as => ''}}}, :limit => 3}}}
255
+
256
+ Tree.to_comma_heaven(:export => export).to_csv.should == <<-EOS
257
+ tree_name,leaf_0_position,leaf_1_position,leaf_2_position,matching_o_leaf_0_position,matching_o_leaf_1_position,matching_o_leaf_2_position
258
+ Olmo,top,middle,bottom,top,,bottom
259
+ Ulivo,0,5,,,,
260
+ EOS
261
+ end
247
262
  end
data/spec/spec_helper.rb CHANGED
@@ -71,6 +71,7 @@ Spec::Runner.configure do |config|
71
71
  class Tree < ActiveRecord::Base
72
72
  belongs_to :gardener
73
73
  has_many :leafs, :dependent => :destroy
74
+ has_many :matching_o_leafs, :class_name => 'Leaf', :conditions => ['position LIKE ?', '%o%']
74
75
 
75
76
  named_scope :that_begins_with_o, {:conditions => ['name LIKE ?', 'o%']}
76
77
  end
@@ -192,4 +192,24 @@ describe "Columns" do
192
192
  Gardener.scoped(:joins => columns.joins).count.should == 2
193
193
  Gardener.scoped(:joins => columns.joins, :select => columns.select).first.attributes.to_a.length.should == 16
194
194
  end
195
+
196
+ it "should allow export of multiple relationships referring to same table" do
197
+ export = {
198
+ :name => {0 => {:include => '1', :as => ''}},
199
+ :age => {1 => {:include => '0', :as => ''}},
200
+ :leafs => {2 => {:export => {
201
+ :position => {3 => {:include => '1', :as => ''}}}, :limit => 3}},
202
+ :matching_o_leafs => {4 => {:export => {
203
+ :position => {5 => {:include => '1', :as => ''}}}, :limit => 3}}}
204
+
205
+ columns = CommaHeaven::Sqler::Columns.new(Tree, export)
206
+
207
+ columns.joins.should =~ /_leafs_0/
208
+ columns.joins.should =~ /_leafs_1/
209
+ columns.joins.should =~ /_leafs_2/
210
+
211
+ columns.joins.should =~ /_matching_o_leafs_0/
212
+ columns.joins.should =~ /_matching_o_leafs_1/
213
+ columns.joins.should =~ /_matching_o_leafs_2/
214
+ end
195
215
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: comma-heaven
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.6.0
5
+ version: 0.6.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Silvano Stralla
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-16 00:00:00 +02:00
13
+ date: 2011-05-17 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency