Commit 58c3792d4e9e057676a5f325edf21ca0741591fa

Authored by Rafael Martins
1 parent c295d10e

Index region with product

Also remove old monkey patch not necessary for Rails 2.3
app/models/product.rb
@@ -265,7 +265,7 @@ class Product < ActiveRecord::Base @@ -265,7 +265,7 @@ class Product < ActiveRecord::Base
265 {:environment_id => {:type => :integer}}, 265 {:environment_id => {:type => :integer}},
266 {:name_or_category => {:type => :string, :as => :name_or_category_sort, :boost => 2.0}}, 266 {:name_or_category => {:type => :string, :as => :name_or_category_sort, :boost => 2.0}},
267 :category_full_name ] + facets.keys.map{|i| {i => :facet}}, 267 :category_full_name ] + facets.keys.map{|i| {i => :facet}},
268 - :include => [:enterprise, :qualifiers, :certifiers, :product_category], 268 + :include => [:enterprise, :region, :qualifiers, :certifiers, :product_category],
269 :boost => proc {|p| 10 if p.enterprise.enabled}, 269 :boost => proc {|p| 10 if p.enterprise.enabled},
270 :facets => facets.keys 270 :facets => facets.keys
271 handle_asynchronously :solr_save 271 handle_asynchronously :solr_save
vendor/plugins/nested_has_many_through/.gitignore
@@ -1,2 +0,0 @@ @@ -1,2 +0,0 @@
1 -.garlic  
2 -doc/*  
vendor/plugins/nested_has_many_through/CHANGELOG
@@ -1,4 +0,0 @@ @@ -1,4 +0,0 @@
1 -* spec'd and fixed some problems with using named_scope in edge  
2 -  
3 -* Initial commit  
4 -  
vendor/plugins/nested_has_many_through/MIT-LICENSE
@@ -1,20 +0,0 @@ @@ -1,20 +0,0 @@
1 -Copyright (c) 2008 Ian White - ian.w.white@gmail.com  
2 -  
3 -Permission is hereby granted, free of charge, to any person obtaining  
4 -a copy of this software and associated documentation files (the  
5 -"Software"), to deal in the Software without restriction, including  
6 -without limitation the rights to use, copy, modify, merge, publish,  
7 -distribute, sublicense, and/or sell copies of the Software, and to  
8 -permit persons to whom the Software is furnished to do so, subject to  
9 -the following conditions:  
10 -  
11 -The above copyright notice and this permission notice shall be  
12 -included in all copies or substantial portions of the Software.  
13 -  
14 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  
15 -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF  
16 -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  
17 -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE  
18 -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION  
19 -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION  
20 -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  
21 \ No newline at end of file 0 \ No newline at end of file
vendor/plugins/nested_has_many_through/README.rdoc
@@ -1,92 +0,0 @@ @@ -1,92 +0,0 @@
1 -http://plugins.ardes.com > nested_has_many_through  
2 -  
3 -= nested_has_many_through  
4 -  
5 -A fantastic patch/plugin has been floating around for a while:  
6 -  
7 -* http://dev.rubyonrails.org/ticket/6461  
8 -* http://code.torchbox.com/svn/rails/plugins/nested_has_many_through  
9 -  
10 -obrie made the original ticket and Matt Westcott released the first version of  
11 -the plugin, under the MIT license. Many others have contributed, see the trac  
12 -ticket for details.  
13 -  
14 -Here is a refactored version (I didn't write the original), suitable for edge/2.0-stable  
15 -with a bunch of acceptance specs. I'm concentrating on plugin usage, once  
16 -it becomes stable, and well enough speced/understood, then it's time to pester  
17 -rails-core.  
18 -  
19 -== Why republish this on github?  
20 -  
21 -* The previous implementations are very poorly speced/tested, so it's pretty  
22 - hard to refactor and understand this complicated bit of sql-fu, especially  
23 - when you're aiming at a moving target (edge)  
24 -* the lastest patches don't apply on edge  
25 -* github - let's collab to make this better and get a patch accepted, fork away!  
26 -  
27 -== Help out  
28 -  
29 -I'm releasing 'early and often' in the hope that people will use it and find bugs/problems.  
30 -Report them at http://ianwhite.lighthouseapp.com, or fork and pull request, yada yada.  
31 -  
32 -== History  
33 -  
34 -Here's the original description:  
35 -  
36 - This plugin makes it possible to define has_many :through relationships that  
37 - go through other has_many :through relationships, possibly through an  
38 - arbitrarily deep hierarchy. This allows associations across any number of  
39 - tables to be constructed, without having to resort to find_by_sql (which isn't  
40 - a suitable solution if you need to do eager loading through :include as well).  
41 -  
42 -== Contributors  
43 -  
44 -* Matt Westcott  
45 -* terceiro  
46 -* shoe  
47 -* mhoroschun  
48 -* Ian White (http://github.com/ianwhite)  
49 -* Claudio (http://github.com/masterkain)  
50 -  
51 -Get in touch if you should be on this list  
52 -  
53 -== Show me the money!  
54 -  
55 -Here's some models from the specs:  
56 -  
57 - class Author < User  
58 - has_many :posts  
59 - has_many :categories, :through => :posts, :uniq => true  
60 - has_many :similar_posts, :through => :categories, :source => :posts  
61 - has_many :similar_authors, :through => :similar_posts, :source => :author, :uniq => true  
62 - has_many :posts_of_similar_authors, :through => :similar_authors, :source => :posts, :uniq => true  
63 - has_many :commenters, :through => :posts, :uniq => true  
64 - end  
65 -  
66 - class Post < ActiveRecord::Base  
67 - belongs_to :author  
68 - belongs_to :category  
69 - has_many :comments  
70 - has_many :commenters, :through => :comments, :source => :user, :uniq => true  
71 - end  
72 -  
73 -The first two has_manys of Author are plain vanilla, the last four are what this plugin enables  
74 -  
75 - # has_many through a has_many :through  
76 - has_many :similar_posts, :through => :categories, :source => :posts  
77 -  
78 - # doubly nested has_many :through  
79 - has_many :similar_authors, :through => :similar_posts, :source => :author, :uniq => true  
80 -  
81 - # whoah!  
82 - has_many :posts_of_similar_authors, :through => :similar_authors, :source => :posts, :uniq => true  
83 -  
84 - # has_many through a has_many :through in another model  
85 - has_many :commenters, :through => :posts, :uniq => true  
86 -  
87 -== What does it run on?  
88 -  
89 -Currently it's running on 2.0, 2.1, and 2.2 stable branches  
90 -  
91 -If you want to run the CI suite, then check out garlic_example.rb (The CI suite  
92 -is being cooked with garlic - git://github.com/ianwhite/garlic)  
vendor/plugins/nested_has_many_through/Rakefile
@@ -1,77 +0,0 @@ @@ -1,77 +0,0 @@
1 -# use pluginized rpsec if it exists  
2 -rspec_base = File.expand_path(File.dirname(__FILE__) + '/../rspec/lib')  
3 -$LOAD_PATH.unshift(rspec_base) if File.exist?(rspec_base) and !$LOAD_PATH.include?(rspec_base)  
4 -  
5 -require 'spec/rake/spectask'  
6 -require 'spec/rake/verify_rcov'  
7 -require 'rake/rdoctask'  
8 -  
9 -plugin_name = 'nested_has_many_through'  
10 -  
11 -task :default => :spec  
12 -  
13 -desc "Run the specs for #{plugin_name}"  
14 -Spec::Rake::SpecTask.new(:spec) do |t|  
15 - t.spec_files = FileList['spec/**/*_spec.rb']  
16 - t.spec_opts = ["--colour"]  
17 -end  
18 -  
19 -namespace :spec do  
20 - desc "Generate RCov report for #{plugin_name}"  
21 - Spec::Rake::SpecTask.new(:rcov) do |t|  
22 - t.spec_files = FileList['spec/**/*_spec.rb']  
23 - t.rcov = true  
24 - t.rcov_dir = 'doc/coverage'  
25 - t.rcov_opts = ['--text-report', '--exclude', "spec/,rcov.rb,#{File.expand_path(File.join(File.dirname(__FILE__),'../../..'))}"]  
26 - end  
27 -  
28 - namespace :rcov do  
29 - desc "Verify RCov threshold for #{plugin_name}"  
30 - RCov::VerifyTask.new(:verify => "spec:rcov") do |t|  
31 - t.threshold = 97.1  
32 - t.index_html = File.join(File.dirname(__FILE__), 'doc/coverage/index.html')  
33 - end  
34 - end  
35 -  
36 - desc "Generate specdoc for #{plugin_name}"  
37 - Spec::Rake::SpecTask.new(:doc) do |t|  
38 - t.spec_files = FileList['spec/**/*_spec.rb']  
39 - t.spec_opts = ["--format", "specdoc:SPECDOC"]  
40 - end  
41 -  
42 - namespace :doc do  
43 - desc "Generate html specdoc for #{plugin_name}"  
44 - Spec::Rake::SpecTask.new(:html => :rdoc) do |t|  
45 - t.spec_files = FileList['spec/**/*_spec.rb']  
46 - t.spec_opts = ["--format", "html:doc/rspec_report.html", "--diff"]  
47 - end  
48 - end  
49 -end  
50 -  
51 -task :rdoc => :doc  
52 -task "SPECDOC" => "spec:doc"  
53 -  
54 -desc "Generate rdoc for #{plugin_name}"  
55 -Rake::RDocTask.new(:doc) do |t|  
56 - t.rdoc_dir = 'doc'  
57 - t.main = 'README.rdoc'  
58 - t.title = "#{plugin_name}"  
59 - t.template = ENV['RDOC_TEMPLATE']  
60 - t.options = ['--line-numbers', '--inline-source']  
61 - t.rdoc_files.include('README.rdoc', 'SPECDOC', 'MIT-LICENSE')  
62 - t.rdoc_files.include('lib/**/*.rb')  
63 -end  
64 -  
65 -namespace :doc do  
66 - desc "Generate all documentation (rdoc, specdoc, specdoc html and rcov) for #{plugin_name}"  
67 - task :all => ["spec:doc:html", "spec:doc", "spec:rcov", "doc"]  
68 -end  
69 -  
70 -task :cruise do  
71 - # run the garlic task, capture the output, if succesful make the docs and copy them to ardes  
72 - sh "garlic all"  
73 - `garlic run > .garlic/report.txt`  
74 - `scp -i ~/.ssh/ardes .garlic/report.txt ardes@ardes.com:~/subdomains/plugins/httpdocs/doc/#{plugin_name}_garlic_report.txt`  
75 - `cd .garlic/*/vendor/plugins/#{plugin_name}; rake doc:all; scp -i ~/.ssh/ardes -r doc ardes@ardes.com:~/subdomains/plugins/httpdocs/doc/#{plugin_name}`  
76 - puts "The build is GOOD"  
77 -end  
vendor/plugins/nested_has_many_through/SPECDOC
@@ -1,49 +0,0 @@ @@ -1,49 +0,0 @@
1 -  
2 -Author (newly created)  
3 -- #posts should == []  
4 -- #categories should == []  
5 -- #similar_posts should == []  
6 -- #similar_authors should == []  
7 -- #commenters should == []  
8 -  
9 -Author (newly created) who creates post with category  
10 -- #posts should == [post]  
11 -- #categories should == [category]  
12 -  
13 -Author (newly created) who creates post with category and @other_author creates post2 in category  
14 -- #posts should == [post2]  
15 -- #categories should == [category]  
16 -- #similar_posts.should == [post, post2]  
17 -- #similar_authors.should == [@author, @other_author]  
18 -  
19 -Author (newly created) who creates post with category and @other_author creates post2 in category and creates @other_post in @other_category  
20 -- #similar_posts.should == [@post, @post2]  
21 -- #posts_by_similar_authors.should == [@post, @post2, @other_post]  
22 -  
23 -Commenter use case (a1: p1>c1, a2: p2>c1, p3>c2, a3: p4>c3)  
24 -- a1.posts should == [p1]  
25 -- a1.categories should == [c1]  
26 -- a2.posts should == [p2, p3]  
27 -- a2.categories should == [c1, c2]  
28 -  
29 -Commenter use case (a1: p1>c1, a2: p2>c1, p3>c2, a3: p4>c3) u1 comments on p2  
30 -- u1.comments should == [comment]  
31 -- a1.commenters should be empty  
32 -- a2.commenters should == [u1]  
33 -- u1.commented_posts should == [p2]  
34 -- u1.commented_posts.find_inflamatory(:all) should be empty  
35 -- u1.commented_posts.inflamatory should be empty  
36 -- u1.commented_authors should == [a2]  
37 -- u1.posts_of_interest should == [p1, p2, p3]  
38 -- u1.categories_of_interest should == [c1, c2]  
39 -  
40 -Commenter use case (a1: p1>c1, a2: p2>c1, p3>c2, a3: p4>c3) u1 comments on p2 when p2 is inflamatory  
41 -- p2 should be inflamatory  
42 -- u1.commented_posts.find_inflamatory(:all) should == [p2]  
43 -- u1.posts_of_interest.find_inflamatory(:all) should == [p2]  
44 -- u1.commented_posts.inflamatory should == [p2]  
45 -- u1.posts_of_interest.inflamatory should == [p2]  
46 -  
47 -Finished in 0.538693 seconds  
48 -  
49 -31 examples, 0 failures  
vendor/plugins/nested_has_many_through/TODO
@@ -1,10 +0,0 @@ @@ -1,10 +0,0 @@
1 -* get C2 up to 100%  
2 - - spec a polymorphic relationship  
3 -  
4 -* quote table names  
5 -  
6 -* make more use of rails in construct_has_many_or_belongs_to_attributes to reduce brittleness  
7 -  
8 -* Add more coverage  
9 - - scopes  
10 - - raise an error when nhmt is being used in a perverse way  
11 \ No newline at end of file 0 \ No newline at end of file
vendor/plugins/nested_has_many_through/garlic.rb
@@ -1,27 +0,0 @@ @@ -1,27 +0,0 @@
1 -garlic do  
2 - repo 'nested_has_many_through', :path => '.'  
3 -  
4 - repo 'rails', :url => 'git://github.com/rails/rails'  
5 - repo 'rspec', :url => 'git://github.com/dchelimsky/rspec'  
6 - repo 'rspec-rails', :url => 'git://github.com/dchelimsky/rspec-rails'  
7 -  
8 - # target rails versions  
9 - ['origin/2-2-stable', 'origin/2-1-stable', 'origin/2-0-stable'].each do |rails|  
10 - # specify how to prepare app and run CI task  
11 - target "Rails: #{rails}", :tree_ish => rails do  
12 - prepare do  
13 - plugin 'rspec'  
14 - plugin 'rspec-rails' do  
15 - `script/generate rspec -f`  
16 - end  
17 - plugin 'nested_has_many_through', :clone => true  
18 - end  
19 -  
20 - run do  
21 - cd "vendor/plugins/nested_has_many_through" do  
22 - sh "rake spec:rcov:verify"  
23 - end  
24 - end  
25 - end  
26 - end  
27 -end  
vendor/plugins/nested_has_many_through/init.rb
@@ -1,10 +0,0 @@ @@ -1,10 +0,0 @@
1 -require 'nested_has_many_through'  
2 -  
3 -ActiveRecord::Associations::HasManyThroughAssociation.send :include, NestedHasManyThrough::Association  
4 -  
5 -# BC  
6 -if defined?(ActiveRecord::Reflection::ThroughReflection)  
7 - ActiveRecord::Reflection::ThroughReflection.send :include, NestedHasManyThrough::Reflection  
8 -else  
9 - ActiveRecord::Reflection::AssociationReflection.send :include, NestedHasManyThrough::Reflection  
10 -end  
11 \ No newline at end of file 0 \ No newline at end of file
vendor/plugins/nested_has_many_through/lib/nested_has_many_through.rb
@@ -1,137 +0,0 @@ @@ -1,137 +0,0 @@
1 -module NestedHasManyThrough  
2 - module Reflection # :nodoc:  
3 - def self.included(base)  
4 - base.send :alias_method_chain, :check_validity!, :nested_has_many_through  
5 - end  
6 -  
7 - def check_validity_with_nested_has_many_through!  
8 - check_validity_without_nested_has_many_through!  
9 - rescue ActiveRecord::HasManyThroughSourceAssociationMacroError => e  
10 - # now we permit has many through to a :though source  
11 - raise e unless source_reflection.options[:through]  
12 - end  
13 - end  
14 -  
15 - module Association  
16 - def self.included(base)  
17 - base.class_eval do  
18 - def construct_conditions  
19 - @nested_join_attributes ||= construct_nested_join_attributes  
20 - "#{@nested_join_attributes[:remote_key]} = #{@owner.quoted_id} #{@nested_join_attributes[:conditions]}"  
21 - end  
22 -  
23 - def construct_joins(custom_joins = nil)  
24 - @nested_join_attributes ||= construct_nested_join_attributes  
25 - "#{@nested_join_attributes[:joins]} #{custom_joins}"  
26 - end  
27 - end  
28 - end  
29 -  
30 - protected  
31 - # Given any belongs_to or has_many (including has_many :through) association,  
32 - # return the essential components of a join corresponding to that association, namely:  
33 - #  
34 - # * <tt>:joins</tt>: any additional joins required to get from the association's table  
35 - # (reflection.table_name) to the table that's actually joining to the active record's table  
36 - # * <tt>:remote_key</tt>: the name of the key in the join table (qualified by table name) which will join  
37 - # to a field of the active record's table  
38 - # * <tt>:local_key</tt>: the name of the key in the local table (not qualified by table name) which will  
39 - # take part in the join  
40 - # * <tt>:conditions</tt>: any additional conditions (e.g. filtering by type for a polymorphic association,  
41 - # or a :conditions clause explicitly given in the association), including a leading AND  
42 - def construct_nested_join_attributes( reflection = @reflection,  
43 - association_class = reflection.klass,  
44 - table_ids = {association_class.table_name => 1})  
45 - if reflection.macro == :has_many && reflection.through_reflection  
46 - construct_has_many_through_attributes(reflection, table_ids)  
47 - else  
48 - construct_has_many_or_belongs_to_attributes(reflection, association_class, table_ids)  
49 - end  
50 - end  
51 -  
52 - def construct_has_many_through_attributes(reflection, table_ids)  
53 - # Construct the join components of the source association, so that we have a path from  
54 - # the eventual target table of the association up to the table named in :through, and  
55 - # all tables involved are allocated table IDs.  
56 - source_attrs = construct_nested_join_attributes(reflection.source_reflection, reflection.klass, table_ids)  
57 -  
58 - # Determine the alias of the :through table; this will be the last table assigned  
59 - # when constructing the source join components above.  
60 - through_table_alias = through_table_name = reflection.through_reflection.table_name  
61 - through_table_alias += "_#{table_ids[through_table_name]}" unless table_ids[through_table_name] == 1  
62 -  
63 - # Construct the join components of the through association, so that we have a path to  
64 - # the active record's table.  
65 - through_attrs = construct_nested_join_attributes(reflection.through_reflection, reflection.through_reflection.klass, table_ids)  
66 -  
67 - # Any subsequent joins / filters on owner attributes will act on the through association,  
68 - # so that's what we return for the conditions/keys of the overall association.  
69 - conditions = through_attrs[:conditions]  
70 - conditions += " AND #{interpolate_sql(reflection.klass.send(:sanitize_sql, reflection.options[:conditions]))}" if reflection.options[:conditions]  
71 -  
72 - {  
73 - :joins => "%s INNER JOIN %s ON ( %s = %s.%s %s) %s %s" % [  
74 - source_attrs[:joins],  
75 - through_table_name == through_table_alias ? through_table_name : "#{through_table_name} #{through_table_alias}",  
76 - source_attrs[:remote_key],  
77 - through_table_alias, source_attrs[:local_key],  
78 - source_attrs[:conditions],  
79 - through_attrs[:joins],  
80 - reflection.options[:joins]  
81 - ],  
82 - :remote_key => through_attrs[:remote_key],  
83 - :local_key => through_attrs[:local_key],  
84 - :conditions => conditions  
85 - }  
86 - end  
87 -  
88 -  
89 - # reflection is not has_many :through; it's a standard has_many / belongs_to instead  
90 - # TODO: see if we can defer to rails code here a bit more  
91 - def construct_has_many_or_belongs_to_attributes(reflection, association_class, table_ids)  
92 - # Determine the alias used for remote_table_name, if any. In all cases this will already  
93 - # have been assigned an ID in table_ids (either through being involved in a previous join,  
94 - # or - if it's the first table in the query - as the default value of table_ids)  
95 - remote_table_alias = remote_table_name = association_class.table_name  
96 - remote_table_alias += "_#{table_ids[remote_table_name]}" unless table_ids[remote_table_name] == 1  
97 -  
98 - # Assign a new alias for the local table.  
99 - local_table_alias = local_table_name = reflection.active_record.table_name  
100 - if table_ids[local_table_name]  
101 - table_id = table_ids[local_table_name] += 1  
102 - local_table_alias += "_#{table_id}"  
103 - else  
104 - table_ids[local_table_name] = 1  
105 - end  
106 -  
107 - conditions = ''  
108 - # Add filter for single-table inheritance, if applicable.  
109 - conditions += " AND #{remote_table_alias}.#{association_class.inheritance_column} = #{association_class.quote_value(association_class.name.demodulize)}" unless association_class.descends_from_active_record?  
110 - # Add custom conditions  
111 - conditions += " AND (#{interpolate_sql(association_class.send(:sanitize_sql, reflection.options[:conditions]))})" if reflection.options[:conditions]  
112 -  
113 - if reflection.macro == :belongs_to  
114 - if reflection.options[:polymorphic]  
115 - conditions += " AND #{local_table_alias}.#{reflection.options[:foreign_type]} = #{reflection.active_record.quote_value(association_class.base_class.name.to_s)}"  
116 - end  
117 - {  
118 - :joins => reflection.options[:joins],  
119 - :remote_key => "#{remote_table_alias}.#{association_class.primary_key}",  
120 - :local_key => reflection.primary_key_name,  
121 - :conditions => conditions  
122 - }  
123 - else  
124 - # Association is has_many (without :through)  
125 - if reflection.options[:as]  
126 - conditions += " AND #{remote_table_alias}.#{reflection.options[:as]}_type = #{reflection.active_record.quote_value(reflection.active_record.base_class.name.to_s)}"  
127 - end  
128 - {  
129 - :joins => "#{reflection.options[:joins]}",  
130 - :remote_key => "#{remote_table_alias}.#{reflection.primary_key_name}",  
131 - :local_key => reflection.klass.primary_key,  
132 - :conditions => conditions  
133 - }  
134 - end  
135 - end  
136 - end  
137 -end  
138 \ No newline at end of file 0 \ No newline at end of file
vendor/plugins/nested_has_many_through/spec/app.rb
@@ -1,84 +0,0 @@ @@ -1,84 +0,0 @@
1 -# Testing app setup  
2 -  
3 -##################  
4 -# Database schema  
5 -##################  
6 -  
7 -ActiveRecord::Migration.suppress_messages do  
8 - ActiveRecord::Schema.define(:version => 0) do  
9 - create_table :users, :force => true do |t|  
10 - t.column "type", :string  
11 - end  
12 -  
13 - create_table :posts, :force => true do |t|  
14 - t.column "author_id", :integer  
15 - t.column "category_id", :integer  
16 - t.column "inflamatory", :boolean  
17 - end  
18 -  
19 - create_table :categories, :force => true do |t|  
20 - end  
21 -  
22 - create_table :comments, :force => true do |t|  
23 - t.column "user_id", :integer  
24 - t.column "post_id", :integer  
25 - end  
26 - end  
27 -end  
28 -  
29 -#########  
30 -# Models  
31 -#  
32 -# Domain model is this:  
33 -#  
34 -# - authors (type of user) can create posts in categories  
35 -# - users can comment on posts  
36 -# - authors have similar_posts: posts in the same categories as ther posts  
37 -# - authors have similar_authors: authors of the recommended_posts  
38 -# - authors have posts_of_similar_authors: all posts by similar authors (not just the similar posts,  
39 -# similar_posts is be a subset of this collection)  
40 -# - authors have commenters: users who have commented on their posts  
41 -#  
42 -class User < ActiveRecord::Base  
43 - has_many :comments  
44 - has_many :commented_posts, :through => :comments, :source => :post, :uniq => true  
45 - has_many :commented_authors, :through => :commented_posts, :source => :author, :uniq => true  
46 - has_many :posts_of_interest, :through => :commented_authors, :source => :posts_of_similar_authors, :uniq => true  
47 - has_many :categories_of_interest, :through => :posts_of_interest, :source => :category, :uniq => true  
48 -end  
49 -  
50 -class Author < User  
51 - has_many :posts  
52 - has_many :categories, :through => :posts  
53 - has_many :similar_posts, :through => :categories, :source => :posts  
54 - has_many :similar_authors, :through => :similar_posts, :source => :author, :uniq => true  
55 - has_many :posts_of_similar_authors, :through => :similar_authors, :source => :posts, :uniq => true  
56 - has_many :commenters, :through => :posts, :uniq => true  
57 -end  
58 -  
59 -class Post < ActiveRecord::Base  
60 -  
61 - # testing with_scope  
62 - def self.find_inflamatory(*args)  
63 - with_scope :find => {:conditions => {:inflamatory => true}} do  
64 - find(*args)  
65 - end  
66 - end  
67 -  
68 - # only test named_scope in edge  
69 - named_scope(:inflamatory, :conditions => {:inflamatory => true}) if respond_to?(:named_scope)  
70 -  
71 - belongs_to :author  
72 - belongs_to :category  
73 - has_many :comments  
74 - has_many :commenters, :through => :comments, :source => :user, :uniq => true  
75 -end  
76 -  
77 -class Category < ActiveRecord::Base  
78 - has_many :posts  
79 -end  
80 -  
81 -class Comment < ActiveRecord::Base  
82 - belongs_to :user  
83 - belongs_to :post  
84 -end  
85 \ No newline at end of file 0 \ No newline at end of file
vendor/plugins/nested_has_many_through/spec/models/author_spec.rb
@@ -1,85 +0,0 @@ @@ -1,85 +0,0 @@
1 -require File.expand_path(File.join(File.dirname(__FILE__), '../spec_helper'))  
2 -require File.expand_path(File.join(File.dirname(__FILE__), '../app'))  
3 -  
4 -describe Author do  
5 - describe "(newly created)" do  
6 - before do  
7 - @category = Category.create!  
8 - @other_category = Category.create!  
9 - @author = Author.create!  
10 - end  
11 -  
12 - it "#posts should == []" do  
13 - @author.posts.should == []  
14 - end  
15 -  
16 - it "#categories should == []" do  
17 - @author.categories.should == []  
18 - end  
19 -  
20 - it "#similar_posts should == []" do  
21 - @author.similar_posts.should == []  
22 - end  
23 -  
24 - it "#similar_authors should == []" do  
25 - @author.similar_authors.should == []  
26 - end  
27 -  
28 - it "#commenters should == []" do  
29 - @author.commenters.should == []  
30 - end  
31 -  
32 - describe "who creates post with category" do  
33 - before do  
34 - @post = Post.create! :author => @author, :category => @category  
35 - end  
36 -  
37 - it "#posts should == [post]" do  
38 - @author.posts.should == [@post]  
39 - end  
40 -  
41 - it "#categories should == [category]" do  
42 - @author.categories.should == [@category]  
43 - end  
44 -  
45 - describe "and @other_author creates post2 in category" do  
46 -  
47 - before do  
48 - @other_author = Author.create!  
49 - @post2 = Post.create! :author => @other_author, :category => @category  
50 - end  
51 -  
52 - it "#posts should == [post2]" do  
53 - @author.posts.should == [@post]  
54 - end  
55 -  
56 - it "#categories should == [category]" do  
57 - @author.categories.should == [@category]  
58 - end  
59 -  
60 - it "#similar_posts.should == [post, post2]" do  
61 - @author.similar_posts.should == [@post, @post2]  
62 - end  
63 -  
64 - it "#similar_authors.should == [@author, @other_author]" do  
65 - @author.similar_authors.should == [@author, @other_author]  
66 - end  
67 -  
68 - describe "and creates @other_post in @other_category" do  
69 - before do  
70 - @other_category = Category.create!  
71 - @other_post = Post.create! :author => @other_author, :category => @other_category  
72 - end  
73 -  
74 - it "#similar_posts.should == [@post, @post2]" do  
75 - @author.similar_posts.should == [@post, @post2]  
76 - end  
77 -  
78 - it "#posts_by_similar_authors.should == [@post, @post2, @other_post]" do  
79 - @author.posts_of_similar_authors.should == [@post, @post2, @other_post]  
80 - end  
81 - end  
82 - end  
83 - end  
84 - end  
85 -end  
86 \ No newline at end of file 0 \ No newline at end of file
vendor/plugins/nested_has_many_through/spec/models/commenter_spec.rb
@@ -1,109 +0,0 @@ @@ -1,109 +0,0 @@
1 -require File.expand_path(File.join(File.dirname(__FILE__), '../spec_helper'))  
2 -require File.expand_path(File.join(File.dirname(__FILE__), '../app'))  
3 -  
4 -describe 'Commenter use case (a1: p1>c1, a2: p2>c1, p3>c2, a3: p4>c3)' do  
5 - before do  
6 - @c1 = Category.create!  
7 - @c2 = Category.create!  
8 - @c3 = Category.create!  
9 - @a1 = Author.create!  
10 - @a2 = Author.create!  
11 - @a3 = Author.create!  
12 - @p1 = @a1.posts.create! :category => @c1  
13 - @p2 = @a2.posts.create! :category => @c1  
14 - @p3 = @a2.posts.create! :category => @c2  
15 - @p4 = @a3.posts.create! :category => @c3  
16 - @a1.reload  
17 - @a2.reload  
18 - end  
19 -  
20 - it "a1.posts should == [p1]" do  
21 - @a1.posts.should == [@p1]  
22 - end  
23 -  
24 - it "a1.categories should == [c1]" do  
25 - @a1.categories.should == [@c1]  
26 - end  
27 -  
28 - it "a2.posts should == [p2, p3]" do  
29 - @a2.posts.should == [@p2, @p3]  
30 - end  
31 -  
32 - it "a2.categories should == [c1, c2]" do  
33 - @a2.categories.should == [@c1, @c2]  
34 - end  
35 -  
36 - describe "u1 comments on p2" do  
37 - before do  
38 - @u1 = User.create!  
39 - @comment = @p2.comments.create! :user => @u1  
40 - end  
41 -  
42 - it "u1.comments should == [comment]" do  
43 - @u1.comments.should == [@comment]  
44 - end  
45 -  
46 - it "a1.commenters should be empty" do  
47 - @a1.commenters.should be_empty  
48 - end  
49 -  
50 - it "a2.commenters should == [u1]" do  
51 - @a2.commenters.should == [@u1]  
52 - end  
53 -  
54 - it "u1.commented_posts should == [p2]" do  
55 - @u1.commented_posts.should == [@p2]  
56 - end  
57 -  
58 - it "u1.commented_posts.find_inflamatory(:all) should be empty" do  
59 - @u1.commented_posts.find_inflamatory(:all).should be_empty  
60 - end  
61 -  
62 - if ActiveRecord::Base.respond_to?(:named_scope)  
63 - it "u1.commented_posts.inflamatory should be empty" do  
64 - @u1.commented_posts.inflamatory.should be_empty  
65 - end  
66 - end  
67 -  
68 - it "u1.commented_authors should == [a2]" do  
69 - @u1.commented_authors.should == [@a2]  
70 - end  
71 -  
72 - it "u1.posts_of_interest should == [p1, p2, p3]" do  
73 - @u1.posts_of_interest.should == [@p1, @p2, @p3]  
74 - end  
75 -  
76 - it "u1.categories_of_interest should == [c1, c2]" do  
77 - @u1.categories_of_interest.should == [@c1, @c2]  
78 - end  
79 -  
80 - describe "when p2 is inflamatory" do  
81 - before do  
82 - @p2.toggle!(:inflamatory)  
83 - end  
84 -  
85 - it "p2 should be inflamatory" do  
86 - @p2.should be_inflamatory  
87 - end  
88 -  
89 - it "u1.commented_posts.find_inflamatory(:all) should == [p2]" do  
90 - # uniq ids is here (and next spec) because eager loading changed behaviour 2.0.2 => edge  
91 - @u1.commented_posts.find_inflamatory(:all).collect(&:id).uniq.should == [@p2.id]  
92 - end  
93 -  
94 - it "u1.posts_of_interest.find_inflamatory(:all).uniq should == [p2]" do  
95 - @u1.posts_of_interest.find_inflamatory(:all).collect(&:id).uniq.should == [@p2.id]  
96 - end  
97 -  
98 - if ActiveRecord::Base.respond_to?(:named_scope)  
99 - it "u1.commented_posts.inflamatory should == [p2]" do  
100 - @u1.commented_posts.inflamatory.should == [@p2]  
101 - end  
102 -  
103 - it "u1.posts_of_interest.inflamatory should == [p2]" do  
104 - @u1.posts_of_interest.inflamatory.should == [@p2]  
105 - end  
106 - end  
107 - end  
108 - end  
109 -end  
vendor/plugins/nested_has_many_through/spec/spec_helper.rb
@@ -1,23 +0,0 @@ @@ -1,23 +0,0 @@
1 -# This file is copied to ~/spec when you run 'ruby script/generate rspec'  
2 -# from the project root directory.  
3 -ENV["RAILS_ENV"] ||= "test"  
4 -require File.expand_path(File.join(File.dirname(__FILE__), "../../../../config/environment"))  
5 -require 'spec/rails'  
6 -  
7 -Spec::Runner.configure do |config|  
8 - config.use_transactional_fixtures = true  
9 - config.use_instantiated_fixtures = false  
10 - config.fixture_path = RAILS_ROOT + '/spec/fixtures'  
11 -  
12 - # You can declare fixtures for each behaviour like this:  
13 - # describe "...." do  
14 - # fixtures :table_a, :table_b  
15 - #  
16 - # Alternatively, if you prefer to declare them only once, you can  
17 - # do so here, like so ...  
18 - #  
19 - # config.global_fixtures = :table_a, :table_b  
20 - #  
21 - # If you declare global fixtures, be aware that they will be declared  
22 - # for all of your examples, even those that don't use them.  
23 -end  
24 \ No newline at end of file 0 \ No newline at end of file