Commit c7ef702919b0b76418e19b4b938cda3e4b933afe

Authored by Antonio Terceiro
1 parent 2b84844f

Rails 3 porting: bootstrap development environment

./script/quick-start runs back to back now

You will notice that solr was removed.
Showing 188 changed files with 134 additions and 105843 deletions   Show diff stats

Too many changes.

To preserve performance only 100 of 188 files displayed.

MIGRATION_ISSUES
... ... @@ -27,3 +27,5 @@
27 27 * rewrite conditional routing. See FIXME in lib/route_if.rb and re-implement using the Rails 3 mechanism - http://guides.rubyonrails.org/routing.html#advanced-constraints
28 28  
29 29 * check FIXME's in config/environment.rb
  30 +
  31 +* xss_terminate sucks. We should replace it with the builtin mechanism in Rails 3
... ...
app/models/article.rb
... ... @@ -2,6 +2,8 @@ require 'hpricot'
2 2  
3 3 class Article < ActiveRecord::Base
4 4  
  5 + attr_accessible :name, :body, :abstract, :profile
  6 +
5 7 # use for internationalizable human type names in search facets
6 8 # reimplement on subclasses
7 9 def self.type_name
... ... @@ -142,7 +144,6 @@ class Article &lt; ActiveRecord::Base
142 144 else
143 145 ArticleCategorization.add_category_to_article(c, self)
144 146 self.categories(reload)
145   - self.solr_save
146 147 end
147 148 end
148 149  
... ... @@ -160,7 +161,6 @@ class Article &lt; ActiveRecord::Base
160 161 ArticleCategorization.add_category_to_article(item, self)
161 162 end
162 163 self.categories(true)
163   - self.solr_save
164 164 pending_categorizations.clear
165 165 end
166 166  
... ... @@ -238,7 +238,6 @@ class Article &lt; ActiveRecord::Base
238 238 body || ''
239 239 end
240 240  
241   - include ApplicationHelper
242 241 def reported_version(options = {})
243 242 article = self
244 243 search_path = File.join(Rails.root, 'app', 'views', 'shared', 'reported_versions')
... ... @@ -469,10 +468,6 @@ class Article &lt; ActiveRecord::Base
469 468 allow_post_content?(user) || user && allow_members_to_edit && user.is_member_of?(profile)
470 469 end
471 470  
472   - def comments_updated
473   - solr_save
474   - end
475   -
476 471 def accept_category?(cat)
477 472 !cat.is_a?(ProductCategory)
478 473 end
... ... @@ -636,21 +631,6 @@ class Article &lt; ActiveRecord::Base
636 631  
637 632 private
638 633  
639   - # FIXME: workaround for development env.
640   - # Subclasses aren't (re)loaded, and acts_as_solr
641   - # depends on subclasses method to search
642   - # see http://stackoverflow.com/questions/4138957/activerecordsubclassnotfound-error-when-using-sti-in-rails/4139245
643   - UploadedFile
644   - TextArticle
645   - TinyMceArticle
646   - TextileArticle
647   - Folder
648   - EnterpriseHomepage
649   - Gallery
650   - Blog
651   - Forum
652   - Event
653   -
654 634 def self.f_type_proc(klass)
655 635 klass.constantize.type_name
656 636 end
... ... @@ -682,9 +662,6 @@ class Article &lt; ActiveRecord::Base
682 662 end
683 663  
684 664 delegate :region, :region_id, :environment, :environment_id, :to => :profile, :allow_nil => true
685   - def name_sortable # give a different name for solr
686   - name
687   - end
688 665  
689 666 def public
690 667 self.public?
... ... @@ -694,39 +671,6 @@ class Article &lt; ActiveRecord::Base
694 671 categories_including_virtual_ids
695 672 end
696 673  
697   - public
698   -
699   - acts_as_faceted :fields => {
700   - :f_type => {:label => _('Type'), :proc => proc{|klass| f_type_proc(klass)}},
701   - :f_published_at => {:type => :date, :label => _('Published date'), :queries => {'[* TO NOW-1YEARS/DAY]' => _("Older than one year"),
702   - '[NOW-1YEARS TO NOW/DAY]' => _("In the last year"), '[NOW-1MONTHS TO NOW/DAY]' => _("In the last month"), '[NOW-7DAYS TO NOW/DAY]' => _("In the last week"), '[NOW-1DAYS TO NOW/DAY]' => _("In the last day")},
703   - :queries_order => ['[NOW-1DAYS TO NOW/DAY]', '[NOW-7DAYS TO NOW/DAY]', '[NOW-1MONTHS TO NOW/DAY]', '[NOW-1YEARS TO NOW/DAY]', '[* TO NOW-1YEARS/DAY]']},
704   - :f_profile_type => {:label => _('Profile'), :proc => proc{|klass| f_profile_type_proc(klass)}},
705   - :f_category => {:label => _('Categories')},
706   - }, :category_query => proc { |c| "category_filter:\"#{c.id}\"" },
707   - :order => [:f_type, :f_published_at, :f_profile_type, :f_category]
708   -
709   - acts_as_searchable :fields => facets_fields_for_solr + [
710   - # searched fields
711   - {:name => {:type => :text, :boost => 2.0}},
712   - {:slug => :text}, {:body => :text},
713   - {:abstract => :text}, {:filename => :text},
714   - # filtered fields
715   - {:public => :boolean}, {:environment_id => :integer},
716   - {:profile_id => :integer}, :language,
717   - {:category_filter => :integer},
718   - # ordered/query-boosted fields
719   - {:name_sortable => :string}, :last_changed_by_id, :published_at, :is_image,
720   - :updated_at, :created_at,
721   - ], :include => [
722   - {:profile => {:fields => [:name, :identifier, :address, :nickname, :region_id, :lat, :lng]}},
723   - {:comments => {:fields => [:title, :body, :author_name, :author_email]}},
724   - {:categories => {:fields => [:name, :path, :slug, :lat, :lng, :acronym, :abbreviation]}},
725   - ], :facets => facets_option_for_solr,
726   - :boost => proc { |a| 10 if a.profile && a.profile.enabled },
727   - :if => proc{ |a| ! ['RssFeed'].include?(a.class.name) }
728   - handle_asynchronously :solr_save
729   -
730 674 private
731 675  
732 676 def sanitize_tag_list
... ...
app/models/blog_archives_block.rb
... ... @@ -2,7 +2,7 @@ class BlogArchivesBlock &lt; Block
2 2  
3 3 include ActionView::Helpers::TagHelper
4 4 include ActionView::Helpers::UrlHelper
5   - include ActionController::UrlWriter
  5 + include Rails.application.routes.url_helpers
6 6 include ActionView::Helpers::AssetTagHelper
7 7 include DatesHelper
8 8  
... ...
app/models/category.rb
... ... @@ -90,23 +90,4 @@ class Category &lt; ActiveRecord::Base
90 90 self.children.find(:all, :conditions => {:display_in_menu => true}).empty?
91 91 end
92 92  
93   - private
94   - def name_sortable # give a different name for solr
95   - name
96   - end
97   - public
98   -
99   - acts_as_searchable :fields => [
100   - # searched fields
101   - {:name => {:type => :text, :boost => 2.0}},
102   - {:path => :text}, {:slug => :text},
103   - {:abbreviation => :text}, {:acronym => :text},
104   - # filtered fields
105   - :parent_id,
106   - # ordered/query-boosted fields
107   - {:name_sortable => :string},
108   - ]
109   - after_save_reindex [:articles, :profiles], :with => :delayed_job
110   - handle_asynchronously :solr_save
111   -
112 93 end
... ...
app/models/certifier.rb
... ... @@ -24,6 +24,4 @@ class Certifier &lt; ActiveRecord::Base
24 24 self.name.downcase.transliterate <=> b.name.downcase.transliterate
25 25 end
26 26  
27   - after_save_reindex [:products], :with => :delayed_job
28   -
29 27 end
... ...
app/models/change_password.rb
... ... @@ -80,7 +80,7 @@ class ChangePassword &lt; Task
80 80 _('Your password was changed successfully.')
81 81 end
82 82  
83   - include ActionController::UrlWriter
  83 + include Rails.application.routes.url_helpers
84 84 def task_created_message
85 85 hostname = self.requestor.environment.default_hostname
86 86 code = self.code
... ...
app/models/enterprise.rb
... ... @@ -14,7 +14,6 @@ class Enterprise &lt; Organization
14 14  
15 15 has_and_belongs_to_many :fans, :class_name => 'Person', :join_table => 'favorite_enteprises_people'
16 16  
17   - after_save_reindex [:products], :with => :delayed_job
18 17 extra_data_for_index :product_categories
19 18 def product_categories
20 19 products.includes(:product_category).map{|p| p.category_full_name}.compact
... ...
app/models/environment.rb
... ... @@ -764,18 +764,49 @@ class Environment &lt; ActiveRecord::Base
764 764 after_create :create_templates
765 765  
766 766 def create_templates
767   - pre = self.name.to_slug + '_'
768   - ent_id = Enterprise.create!(:name => 'Enterprise template', :identifier => pre + 'enterprise_template', :environment => self, :visible => false, :is_template => true).id
769   - inactive_enterprise_tmpl = Enterprise.create!(:name => 'Inactive Enterprise template', :identifier => pre + 'inactive_enterprise_template', :environment => self, :visible => false, :is_template => true)
770   - com_id = Community.create!(:name => 'Community template', :identifier => pre + 'community_template', :environment => self, :visible => false, :is_template => true).id
  767 + prefix = self.name.to_slug + '_'
  768 +
  769 + enterprise_template = Enterprise.new(
  770 + :name => 'Enterprise template',
  771 + :identifier => prefix + 'enterprise_template'
  772 + )
  773 +
  774 + inactive_enterprise_template = Enterprise.new(
  775 + :name => 'Inactive Enterprise template',
  776 + :identifier => prefix + 'inactive_enterprise_template'
  777 + )
  778 +
  779 + community_template = Community.new(
  780 + :name => 'Community template',
  781 + :identifier => prefix + 'community_template'
  782 + )
  783 +
  784 + [
  785 + enterprise_template,
  786 + inactive_enterprise_template,
  787 + community_template
  788 + ].each do |profile|
  789 + profile.is_template = true
  790 + profile.visible = false
  791 + profile.environment = self
  792 + profile.save!
  793 + end
  794 +
771 795 pass = Digest::MD5.hexdigest rand.to_s
772   - user = User.create!(:login => (pre + 'person_template'), :email => (pre + 'template@template.noo'), :password => pass, :password_confirmation => pass, :environment => self).person
773   - user.update_attributes(:visible => false, :name => "Person template", :is_template => true)
774   - usr_id = user.id
775   - self.settings[:enterprise_template_id] = ent_id
776   - self.inactive_enterprise_template = inactive_enterprise_tmpl
777   - self.settings[:community_template_id] = com_id
778   - self.settings[:person_template_id] = usr_id
  796 + user = User.new(:login => (prefix + 'person_template'), :email => (prefix + 'template@template.noo'), :password => pass, :password_confirmation => pass)
  797 + user.environment = self
  798 + user.save!
  799 +
  800 + person_template = user.person
  801 + person_template.name = "Person template"
  802 + person_template.is_template = true
  803 + person_template.visible = false
  804 + person_template.save!
  805 +
  806 + self.enterprise_template = enterprise_template
  807 + self.inactive_enterprise_template = inactive_enterprise_template
  808 + self.community_template = community_template
  809 + self.person_template = person_template
779 810 self.save!
780 811 end
781 812  
... ... @@ -788,14 +819,20 @@ class Environment &lt; ActiveRecord::Base
788 819  
789 820 after_create :create_default_licenses
790 821 def create_default_licenses
791   - License.create!(:name => 'CC (by)', :url => 'http://creativecommons.org/licenses/by/3.0/legalcode', :environment => self)
792   - License.create!(:name => 'CC (by-nd)', :url => 'http://creativecommons.org/licenses/by-nd/3.0/legalcode', :environment => self)
793   - License.create!(:name => 'CC (by-sa)', :url => 'http://creativecommons.org/licenses/by-sa/3.0/legalcode', :environment => self)
794   - License.create!(:name => 'CC (by-nc)', :url => 'http://creativecommons.org/licenses/by-nc/3.0/legalcode', :environment => self)
795   - License.create!(:name => 'CC (by-nc-nd)', :url => 'http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode', :environment => self)
796   - License.create!(:name => 'CC (by-nc-sa)', :url => 'http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode', :environment => self)
797   - License.create!(:name => 'Free Art', :url => 'http://artlibre.org/licence/lal/en', :environment => self)
798   - License.create!(:name => 'GNU FDL', :url => 'http://www.gnu.org/licenses/fdl-1.3.txt', :environment => self)
  822 + [
  823 + { :name => 'CC (by)', :url => 'http://creativecommons.org/licenses/by/3.0/legalcode'},
  824 + { :name => 'CC (by-nd)', :url => 'http://creativecommons.org/licenses/by-nd/3.0/legalcode'},
  825 + { :name => 'CC (by-sa)', :url => 'http://creativecommons.org/licenses/by-sa/3.0/legalcode'},
  826 + { :name => 'CC (by-nc)', :url => 'http://creativecommons.org/licenses/by-nc/3.0/legalcode'},
  827 + { :name => 'CC (by-nc-nd)', :url => 'http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode'},
  828 + { :name => 'CC (by-nc-sa)', :url => 'http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode'},
  829 + { :name => 'Free Art', :url => 'http://artlibre.org/licence/lal/en'},
  830 + { :name => 'GNU FDL', :url => 'http://www.gnu.org/licenses/fdl-1.3.txt'},
  831 + ].each do |data|
  832 + license = License.new(data)
  833 + license.environment = self
  834 + license.save!
  835 + end
799 836 end
800 837  
801 838 def highlighted_products_with_image(options = {})
... ...
app/models/license.rb
1 1 class License < ActiveRecord::Base
  2 +
  3 + attr_accessible :name, :url
  4 +
2 5 belongs_to :environment
3 6 has_many :content, :class_name => 'Article', :foreign_key => 'license_id'
4 7  
... ...
app/models/link_list_block.rb
1 1 class LinkListBlock < Block
2 2  
  3 + attr_accessible :links
  4 +
3 5 ICONS = [
4 6 ['no-icon', _('(No icon)')],
5 7 ['edit', N_('Edit')],
... ...
app/models/my_network_block.rb
1 1 class MyNetworkBlock < Block
2 2  
3   - include ActionController::UrlWriter
  3 + include Rails.application.routes.url_helpers
4 4  
5 5 def self.description
6 6 _('My network')
... ...
app/models/organization_mailing.rb
... ... @@ -23,7 +23,7 @@ class OrganizationMailing &lt; Mailing
23 23 _('Sent by community %s.') % source.name
24 24 end
25 25  
26   - include ActionController::UrlWriter
  26 + include Rails.application.routes.url_helpers
27 27 def url
28 28 url_for(source.url)
29 29 end
... ...
app/models/person.rb
... ... @@ -8,20 +8,6 @@ class Person &lt; Profile
8 8 acts_as_trackable :after_add => Proc.new {|p,t| notify_activity(t)}
9 9 acts_as_accessor
10 10  
11   - @@human_names = {}
12   -
13   - def self.human_names
14   - @@human_names
15   - end
16   -
17   - # FIXME ugly workaround
18   - def self.human_attribute_name(attrib)
19   - human_names.each do |key, human_text|
20   - return human_text if attrib.to_sym == key.to_sym
21   - end
22   - super
23   - end
24   -
25 11 scope :members_of, lambda { |resources|
26 12 resources = [resources] if !resources.kind_of?(Array)
27 13 conditions = resources.map {|resource| "role_assignments.resource_type = '#{resource.class.base_class.name}' AND role_assignments.resource_id = #{resource.id || -1}"}.join(' OR ')
... ...
app/models/product.rb
... ... @@ -192,7 +192,7 @@ class Product &lt; ActiveRecord::Base
192 192 self.enterprise.environment.production_costs + self.enterprise.production_costs
193 193 end
194 194  
195   - include ActionController::UrlWriter
  195 + include Rails.application.routes.url_helpers
196 196 def price_composition_bar_display_url
197 197 url_for({:host => enterprise.default_hostname, :controller => 'manage_products', :action => 'display_price_composition_bar', :profile => enterprise.identifier, :id => self.id }.merge(Noosfero.url_options))
198 198 end
... ... @@ -245,9 +245,7 @@ class Product &lt; ActiveRecord::Base
245 245  
246 246 alias_method :name_sortable, :name
247 247 delegate :enabled, :region, :region_id, :environment, :environment_id, :to => :enterprise
248   - def name_sortable # give a different name for solr
249   - name
250   - end
  248 +
251 249 def public
252 250 self.public?
253 251 end
... ... @@ -257,47 +255,5 @@ class Product &lt; ActiveRecord::Base
257 255 def category_filter
258 256 enterprise.categories_including_virtual_ids << product_category_id
259 257 end
260   - public
261   -
262   - acts_as_faceted :fields => {
263   - :f_category => {:label => _('Related products')},
264   - :f_region => {:label => _('City'), :proc => proc { |id| f_region_proc(id) }},
265   - :f_qualifier => {:label => _('Qualifiers'), :proc => proc { |id| f_qualifier_proc(id) }},
266   - }, :category_query => proc { |c| "category_filter:#{c.id}" },
267   - :order => [:f_category, :f_region, :f_qualifier]
268   -
269   - Boosts = [
270   - [:image, 0.55, proc{ |p| p.image ? 1 : 0}],
271   - [:qualifiers, 0.45, proc{ |p| p.product_qualifiers.count > 0 ? 1 : 0}],
272   - [:open_price, 0.45, proc{ |p| p.price_described? ? 1 : 0}],
273   - [:solidarity, 0.45, proc{ |p| p.percentage_from_solidarity_economy[0].to_f/100 }],
274   - [:available, 0.35, proc{ |p| p.available ? 1 : 0}],
275   - [:price, 0.35, proc{ |p| (!p.price.nil? and p.price > 0) ? 1 : 0}],
276   - [:new_product, 0.35, proc{ |p| (p.updated_at.to_i - p.created_at.to_i) < 24*3600 ? 1 : 0}],
277   - [:description, 0.3, proc{ |p| !p.description.blank? ? 1 : 0}],
278   - [:enabled, 0.2, proc{ |p| p.enterprise.enabled ? 1 : 0}],
279   - ]
280   -
281   - acts_as_searchable :fields => facets_fields_for_solr + [
282   - # searched fields
283   - {:name => {:type => :text, :boost => 2.0}},
284   - {:description => :text}, {:category_full_name => :text},
285   - # filtered fields
286   - {:public => :boolean}, {:environment_id => :integer},
287   - {:enabled => :boolean}, {:category_filter => :integer},
288   - # ordered/query-boosted fields
289   - {:price_sortable => :decimal}, {:name_sortable => :string},
290   - {:lat => :float}, {:lng => :float},
291   - :updated_at, :created_at,
292   - ], :include => [
293   - {:product_category => {:fields => [:name, :path, :slug, :lat, :lng, :acronym, :abbreviation]}},
294   - {:region => {:fields => [:name, :path, :slug, :lat, :lng]}},
295   - {:enterprise => {:fields => [:name, :identifier, :address, :nickname, :lat, :lng]}},
296   - {:qualifiers => {:fields => [:name]}},
297   - {:certifiers => {:fields => [:name]}},
298   - ], :facets => facets_option_for_solr,
299   - :boost => proc{ |p| boost = 1; Boosts.each{ |b| boost = boost * (1 - ((1 - b[2].call(p)) * b[1])) }; boost}
300   - handle_asynchronously :solr_save
301   - after_save_reindex [:enterprise], :with => :delayed_job
302 258  
303 259 end
... ...
app/models/product_category.rb
... ... @@ -11,6 +11,4 @@ class ProductCategory &lt; Category
11 11 top_category ? top_category.children : top_level_for(env).select{|c|c.kind_of?(ProductCategory)}
12 12 end
13 13  
14   - after_save_reindex [:products], :with => :delayed_job
15   -
16 14 end
... ...
app/models/products_block.rb
... ... @@ -2,7 +2,7 @@ class ProductsBlock &lt; Block
2 2  
3 3 include ActionView::Helpers::TagHelper
4 4 include ActionView::Helpers::UrlHelper
5   - include ActionController::UrlWriter
  5 + include Rails.application.routes.url_helpers
6 6  
7 7 def self.description
8 8 _('Products')
... ...
app/models/profile.rb
... ... @@ -3,6 +3,8 @@
3 3 # which by default is the one returned by Environment:default.
4 4 class Profile < ActiveRecord::Base
5 5  
  6 + attr_accessible :name, :identifier
  7 +
6 8 # use for internationalizable human type names in search facets
7 9 # reimplement on subclasses
8 10 def self.type_name
... ... @@ -117,11 +119,6 @@ class Profile &lt; ActiveRecord::Base
117 119  
118 120 has_many :comments_received, :class_name => 'Comment', :through => :articles, :source => :comments
119 121  
120   - # FIXME ugly workaround
121   - def self.human_attribute_name(attrib)
122   - _(self.superclass.human_attribute_name(attrib))
123   - end
124   -
125 122 def scraps(scrap=nil)
126 123 scrap = scrap.is_a?(Scrap) ? scrap.id : scrap
127 124 scrap.nil? ? Scrap.all_scraps(self) : Scrap.all_scraps(self).find(scrap)
... ... @@ -258,7 +255,6 @@ class Profile &lt; ActiveRecord::Base
258 255 else
259 256 ProfileCategorization.add_category_to_profile(c, self)
260 257 self.categories(true)
261   - self.solr_save
262 258 end
263 259 self.categories(reload)
264 260 end
... ... @@ -927,46 +923,14 @@ private :generate_url, :url_options
927 923 self.enabled
928 924 end
929 925  
930   - def name_sortable # give a different name for solr
931   - name
932   - end
933 926 def public
934 927 self.public?
935 928 end
936 929 def category_filter
937 930 categories_including_virtual_ids
938 931 end
939   - public
940 932  
941   - acts_as_faceted :fields => {
942   - :f_enabled => {:label => _('Situation'), :type_if => proc { |klass| klass.kind_of?(Enterprise) },
943   - :proc => proc { |id| f_enabled_proc(id) }},
944   - :f_region => {:label => _('City'), :proc => proc { |id| f_region_proc(id) }},
945   - :f_categories => {:multi => true, :proc => proc {|facet, id| f_categories_proc(facet, id)},
946   - :label => proc { |env| f_categories_label_proc(env) }, :label_abbrev => proc{ |env| f_categories_label_abbrev_proc(env) }},
947   - }, :category_query => proc { |c| "category_filter:#{c.id}" },
948   - :order => [:f_region, :f_categories, :f_enabled]
949   -
950   - acts_as_searchable :fields => facets_fields_for_solr + [:extra_data_for_index,
951   - # searched fields
952   - {:name => {:type => :text, :boost => 2.0}},
953   - {:identifier => :text}, {:nickname => :text},
954   - # filtered fields
955   - {:public => :boolean}, {:environment_id => :integer},
956   - {:category_filter => :integer},
957   - # ordered/query-boosted fields
958   - {:name_sortable => :string}, {:user_id => :integer},
959   - :enabled, :active, :validated, :public_profile,
960   - {:lat => :float}, {:lng => :float},
961   - :updated_at, :created_at,
962   - ],
963   - :include => [
964   - {:region => {:fields => [:name, :path, :slug, :lat, :lng]}},
965   - {:categories => {:fields => [:name, :path, :slug, :lat, :lng, :acronym, :abbreviation]}},
966   - ], :facets => facets_option_for_solr,
967   - :boost => proc{ |p| 10 if p.enabled }
968   - after_save_reindex [:articles], :with => :delayed_job
969   - handle_asynchronously :solr_save
  933 + public
970 934  
971 935 def control_panel_settings_button
972 936 {:title => _('Profile Info and settings'), :icon => 'edit-profile'}
... ...
app/models/profile_image_block.rb
1 1 class ProfileImageBlock < Block
2 2  
  3 + attr_accessible :show_name
  4 +
3 5 settings_items :show_name, :type => :boolean, :default => false
4 6  
5 7 def self.description
... ...
app/models/profile_list_block.rb
1 1 class ProfileListBlock < Block
2 2  
  3 + attr_accessible :limit, :prioritize_profiles_with_image
  4 +
3 5 settings_items :limit, :type => :integer, :default => 6
4 6 settings_items :prioritize_profiles_with_image, :type => :boolean, :default => true
5 7  
... ...
app/models/qualifier.rb
... ... @@ -15,6 +15,4 @@ class Qualifier &lt; ActiveRecord::Base
15 15 self.name.downcase.transliterate <=> b.name.downcase.transliterate
16 16 end
17 17  
18   - after_save_reindex [:products], :with => :delayed_job
19   -
20 18 end
... ...
app/models/recent_documents_block.rb
... ... @@ -14,7 +14,7 @@ class RecentDocumentsBlock &lt; Block
14 14  
15 15 settings_items :limit, :type => :integer, :default => 5
16 16  
17   - include ActionController::UrlWriter
  17 + include Rails.application.routes.url_helpers
18 18 def content(args={})
19 19 docs = self.limit.nil? ? owner.recent_documents(nil, {}, false) : owner.recent_documents(self.limit, {}, false)
20 20 block_title(title) +
... ...
app/models/rss_feed.rb
... ... @@ -63,7 +63,7 @@ class RssFeed &lt; Article
63 63 'text/xml'
64 64 end
65 65  
66   - include ActionController::UrlWriter
  66 + include Rails.application.routes.url_helpers
67 67 def fetch_articles
68 68 if parent && parent.has_posts?
69 69 language = self.language.blank? ? {} : { :language => self.language }
... ...
app/models/tags_block.rb
... ... @@ -2,7 +2,7 @@ class TagsBlock &lt; Block
2 2  
3 3 include TagsHelper
4 4 include BlockHelper
5   - include ActionController::UrlWriter
  5 + include Rails.application.routes.url_helpers
6 6  
7 7 settings_items :limit, :type => :integer, :default => 12
8 8  
... ...
app/models/user.rb
1 1 require 'digest/sha1'
  2 +require 'user_activation_job'
2 3  
3 4 # User models the system users, and is generated by the acts_as_authenticated
4 5 # Rails generator.
5 6 class User < ActiveRecord::Base
6 7  
  8 + attr_accessible :login, :email, :password, :password_confirmation
  9 +
7 10 N_('Password')
8 11 N_('Password confirmation')
9 12 N_('Terms accepted')
... ... @@ -15,9 +18,12 @@ class User &lt; ActiveRecord::Base
15 18 # FIXME ugly workaround
16 19 def self.human_attribute_name(attrib)
17 20 case attrib.to_sym
18   - when :login: return _('Username')
19   - when :email: return _('e-Mail')
20   - else _(self.superclass.human_attribute_name(attrib))
  21 + when :login
  22 + return _('Username')
  23 + when :email
  24 + return _('e-Mail')
  25 + else
  26 + _(self.superclass.human_attribute_name(attrib))
21 27 end
22 28 end
23 29  
... ... @@ -29,11 +35,18 @@ class User &lt; ActiveRecord::Base
29 35 end
30 36  
31 37 after_create do |user|
32   - user.person ||= Person.new
33   - user.person.attributes = user.person_data.merge(:identifier => user.login, :user => user, :environment_id => user.environment_id)
34   - user.person.name ||= user.login
35   - user.person.visible = false unless user.activated?
36   - user.person.save!
  38 + unless user.person
  39 + p = Person.new
  40 +
  41 + p.attributes = user.person_data
  42 + p.identifier = user.login
  43 + p.user = user
  44 + p.environment = user.environment
  45 + p.name ||= user.login
  46 + p.visible = false unless user.activated?
  47 +
  48 + user.person = p
  49 + end
37 50 if user.environment.enabled?('skip_new_user_email_confirmation')
38 51 user.activate
39 52 end
... ... @@ -51,6 +64,8 @@ class User &lt; ActiveRecord::Base
51 64 end
52 65  
53 66 class Mailer < ActionMailer::Base
  67 +
  68 + # FIXME use new ActionMailer API here
54 69 def activation_email_notify(user)
55 70 user_email = "#{user.login}@#{user.email_domain}"
56 71 recipients user_email
... ... @@ -64,16 +79,19 @@ class User &lt; ActiveRecord::Base
64 79 end
65 80  
66 81 def activation_code(user)
67   - recipients user.email
68   -
69   - from "#{user.environment.name} <#{user.environment.contact_email}>"
70   - subject _("[%s] Activate your account") % [user.environment.name]
71   - body :recipient => user.name,
72   - :activation_code => user.activation_code,
73   - :environment => user.environment.name,
74   - :url => user.environment.top_url
  82 + @recipient = user.name,
  83 + @activation_code = user.activation_code
  84 + @environment = user.environment.name
  85 + @url = user.environment.top_url
  86 +
  87 + mail(
  88 + :from => "#{user.environment.name} <#{user.environment.contact_email}>",
  89 + :to => user.email,
  90 + :subject => _("[%s] Activate your account") % [user.environment.name],
  91 + )
75 92 end
76 93  
  94 + # FIXME use new ActionMailer API here
77 95 def signup_welcome_email(user)
78 96 email_body = user.environment.signup_welcome_text_body.gsub('{user_name}', user.name)
79 97 email_subject = user.environment.signup_welcome_text_subject
... ... @@ -93,7 +111,7 @@ class User &lt; ActiveRecord::Base
93 111 self.person.save!
94 112 end
95 113 end
96   -
  114 +
97 115 has_one :person, :dependent => :destroy
98 116 belongs_to :environment
99 117  
... ... @@ -136,6 +154,7 @@ class User &lt; ActiveRecord::Base
136 154 false
137 155 else
138 156 if environment.enabled?('send_welcome_email_to_new_users') && environment.has_signup_welcome_text?
  157 + # FIXME use new ActionMailer API here
139 158 User::Mailer.delay.deliver_signup_welcome_email(self)
140 159 end
141 160 true
... ... @@ -329,7 +348,7 @@ class User &lt; ActiveRecord::Base
329 348  
330 349 def deliver_activation_code
331 350 return if person.is_template?
332   - User::Mailer.deliver_activation_code(self) unless self.activation_code.blank?
  351 + User::Mailer.activation_code(self).deliver unless self.activation_code.blank?
333 352 end
334 353  
335 354 def delay_activation_check
... ...
config/initializers/dependencies.rb
1 1 # locally-developed modules
2   -require 'acts_as_faceted'
3 2 require 'acts_as_filesystem'
4 3 require 'acts_as_having_settings'
5   -require 'acts_as_searchable'
6 4 require 'acts_as_having_boxes'
7 5 require 'acts_as_having_image'
8 6 require 'acts_as_having_posts'
... ... @@ -11,6 +9,7 @@ require &#39;maybe_add_http&#39;
11 9 require 'set_profile_region_from_city_state'
12 10 require 'authenticated_system'
13 11 require 'needs_profile'
  12 +require 'white_list_filter'
14 13  
15 14 # third-party libraries
16 15 require 'will_paginate'
... ...
config/initializers/html_safe.rb
... ... @@ -2,8 +2,9 @@
2 2  
3 3 # Disable Rails html autoescaping. This is due to noosfero using too much helpers/models to output html.
4 4 # It it would change too much code and make it hard to maintain.
  5 +# FIXME THIS IS SO WRONG
5 6 class Object
6 7 def html_safe?
7 8 true
8 9 end
9   -end
10 10 \ No newline at end of file
  11 +end
... ...
lib/acts_as_faceted.rb
... ... @@ -1,222 +0,0 @@
1   -module ActsAsFaceted
2   -
3   - module ClassMethods
4   - end
5   -
6   - module ActsMethods
7   - # Example:
8   - #
9   - #acts_as_faceted :fields => {
10   - # :f_type => {:label => _('Type'), :proc => proc{|klass| f_type_proc(klass)}},
11   - # :f_published_at => {:type => :date, :label => _('Published date'), :queries => {'[* TO NOW-1YEARS/DAY]' => _("Older than one year"),
12   - # '[NOW-1YEARS TO NOW/DAY]' => _("Last year"), '[NOW-1MONTHS TO NOW/DAY]' => _("Last month"), '[NOW-7DAYS TO NOW/DAY]' => _("Last week"), '[NOW-1DAYS TO NOW/DAY]' => _("Last day")}},
13   - # :f_profile_type => {:label => _('Author'), :proc => proc{|klass| f_profile_type_proc(klass)}},
14   - # :f_category => {:label => _('Categories')}},
15   - # :order => [:f_type, :f_published_at, :f_profile_type, :f_category]
16   - #
17   - #acts_as_searchable :additional_fields => [ {:name => {:type => :string, :as => :name_sort, :boost => 5.0}} ] + facets_fields_for_solr,
18   - # :exclude_fields => [:setting],
19   - # :include => [:profile],
20   - # :facets => facets_option_for_solr,
21   - # :if => proc{|a| ! ['RssFeed'].include?(a.class.name)}
22   - def acts_as_faceted(options)
23   - extend ClassMethods
24   - extend ActsAsSolr::CommonMethods
25   -
26   - cattr_accessor :facets
27   - cattr_accessor :facets_order
28   - cattr_accessor :to_solr_fields_names
29   - cattr_accessor :facets_results_containers
30   - cattr_accessor :solr_fields_names
31   - cattr_accessor :facets_option_for_solr
32   - cattr_accessor :facets_fields_for_solr
33   - cattr_accessor :facet_category_query
34   -
35   - self.facets = options[:fields]
36   - self.facets_order = options[:order] || self.facets.keys
37   - self.facets_results_containers = {:fields => 'facet_fields', :queries => 'facet_queries', :ranges => 'facet_ranges'}
38   - self.facets_option_for_solr = Hash[facets.select{ |id,data| ! data.has_key?(:queries) }].keys
39   - self.facets_fields_for_solr = facets.map{ |id,data| {id => data[:type] || :facet} }
40   - self.solr_fields_names = facets.map{ |id,data| id.to_s + '_' + get_solr_field_type(data[:type] || :facet) }
41   - self.facet_category_query = options[:category_query]
42   -
43   - # A hash to retrieve the field key for the solr facet string returned
44   - # :field_name => "field_name_facet"
45   - self.to_solr_fields_names = Hash[facets.keys.zip(solr_fields_names)]
46   -
47   - def facet_by_id(id)
48   - {:id => id}.merge(facets[id]) if facets[id]
49   - end
50   -
51   - def map_facets_for(environment)
52   - facets_order.map do |id|
53   - facet = facet_by_id(id)
54   - next if facet[:type_if] and !facet[:type_if].call(self.new)
55   -
56   - if facet[:multi]
57   - facet[:label].call(environment).map do |label_id, label|
58   - facet.merge({:id => facet[:id].to_s+'_'+label_id.to_s, :solr_field => facet[:id], :label_id => label_id, :label => label})
59   - end
60   - else
61   - facet.merge(:id => facet[:id].to_s, :solr_field => facet[:id])
62   - end
63   - end.compact.flatten
64   - end
65   -
66   - def map_facet_results(facet, facet_params, facets_data, unfiltered_facets_data = {}, options = {})
67   - raise 'Use map_facets_for before this method' if facet[:solr_field].nil?
68   - facets_data = {} if facets_data.blank? # could be empty array
69   - solr_facet = to_solr_fields_names[facet[:solr_field]]
70   - unfiltered_facets_data ||= {}
71   -
72   - if facet[:queries]
73   - container = facets_data[facets_results_containers[:queries]]
74   - facet_data = (container.nil? or container.empty?) ? [] : container.select{ |k,v| k.starts_with? solr_facet }
75   - container = unfiltered_facets_data[facets_results_containers[:queries]]
76   - unfiltered_facet_data = (container.nil? or container.empty?) ? [] : container.select{ |k,v| k.starts_with? solr_facet }
77   - else
78   - container = facets_data[facets_results_containers[:fields]]
79   - facet_data = (container.nil? or container.empty?) ? [] : container[solr_facet] || []
80   - container = unfiltered_facets_data[facets_results_containers[:fields]]
81   - unfiltered_facet_data = (container.nil? or container.empty?) ? [] : container[solr_facet] || []
82   - end
83   -
84   - if !unfiltered_facets_data.blank? and !facet_params.blank?
85   - f = Hash[Array(facet_data)]
86   - zeros = []
87   - facet_data = unfiltered_facet_data.map do |id, count|
88   - count = f[id]
89   - if count.nil?
90   - zeros.push [id, 0]
91   - nil
92   - else
93   - [id, count]
94   - end
95   - end.compact + zeros
96   - end
97   -
98   - facet_count = facet_data.length
99   -
100   - if facet[:queries]
101   - result = facet_data.map do |id, count|
102   - q = id[id.index(':')+1,id.length]
103   - label = facet_result_name(facet, q)
104   - [q, label, count] if count > 0
105   - end.compact
106   - result = facet[:queries_order].map{ |id| result.detect{ |rid, label, count| rid == id } }.compact if facet[:queries_order]
107   - elsif facet[:proc]
108   - if facet[:label_id]
109   - result = facet_data.map do |id, count|
110   - name = facet_result_name(facet, id)
111   - [id, name, count] if name
112   - end.compact
113   - # FIXME limit is NOT improving performance in this case :(
114   - facet_count = result.length
115   - result = result.first(options[:limit]) if options[:limit]
116   - else
117   - facet_data = facet_data.first(options[:limit]) if options[:limit]
118   - result = facet_data.map { |id, count| [id, facet_result_name(facet, id), count] }
119   - end
120   - else
121   - facet_data = facet_data.first(options[:limit]) if options[:limit]
122   - result = facet_data.map { |id, count| [id, facet_result_name(facet, id), count] }
123   - end
124   -
125   - sorted = facet_result_sort(facet, result, options[:sort])
126   -
127   - # length can't be used if limit option is given;
128   - # total_entries comes to help
129   - sorted.class.send(:define_method, :total_entries, proc { facet_count })
130   -
131   - sorted
132   - end
133   -
134   - def facet_result_sort(facet, facets_data, sort_by = nil)
135   - if facet[:queries_order]
136   - facets_data
137   - elsif sort_by == :alphabetically
138   - facets_data.sort{ |a,b| Array(a[1])[0] <=> Array(b[1])[0] }
139   - elsif sort_by == :count
140   - facets_data.sort{ |a,b| -1*(a[2] <=> b[2]) }
141   - else
142   - facets_data
143   - end
144   - end
145   -
146   - def facet_result_name(facet, data)
147   - if facet[:queries]
148   - gettext(facet[:queries][data])
149   - elsif facet[:proc]
150   - if facet[:multi]
151   - facet[:label_id] ||= 0
152   - facet[:proc].call(facet, data)
153   - else
154   - gettext(facet[:proc].call(data))
155   - end
156   - else
157   - data
158   - end
159   - end
160   -
161   - def facet_label(facet)
162   - return nil unless facet
163   - _(facet[:label])
164   - end
165   -
166   - def facets_find_options(facets_selected = {}, options = {})
167   - browses = []
168   - facets_selected ||= {}
169   - facets_selected.map do |id, value|
170   - next unless facets[id.to_sym]
171   - if value.kind_of?(Hash)
172   - value.map do |label_id, value|
173   - value.to_a.each do |value|
174   - browses << id.to_s + ':' + (facets[id.to_sym][:queries] ? value : '"'+value.to_s+'"')
175   - end
176   - end
177   - else
178   - browses << id.to_s + ':' + (facets[id.to_sym][:queries] ? value : '"'+value.to_s+'"')
179   - end
180   - end.flatten
181   -
182   - {:facets => {:zeros => false, :sort => :count,
183   - :fields => facets_option_for_solr,
184   - :browse => browses,
185   - :query => facets.map { |f, options| options[:queries].keys.map { |q| f.to_s + ':' + q } if options[:queries] }.compact.flatten,
186   - }
187   - }
188   - end
189   - end
190   - end
191   -
192   -end
193   -
194   -ActiveRecord::Base.extend ActsAsFaceted::ActsMethods
195   -
196   -# from https://github.com/rubyworks/facets/blob/master/lib/core/facets/enumerable/graph.rb
197   -module Enumerable
198   - def graph(&yld)
199   - if yld
200   - h = {}
201   - each do |*kv|
202   - r = yld[*kv]
203   - case r
204   - when Hash
205   - nk, nv = *r.to_a[0]
206   - when Range
207   - nk, nv = r.first, r.last
208   - else
209   - nk, nv = *r
210   - end
211   - h[nk] = nv
212   - end
213   - h
214   - else
215   - Enumerator.new(self,:graph)
216   - end
217   - end
218   -
219   - # Alias for #graph, which stands for "map hash".
220   - alias_method :mash, :graph
221   -end
222   -
lib/acts_as_searchable.rb
... ... @@ -1,87 +0,0 @@
1   -module ActsAsSearchable
2   -
3   - module ClassMethods
4   - ACTS_AS_SEARCHABLE_ENABLED = true unless defined? ACTS_AS_SEARCHABLE_ENABLED
5   -
6   - def acts_as_searchable(options = {})
7   - return if !ACTS_AS_SEARCHABLE_ENABLED
8   -
9   - if options[:fields]
10   - options[:fields] << {:schema_name => :string}
11   - else
12   - options[:additional_fields] ||= []
13   - options[:additional_fields] << {:schema_name => :string}
14   - end
15   -
16   - acts_as_solr options
17   - extend FindByContents
18   - send :include, InstanceMethods
19   - end
20   -
21   - module InstanceMethods
22   - def schema_name
23   - self.class.schema_name
24   - end
25   -
26   - # replace solr_id from vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/instance_methods.rb
27   - # to include schema_name
28   - def solr_id
29   - id = "#{self.class.name}:#{record_id(self)}"
30   - id.insert(0, "#{schema_name}:") unless schema_name.blank?
31   - id
32   - end
33   - end
34   -
35   - module FindByContents
36   -
37   - def schema_name
38   - (Noosfero::MultiTenancy.on? and ActiveRecord::Base.postgresql?) ? ActiveRecord::Base.connection.schema_search_path : ''
39   - end
40   -
41   - def find_by_contents(query, pg_options = {}, options = {}, db_options = {})
42   - pg_options[:page] ||= 1
43   - pg_options[:per_page] ||= 20
44   - options[:page] = pg_options[:page].to_i
45   - options[:per_page] = pg_options[:per_page].to_i
46   - options[:scores] ||= true
47   - options[:filter_queries] ||= []
48   - options[:filter_queries] << "schema_name:\"#{schema_name}\"" unless schema_name.blank?
49   - all_facets_enabled = options.delete(:all_facets)
50   - options[:per_page] = options.delete(:extra_limit) if options[:extra_limit]
51   - results = []
52   - facets = all_facets = {}
53   -
54   - solr_result = find_by_solr(query, options)
55   - if all_facets_enabled
56   - options[:facets][:browse] = nil
57   - all_facets = find_by_solr(query, options.merge(:per_page => 0)).facets
58   - end
59   -
60   - if !solr_result.nil?
61   - facets = options.include?(:facets) ? solr_result.facets : []
62   -
63   - if db_options.empty?
64   - results = solr_result
65   - else
66   - ids = solr_result.results.map{ |r| r[:id].to_i }
67   - if ids.empty?
68   - ids << -1
69   - end
70   -
71   - if db_options[:conditions]
72   - db_options[:conditions] = sanitize_sql_for_conditions(db_options[:conditions]) + " and #{table_name}.id in (#{ids.join(', ')})"
73   - else
74   - db_options[:conditions] = "#{table_name}.id in (#{ids.join(', ')})"
75   - end
76   -
77   - results = find(:all, db_options)
78   - end
79   - end
80   -
81   - {:results => results, :facets => facets, :all_facets => all_facets}
82   - end
83   - end
84   - end
85   -end
86   -
87   -ActiveRecord::Base.send(:extend, ActsAsSearchable::ClassMethods)
lib/tasks/data.rake
1 1 namespace :db do
2 2 namespace :data do
3 3 task :minimal do
4   - sh './script/runner', "Environment.create!(:name => 'Noosfero', :is_default => true)"
  4 + sh 'rails', 'runner', "Environment.create!(:name => 'Noosfero', :is_default => true)"
5 5 unless ENV['NOOSFERO_DOMAIN'].blank?
6   - sh './script/runner', "Environment.default.domains << Domain.new(:name => ENV['NOOSFERO_DOMAIN'])"
  6 + sh 'rails', 'runner', "Environment.default.domains << Domain.new(:name => ENV['NOOSFERO_DOMAIN'])"
7 7 end
8 8 end
9 9 end
... ...
script/quick-start
... ... @@ -66,15 +66,6 @@ else
66 66 fi
67 67 fi
68 68  
69   -# setup solr
70   -run 'rake solr:download || true'
71   -if ! test -f vendor/plugins/acts_as_solr_reloaded/solr/start.jar; then
72   - complain "Failed to download solr!"
73   - exit 1
74   -fi
75   -
76   -run cp config/solr.yml.dist config/solr.yml
77   -
78 69 # create the database with sample data
79 70 run cp config/database.yml.sqlite3 config/database.yml
80 71 run rake db:schema:load
... ...
vendor/plugins/access_control/lib/role.rb
1 1 class Role < ActiveRecord::Base
2 2  
  3 + attr_accessible :key, :name, :environment, :permissions
  4 +
3 5 has_many :role_assignments, :dependent => :destroy
4 6 belongs_to :environment
5 7 serialize :permissions, Array
... ...
vendor/plugins/acts_as_solr_reloaded/.gitignore
... ... @@ -1,33 +0,0 @@
1   -# inside solr
2   -solr/LICENSE.txt
3   -solr/NOTICE.txt
4   -solr/README.txt
5   -solr/etc/
6   -solr/work/
7   -solr/lib/
8   -solr/solr/README.txt
9   -solr/solr/solr.xml
10   -solr/start.jar
11   -solr/webapps/
12   -solr/solr/data/*
13   -
14   -Gemfile.lock
15   -test/solr
16   -test/tmp
17   -
18   -acts_as_solr_reloaded-*.gem
19   -*.log
20   -*.log
21   -*_pid
22   -
23   -coverage
24   -coverage/*
25   -coverage.data
26   -test/db/*.db
27   -test/log/*.log
28   -pkg/*
29   -*.sw?
30   -rdoc
31   -pkg
32   -tags
33   -.svn
vendor/plugins/acts_as_solr_reloaded/.travis.yml
... ... @@ -1,13 +0,0 @@
1   -before_script:
2   - - mongo mydb_test --eval 'db.addUser("travis", "test");'
3   - - gem update --system 1.4.1 > /dev/null 2>&1
4   - - rake solr:download
5   - - RAILS_ENV=test rake solr:start
6   -
7   -script: "bundle exec rake $TASK --trace"
8   -
9   -rvm:
10   - - 1.8.7
11   -env:
12   - - TASK=test
13   - - TASK=test:functional
vendor/plugins/acts_as_solr_reloaded/Gemfile
... ... @@ -1,13 +0,0 @@
1   -source :rubygems
2   -
3   -gem 'ruby-debug'
4   -
5   -gem 'rails', '2.3.5'
6   -
7   -gem 'sqlite3'
8   -
9   -gem 'mongo_mapper', '0.7.6'
10   -gem 'bson_ext', '1.0'
11   -
12   -gem 'mocha'
13   -gem 'thoughtbot-shoulda'
vendor/plugins/acts_as_solr_reloaded/LICENSE
... ... @@ -1,22 +0,0 @@
1   -(The MIT License)
2   -
3   -Copyright © 2010
4   -
5   -Permission is hereby granted, free of charge, to any person obtaining
6   -a copy of this software and associated documentation files (the
7   -‘Software’), to deal in the Software without restriction, including
8   -without limitation the rights to use, copy, modify, merge, publish,
9   -distribute, sublicense, and/or sell copies of the Software, and to
10   -permit persons to whom the Software is furnished to do so, subject to
11   -the following conditions:
12   -
13   -The above copyright notice and this permission notice shall be
14   -included in all copies or substantial portions of the Software.
15   -
16   -THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND,
17   -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18   -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19   -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20   -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21   -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22   -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
vendor/plugins/acts_as_solr_reloaded/README.markdown
... ... @@ -1,128 +0,0 @@
1   -[![Build status](https://secure.travis-ci.org/coletivoEITA/acts_as_solr_reloaded.png?branch=master)](http://travis-ci.org/coletivoEITA/acts_as_solr_reloaded)
2   -
3   -Description
4   -======
5   -This plugin adds full text search capabilities and many other nifty features from Apache's [Solr](http://lucene.apache.org/solr/) to any Rails model.
6   -It was based on the first draft by Erik Hatcher.
7   -
8   -This plugin is intended for use in old versions of Rails. For newer versions, I strongly advice using Sunspot!
9   -Nevertheless, this plugin is used for Noosfero project in production. Any problem please open an issue.
10   -
11   -It should support Rails 2.1 (and greater 2.x) and is developed latest Solr versions, so don't expect it to run on older Solr.
12   -
13   -Installation
14   -======
15   -
16   -Install as a plugin
17   -
18   - script/plugin install git://github.com/brauliobo/acts_as_solr_reloaded.git
19   -
20   -Download Solr
21   -
22   - rake solr:download
23   -
24   -Requirements
25   -------
26   -* Java Runtime Environment(JRE) 6.0 (or newer) from Oracle or OpenJDK
27   -
28   -Configuration
29   -======
30   -See config/solr.yml file.
31   -
32   -For solr configuration the important files are solrconfig.xml and schema.xml.
33   -
34   -Basic Usage
35   -======
36   -Just include the line below to any of your ActiveRecord models:
37   -
38   - acts_as_solr
39   -
40   -Or if you want, you can specify only the fields that should be indexed:
41   -
42   - acts_as_solr :fields => [:name, :author]
43   -
44   -Then to find instances of your model, just do:
45   -
46   - Model.search(query) #query is a string representing your query
47   -
48   -Please see ActsAsSolr::ActsMethods for a complete info
49   -
50   -Pagination
51   -======
52   -ActsAsSolr implements in SearchResults class an interface compatible with will_paginate and maybe others.
53   -
54   -In your tests
55   -======
56   -To test code that uses `acts_as_solr` you must start a Solr server for the test environment.
57   -You can add to the beggining of your test/test_helper.rb the code:
58   -
59   - ENV["RAILS_ENV"] = "test"
60   - abort unless system 'rake solr:start'
61   - at_exit { system 'rake solr:stop' }
62   -
63   -However, if you would like to mock out Solr calls so that a Solr server is not needed (and your tests will run much faster), just add this to your `test_helper.rb` or similar:
64   -
65   - class ActsAsSolr::Post
66   - def self.execute(request)
67   - true
68   - end
69   - end
70   -
71   -Or to be more realistic and preserve performance, enable Solr when needed,
72   -by calling `TestSolr.enable` and disable solr otherwise by calling
73   -`TestSolr.disable` on `Test::Unit::TestCase`'s `setup`:
74   -
75   - class ActsAsSolr::Post
76   - class << self
77   - alias_method :execute_orig, :execute
78   - end
79   - end
80   - module ActsAsSolr::ParserMethods
81   - alias_method :parse_results_orig, :parse_results
82   - end
83   -
84   - class TestSolr
85   -
86   - def self.enable
87   - ActsAsSolr::Post.class_eval do
88   - def self.execute(*args)
89   - execute_orig *args
90   - end
91   - end
92   - ActsAsSolr::ParserMethods.module_eval do
93   - def parse_results(*args)
94   - parse_results_orig *args
95   - end
96   - end
97   -
98   - # clear index
99   - ActsAsSolr::Post.execute(Solr::Request::Delete.new(:query => '*:*'))
100   -
101   - @solr_disabled = false
102   - end
103   -
104   - def self.disable
105   - return if @solr_disabled
106   -
107   - ActsAsSolr::Post.class_eval do
108   - def self.execute(*args)
109   - true
110   - end
111   - end
112   - ActsAsSolr::ParserMethods.module_eval do
113   - def parse_results(*args)
114   - parse_results_orig nil, args[1]
115   - end
116   - end
117   -
118   - @solr_disabled = true
119   - end
120   -
121   - end
122   -
123   - # disable solr actions by default
124   - TestSolr.disable
125   -
126   -Release Information
127   -======
128   -Released under the MIT license.
vendor/plugins/acts_as_solr_reloaded/Rakefile
... ... @@ -1,71 +0,0 @@
1   -require 'rubygems'
2   -require 'rake'
3   -require 'rake/testtask'
4   -require 'rake/rdoctask'
5   -
6   -ENV['RAILS_ENV'] = "test"
7   -require File.expand_path("#{File.dirname(__FILE__)}/config/solr_environment")
8   -
9   -Dir["#{File.dirname(__FILE__)}/lib/tasks/*.rake"].sort.each { |ext| load ext }
10   -
11   -desc "Default Task"
12   -task :default => [:test]
13   -
14   -desc "Runs the unit tests"
15   -task :test => "test:unit"
16   -
17   -namespace :test do
18   - task :setup do
19   - DB ||= 'sqlite'
20   - puts "Using " + DB
21   - %x(mysql -u#{MYSQL_USER} < #{File.dirname(__FILE__) + "/test/fixtures/db_definitions/mysql.sql"}) if DB == 'mysql'
22   -
23   - Rake::Task["test:migrate"].invoke
24   - end
25   -
26   - desc 'Measures test coverage using rcov'
27   - task :rcov => :setup do
28   - rm_f "coverage"
29   - rm_f "coverage.data"
30   - rcov = "rcov --rails --aggregate coverage.data --text-summary -Ilib"
31   -
32   - system("#{rcov} --html #{Dir.glob('test/**/*_shoulda.rb').join(' ')}")
33   - system("open coverage/index.html") if PLATFORM['darwin']
34   - end
35   -
36   - desc 'Runs the functional tests, testing integration with Solr'
37   - Rake::TestTask.new(:functional => :setup) do |t|
38   - t.pattern = "test/functional/*_test.rb"
39   - t.verbose = true
40   - end
41   -
42   - desc "Unit tests"
43   - Rake::TestTask.new(:unit => :setup) do |t|
44   - t.libs << 'test/unit'
45   - t.pattern = "test/unit/*_shoulda.rb"
46   - t.verbose = true
47   - end
48   -end
49   -
50   -Rake::RDocTask.new do |rd|
51   - rd.main = "README.rdoc"
52   - rd.rdoc_dir = "rdoc"
53   - rd.rdoc_files.exclude("lib/solr/**/*.rb", "lib/solr.rb")
54   - rd.rdoc_files.include("README.rdoc", "lib/**/*.rb")
55   -end
56   -
57   -begin
58   - require 'jeweler'
59   - Jeweler::Tasks.new do |s|
60   - s.name = "acts_as_solr_reloaded"
61   - s.summary = "This gem adds full text search capabilities and many other nifty features from Apache Solr to any Rails model."
62   - s.email = "dc.rec1@gmail.com"
63   - s.homepage = "http://github.com/dcrec1/acts_as_solr_reloaded"
64   - s.description = "This gem adds full text search capabilities and many other nifty features from Apache Solr to any Rails model."
65   - s.authors = ["Diego Carrion"]
66   - s.files = FileList["[A-Z]*", "{bin,generators,config,lib,solr}/**/*"] +
67   - FileList["test/**/*"].reject {|f| f.include?("test/log")}.reject {|f| f.include?("test/tmp")}
68   - end
69   -rescue LoadError
70   - puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install jeweler"
71   -end
vendor/plugins/acts_as_solr_reloaded/TESTING_THE_PLUGIN
... ... @@ -1,21 +0,0 @@
1   -acts_as_solr comes with a quick and fast unit test suite, and with a longer-running
2   -functional test suite, the latter testing the actual integration with Solr.
3   -
4   -== Install dependencies
5   -sudo apt-get install mongodb-server
6   -bundle install
7   -gem update --system 1.4.1
8   -
9   -== Running test
10   -To run the acts_as_solr's plugin tests run the following steps:
11   -
12   -- RAILS_ENV=test rake solr:start
13   -
14   -- rake test:unit
15   -(or just rake test)
16   -
17   -- rake test:functional (Accepts the following arguments: DB=sqlite|mysql and MYSQL_USER=user)
18   -
19   -== Troubleshooting:
20   -If for some reason the tests don't run and you get MySQL errors, make sure you edit the MYSQL_USER entry under
21   -config/environment.rb. It's recommended to create or use a MySQL user with no password.
vendor/plugins/acts_as_solr_reloaded/VERSION
... ... @@ -1 +0,0 @@
1   -1.6.0
2 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/acts_as_solr_reloaded.gemspec
... ... @@ -1,205 +0,0 @@
1   -# Generated by jeweler
2   -# DO NOT EDIT THIS FILE DIRECTLY
3   -# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4   -# -*- encoding: utf-8 -*-
5   -
6   -Gem::Specification.new do |s|
7   - s.name = %q{acts_as_solr_reloaded}
8   - s.version = "1.6.0"
9   -
10   - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11   - s.authors = ["Diego Carrion"]
12   - s.date = %q{2011-03-20}
13   - s.description = %q{This gem adds full text search capabilities and many other nifty features from Apache Solr to any Rails model.}
14   - s.email = %q{dc.rec1@gmail.com}
15   - s.extra_rdoc_files = [
16   - "LICENSE",
17   - "README.markdown",
18   - "README.rdoc"
19   - ]
20   - s.files = [
21   - "LICENSE",
22   - "README.markdown",
23   - "README.rdoc",
24   - "Rakefile",
25   - "TESTING_THE_PLUGIN",
26   - "VERSION",
27   - "config/solr.yml",
28   - "config/solr_environment.rb",
29   - "generators/dynamic_attributes_migration/dynamic_attributes_migration_generator.rb",
30   - "generators/dynamic_attributes_migration/templates/migration.rb",
31   - "generators/local_migration/local_migration_generator.rb",
32   - "generators/local_migration/templates/migration.rb",
33   - "lib/acts_as_solr.rb",
34   - "lib/acts_as_solr/acts_methods.rb",
35   - "lib/acts_as_solr/class_methods.rb",
36   - "lib/acts_as_solr/common_methods.rb",
37   - "lib/acts_as_solr/deprecation.rb",
38   - "lib/acts_as_solr/dynamic_attribute.rb",
39   - "lib/acts_as_solr/instance_methods.rb",
40   - "lib/acts_as_solr/lazy_document.rb",
41   - "lib/acts_as_solr/local.rb",
42   - "lib/acts_as_solr/mongo_mapper.rb",
43   - "lib/acts_as_solr/parser_methods.rb",
44   - "lib/acts_as_solr/search_results.rb",
45   - "lib/acts_as_solr/solr_fixtures.rb",
46   - "lib/acts_as_solr/tasks.rb",
47   - "lib/acts_as_solr_reloaded.rb",
48   - "lib/solr.rb",
49   - "lib/solr/connection.rb",
50   - "lib/solr/document.rb",
51   - "lib/solr/exception.rb",
52   - "lib/solr/field.rb",
53   - "lib/solr/importer.rb",
54   - "lib/solr/importer/array_mapper.rb",
55   - "lib/solr/importer/delimited_file_source.rb",
56   - "lib/solr/importer/hpricot_mapper.rb",
57   - "lib/solr/importer/mapper.rb",
58   - "lib/solr/importer/solr_source.rb",
59   - "lib/solr/importer/xpath_mapper.rb",
60   - "lib/solr/indexer.rb",
61   - "lib/solr/request.rb",
62   - "lib/solr/request/add_document.rb",
63   - "lib/solr/request/base.rb",
64   - "lib/solr/request/commit.rb",
65   - "lib/solr/request/delete.rb",
66   - "lib/solr/request/dismax.rb",
67   - "lib/solr/request/index_info.rb",
68   - "lib/solr/request/modify_document.rb",
69   - "lib/solr/request/optimize.rb",
70   - "lib/solr/request/ping.rb",
71   - "lib/solr/request/select.rb",
72   - "lib/solr/request/spellcheck.rb",
73   - "lib/solr/request/standard.rb",
74   - "lib/solr/request/update.rb",
75   - "lib/solr/response.rb",
76   - "lib/solr/response/add_document.rb",
77   - "lib/solr/response/base.rb",
78   - "lib/solr/response/commit.rb",
79   - "lib/solr/response/delete.rb",
80   - "lib/solr/response/dismax.rb",
81   - "lib/solr/response/index_info.rb",
82   - "lib/solr/response/modify_document.rb",
83   - "lib/solr/response/optimize.rb",
84   - "lib/solr/response/ping.rb",
85   - "lib/solr/response/ruby.rb",
86   - "lib/solr/response/select.rb",
87   - "lib/solr/response/spellcheck.rb",
88   - "lib/solr/response/standard.rb",
89   - "lib/solr/response/xml.rb",
90   - "lib/solr/solrtasks.rb",
91   - "lib/solr/util.rb",
92   - "lib/solr/xml.rb",
93   - "lib/tasks/database.rake",
94   - "lib/tasks/solr.rake",
95   - "lib/tasks/test.rake",
96   - "test/config/solr.yml",
97   - "test/db/connections/mysql/connection.rb",
98   - "test/db/connections/sqlite/connection.rb",
99   - "test/db/migrate/001_create_books.rb",
100   - "test/db/migrate/002_create_movies.rb",
101   - "test/db/migrate/003_create_categories.rb",
102   - "test/db/migrate/004_create_electronics.rb",
103   - "test/db/migrate/005_create_authors.rb",
104   - "test/db/migrate/006_create_postings.rb",
105   - "test/db/migrate/007_create_posts.rb",
106   - "test/db/migrate/008_create_gadgets.rb",
107   - "test/db/migrate/009_create_dynamic_attributes.rb",
108   - "test/db/migrate/010_create_advertises.rb",
109   - "test/db/migrate/011_create_locals.rb",
110   - "test/db/test.db",
111   - "test/fixtures/advertises.yml",
112   - "test/fixtures/authors.yml",
113   - "test/fixtures/books.yml",
114   - "test/fixtures/categories.yml",
115   - "test/fixtures/db_definitions/mysql.sql",
116   - "test/fixtures/dynamic_attributes.yml",
117   - "test/fixtures/electronics.yml",
118   - "test/fixtures/locals.yml",
119   - "test/fixtures/movies.yml",
120   - "test/fixtures/postings.yml",
121   - "test/functional/acts_as_solr_test.rb",
122   - "test/functional/association_indexing_test.rb",
123   - "test/functional/faceted_search_test.rb",
124   - "test/functional/multi_solr_search_test.rb",
125   - "test/models/advertise.rb",
126   - "test/models/author.rb",
127   - "test/models/book.rb",
128   - "test/models/category.rb",
129   - "test/models/document.rb",
130   - "test/models/dynamic_attribute.rb",
131   - "test/models/electronic.rb",
132   - "test/models/gadget.rb",
133   - "test/models/local.rb",
134   - "test/models/movie.rb",
135   - "test/models/novel.rb",
136   - "test/models/post.rb",
137   - "test/models/posting.rb",
138   - "test/test_helper.rb",
139   - "test/unit/acts_methods_shoulda.rb",
140   - "test/unit/class_methods_shoulda.rb",
141   - "test/unit/common_methods_shoulda.rb",
142   - "test/unit/instance_methods_shoulda.rb",
143   - "test/unit/lazy_document_shoulda.rb",
144   - "test/unit/parser_instance.rb",
145   - "test/unit/parser_methods_shoulda.rb",
146   - "test/unit/solr_instance.rb",
147   - "test/unit/test_helper.rb"
148   - ]
149   - s.homepage = %q{http://github.com/dcrec1/acts_as_solr_reloaded}
150   - s.require_paths = ["lib"]
151   - s.rubygems_version = %q{1.5.0}
152   - s.summary = %q{This gem adds full text search capabilities and many other nifty features from Apache Solr to any Rails model.}
153   - s.test_files = [
154   - "test/db/connections/mysql/connection.rb",
155   - "test/db/connections/sqlite/connection.rb",
156   - "test/db/migrate/001_create_books.rb",
157   - "test/db/migrate/002_create_movies.rb",
158   - "test/db/migrate/003_create_categories.rb",
159   - "test/db/migrate/004_create_electronics.rb",
160   - "test/db/migrate/005_create_authors.rb",
161   - "test/db/migrate/006_create_postings.rb",
162   - "test/db/migrate/007_create_posts.rb",
163   - "test/db/migrate/008_create_gadgets.rb",
164   - "test/db/migrate/009_create_dynamic_attributes.rb",
165   - "test/db/migrate/010_create_advertises.rb",
166   - "test/db/migrate/011_create_locals.rb",
167   - "test/functional/acts_as_solr_test.rb",
168   - "test/functional/association_indexing_test.rb",
169   - "test/functional/faceted_search_test.rb",
170   - "test/functional/multi_solr_search_test.rb",
171   - "test/models/advertise.rb",
172   - "test/models/author.rb",
173   - "test/models/book.rb",
174   - "test/models/category.rb",
175   - "test/models/document.rb",
176   - "test/models/dynamic_attribute.rb",
177   - "test/models/electronic.rb",
178   - "test/models/gadget.rb",
179   - "test/models/local.rb",
180   - "test/models/movie.rb",
181   - "test/models/novel.rb",
182   - "test/models/post.rb",
183   - "test/models/posting.rb",
184   - "test/test_helper.rb",
185   - "test/unit/acts_methods_shoulda.rb",
186   - "test/unit/class_methods_shoulda.rb",
187   - "test/unit/common_methods_shoulda.rb",
188   - "test/unit/instance_methods_shoulda.rb",
189   - "test/unit/lazy_document_shoulda.rb",
190   - "test/unit/parser_instance.rb",
191   - "test/unit/parser_methods_shoulda.rb",
192   - "test/unit/solr_instance.rb",
193   - "test/unit/test_helper.rb"
194   - ]
195   -
196   - if s.respond_to? :specification_version then
197   - s.specification_version = 3
198   -
199   - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
200   - else
201   - end
202   - else
203   - end
204   -end
205   -
vendor/plugins/acts_as_solr_reloaded/config/solr.yml
... ... @@ -1,22 +0,0 @@
1   -# Config file for the acts_as_solr plugin.
2   -#
3   -# If you change the host or port number here, make sure you update
4   -# them in your Solr config file
5   -
6   -development:
7   - url: http://0.0.0.0:8982/solr
8   - jvm_options: -server -Xmx128M -Xms16M
9   - timeout: 0
10   -
11   -production:
12   - url: http://127.0.0.1:8983/solr
13   - jvm_options: -server -Xmx192M -Xms64M
14   - timeout: 0
15   -
16   -test: &TEST
17   - url: http://0.0.0.0:8981/solr
18   - jvm_options: -server -Xmx128M -Xms16M
19   - timeout: 0
20   -
21   -cucumber:
22   - <<: *TEST
vendor/plugins/acts_as_solr_reloaded/config/solr_environment.rb
... ... @@ -1,49 +0,0 @@
1   -ENV['RAILS_ENV'] = (ENV['RAILS_ENV'] || 'development').dup
2   -require "uri"
3   -require "fileutils"
4   -require "yaml"
5   -require 'net/http'
6   -
7   -dir = File.dirname(__FILE__)
8   -SOLR_PATH = File.expand_path("#{dir}/../solr") unless defined? SOLR_PATH
9   -
10   -unless defined? Rails.root
11   - # define Rails.root for test environment
12   - Rails.root = defined?(Rails) ? Rails.root : File.expand_path("#{File.dirname(__FILE__)}/../test")
13   -end
14   -unless defined? RAILS_ENV
15   - RAILS_ENV = ENV['RAILS_ENV']
16   -end
17   -unless defined? SOLR_LOGS_PATH
18   - SOLR_LOGS_PATH = ENV["SOLR_LOGS_PATH"] || "#{Rails.root}/log"
19   -end
20   -unless defined? SOLR_PIDS_PATH
21   - SOLR_PIDS_PATH = ENV["SOLR_PIDS_PATH"] || "#{Rails.root}/tmp/pids"
22   -end
23   -unless defined? SOLR_DATA_PATH
24   - SOLR_DATA_PATH = ENV["SOLR_DATA_PATH"] || "#{Rails.root}/solr/#{ENV['RAILS_ENV']}"
25   -end
26   -unless defined? SOLR_CONFIG_PATH
27   - SOLR_CONFIG_PATH = ENV["SOLR_CONFIG_PATH"] || "#{SOLR_PATH}/solr"
28   -end
29   -unless defined? SOLR_PID_FILE
30   - SOLR_PID_FILE="#{SOLR_PIDS_PATH}/solr.#{ENV['RAILS_ENV']}.pid"
31   -end
32   -
33   -unless defined? SOLR_PORT
34   - config = YAML::load_file(Rails.root+'/config/solr.yml')
35   - raise("No solr environment defined for RAILS_ENV = #{ENV['RAILS_ENV'].inspect}") unless config[ENV['RAILS_ENV']]
36   -
37   - SOLR_HOST = ENV['HOST'] || URI.parse(config[ENV['RAILS_ENV']]['url']).host
38   - SOLR_PORT = ENV['PORT'] || URI.parse(config[ENV['RAILS_ENV']]['url']).port
39   -end
40   -
41   -SOLR_JVM_OPTIONS = config[ENV['RAILS_ENV']]['jvm_options'] unless defined? SOLR_JVM_OPTIONS
42   -
43   -if ENV["RAILS_ENV"] == 'test'
44   - require "active_record"
45   - DB = (ENV['DB'] ? ENV['DB'] : 'sqlite') unless defined?(DB)
46   - MYSQL_USER = (ENV['MYSQL_USER'].nil? ? 'root' : ENV['MYSQL_USER']) unless defined? MYSQL_USER
47   - require File.join(File.dirname(File.expand_path(__FILE__)), '..', 'test', 'db', 'connections', DB, 'connection.rb')
48   -end
49   -
vendor/plugins/acts_as_solr_reloaded/generators/dynamic_attributes_migration/dynamic_attributes_migration_generator.rb
... ... @@ -1,7 +0,0 @@
1   -class DynamicAttributesMigrationGenerator < Rails::Generator::Base
2   - def manifest
3   - record do |m|
4   - m.migration_template 'migration.rb', 'db/migrate', :migration_file_name => "dynamic_attributes_migration"
5   - end
6   - end
7   -end
8 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/generators/dynamic_attributes_migration/templates/migration.rb
... ... @@ -1,17 +0,0 @@
1   -class DynamicAttributesMigration < ActiveRecord::Migration
2   - def self.up
3   - create_table :dynamic_attributes do |t|
4   - t.integer :dynamicable_id
5   - t.string :dynamicable_type
6   - t.string :name
7   - t.text :value
8   - t.timestamps
9   - end
10   - add_index :dynamic_attributes, [:dynamicable_id, :dynamicable_type, :name], :unique => true, :name => 'da_pk'
11   - end
12   -
13   - def self.down
14   - remove_index 'da_pk'
15   - drop_table :dynamic_attributes
16   - end
17   -end
vendor/plugins/acts_as_solr_reloaded/generators/local_migration/local_migration_generator.rb
... ... @@ -1,7 +0,0 @@
1   -class LocalMigrationGenerator < Rails::Generator::Base
2   - def manifest
3   - record do |m|
4   - m.migration_template 'migration.rb', 'db/migrate', :migration_file_name => "local_migration"
5   - end
6   - end
7   -end
8 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/generators/local_migration/templates/migration.rb
... ... @@ -1,16 +0,0 @@
1   -class LocalMigration < ActiveRecord::Migration
2   - def self.up
3   - create_table :locals do |t|
4   - t.integer :localizable_id
5   - t.string :localizable_type
6   - t.string :latitude
7   - t.string :longitude
8   -
9   - t.timestamps
10   - end
11   - end
12   -
13   - def self.down
14   - drop_table :locals
15   - end
16   -end
17 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/init.rb
... ... @@ -1 +0,0 @@
1   -require 'acts_as_solr'
2 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/install.rb
... ... @@ -1,5 +0,0 @@
1   -require 'fileutils'
2   -
3   -src = File.join(File.dirname(__FILE__), 'config', 'solr.yml')
4   -target = File.join(File.dirname(__FILE__), '..', '..', '..', 'config', 'solr.yml')
5   -FileUtils.cp src, target
6 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr.rb
... ... @@ -1,25 +0,0 @@
1   -require 'active_record'
2   -require 'rexml/document'
3   -require 'net/http'
4   -require 'yaml'
5   -require 'time'
6   -require 'erb'
7   -require 'rexml/xpath'
8   -
9   -require File.dirname(__FILE__) + '/solr'
10   -require File.dirname(__FILE__) + '/acts_as_solr/acts_methods'
11   -require File.dirname(__FILE__) + '/acts_as_solr/common_methods'
12   -require File.dirname(__FILE__) + '/acts_as_solr/parser_methods'
13   -require File.dirname(__FILE__) + '/acts_as_solr/class_methods'
14   -require File.dirname(__FILE__) + '/acts_as_solr/dynamic_attribute'
15   -require File.dirname(__FILE__) + '/acts_as_solr/local'
16   -require File.dirname(__FILE__) + '/acts_as_solr/instance_methods'
17   -require File.dirname(__FILE__) + '/acts_as_solr/common_methods'
18   -require File.dirname(__FILE__) + '/acts_as_solr/deprecation'
19   -require File.dirname(__FILE__) + '/acts_as_solr/search_results'
20   -require File.dirname(__FILE__) + '/acts_as_solr/lazy_document'
21   -require File.dirname(__FILE__) + '/acts_as_solr/mongo_mapper'
22   -require File.dirname(__FILE__) + '/acts_as_solr/post'
23   -
24   -# reopen ActiveRecord and include the acts_as_solr method
25   -ActiveRecord::Base.extend ActsAsSolr::ActsMethods
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/acts_methods.rb
... ... @@ -1,390 +0,0 @@
1   -# a list of models which called acts_as_solr
2   -$solr_indexed_models = []
3   -
4   -module ActsAsSolr #:nodoc:
5   -
6   - module ActsMethods
7   -
8   - # declares a class as solr-searchable
9   - #
10   - # ==== options:
11   - # fields:: This option can be used to specify only the fields you'd
12   - # like to index. If not given, all the attributes from the
13   - # class will be indexed. You can also use this option to
14   - # include methods that should be indexed as fields
15   - #
16   - # class Movie < ActiveRecord::Base
17   - # acts_as_solr :fields => [:name, :description, :current_time]
18   - # def current_time
19   - # Time.now.to_s
20   - # end
21   - # end
22   - #
23   - # Each field passed can also be a hash with the value being a field type
24   - #
25   - # class Electronic < ActiveRecord::Base
26   - # acts_as_solr :fields => [{:price => :range_float}]
27   - # def current_time
28   - # Time.now
29   - # end
30   - # end
31   - #
32   - # The field types accepted are:
33   - #
34   - # :float:: Index the field value as a float (ie.: 12.87)
35   - # :integer:: Index the field value as an integer (ie.: 31)
36   - # :boolean:: Index the field value as a boolean (ie.: true/false)
37   - # :date:: Index the field value as a date (ie.: Wed Nov 15 23:13:03 PST 2006)
38   - # :string:: Index the field value as a text string, not applying the same indexing
39   - # filters as a regular text field
40   - # :range_integer:: Index the field value for integer range queries (ie.:[5 TO 20])
41   - # :range_float:: Index the field value for float range queries (ie.:[14.56 TO 19.99])
42   - #
43   - # Setting the field type preserves its original type when indexed
44   - #
45   - # The field may also be passed with a hash value containing options
46   - #
47   - # class Author < ActiveRecord::Base
48   - # acts_as_solr :fields => [{:full_name => {:type => :text, :as => :name}}]
49   - # def full_name
50   - # self.first_name + ' ' + self.last_name
51   - # end
52   - # end
53   - #
54   - # The options accepted are:
55   - #
56   - # :type:: Index the field using the specified type
57   - # :as:: Index the field using the specified field name
58   - #
59   - # additional_fields:: This option takes fields to be include in the index
60   - # in addition to those derived from the database. You
61   - # can also use this option to include custom fields
62   - # derived from methods you define. This option will be
63   - # ignored if the :fields option is given. It also accepts
64   - # the same field types as the option above
65   - #
66   - # class Movie < ActiveRecord::Base
67   - # acts_as_solr :additional_fields => [:current_time]
68   - # def current_time
69   - # Time.now.to_s
70   - # end
71   - # end
72   - #
73   - # exclude_fields:: This option taks an array of fields that should be ignored from indexing:
74   - #
75   - # class User < ActiveRecord::Base
76   - # acts_as_solr :exclude_fields => [:password, :login, :credit_card_number]
77   - # end
78   - #
79   - # include:: This option can be used for association indexing, which
80   - # means you can include any :has_one, :has_many, :belongs_to
81   - # and :has_and_belongs_to_many association to be indexed:
82   - #
83   - # class Category < ActiveRecord::Base
84   - # has_many :books
85   - # acts_as_solr :include => [:books]
86   - # end
87   - #
88   - # Each association may also be specified as a hash with an option hash as a value
89   - #
90   - # class Book < ActiveRecord::Base
91   - # belongs_to :author
92   - # has_many :distribution_companies
93   - # has_many :copyright_dates
94   - # has_many :media_types
95   - # acts_as_solr(
96   - # :fields => [:name, :description],
97   - # :include => [
98   - # {:author => {:using => :fullname, :as => :name}},
99   - # {:media_types => {:using => lambda{|media| type_lookup(media.id)}}}
100   - # {:distribution_companies => {:as => :distributor, :multivalued => true}},
101   - # {:copyright_dates => {:as => :copyright, :type => :date}}
102   - # ]
103   - # ]
104   - #
105   - # The options accepted are:
106   - #
107   - # :type:: Index the associated objects using the specified type
108   - # :as:: Index the associated objects using the specified field name
109   - # :using:: Index the associated objects using the value returned by the specified method or proc. If a method
110   - # symbol is supplied, it will be sent to each object to look up the value to index; if a proc is
111   - # supplied, it will be called once for each object with the object as the only argument
112   - # :multivalued:: Index the associated objects using one field for each object rather than joining them
113   - # all into a single field
114   - #
115   - # facets:: This option can be used to specify the fields you'd like to
116   - # index as facet fields
117   - #
118   - # class Electronic < ActiveRecord::Base
119   - # acts_as_solr :facets => [:category, :manufacturer]
120   - # end
121   - #
122   - # boost:: You can pass a boost (float) value that will be used to boost the document and/or a field. To specify a more
123   - # boost for the document, you can either pass a block or a symbol. The block will be called with the record
124   - # as an argument, a symbol will result in the according method being called:
125   - #
126   - # class Electronic < ActiveRecord::Base
127   - # acts_as_solr :fields => [{:price => {:boost => 5.0}}], :boost => 10.0
128   - # end
129   - #
130   - # class Electronic < ActiveRecord::Base
131   - # acts_as_solr :fields => [{:price => {:boost => 5.0}}], :boost => proc {|record| record.id + 120*37}
132   - # end
133   - #
134   - # class Electronic < ActiveRecord::Base
135   - # acts_as_solr :fields => [{:price => {:boost => :price_rating}}], :boost => 10.0
136   - # end
137   - #
138   - # if:: Only indexes the record if the condition evaluated is true. The argument has to be
139   - # either a symbol, string (to be eval'ed), proc/method, or class implementing a static
140   - # validation method. It behaves the same way as ActiveRecord's :if option.
141   - #
142   - # class Electronic < ActiveRecord::Base
143   - # acts_as_solr :if => proc{|record| record.is_active?}
144   - # end
145   - #
146   - # offline:: Assumes that your using an outside mechanism to explicitly trigger indexing records, e.g. you only
147   - # want to update your index through some asynchronous mechanism. Will accept either a boolean or a block
148   - # that will be evaluated before actually contacting the index for saving or destroying a document. Defaults
149   - # to false. It doesn't refer to the mechanism of an offline index in general, but just to get a centralized point
150   - # where you can control indexing. Note: This is only enabled for saving records. acts_as_solr doesn't always like
151   - # it, if you have a different number of results coming from the database and the index. This might be rectified in
152   - # another patch to support lazy loading.
153   - #
154   - # class Electronic < ActiveRecord::Base
155   - # acts_as_solr :offline => proc {|record| record.automatic_indexing_disabled?}
156   - # end
157   - #
158   - # auto_commit:: The commit command will be sent to Solr only if its value is set to true:
159   - #
160   - # class Author < ActiveRecord::Base
161   - # acts_as_solr :auto_commit => false
162   - # end
163   - #
164   - # dynamic_attributes: Default false. When true, requires a has_many relationship to a DynamicAttribute
165   - # (:name, :value) model. Then, all dynamic attributes will be mapped as normal attributes
166   - # in Solr, so you can filter like this: Model.find_by_solr "#{dynamic_attribute.name}:Lorem"
167   - #
168   - # taggable: Default false. When true, indexes tags with field name tag. Tags are taken from taggings.tag
169   - #
170   - # spatial: Default false. When true, indexes model.local.latitude and model.local.longitude as coordinates.
171   - #
172   - def acts_as_solr(options={}, solr_options={}, &deferred_solr_configuration)
173   -
174   - $solr_indexed_models << self
175   -
176   - extend ClassMethods
177   - include InstanceMethods
178   - include CommonMethods
179   - include ParserMethods
180   -
181   - define_solr_configuration_methods
182   -
183   - acts_as_taggable_on :tags if options[:taggable]
184   - has_many :dynamic_attributes, :as => "dynamicable" if options[:dynamic_attributes]
185   - has_one :local, :as => "localizable" if options[:spatial]
186   -
187   - after_save :solr_save
188   - after_destroy :solr_destroy
189   -
190   - if deferred_solr_configuration
191   - self.deferred_solr_configuration = deferred_solr_configuration
192   - else
193   - process_acts_as_solr(options, solr_options)
194   - end
195   - end
196   -
197   - def process_acts_as_solr(options, solr_options)
198   - process_solr_options(options, solr_options)
199   - end
200   -
201   - def define_solr_configuration_methods
202   - # I'd like to use cattr_accessor, but it does not support lazy loaders and delegation to the class in the instance methods.
203   - # TODO: Reconcile with cattr_accessor, or a more appropriate method.
204   - class_eval(<<-EOS, __FILE__, __LINE__)
205   - @@configuration = nil unless defined?(@@configuration)
206   - @@solr_configuration = nil unless defined?(@@solr_configuration)
207   - @@deferred_solr_configuration = nil unless defined?(@@deferred_solr_configuration)
208   -
209   - def self.configuration
210   - return @@configuration if @@configuration
211   - process_deferred_solr_configuration
212   - @@configuration
213   - end
214   - def configuration
215   - self.class.configuration
216   - end
217   - def self.configuration=(value)
218   - @@configuration = value
219   - end
220   - def configuration=(value)
221   - self.class.configuration = value
222   - end
223   -
224   - def self.solr_configuration
225   - return @@solr_configuration if @@solr_configuration
226   - process_deferred_solr_configuration
227   - @@solr_configuration
228   - end
229   - def solr_configuration
230   - self.class.solr_configuration
231   - end
232   - def self.solr_configuration=(value)
233   - @@solr_configuration = value
234   - end
235   - def solr_configuration=(value)
236   - self.class.solr_configuration = value
237   - end
238   -
239   - def self.deferred_solr_configuration
240   - return @@deferred_solr_configuration if @@deferred_solr_configuration
241   - @@deferred_solr_configuration
242   - end
243   - def deferred_solr_configuration
244   - self.class.deferred_solr_configuration
245   - end
246   - def self.deferred_solr_configuration=(value)
247   - @@deferred_solr_configuration = value
248   - end
249   - def deferred_solr_configuration=(value)
250   - self.class.deferred_solr_configuration = value
251   - end
252   - EOS
253   - end
254   -
255   - def process_deferred_solr_configuration
256   - return unless deferred_solr_configuration
257   - options, solr_options = deferred_solr_configuration.call
258   - self.deferred_solr_configuration = nil
259   - self.process_solr_options(options, solr_options)
260   - end
261   -
262   - def process_solr_options(options={}, solr_options={})
263   - self.configuration = {
264   - :fields => nil,
265   - :format => :objects,
266   - :additional_fields => nil,
267   - :dynamic_attributes => false,
268   - :exclude_fields => [],
269   - :auto_commit => ['production'].include?(Rails.env) ? false : true,
270   - :include => nil,
271   - :facets => nil,
272   - :boost => nil,
273   - :if => "true",
274   - :offline => false,
275   - :spatial => false,
276   - }
277   - self.solr_configuration = {
278   - :type_field => "type_s",
279   - :primary_key_field => "pk_s",
280   - :default_boost => 1.0,
281   - }
282   -
283   - solr_options ||= {}
284   - raise "Invalid options: #{(options.keys-configuration.keys).join(',')}" unless (options.keys-configuration.keys).empty?
285   - raise "Invalid solr options: #{(solr_options.keys-solr_configuration.keys).join(',')}" unless (solr_options.keys-solr_configuration.keys).empty?
286   -
287   - configuration.update(options) if options.is_a?(Hash)
288   - solr_configuration.update(solr_options) if solr_options.is_a?(Hash)
289   - Deprecation.validate_index(configuration)
290   -
291   - configuration[:solr_fields] = {}
292   - configuration[:solr_includes] = {}
293   -
294   - if configuration[:fields].respond_to?(:each)
295   - process_fields(configuration[:fields])
296   - else
297   - process_fields(self.new.attributes.keys.map { |k| k.to_sym })
298   - process_fields(configuration[:additional_fields])
299   - end
300   -
301   - process_includes(configuration[:include]) if configuration[:include]
302   - end
303   -
304   - def after_save_reindex(associations, options = {})
305   - extend ActsAsSolr::CommonMethods
306   - Array(associations).each do |association|
307   - after_save do |ar|
308   - if options[:with] == :delayed_job
309   - delay(:run_at => (Date.today+1.day).to_time+4.hours).solr_batch_add_association ar, association
310   - else
311   - solr_batch_add_association ar, association
312   - end
313   - end
314   - end
315   - end
316   -
317   - private
318   -
319   - def get_field_value(field)
320   - field_name, options = determine_field_name_and_options(field)
321   - configuration[:solr_fields][field_name] = options
322   -
323   - define_method "#{field_name}_for_solr" do
324   - value = self.send field_name
325   - case options[:type]
326   - when :date # format dates properly; return nil for nil dates
327   - value ? (value.respond_to?(:utc) ? value.utc : value).strftime("%Y-%m-%dT%H:%M:%SZ") : nil
328   - else
329   - value
330   - end
331   - end
332   - end
333   -
334   - def process_fields(raw_field)
335   - if raw_field.respond_to?(:each)
336   - raw_field.each do |field|
337   - next if configuration[:exclude_fields].include?(field)
338   - get_field_value(field)
339   - end
340   - end
341   - end
342   -
343   - def process_includes(includes)
344   - Array(includes).each do |assoc|
345   - field_name, options = determine_field_name_and_options(assoc)
346   - configuration[:solr_includes][field_name] = options
347   - end
348   - end
349   -
350   - def determine_field_name_and_options(field)
351   - if field.is_a?(Hash)
352   - name = field.keys.first
353   - options = field.values.first
354   - if options.is_a?(Hash)
355   - [name, {:type => type_for_field(field)}.merge(options)]
356   - else
357   - [name, {:type => options}]
358   - end
359   - else
360   - [field, {:type => type_for_field(field)}]
361   - end
362   - end
363   -
364   - def type_for_field(field)
365   - if configuration[:facets] && configuration[:facets].include?(field)
366   - :facet
367   - elsif column = columns_hash[field.to_s]
368   - column_type = format_column_type(column.type)
369   -
370   - case column_type
371   - when :string then :string
372   - when :datetime then :date
373   - when :time then :date
374   - else column_type
375   - end
376   - else
377   - :text
378   - end
379   - end
380   -
381   - def format_column_type(type)
382   - if type.class.eql? Symbol
383   - type
384   - else
385   - type.to_s.eql?("ObjectId") ? :string : type.to_s.downcase.to_sym
386   - end
387   - end
388   - end
389   -end
390   -
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/class_methods.rb
... ... @@ -1,278 +0,0 @@
1   -module ActsAsSolr #:nodoc:
2   -
3   - module ClassMethods
4   - include CommonMethods
5   - include ParserMethods
6   -
7   - # Finds instances of a model. Terms are ANDed by default, can be overwritten
8   - # by using OR between terms
9   - #
10   - # Here's a sample (untested) code for your controller:
11   - #
12   - # def search
13   - # results = Book.find_by_solr params[:query]
14   - # end
15   - #
16   - # For specific fields searching use :filter_queries options
17   - #
18   - # ====options:
19   - # offset:: - The first document to be retrieved (offset)
20   - # page:: - The page to be retrieved
21   - # limit:: - The number of rows per page
22   - # per_page:: - Alias for limit
23   - # filter_queries:: - Use solr filter queries to sort by fields
24   - #
25   - # Book.find_by_solr 'ruby', :filter_queries => ['price:5']
26   - #
27   - # sort:: - Orders (sort by) the result set using a given criteria:
28   - #
29   - # Book.find_by_solr 'ruby', :sort => 'description asc'
30   - #
31   - # field_types:: This option is deprecated and will be obsolete by version 1.0.
32   - # There's no need to specify the :field_types anymore when doing a
33   - # search in a model that specifies a field type for a field. The field
34   - # types are automatically traced back when they're included.
35   - #
36   - # class Electronic < ActiveRecord::Base
37   - # acts_as_solr :fields => [{:price => :range_float}]
38   - # end
39   - #
40   - # facets:: This option argument accepts the following arguments:
41   - # fields:: The fields to be included in the faceted search (Solr's facet.field)
42   - # query:: The queries to be included in the faceted search (Solr's facet.query)
43   - # zeros:: Display facets with count of zero. (true|false)
44   - # sort:: Sorts the faceted resuls by highest to lowest count. (true|false)
45   - # browse:: This is where the 'drill-down' of the facets work. Accepts an array of
46   - # fields in the format "facet_field:term"
47   - # mincount:: Replacement for zeros (it has been deprecated in Solr). Specifies the
48   - # minimum count necessary for a facet field to be returned. (Solr's
49   - # facet.mincount) Overrides :zeros if it is specified. Default is 0.
50   - #
51   - # dates:: Run date faceted queries using the following arguments:
52   - # fields:: The fields to be included in the faceted date search (Solr's facet.date).
53   - # It may be either a String/Symbol or Hash. If it's a hash the options are the
54   - # same as date_facets minus the fields option (i.e., :start:, :end, :gap, :other,
55   - # :between). These options if provided will override the base options.
56   - # (Solr's f.<field_name>.date.<key>=<value>).
57   - # start:: The lower bound for the first date range for all Date Faceting. Required if
58   - # :fields is present
59   - # end:: The upper bound for the last date range for all Date Faceting. Required if
60   - # :fields is prsent
61   - # gap:: The size of each date range expressed as an interval to be added to the lower
62   - # bound using the DateMathParser syntax. Required if :fields is prsent
63   - # hardend:: A Boolean parameter instructing Solr what do do in the event that
64   - # facet.date.gap does not divide evenly between facet.date.start and facet.date.end.
65   - # other:: This param indicates that in addition to the counts for each date range
66   - # constraint between facet.date.start and facet.date.end, other counds should be
67   - # calculated. May specify more then one in an Array. The possible options are:
68   - # before:: - all records with lower bound less than start
69   - # after:: - all records with upper bound greater than end
70   - # between:: - all records with field values between start and end
71   - # none:: - compute no other bounds (useful in per field assignment)
72   - # all:: - shortcut for before, after, and between
73   - # filter:: Similar to :query option provided by :facets, in that accepts an array of
74   - # of date queries to limit results. Can not be used as a part of a :field hash.
75   - # This is the only option that can be used if :fields is not present.
76   - #
77   - # Example:
78   - #
79   - # Electronic.find_by_solr "memory", :facets => {:zeros => false, :sort => true,
80   - # :query => ["price:[* TO 200]",
81   - # "price:[200 TO 500]",
82   - # "price:[500 TO *]"],
83   - # :fields => [:category, :manufacturer],
84   - # :browse => ["category:Memory","manufacturer:Someone"]}
85   - #
86   - #
87   - # Examples of date faceting:
88   - #
89   - # basic:
90   - # Electronic.find_by_solr "memory", :facets => {:dates => {:fields => [:updated_at, :created_at],
91   - # :start => 'NOW-10YEARS/DAY', :end => 'NOW/DAY', :gap => '+2YEARS', :other => :before}}
92   - #
93   - # advanced:
94   - # Electronic.find_by_solr "memory", :facets => {:dates => {:fields => [:updated_at,
95   - # {:created_at => {:start => 'NOW-20YEARS/DAY', :end => 'NOW-10YEARS/DAY', :other => [:before, :after]}
96   - # }], :start => 'NOW-10YEARS/DAY', :end => 'NOW/DAY', :other => :before, :filter =>
97   - # ["created_at:[NOW-10YEARS/DAY TO NOW/DAY]", "updated_at:[NOW-1YEAR/DAY TO NOW/DAY]"]}}
98   - #
99   - # filter only:
100   - # Electronic.find_by_solr "memory", :facets => {:dates => {:filter => "updated_at:[NOW-1YEAR/DAY TO NOW/DAY]"}}
101   - #
102   - #
103   - #
104   - # scores:: If set to true this will return the score as a 'solr_score' attribute
105   - # for each one of the instances found. Does not currently work with find_id_by_solr
106   - #
107   - # books = Book.find_by_solr 'ruby OR splinter', :scores => true
108   - # books.records.first.solr_score
109   - # => 1.21321397
110   - # books.records.last.solr_score
111   - # => 0.12321548
112   - #
113   - # lazy:: If set to true the search will return objects that will touch the database when you ask for one
114   - # of their attributes for the first time. Useful when you're using fragment caching based solely on
115   - # types and ids.
116   - #
117   - # relevance:: Sets fields relevance
118   - #
119   - # Book.find_by_solr "zidane", :relevance => {:title => 5, :author => 2}
120   - #
121   - def find_by_solr(query, options={})
122   - data = parse_query(query, options)
123   - return parse_results(data, options)
124   - end
125   - alias :search :find_by_solr
126   -
127   - # Finds instances of a model and returns an array with the ids:
128   - # Book.find_id_by_solr "rails" => [1,4,7]
129   - # The options accepted are the same as find_by_solr
130   - #
131   - def find_id_by_solr(query, options={})
132   - data = parse_query(query, options)
133   - return parse_results(data, {:format => :ids})
134   - end
135   -
136   - # This method can be used to execute a search across multiple models:
137   - # Book.multi_solr_search "Napoleon OR Tom", :models => [Movie]
138   - #
139   - # ====options:
140   - # Accepts the same options as find_by_solr plus:
141   - # models:: The additional models you'd like to include in the search
142   - # results_format:: Specify the format of the results found
143   - # :objects :: Will return an array with the results being objects (default). Example:
144   - # Book.multi_solr_search "Napoleon OR Tom", :models => [Movie], :results_format => :objects
145   - # :ids :: Will return an array with the ids of each entry found. Example:
146   - # Book.multi_solr_search "Napoleon OR Tom", :models => [Movie], :results_format => :ids
147   - # => [{"id" => "Movie:1"},{"id" => Book:1}]
148   - # Where the value of each array is as Model:instance_id
149   - # scores:: If set to true this will return the score as a 'solr_score' attribute
150   - # for each one of the instances found. Does not currently work with find_id_by_solr
151   - #
152   - # books = Book.multi_solr_search 'ruby OR splinter', :scores => true
153   - # books.records.first.solr_score
154   - # => 1.21321397
155   - # books.records.last.solr_score
156   - # => 0.12321548
157   - #
158   - def multi_solr_search(query, options = {})
159   - options.update(:results_format => :objects) unless options[:results_format]
160   - data = parse_query(query, options)
161   -
162   - if data.nil? or data.total_hits == 0
163   - return SearchResults.new(:docs => [], :total => 0)
164   - end
165   -
166   - result = find_multi_search_objects(data, options)
167   - if options[:scores] and options[:results_format] == :objects
168   - add_scores(result, data)
169   - end
170   - SearchResults.new :docs => result, :total => data.total_hits
171   - end
172   -
173   - def find_multi_search_objects(data, options)
174   - result = []
175   - if options[:results_format] == :objects
176   - data.hits.each do |doc|
177   - k = doc.fetch('id').first.to_s.split(':')
178   - result << k[0].constantize.find_by_id(k[1])
179   - end
180   - elsif options[:results_format] == :ids
181   - data.hits.each{|doc| result << {"id" => doc["id"].to_s}}
182   - end
183   - result
184   - end
185   -
186   - # returns the total number of documents found in the query specified:
187   - # Book.count_by_solr 'rails' => 3
188   - #
189   - def count_by_solr(query, options = {})
190   - data = parse_query(query, options)
191   - data.total_hits
192   - end
193   -
194   - # It's used to rebuild the Solr index for a specific model.
195   - # Book.rebuild_solr_index
196   - #
197   - # If batch_size is greater than 0, adds will be done in batches.
198   - # NOTE: If using sqlserver, be sure to use a finder with an explicit order.
199   - # Non-edge versions of rails do not handle pagination correctly for sqlserver
200   - # without an order clause.
201   - #
202   - # If a finder block is given, it will be called to retrieve the items to index.
203   - # This can be very useful for things such as updating based on conditions or
204   - # using eager loading for indexed associations.
205   - def rebuild_solr_index(batch_size=300, options = {}, &finder)
206   - finder ||= lambda do |ar, sql_options|
207   - ar.all sql_options.merge!({:order => self.primary_key, :include => configuration[:solr_includes].keys})
208   - end
209   - start_time = Time.now
210   - options[:offset] ||= 0
211   - options[:threads] ||= 2
212   - options[:delayed_job] &= defined?(Delayed::Job)
213   -
214   - if batch_size > 0
215   - items_processed = 0
216   - offset = options[:offset]
217   - end_reached = false
218   - threads = []
219   - mutex = Mutex.new
220   - queue = Queue.new
221   - loop do
222   - items = finder.call(self, {:limit => batch_size, :offset => offset})
223   - add_batch = items.collect { |content| content.to_solr_doc }
224   - offset += items.size
225   - end_reached = items.size == 0
226   - break if end_reached
227   -
228   - if options[:threads] == threads.size
229   - threads.first.join
230   - threads.shift
231   - end
232   -
233   - queue << [items, add_batch]
234   - threads << Thread.new do
235   - iteration_start = Time.now
236   -
237   - iteration_items, iteration_add_batch = queue.pop(true)
238   - if options[:delayed_job]
239   - delay.solr_add iteration_add_batch
240   - else
241   - solr_add iteration_add_batch
242   - solr_commit
243   - end
244   -
245   - last_id = iteration_items.last.id
246   - time_so_far = Time.now - start_time
247   - iteration_time = Time.now - iteration_start
248   - mutex.synchronize do
249   - items_processed += iteration_items.size
250   - if options[:delayed_job]
251   - logger.info "#{Process.pid}: #{items_processed} items for #{self.name} have been sent to Delayed::Job in #{'%.3f' % time_so_far}s at #{'%.3f' % (items_processed / time_so_far)} items/sec. Last id: #{last_id}"
252   - else
253   - logger.info "#{Process.pid}: #{items_processed} items for #{self.name} have been batch added to index in #{'%.3f' % time_so_far}s at #{'%.3f' % (items_processed / time_so_far)} items/sec. Last id: #{last_id}"
254   - end
255   - end
256   - end
257   - end
258   -
259   - solr_commit if options[:delayed_job]
260   - threads.each{ |t| t.join }
261   - else
262   - items = finder.call(self, {})
263   - items.each { |content| content.solr_save }
264   - items_processed = items.size
265   - end
266   -
267   - if items_processed > 0
268   - solr_optimize
269   - time_elapsed = Time.now - start_time
270   - logger.info "Index for #{self.name} has been rebuilt (took #{'%.3f' % time_elapsed}s)"
271   - else
272   - "Nothing to index for #{self.name}"
273   - end
274   - end
275   -
276   - alias :rebuild_index :rebuild_solr_index
277   - end
278   -end
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/common_methods.rb
... ... @@ -1,77 +0,0 @@
1   -module ActsAsSolr #:nodoc:
2   -
3   - module CommonMethods
4   -
5   - TypeMapping = {
6   - :double => "do",
7   - :float => "f",
8   - :decimal => "f",
9   - :integer => "i",
10   - :boolean => "b",
11   - :string => "s",
12   - :date => "d",
13   - :range_float => "rf",
14   - :range_integer => "ri",
15   - :facet => "facet",
16   - :text => "t",
17   - }
18   -
19   - # Converts field types into Solr types
20   - def get_solr_field_type(field_type)
21   - if field_type.is_a?(Symbol)
22   - t = TypeMapping[field_type]
23   - raise "Unknown field_type symbol: #{field_type}" if t.nil?
24   - t
25   - elsif field_type.is_a?(String)
26   - return field_type
27   - else
28   - raise "Unknown field_type class: #{field_type.class}: #{field_type}"
29   - end
30   - end
31   -
32   - def solr_batch_add(objects)
33   - solr_add objects.map{ |a| a.to_solr_doc }
34   - solr_commit if defined?(configuration) and configuration[:auto_commit]
35   - end
36   -
37   - def solr_batch_add_association(ar, association)
38   - result = ar.send(association)
39   - result = [result] unless result.is_a?(Array)
40   - solr_batch_add result
41   - end
42   -
43   - # Sends an add command to Solr
44   - def solr_add(add_xml)
45   - ActsAsSolr::Post.execute(Solr::Request::AddDocument.new(add_xml))
46   - end
47   -
48   - # Sends the delete command to Solr
49   - def solr_delete(solr_ids)
50   - ActsAsSolr::Post.execute(Solr::Request::Delete.new(:id => solr_ids))
51   - end
52   -
53   - # Sends the commit command to Solr
54   - def solr_commit
55   - ActsAsSolr::Post.execute(Solr::Request::Commit.new)
56   - end
57   -
58   - # Optimizes the Solr index. Solr says:
59   - #
60   - # Optimizations can take nearly ten minutes to run.
61   - # We are presuming optimizations should be run once following large
62   - # batch-like updates to the collection and/or once a day.
63   - #
64   - # One of the solutions for this would be to create a cron job that
65   - # runs every day at midnight and optmizes the index:
66   - # 0 0 * * * /your_rails_dir/script/runner -e production "Model.solr_optimize"
67   - #
68   - def solr_optimize
69   - ActsAsSolr::Post.execute(Solr::Request::Optimize.new)
70   - end
71   -
72   - # Returns the id for the given instance
73   - def record_id(object)
74   - eval "object.#{object.class.primary_key}"
75   - end
76   - end
77   -end
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/deprecation.rb
... ... @@ -1,61 +0,0 @@
1   -module ActsAsSolr #:nodoc:
2   -
3   - class Post
4   - def initialize(body, mode = :search)
5   - @body = body
6   - @mode = mode
7   - puts "The method ActsAsSolr::Post.new(body, mode).execute_post is depracated. " +
8   - "Use ActsAsSolr::Post.execute(body, mode) instead!"
9   - end
10   -
11   - def execute_post
12   - ActsAsSolr::Post.execute(@body, @mode)
13   - end
14   - end
15   -
16   - module ClassMethods
17   - def find_with_facet(query, options={})
18   - Deprecation.plog "The method find_with_facet is deprecated. Use find_by_solr instead, passing the " +
19   - "arguments the same way you used to do with find_with_facet."
20   - find_by_solr(query, options)
21   - end
22   - end
23   -
24   - class Deprecation
25   - # Validates the options passed during query
26   - def self.validate_query options={}
27   - if options[:field_types]
28   - plog "The option :field_types for searching is deprecated. " +
29   - "The field types are automatically traced back when you specify a field type in your model."
30   - end
31   - if options[:sort_by]
32   - plog "The option :sort_by is deprecated, use :sort instead!"
33   - options[:sort] ||= options[:sort_by]
34   - end
35   - if options[:start]
36   - plog "The option :start is deprecated, use :offset instead!"
37   - options[:offset] ||= options[:start]
38   - end
39   - if options[:rows]
40   - plog "The option :rows is deprecated, use :limit instead!"
41   - options[:limit] ||= options[:rows]
42   - end
43   - end
44   -
45   - # Validates the options passed during indexing
46   - def self.validate_index options={}
47   - if options[:background]
48   - plog "The :background option is being deprecated. There are better and more efficient " +
49   - "ways to handle delayed saving of your records."
50   - end
51   - end
52   -
53   - # This will print the text to stdout and log the text
54   - # if rails logger is available
55   - def self.plog text
56   - puts text
57   - RAILS_DEFAULT_LOGGER.warn text if defined? RAILS_DEFAULT_LOGGER
58   - end
59   - end
60   -
61   -end
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/dynamic_attribute.rb
... ... @@ -1,3 +0,0 @@
1   -class DynamicAttribute < ActiveRecord::Base
2   - belongs_to :dynamicable, :polymorphic => true
3   -end
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/instance_methods.rb
... ... @@ -1,194 +0,0 @@
1   -module ActsAsSolr #:nodoc:
2   -
3   - module InstanceMethods
4   -
5   - # Solr id is <class.name>:<id> to be unique across all models
6   - def solr_id
7   - "#{self.class.name}:#{record_id(self)}"
8   - end
9   -
10   - # saves to the Solr index
11   - def solr_save
12   - return true if indexing_disabled?
13   - if evaluate_condition(:if, self)
14   - debug "solr_save: #{self.class.name} : #{record_id(self)}"
15   - solr_add to_solr_doc
16   - solr_commit if configuration[:auto_commit]
17   - true
18   - else
19   - solr_destroy
20   - end
21   - end
22   -
23   - def indexing_disabled?
24   - evaluate_condition(:offline, self) || !configuration[:if]
25   - end
26   -
27   - # remove from index
28   - def solr_destroy
29   - return true if indexing_disabled?
30   - debug "solr_destroy: #{self.class.name} : #{record_id(self)}"
31   - solr_delete solr_id
32   - solr_commit if configuration[:auto_commit]
33   - true
34   - end
35   -
36   - # convert instance to Solr document
37   - def to_solr_doc
38   - debug "to_solr_doc: creating doc for class: #{self.class.name}, id: #{record_id(self)}"
39   - doc = Solr::Document.new
40   - doc.boost = validate_boost(configuration[:boost]) if configuration[:boost]
41   -
42   - doc << {:id => solr_id,
43   - solr_configuration[:type_field] => self.class.name,
44   - solr_configuration[:primary_key_field] => record_id(self).to_s}
45   -
46   - # iterate through the fields and add them to the document,
47   - configuration[:solr_fields].each do |field_name, options|
48   - next if [self.class.primary_key, "type"].include?(field_name.to_s)
49   -
50   - field_boost = options[:boost] || solr_configuration[:default_boost]
51   - field_type = get_solr_field_type(options[:type])
52   - solr_name = options[:as] || field_name
53   -
54   - value = self.send("#{field_name}_for_solr") rescue nil
55   - next if value.nil?
56   -
57   - suffix = get_solr_field_type(field_type)
58   - value = Array(value).map{ |v| ERB::Util.html_escape(v) } # escape each value
59   - value = value.first if value.size == 1
60   -
61   - field = Solr::Field.new(:name => "#{solr_name}_#{suffix}", :value => value)
62   - processed_boost = validate_boost(field_boost)
63   - field.boost = processed_boost
64   - doc << field
65   - end
66   -
67   - add_dynamic_attributes(doc)
68   - add_includes(doc)
69   - add_tags(doc)
70   - add_space(doc)
71   -
72   - debug doc.to_json
73   - doc
74   - end
75   -
76   - private
77   -
78   - def debug(text)
79   - logger.debug text rescue nil
80   - end
81   -
82   - def add_space(doc)
83   - if configuration[:spatial] and local
84   - doc << Solr::Field.new(:name => "lat_f", :value => local.latitude)
85   - doc << Solr::Field.new(:name => "lng_f", :value => local.longitude)
86   - end
87   - end
88   -
89   - def add_tags(doc)
90   - taggings.each do |tagging|
91   - doc << Solr::Field.new(:name => "tag_facet", :value => tagging.tag.name)
92   - doc << Solr::Field.new(:name => "tag_t", :value => tagging.tag.name)
93   - end if configuration[:taggable]
94   - end
95   -
96   - def add_dynamic_attributes(doc)
97   - dynamic_attributes.each do |attribute|
98   - value = ERB::Util.html_escape(attribute.value)
99   - doc << Solr::Field.new(:name => "#{attribute.name.downcase}_t", :value => value)
100   - doc << Solr::Field.new(:name => "#{attribute.name.downcase}_facet", :value => value)
101   - end if configuration[:dynamic_attributes]
102   - end
103   -
104   - def add_includes(doc)
105   - if configuration[:solr_includes].respond_to?(:each)
106   - configuration[:solr_includes].each do |association, options|
107   - data = options[:multivalued] ? [] : ""
108   - field_name = options[:as] || association.to_s.singularize
109   - field_type = get_solr_field_type(options[:type])
110   - field_boost = options[:boost] || solr_configuration[:default_boost]
111   - suffix = get_solr_field_type(field_type)
112   - case self.class.reflect_on_association(association).macro
113   - when :has_many, :has_and_belongs_to_many
114   - records = self.send(association).compact
115   - unless records.empty?
116   - records.each {|r| data << include_value(r, options)}
117   - Array(data).each do |value|
118   - field = Solr::Field.new(:name => "#{field_name}_#{suffix}", :value => value)
119   - processed_boost = validate_boost(field_boost)
120   - field.boost = processed_boost
121   - doc << field
122   - end
123   - end
124   - when :has_one, :belongs_to
125   - record = self.send(association)
126   - unless record.nil?
127   - doc["#{field_name}_#{suffix}"] = include_value(record, options)
128   - end
129   - end
130   - end
131   - end
132   - end
133   -
134   - def include_value(record, options)
135   - if options[:using].is_a? Proc
136   - options[:using].call(record)
137   - elsif options[:using].is_a? Symbol
138   - record.send(options[:using])
139   - else
140   - if options[:fields]
141   - fields = {}
142   - options[:fields].each{ |f| fields[f] = record.send(f) }
143   - else
144   - fields = record.attributes
145   - end
146   - fields.map{ |k,v| ERB::Util.html_escape(v) }.join(" ")
147   - end
148   - end
149   -
150   - def validate_boost(boost)
151   - boost_value = case boost
152   - when Float
153   - return solr_configuration[:default_boost] if boost < 0
154   - boost
155   - when Proc
156   - boost.call(self)
157   - when Symbol
158   - if self.respond_to?(boost)
159   - self.send(boost)
160   - end
161   - end
162   -
163   - boost_value || solr_configuration[:default_boost]
164   - end
165   -
166   - def condition_block?(condition)
167   - condition.respond_to?("call") && (condition.arity == 1 || condition.arity == -1)
168   - end
169   -
170   - def evaluate_condition(which_condition, field)
171   - condition = configuration[which_condition]
172   - case condition
173   - when Symbol
174   - field.send(condition)
175   - when String
176   - eval(condition, binding)
177   - when FalseClass, NilClass
178   - false
179   - when TrueClass
180   - true
181   - else
182   - if condition_block?(condition)
183   - condition.call(field)
184   - else
185   - raise(
186   - ArgumentError,
187   - "The :#{which_condition} option has to be either a symbol, string (to be eval'ed), proc/method, true/false, or " +
188   - "class implementing a static validation method"
189   - )
190   - end
191   - end
192   - end
193   - end
194   -end
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/lazy_document.rb
... ... @@ -1,18 +0,0 @@
1   -module ActsAsSolr
2   - class LazyDocument
3   - attr_reader :id, :clazz
4   -
5   - def initialize(id, clazz)
6   - @id = id
7   - @clazz = clazz
8   - end
9   -
10   - def method_missing(name, *args)
11   - unless @__instance
12   - @__instance = @clazz.find(@id)
13   - end
14   -
15   - @__instance.send(name, *args)
16   - end
17   - end
18   -end
19 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/local.rb
... ... @@ -1,4 +0,0 @@
1   -class Local < ActiveRecord::Base
2   - belongs_to :localizable, :polymorphic => true
3   - validates_presence_of :latitude, :longitude
4   -end
5 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/mongo_mapper.rb
... ... @@ -1,24 +0,0 @@
1   -module ActsAsSolr
2   - module MongoMapper
3   - def self.included(clazz)
4   - clazz.extend ActsAsSolr::ActsMethods
5   - clazz.extend ClassMethods
6   - end
7   -
8   - module ClassMethods
9   - def columns_hash
10   - keys
11   - end
12   -
13   - def primary_key
14   - 'id'
15   - end
16   -
17   - def merge_conditions(*args)
18   - ret = {}
19   - args.each{ |a| ret.merge!(a) if a.is_a?(Hash) }
20   - ret
21   - end
22   - end
23   - end
24   -end
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/parser_methods.rb
... ... @@ -1,273 +0,0 @@
1   -module ActsAsSolr #:nodoc:
2   - module ParserMethods
3   - protected
4   -
5   - # Method used by mostly all the ClassMethods when doing a search
6   - def parse_query(query=nil, options={})
7   - valid_options = [:models, :lazy, :core, :results_format, :sql_options,
8   - :alternate_query, :boost_functions, :filter_queries, :facets, :sort,
9   - :scores, :operator, :latitude, :longitude, :radius, :relevance, :highlight,
10   - :offset, :per_page, :limit, :page,]
11   - query_options = {}
12   -
13   - return if query.nil?
14   - raise "Query should be a string" unless query.is_a?(String)
15   - raise "Invalid parameters: #{(options.keys - valid_options).join(',')}" unless (options.keys - valid_options).empty?
16   - begin
17   - Deprecation.validate_query(options)
18   -
19   - query_options[:filter_queries] = []
20   - query.strip!
21   -
22   - # using *:* disable index boosts, so use the type filter
23   - if query.blank?
24   - query = solr_type_condition(options)
25   - else
26   - query = sanitize_query(query)
27   - query_options[:filter_queries] << solr_type_condition(options)
28   -
29   - # put types on filtered fields
30   - query = replace_types([*query], ':').first
31   - end
32   -
33   - query_options[:filter_queries] += replace_types([*options[:filter_queries]], ':') if options[:filter_queries]
34   -
35   - options[:alternate_query] ||= ''
36   - options[:alternate_query].strip!
37   - query = "#{options[:alternate_query]} #{query}" unless options[:alternate_query].blank?
38   -
39   - query = add_relevance query, options[:relevance]
40   -
41   - query_options[:query] = query
42   -
43   - field_list = options[:models].nil? ? solr_configuration[:primary_key_field] : "id"
44   - query_options[:field_list] = [field_list, 'score']
45   -
46   - per_page = options[:per_page] || options[:limit] || 30
47   - offset = options[:offset] || (((options[:page] || 1).to_i - 1) * per_page)
48   - query_options[:rows] = per_page
49   - query_options[:start] = offset
50   -
51   - query_options[:operator] = options[:operator]
52   -
53   - query_options[:boost_functions] = replace_types([*options[:boost_functions]], '').join(' ') if options[:boost_functions]
54   -
55   - # first steps on the facet parameter processing
56   - if options[:facets]
57   - query_options[:facets] = {}
58   - query_options[:facets][:limit] = -1 # TODO: make this configurable
59   - query_options[:facets][:sort] = :count if options[:facets][:sort]
60   - query_options[:facets][:mincount] = 0
61   - query_options[:facets][:mincount] = 1 if options[:facets][:zeros] == false
62   - # override the :zeros (it's deprecated anyway) if :mincount exists
63   - query_options[:facets][:mincount] = options[:facets][:mincount] if options[:facets][:mincount]
64   - query_options[:facets][:fields] = options[:facets][:fields].map{ |k| "#{k}_facet" } if options[:facets][:fields]
65   - query_options[:filter_queries] += replace_types([*options[:facets][:browse]]) if options[:facets][:browse]
66   - query_options[:facets][:queries] = replace_types([*options[:facets][:query]]) if options[:facets][:query]
67   -
68   - if options[:facets][:dates]
69   - query_options[:date_facets] = {}
70   - # if options[:facets][:dates][:fields] exists then :start, :end, and :gap must be there
71   - if options[:facets][:dates][:fields]
72   - [:start, :end, :gap].each { |k| raise "#{k} must be present in faceted date query" unless options[:facets][:dates].include?(k) }
73   - query_options[:date_facets][:fields] = []
74   - options[:facets][:dates][:fields].each { |f|
75   - if f.kind_of? Hash
76   - key = f.keys[0]
77   - query_options[:date_facets][:fields] << {"#{key}_d" => f[key]}
78   - validate_date_facet_other_options(f[key][:other]) if f[key][:other]
79   - else
80   - query_options[:date_facets][:fields] << "#{f}_d"
81   - end
82   - }
83   - end
84   -
85   - query_options[:date_facets][:start] = options[:facets][:dates][:start] if options[:facets][:dates][:start]
86   - query_options[:date_facets][:end] = options[:facets][:dates][:end] if options[:facets][:dates][:end]
87   - query_options[:date_facets][:gap] = options[:facets][:dates][:gap] if options[:facets][:dates][:gap]
88   - query_options[:date_facets][:hardend] = options[:facets][:dates][:hardend] if options[:facets][:dates][:hardend]
89   - query_options[:date_facets][:filter] = replace_types([*options[:facets][:dates][:filter]].collect{|k| "#{k.dup.sub!(/ *:(?!\d) */,"_d:")}"}) if options[:facets][:dates][:filter]
90   -
91   - if options[:facets][:dates][:other]
92   - validate_date_facet_other_options(options[:facets][:dates][:other])
93   - query_options[:date_facets][:other] = options[:facets][:dates][:other]
94   - end
95   -
96   - end
97   - end
98   -
99   - if options[:highlight]
100   - query_options[:highlighting] = {}
101   - query_options[:highlighting][:field_list] = replace_types([*options[:highlight][:fields]], '') if options[:highlight][:fields]
102   - query_options[:highlighting][:require_field_match] = options[:highlight][:require_field_match] if options[:highlight][:require_field_match]
103   - query_options[:highlighting][:max_snippets] = options[:highlight][:max_snippets] if options[:highlight][:max_snippets]
104   - query_options[:highlighting][:prefix] = options[:highlight][:prefix] if options[:highlight][:prefix]
105   - query_options[:highlighting][:suffix] = options[:highlight][:suffix] if options[:highlight][:suffix]
106   - end
107   -
108   - query_options[:sort] = replace_types([*options[:sort]], '')[0] if options[:sort]
109   -
110   - if options[:radius]
111   - query_options[:radius] = options[:radius]
112   - query_options[:filter_queries] << '{!geofilt}'
113   - end
114   - query_options[:latitude] = options[:latitude]
115   - query_options[:longitude] = options[:longitude]
116   -
117   - not_dismax = query_options[:operator] == :or
118   - request = not_dismax ? Solr::Request::Standard.new(query_options) : Solr::Request::Dismax.new(query_options)
119   - ActsAsSolr::Post.execute(request, options[:core])
120   - rescue
121   - raise "#{$query} There was a problem executing your search\n#{query_options.inspect}\n: #{$!} in #{$!.backtrace.first}"
122   - end
123   - end
124   -
125   - def solr_type_condition(options = {})
126   - classes = [self] + (self.subclasses || []) + (options[:models] || [])
127   - classes.map do |klass|
128   - next if klass.name.empty?
129   - "#{solr_configuration[:type_field]}:\"#{klass.name}\""
130   - end.compact.join(' OR ')
131   - end
132   -
133   - # Parses the data returned from Solr
134   - def parse_results(solr_data, options = {})
135   - results = {
136   - :docs => [],
137   - :total => 0
138   - }
139   -
140   - configuration = {
141   - :format => :objects
142   - }
143   - results.update(:spellcheck => solr_data.data['spellcheck']) unless solr_data.nil?
144   - results.update(:facets => {'facet_fields' => []}) if options[:facets]
145   - unless solr_data.nil? or solr_data.header['params'].nil?
146   - header = solr_data.header
147   - results.update :rows => header['params']['rows']
148   - results.update :start => header['params']['start']
149   - end
150   - return SearchResults.new(results) if (solr_data.nil? || solr_data.total_hits == 0)
151   -
152   - configuration.update(options) if options.is_a?(Hash)
153   -
154   - ids = solr_data.hits.collect {|doc| doc["#{solr_configuration[:primary_key_field]}"]}.flatten
155   -
156   - result = find_objects(ids, options, configuration)
157   -
158   - add_scores(result, solr_data) if configuration[:format] == :objects && options[:scores]
159   -
160   - highlighted = {}
161   - solr_data.highlighting.map do |x,y|
162   - e={}
163   - y1=y.map{|x1,y1| e[x1.gsub(/_[^_]*/,"")]=y1} unless y.nil?
164   - highlighted[x.gsub(/[^:]*:/,"").to_i]=e
165   - end unless solr_data.highlighting.nil?
166   -
167   - results.update(:facets => solr_data.data['facet_counts']) if options[:facets]
168   - results.update({:docs => result, :total => solr_data.total_hits, :max_score => solr_data.max_score, :query_time => solr_data.data['responseHeader']['QTime']})
169   - results.update({:highlights=>highlighted})
170   - SearchResults.new(results)
171   - end
172   -
173   -
174   - def find_objects(ids, options, configuration)
175   - result = if configuration[:lazy] && configuration[:format] != :ids
176   - ids.collect {|id| ActsAsSolr::LazyDocument.new(id, self)}
177   - elsif configuration[:format] == :objects
178   - find_options = options[:sql_options] || {}
179   - find_options[:conditions] = self.send :merge_conditions, {self.primary_key => ids}, (find_options[:conditions] || [])
180   - result = self.all(find_options) || []
181   - result = reorder(result, ids) unless find_options[:order]
182   - result
183   - else
184   - ids
185   - end
186   -
187   - result
188   - end
189   -
190   - # Reorders the instances keeping the order returned from Solr
191   - def reorder(things, ids)
192   - ordered_things = []
193   - ids.each do |id|
194   - thing = things.find{ |t| t.id.to_s == id.to_s }
195   - ordered_things |= [thing] if thing
196   - end
197   - ordered_things
198   - end
199   -
200   - # Replaces the field types based on the types (if any) specified
201   - # on the acts_as_solr call
202   - def replace_types(strings, suffix=':')
203   - if configuration[:solr_fields]
204   - configuration[:solr_fields].each do |name, options|
205   - solr_name = (options[:as] || name).to_s
206   - solr_type = get_solr_field_type(options[:type])
207   - field = "#{solr_name}_#{solr_type}#{suffix}"
208   - strings.each_with_index {|s,i| strings[i] = s.gsub(/\b#{solr_name}\b#{suffix}/,field) }
209   - end
210   - end
211   - if configuration[:solr_includes]
212   - configuration[:solr_includes].each do |association, options|
213   - solr_name = options[:as] || association.to_s.singularize
214   - solr_type = get_solr_field_type(options[:type])
215   - field = "#{solr_name}_#{solr_type}#{suffix}"
216   - strings.each_with_index {|s,i| strings[i] = s.gsub(/\b#{solr_name}\b#{suffix}/,field) }
217   - end
218   - end
219   - strings
220   - end
221   -
222   - # Adds the score to each one of the instances found
223   - def add_scores(results, solr_data)
224   - with_score = []
225   - solr_data.hits.each do |doc|
226   - with_score.push([doc["score"],
227   - results.find {|record| scorable_record?(record, doc) }])
228   - end
229   - with_score.each do |score, object|
230   - class << object; attr_accessor :solr_score; end
231   - object.solr_score = score
232   - end
233   - end
234   -
235   - def scorable_record?(record, doc)
236   - doc_id = doc["#{solr_configuration[:primary_key_field]}"]
237   - if doc_id.nil?
238   - doc_id = doc["id"]
239   - "#{record.class.name}:#{record_id(record)}" == doc_id.first.to_s
240   - else
241   - record_id(record).to_s == doc_id.to_s
242   - end
243   - end
244   -
245   - def validate_date_facet_other_options(options)
246   - valid_other_options = [:after, :all, :before, :between, :none]
247   - options = [options] unless options.kind_of? Array
248   - bad_options = options.map {|x| x.to_sym} - valid_other_options
249   - raise "Invalid option#{'s' if bad_options.size > 1} for faceted date's other param: #{bad_options.join(', ')}. May only be one of :after, :all, :before, :between, :none" if bad_options.size > 0
250   - end
251   -
252   - def sanitize_query(query)
253   - fields = self.configuration[:solr_fields].keys
254   - fields += DynamicAttribute.all(:select => 'name', :group => 'name').map(&:name) if DynamicAttribute.table_exists?
255   - Solr::Util::query_parser_escape query, fields
256   - end
257   -
258   - private
259   -
260   - def add_relevance(query, relevance)
261   - return query if relevance.nil? or query.include? ':'
262   -
263   - query = [query] + relevance.map do |attribute, value|
264   - "#{attribute}:(#{query})^#{value}"
265   - end
266   - query = query.join(' OR ')
267   -
268   - replace_types([query], '').first
269   - end
270   -
271   - end
272   -end
273   -
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/post.rb
... ... @@ -1,29 +0,0 @@
1   -module ActsAsSolr
2   - class Post
3   - class << self
4   - def config
5   - return @config if @config
6   - @config = {}
7   - YAML::load_file("#{Rails.root}/config/solr.yml")[Rails.env].each{ |k,v| @config[k.to_sym] = v }
8   - @config
9   - end
10   -
11   - def options
12   - @options ||= credentials.merge config
13   - end
14   -
15   - def credentials
16   - @credentials ||= {:username => config[:username], :password => config[:password]}
17   - end
18   -
19   - def url(core)
20   - core.nil? ? config[:url] : "#{config[:url]}/#{core}"
21   - end
22   -
23   - def execute(request, core = nil)
24   - connection = Solr::Connection.new(url(core), options)
25   - connection.send request
26   - end
27   - end
28   - end
29   -end
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/search_results.rb
... ... @@ -1,136 +0,0 @@
1   -module ActsAsSolr #:nodoc:
2   -
3   - # TODO: Possibly looking into hooking it up with Solr::Response::Standard
4   - #
5   - # Class that returns the search results with four methods.
6   - #
7   - # books = Book.find_by_solr 'ruby'
8   - #
9   - # the above will return a SearchResults class with 4 methods:
10   - #
11   - # docs|results|records: will return an array of records found
12   - #
13   - # books.records.empty?
14   - # => false
15   - #
16   - # total|num_found|total_hits: will return the total number of records found
17   - #
18   - # books.total
19   - # => 2
20   - #
21   - # facets: will return the facets when doing a faceted search
22   - #
23   - # max_score|highest_score: returns the highest score found
24   - #
25   - # books.max_score
26   - # => 1.3213213
27   - #
28   - #
29   - class SearchResults
30   -
31   - include Enumerable
32   -
33   - def initialize(solr_data={})
34   - @solr_data = solr_data
35   - end
36   -
37   - def each(&block)
38   - self.results.each &block
39   - end
40   -
41   - # Returns an array with the instances. This method
42   - # is also aliased as docs and records
43   - def results
44   - @solr_data[:docs]
45   - end
46   -
47   - # Returns the total records found. This method is
48   - # also aliased as num_found and total_hits
49   - def total
50   - @solr_data[:total]
51   - end
52   -
53   - # Returns the facets when doing a faceted search
54   - def facets
55   - @solr_data[:facets]
56   - end
57   -
58   - # Returns the highest score found. This method is
59   - # also aliased as highest_score
60   - def max_score
61   - @solr_data[:max_score]
62   - end
63   -
64   - def query_time
65   - @solr_data[:query_time]
66   - end
67   -
68   - # Returns the highlighted fields which one has asked for..
69   - def highlights
70   - @solr_data[:highlights]
71   - end
72   -
73   - # Returns a suggested query
74   - def suggest
75   - Hash[@solr_data[:spellcheck]['suggestions']]['collation']
76   - end
77   -
78   - # Returns the number of documents per page
79   - def per_page
80   - @solr_data[:rows].to_i
81   - end
82   -
83   - # Returns the number of pages found
84   - def total_pages
85   - per_page.zero? ? 0 : (total / per_page.to_f).ceil
86   - end
87   -
88   - # Returns the current page
89   - def current_page
90   - per_page.zero? ? 0 : (@solr_data[:start].to_i / per_page) + 1
91   - end
92   -
93   - def blank?
94   - total_entries == 0
95   - end
96   -
97   - def size
98   - total_entries
99   - end
100   -
101   - def offset
102   - (current_page - 1) * per_page
103   - end
104   -
105   - def previous_page
106   - if current_page > 1
107   - current_page - 1
108   - else
109   - false
110   - end
111   - end
112   -
113   - def next_page
114   - if current_page < total_pages
115   - current_page + 1
116   - else
117   - false
118   - end
119   - end
120   -
121   - def method_missing(symbol, *args, &block)
122   - self.results.send(symbol, *args, &block)
123   - rescue NoMethodError
124   - raise NoMethodError, "There is no method called #{symbol} at #{self.class.name} - #{self.inspect}"
125   - end
126   -
127   - alias docs results
128   - alias records results
129   - alias num_found total
130   - alias total_hits total
131   - alias total_entries total
132   - alias highest_score max_score
133   - end
134   -
135   -end
136   -
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/solr_fixtures.rb
... ... @@ -1,13 +0,0 @@
1   -module ActsAsSolr
2   -
3   - class SolrFixtures
4   - def self.load(table_names)
5   - [table_names].flatten.map { |n| n.to_s }.each do |table_name|
6   - klass = instance_eval(File.split(table_name.to_s).last.to_s.gsub('_',' ').split(" ").collect{|w| w.capitalize}.to_s.singularize)
7   - klass.rebuild_solr_index if klass.respond_to?(:rebuild_solr_index)
8   - end
9   - ActsAsSolr::Post.execute(Solr::Request::Commit.new)
10   - end
11   - end
12   -
13   -end
14 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/tasks.rb
... ... @@ -1,10 +0,0 @@
1   -dir = File.dirname(__FILE__)
2   -require 'rubygems'
3   -require 'rake'
4   -require 'net/http'
5   -require 'active_record'
6   -require File.expand_path("#{dir}/solr_fixtures")
7   -
8   -load File.expand_path("#{dir}/tasks/database.rake")
9   -load File.expand_path("#{dir}/tasks/solr.rake")
10   -load File.expand_path("#{dir}/tasks/test.rake")
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr_reloaded.rb
... ... @@ -1 +0,0 @@
1   -require 'acts_as_solr'
2 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/lib/solr.rb
... ... @@ -1,27 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -module Solr; end
14   -require File.expand_path("#{File.dirname(__FILE__)}/solr/exception")
15   -require File.expand_path("#{File.dirname(__FILE__)}/solr/request")
16   -require File.expand_path("#{File.dirname(__FILE__)}/solr/connection")
17   -require File.expand_path("#{File.dirname(__FILE__)}/solr/response")
18   -require File.expand_path("#{File.dirname(__FILE__)}/solr/util")
19   -require File.expand_path("#{File.dirname(__FILE__)}/solr/xml")
20   -require File.expand_path("#{File.dirname(__FILE__)}/solr/importer")
21   -require File.expand_path("#{File.dirname(__FILE__)}/solr/indexer")
22   -require File.expand_path("#{File.dirname(__FILE__)}/solr/xml")
23   -require File.expand_path("#{File.dirname(__FILE__)}/solr/field")
24   -require File.expand_path("#{File.dirname(__FILE__)}/solr/request/base")
25   -require File.expand_path("#{File.dirname(__FILE__)}/solr/document")
26   -require File.expand_path("#{File.dirname(__FILE__)}/solr/request/json_update")
27   -require File.expand_path("#{File.dirname(__FILE__)}/solr/request/update")
vendor/plugins/acts_as_solr_reloaded/lib/solr/connection.rb
... ... @@ -1,180 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -# TODO: add a convenience method to POST a Solr .xml file, like Solr's example post.sh
14   -
15   -class Solr::Connection
16   - attr_reader :url, :autocommit, :connection
17   -
18   - # create a connection to a solr instance using the url for the solr
19   - # application context:
20   - #
21   - # conn = Solr::Connection.new("http://example.com:8080/solr")
22   - #
23   - # if you would prefer to have all adds/updates autocommitted,
24   - # use :autocommit => :on
25   - #
26   - # conn = Solr::Connection.new('http://example.com:8080/solr',
27   - # :autocommit => :on)
28   -
29   - def initialize(url="http://localhost:8983/solr", opts={})
30   - @url = URI.parse(url)
31   - unless @url.kind_of? URI::HTTP
32   - raise "invalid http url: #{url}"
33   - end
34   -
35   - # TODO: Autocommit seems nice at one level, but it currently is confusing because
36   - # only calls to Connection#add/#update/#delete, though a Connection#send(AddDocument.new(...))
37   - # does not autocommit. Maybe #send should check for the request types that require a commit and
38   - # commit in #send instead of the individual methods?
39   - @autocommit = opts[:autocommit] == :on
40   -
41   - # Not actually opening the connection yet, just setting up the persistent connection.
42   - @connection = Net::HTTP.new(@url.host, @url.port)
43   -
44   - @connection.read_timeout = opts[:timeout].to_i || 0
45   - @username = opts[:username] if opts[:username]
46   - @password = opts[:password] if opts[:password]
47   - end
48   -
49   - # add a document to the index. you can pass in either a hash
50   - #
51   - # conn.add(:id => 123, :title => 'Tlon, Uqbar, Orbis Tertius')
52   - #
53   - # or a Solr::Document
54   - #
55   - # conn.add(Solr::Document.new(:id => 123, :title = 'On Writing')
56   - #
57   - # true/false will be returned to designate success/failure
58   -
59   - def add(doc)
60   - request = Solr::Request::AddDocument.new(doc)
61   - response = send(request)
62   - commit if @autocommit
63   - return response.ok?
64   - end
65   -
66   - # update a document in the index (really just an alias to add)
67   -
68   - def update(doc)
69   - return add(doc)
70   - end
71   -
72   - # performs a standard query and returns a Solr::Response::Standard
73   - #
74   - # response = conn.query('borges')
75   - #
76   - # alternative you can pass in a block and iterate over hits
77   - #
78   - # conn.query('borges') do |hit|
79   - # puts hit
80   - # end
81   - #
82   - # options include:
83   - #
84   - # :sort, :default_field, :rows, :filter_queries, :debug_query,
85   - # :explain_other, :facets, :highlighting, :mlt,
86   - # :operator => :or / :and
87   - # :start => defaults to 0
88   - # :field_list => array, defaults to ["*", "score"]
89   -
90   - def query(query, options={}, &action)
91   - # TODO: Shouldn't this return an exception if the Solr status is not ok? (rather than true/false).
92   - create_and_send_query(Solr::Request::Standard, options.update(:query => query), &action)
93   - end
94   -
95   - # performs a dismax search and returns a Solr::Response::Standard
96   - #
97   - # response = conn.search('borges')
98   - #
99   - # options are same as query, but also include:
100   - #
101   - # :tie_breaker, :query_fields, :minimum_match, :phrase_fields,
102   - # :phrase_slop, :boost_query, :boost_functions
103   -
104   - def search(query, options={}, &action)
105   - create_and_send_query(Solr::Request::Dismax, options.update(:query => query), &action)
106   - end
107   -
108   - # sends a commit message to the server
109   - def commit(options={})
110   - response = send(Solr::Request::Commit.new(options))
111   - return response.ok?
112   - end
113   -
114   - # sends an optimize message to the server
115   - def optimize
116   - response = send(Solr::Request::Optimize.new)
117   - return response.ok?
118   - end
119   -
120   - # pings the connection and returns true/false if it is alive or not
121   - def ping
122   - begin
123   - response = send(Solr::Request::Ping.new)
124   - return response.ok?
125   - rescue
126   - return false
127   - end
128   - end
129   -
130   - # delete a document from the index using the document id
131   - def delete(document_id)
132   - response = send(Solr::Request::Delete.new(:id => document_id))
133   - commit if @autocommit
134   - response.ok?
135   - end
136   -
137   - # delete using a query
138   - def delete_by_query(query)
139   - response = send(Solr::Request::Delete.new(:query => query))
140   - commit if @autocommit
141   - response.ok?
142   - end
143   -
144   - def info
145   - send(Solr::Request::IndexInfo.new)
146   - end
147   -
148   - # send a given Solr::Request and return a RubyResponse or XmlResponse
149   - # depending on the type of request
150   - def send(request)
151   - data = post(request)
152   - Solr::Response::Base.make_response(request, data)
153   - end
154   -
155   - # send the http post request to solr; for convenience there are shortcuts
156   - # to some requests: add(), query(), commit(), delete() or send()
157   - def post(request)
158   - req = Net::HTTP::Post.new(@url.path + "/" + request.handler,
159   - { "Content-Type" => request.content_type })
160   - req.basic_auth(@username, @password) if @username && @password
161   - response = @connection.request(req, request.to_s)
162   -
163   - case response
164   - when Net::HTTPSuccess then response.body
165   - else
166   - response.error!
167   - end
168   -
169   - end
170   -
171   -private
172   -
173   - def create_and_send_query(klass, options = {}, &action)
174   - request = klass.new(options)
175   - response = send(request)
176   - return response unless action
177   - response.each {|hit| action.call(hit)}
178   - end
179   -
180   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/document.rb
... ... @@ -1,85 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Document
14   - include Enumerable
15   - attr_accessor :boost
16   - attr_reader :fields
17   -
18   - # Create a new Solr::Document, optionally passing in a hash of
19   - # key/value pairs for the fields
20   - #
21   - # doc = Solr::Document.new(:name => :creator, :value => 'Jorge Luis Borges')
22   - def initialize(hash={})
23   - @fields = []
24   - self << hash
25   - end
26   -
27   - # Append a Solr::Field
28   - #
29   - # doc << Solr::Field.new(:name => :creator, :value => 'Jorge Luis Borges')
30   - #
31   - # If you are truly lazy you can simply pass in a hash:
32   - #
33   - # doc << {:name => :creator, :value => 'Jorge Luis Borges'}
34   - def <<(fields)
35   - case fields
36   - when Hash
37   - fields.each_pair do |name,value|
38   - if value.respond_to?(:each) && !value.is_a?(String)
39   - value.each {|v| @fields << Solr::Field.new(:name => name, :value => v)}
40   - else
41   - @fields << Solr::Field.new(:name => name, :value => value)
42   - end
43   - end
44   - when Solr::Field
45   - @fields << fields
46   - else
47   - raise "must pass in Solr::Field or Hash"
48   - end
49   - end
50   -
51   - # shorthand to allow hash lookups
52   - # doc['name']
53   - def [](name)
54   - field = @fields.find {|f| f.name == name.to_s}
55   - return field.value if field
56   - return nil
57   - end
58   -
59   - # shorthand to assign as a hash
60   - def []=(name,value)
61   - @fields << Solr::Field.new(:name => name, :value => value)
62   - end
63   -
64   - def to_jsonhash
65   - hash = {'doc' => {}}
66   - hash['boost'] = @boost if @boost
67   - @fields.each{ |f| hash['doc'][f.name] = f.value_to_jsonhash }
68   - hash
69   - end
70   -
71   - def to_json
72   - to_jsonhash.to_json
73   - end
74   -
75   - def to_xml
76   - e = Solr::XML::Element.new 'doc'
77   - e.attributes['boost'] = @boost.to_s if @boost
78   - @fields.each {|f| e.add_element(f.to_xml)}
79   - return e
80   - end
81   -
82   - def each(*args, &blk)
83   - fields.each(&blk)
84   - end
85   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/exception.rb
... ... @@ -1,13 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Exception < Exception; end
vendor/plugins/acts_as_solr_reloaded/lib/solr/field.rb
... ... @@ -1,44 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Field
14   - VALID_PARAMS = [:boost]
15   - attr_accessor :name
16   - attr_accessor :value
17   - attr_accessor :boost
18   -
19   - # Accepts an optional <tt>:boost</tt> parameter, used to boost the relevance of a particular field.
20   - def initialize(params)
21   - boost = params[:boost]
22   - @name = params[:name].to_s
23   - @value = params[:value]
24   - # Convert any Time values into UTC/XML schema format (which Solr requires).
25   - @value = @value.respond_to?(:utc) ? @value.utc.xmlschema : @value
26   - end
27   -
28   - def value_to_jsonhash
29   - @boost.nil? ? @value : {'boost' => @boost, 'value' => @value}
30   - end
31   -
32   - def boost=(value)
33   - @boost = value == 1.0 ? nil : value
34   - end
35   -
36   - def to_xml
37   - e = Solr::XML::Element.new 'field'
38   - e.attributes['name'] = @name
39   - e.attributes['boost'] = @boost.to_s if @boost
40   - e.text = @value.to_str
41   - return e
42   - end
43   -
44   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/importer.rb
... ... @@ -1,19 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -module Solr; module Importer; end; end
14   -require File.expand_path("#{File.dirname(__FILE__)}/importer/mapper")
15   -require File.expand_path("#{File.dirname(__FILE__)}/importer/array_mapper")
16   -require File.expand_path("#{File.dirname(__FILE__)}/importer/delimited_file_source")
17   -require File.expand_path("#{File.dirname(__FILE__)}/importer/hpricot_mapper")
18   -require File.expand_path("#{File.dirname(__FILE__)}/importer/xpath_mapper")
19   -require File.expand_path("#{File.dirname(__FILE__)}/importer/solr_source")
20 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/lib/solr/importer/array_mapper.rb
... ... @@ -1,26 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -
14   -
15   -class Solr::Importer::ArrayMapper < Solr::Importer::Mapper
16   - # TODO document that initializer takes an array of Mappers [mapper1, mapper2, ... mapperN]
17   -
18   - # TODO: make merge conflict handling configurable. as is, the last map fields win.
19   - def map(orig_data_array)
20   - mapped_data = {}
21   - orig_data_array.each_with_index do |data,i|
22   - mapped_data.merge!(@mapping[i].map(data))
23   - end
24   - mapped_data
25   - end
26   -end
27 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/lib/solr/importer/delimited_file_source.rb
... ... @@ -1,38 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -# For files with the first line containing field names
14   -# Currently not designed for enormous files, as all lines are
15   -# read into an array
16   -class Solr::Importer::DelimitedFileSource
17   - include Enumerable
18   -
19   - def initialize(filename, splitter=/\t/)
20   - @filename = filename
21   - @splitter = splitter
22   - end
23   -
24   - def each
25   - lines = IO.readlines(@filename)
26   - headers = lines[0].split(@splitter).collect{|h| h.chomp}
27   -
28   - lines[1..-1].each do |line|
29   - data = headers.zip(line.split(@splitter).collect{|s| s.chomp})
30   - def data.[](key)
31   - self.assoc(key.to_s)[1]
32   - end
33   -
34   - yield(data)
35   - end
36   - end
37   -
38   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/importer/hpricot_mapper.rb
... ... @@ -1,27 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -begin
14   - require 'hpricot'
15   -
16   - class Solr::Importer::HpricotMapper < Solr::Importer::Mapper
17   - def field_data(doc, path)
18   - doc.search(path.to_s).collect { |e| e.inner_html }
19   - end
20   - end
21   -rescue LoadError => e # If we can't load hpricot
22   - class Solr::Importer::HpricotMapper
23   - def initialize(mapping, options={})
24   - raise "Hpricot not installed."
25   - end
26   - end
27   -end
28 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/lib/solr/importer/mapper.rb
... ... @@ -1,51 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Importer::Mapper
14   - def initialize(mapping, options={})
15   - @mapping = mapping
16   - @options = options
17   - end
18   -
19   - def field_data(orig_data, field_name)
20   - orig_data[field_name]
21   - end
22   -
23   - def mapped_field_value(orig_data, field_mapping)
24   - case field_mapping
25   - when String
26   - field_mapping
27   - when Proc
28   - field_mapping.call(orig_data) # TODO pass in more context, like self or a function for field_data, etc
29   - when Symbol
30   - field_data(orig_data, @options[:stringify_symbols] ? field_mapping.to_s : field_mapping)
31   - when Enumerable
32   - field_mapping.collect {|orig_field_name| mapped_field_value(orig_data, orig_field_name)}.flatten
33   - else
34   - raise "Unknown mapping for #{field_mapping}"
35   - end
36   - end
37   -
38   - def map(orig_data)
39   - mapped_data = {}
40   - @mapping.each do |solr_name, field_mapping|
41   - value = mapped_field_value(orig_data, field_mapping)
42   - mapped_data[solr_name] = value if value
43   - end
44   -
45   - mapped_data
46   - end
47   -
48   -
49   -
50   -
51   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/importer/solr_source.rb
... ... @@ -1,41 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Importer::SolrSource
14   - def initialize(solr_url, query, filter_queries=nil, options={})
15   - @connection = Solr::Connection.new(solr_url)
16   - @query = query
17   - @filter_queries = filter_queries
18   -
19   - @page_size = options[:page_size] || 1000
20   - @field_list = options[:field_list] || ["*"]
21   - end
22   -
23   - def each
24   - done = false
25   - start = 0
26   - until done do
27   - # request N documents from a starting point
28   - request = Solr::Request::Standard.new(:query => @query,
29   - :rows => @page_size,
30   - :start => start,
31   - :field_list => @field_list,
32   - :filter_queries => @filter_queries)
33   - response = @connection.send(request)
34   - response.each do |doc|
35   - yield doc # TODO: perhaps convert to HashWithIndifferentAccess.new(doc), so stringify_keys isn't necessary
36   - end
37   - done = start + @page_size >= response.total_hits
38   - start = start + @page_size
39   - end
40   - end
41   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/importer/xpath_mapper.rb
... ... @@ -1,35 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -begin
14   - require 'xml/libxml'
15   -
16   - # For files with the first line containing field names
17   - class Solr::Importer::XPathMapper < Solr::Importer::Mapper
18   - def field_data(doc, xpath)
19   - doc.find(xpath.to_s).collect do |node|
20   - case node
21   - when XML::Attr
22   - node.value
23   - when XML::Node
24   - node.content
25   - end
26   - end
27   - end
28   - end
29   -rescue LoadError => e # If we can't load libxml
30   - class Solr::Importer::XPathMapper
31   - def initialize(mapping, options={})
32   - raise "libxml not installed"
33   - end
34   - end
35   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/indexer.rb
... ... @@ -1,52 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Indexer
14   - attr_reader :solr
15   -
16   - # TODO: document options!
17   - def initialize(data_source, mapper_or_mapping, options={})
18   - solr_url = options[:solr_url] || ENV["SOLR_URL"] || "http://localhost:8983/solr"
19   - @solr = Solr::Connection.new(solr_url, options) #TODO - these options contain the solr_url and debug keys also, so tidy up what gets passed
20   -
21   - @data_source = data_source
22   - @mapper = mapper_or_mapping.is_a?(Hash) ? Solr::Importer::Mapper.new(mapper_or_mapping) : mapper_or_mapping
23   -
24   - @buffer_docs = options[:buffer_docs]
25   - @debug = options[:debug]
26   - end
27   -
28   - def index
29   - buffer = []
30   - @data_source.each do |record|
31   - document = @mapper.map(record)
32   -
33   - # TODO: check arrity of block, if 3, pass counter as 3rd argument
34   - yield(record, document) if block_given? # TODO check return of block, if not true then don't index, or perhaps if document.empty?
35   -
36   - buffer << document
37   -
38   - if !@buffer_docs || buffer.size == @buffer_docs
39   - add_docs(buffer)
40   - buffer.clear
41   - end
42   - end
43   - add_docs(buffer) if !buffer.empty?
44   -
45   - @solr.commit unless @debug
46   - end
47   -
48   - def add_docs(documents)
49   - @solr.add(documents) unless @debug
50   - puts documents.inspect if @debug
51   - end
52   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/request.rb
... ... @@ -1,26 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -module Solr; module Request; end; end
14   -require File.expand_path("#{File.dirname(__FILE__)}/request/base")
15   -require File.expand_path("#{File.dirname(__FILE__)}/request/update")
16   -require File.expand_path("#{File.dirname(__FILE__)}/request/add_document")
17   -require File.expand_path("#{File.dirname(__FILE__)}/request/modify_document")
18   -require File.expand_path("#{File.dirname(__FILE__)}/request/commit")
19   -require File.expand_path("#{File.dirname(__FILE__)}/request/delete")
20   -require File.expand_path("#{File.dirname(__FILE__)}/request/ping")
21   -require File.expand_path("#{File.dirname(__FILE__)}/request/select")
22   -require File.expand_path("#{File.dirname(__FILE__)}/request/standard")
23   -require File.expand_path("#{File.dirname(__FILE__)}/request/spellcheck")
24   -require File.expand_path("#{File.dirname(__FILE__)}/request/dismax")
25   -require File.expand_path("#{File.dirname(__FILE__)}/request/index_info")
26   -require File.expand_path("#{File.dirname(__FILE__)}/request/optimize")
vendor/plugins/acts_as_solr_reloaded/lib/solr/request/add_document.rb
... ... @@ -1,68 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -require File.expand_path(File.dirname(__FILE__) + '/json_update')
14   -
15   -class Solr::Request::AddDocument < Solr::Request::JsonUpdate
16   -
17   - # create the request, optionally passing in a Solr::Document
18   - #
19   - # request = Solr::Request::AddDocument.new(doc)
20   - #
21   - # as a short cut you can pass in a Hash instead:
22   - #
23   - # request = Solr::Request::AddDocument.new(:creator => 'Jorge Luis Borges')
24   - #
25   - # or an array, to add multiple documents at the same time:
26   - #
27   - # request = Solr::Request::AddDocument.new([doc1, doc2, doc3]))
28   -
29   - def initialize(doc={})
30   - @docs = []
31   - if doc.is_a?(Array)
32   - doc.each { |d| add_doc(d) }
33   - else
34   - add_doc(doc)
35   - end
36   - end
37   -
38   - def to_json
39   - '{' +
40   - @docs.map{ |doc| "\"add\": #{doc.to_jsonhash.to_json}" }.join(',') +
41   - '}'
42   - end
43   -
44   - def to_xml
45   - e = Solr::XML::Element.new 'add'
46   - for doc in @docs
47   - e.add_element doc.to_xml
48   - end
49   - return e.to_s
50   - end
51   -
52   - def to_s
53   - to_json
54   - end
55   -
56   - private
57   - def add_doc(doc)
58   - case doc
59   - when Hash
60   - @docs << Solr::Document.new(doc)
61   - when Solr::Document
62   - @docs << doc
63   - else
64   - raise "must pass in Solr::Document or Hash"
65   - end
66   - end
67   -
68   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/request/base.rb
... ... @@ -1,36 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Request::Base
14   -
15   -
16   - #TODO : Add base support for the debugQuery flag, and such that the response provides debug output easily
17   -
18   - # returns either :xml or :ruby depending on what the
19   - # response type is for a given request
20   -
21   - def response_format
22   - raise "unknown request type: #{self.class}"
23   - end
24   -
25   - def content_type
26   - 'text/xml; charset=utf-8'
27   - end
28   -
29   - # returns the solr handler or url fragment that can
30   - # respond to this type of request
31   -
32   - def handler
33   - raise "unknown request type: #{self.class}"
34   - end
35   -
36   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/request/commit.rb
... ... @@ -1,29 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Request::Commit < Solr::Request::Update
14   -
15   - def initialize(options={})
16   - @wait_searcher = options[:wait_searcher] || true
17   - @wait_flush = options[:wait_flush] || true
18   - end
19   -
20   -
21   - def to_s
22   - e = Solr::XML::Element.new('commit')
23   - e.attributes['waitSearcher'] = @wait_searcher ? 'true' : 'false'
24   - e.attributes['waitFlush'] = @wait_flush ? 'true' : 'false'
25   -
26   - e.to_s
27   - end
28   -
29   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/request/delete.rb
... ... @@ -1,48 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Request::Delete < Solr::Request::Update
14   -
15   - # A delete request can be for a specific document id
16   - #
17   - # request = Solr::Request::Delete.new(:id => 1234)
18   - #
19   - # or by query:
20   - #
21   - # request = Solr::Request::Delete.new(:query =>
22   - #
23   - def initialize(options)
24   - unless options.kind_of?(Hash) and (options[:id] or options[:query])
25   - raise Solr::Exception.new("must pass in :id or :query")
26   - end
27   - if options[:id] and options[:query]
28   - raise Solr::Exception.new("can't pass in both :id and :query")
29   - end
30   - @document_id = options[:id]
31   - @query = options[:query]
32   - end
33   -
34   - def to_s
35   - delete_element = Solr::XML::Element.new('delete')
36   - if @document_id
37   - id_element = Solr::XML::Element.new('id')
38   - id_element.text = @document_id
39   - delete_element.add_element(id_element)
40   - elsif @query
41   - query = Solr::XML::Element.new('query')
42   - query.text = @query
43   - delete_element.add_element(query)
44   - end
45   - delete_element.to_s
46   - end
47   -end
48   -
vendor/plugins/acts_as_solr_reloaded/lib/solr/request/dismax.rb
... ... @@ -1,37 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Request::Dismax < Solr::Request::Standard
14   -
15   - VALID_PARAMS.replace(VALID_PARAMS + [:tie_breaker, :query_fields, :minimum_match, :phrase_fields, :phrase_slop,
16   - :alternate_query, :boost_query, :boost_functions])
17   -
18   - def initialize(params)
19   - super
20   - end
21   -
22   - def to_hash
23   - hash = super
24   - hash[:defType] = 'edismax'
25   - hash[:tie] = @params[:tie_breaker]
26   - hash[:mm] = @params[:minimum_match]
27   - hash[:qf] = @params[:query_fields]
28   - hash[:pf] = @params[:phrase_fields]
29   - hash[:ps] = @params[:phrase_slop]
30   - hash[:bq] = @params[:boost_query]
31   - hash[:boost] = @params[:boost_functions]
32   - hash["q.alt"] = @params[:alternate_query]
33   -
34   - return hash
35   - end
36   -
37   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/request/index_info.rb
... ... @@ -1,22 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Request::IndexInfo < Solr::Request::Select
14   -
15   - def handler
16   - 'admin/luke'
17   - end
18   -
19   - def to_hash
20   - {:numTerms => 0}.merge(super.to_hash)
21   - end
22   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/request/json_update.rb
... ... @@ -1,23 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -# a parent class for all requests that go through the solr update handler
14   -# TODO: Use new xml update handler for better error responses
15   -class Solr::Request::JsonUpdate < Solr::Request::Base
16   - def response_format
17   - :xml
18   - end
19   -
20   - def handler
21   - 'update/json'
22   - end
23   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/request/modify_document.rb
... ... @@ -1,46 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Request::ModifyDocument < Solr::Request::Update
14   -
15   - # Example: ModifyDocument.new(:id => 10, :overwrite => {:field_name => "new value"})
16   - def initialize(update_data)
17   - modes = []
18   - @doc = {}
19   - [:overwrite, :append, :distinct, :increment, :delete].each do |mode|
20   - field_data = update_data[mode]
21   - if field_data
22   - field_data.each do |field_name, field_value|
23   - modes << "#{field_name}:#{mode.to_s.upcase}"
24   - @doc[field_name] = field_value if field_value # if value is nil, omit so it can be removed
25   - end
26   - update_data.delete mode
27   - end
28   - end
29   - @mode = modes.join(",")
30   -
31   - # only one key should be left over, the id
32   - @doc[update_data.keys[0].to_s] = update_data.values[0]
33   - end
34   -
35   - # returns the request as a string suitable for posting
36   - def to_s
37   - e = Solr::XML::Element.new 'add'
38   - e.add_element(Solr::Document.new(@doc).to_xml)
39   - return e.to_s
40   - end
41   -
42   - def handler
43   - "update?mode=#{@mode}"
44   - end
45   -
46   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/request/optimize.rb
... ... @@ -1,19 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Request::Optimize < Solr::Request::Update
14   -
15   - def to_s
16   - Solr::XML::Element.new('optimize').to_s
17   - end
18   -
19   -end
20 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/lib/solr/request/ping.rb
... ... @@ -1,36 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -# TODO: Consider something lazy like this?
14   -# Solr::Request::Ping = Solr::Request.simple_request :format=>:xml, :handler=>'admin/ping'
15   -# class Solr::Request
16   -# def self.simple_request(options)
17   -# Class.new do
18   -# def response_format
19   -# options[:format]
20   -# end
21   -# def handler
22   -# options[:handler]
23   -# end
24   -# end
25   -# end
26   -# end
27   -
28   -class Solr::Request::Ping < Solr::Request::Base
29   - def response_format
30   - :xml
31   - end
32   -
33   - def handler
34   - 'admin/ping'
35   - end
36   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/request/select.rb
... ... @@ -1,54 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -# "Abstract" base class, only useful with subclasses that add parameters
14   -class Solr::Request::Select < Solr::Request::Base
15   -
16   - attr_reader :query_type
17   -
18   - def initialize(qt=nil, params={})
19   - @query_type = qt
20   - @select_params = params
21   - end
22   -
23   - def response_format
24   - :ruby
25   - end
26   -
27   - def handler
28   - 'select'
29   - end
30   -
31   - def content_type
32   - 'application/x-www-form-urlencoded; charset=utf-8'
33   - end
34   -
35   - def to_hash
36   - return {:qt => query_type, :wt => 'ruby', 'json.nl' => 'arrarr'}.merge(@select_params)
37   - end
38   -
39   - def to_s
40   - raw_params = self.to_hash
41   -
42   - http_params = []
43   - raw_params.each do |key,value|
44   - if value.respond_to? :each
45   - value.each { |v| http_params << "#{key}=#{ERB::Util::url_encode(v)}" unless v.nil?}
46   - else
47   - http_params << "#{key}=#{ERB::Util::url_encode(value)}" unless value.nil?
48   - end
49   - end
50   -
51   - http_params.join("&")
52   - end
53   -
54   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/request/spellcheck.rb
... ... @@ -1,30 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Request::Spellcheck < Solr::Request::Select
14   -
15   - def initialize(params)
16   - super('spellchecker')
17   - @params = params
18   - end
19   -
20   - def to_hash
21   - hash = super
22   - hash[:q] = @params[:query]
23   - hash[:suggestionCount] = @params[:suggestion_count]
24   - hash[:accuracy] = @params[:accuracy]
25   - hash[:onlyMorePopular] = @params[:only_more_popular]
26   - hash[:cmd] = @params[:command]
27   - return hash
28   - end
29   -
30   -end
31 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/lib/solr/request/standard.rb
... ... @@ -1,408 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Request::Standard < Solr::Request::Select
14   -
15   - VALID_PARAMS = [:query, :sort, :default_field, :operator, :start, :rows, :shards, :date_facets,
16   - :filter_queries, :field_list, :debug_query, :explain_other, :facets, :highlighting, :mlt, :radius,
17   - :radius, :latitude, :longitude, :spellcheck]
18   -
19   - def initialize(params)
20   - super 'search'
21   -
22   - raise "Invalid parameters: #{(params.keys - VALID_PARAMS).join(',')}" unless
23   - (params.keys - VALID_PARAMS).empty?
24   -
25   - raise ":query parameter required" unless params[:query]
26   -
27   - @params = params.dup
28   -
29   - # Validate operator
30   - if params[:operator]
31   - raise "Only :and/:or operators allowed" unless
32   - [:and, :or].include?(params[:operator])
33   -
34   - @params[:operator] = params[:operator].to_s.upcase
35   - end
36   -
37   - # Validate start, rows can be transformed to ints
38   - @params[:start] = params[:start].to_i if params[:start]
39   - @params[:rows] = params[:rows].to_i if params[:rows]
40   -
41   - @params[:field_list] ||= ["*","score"]
42   -
43   - @params[:shards] ||= []
44   - end
45   -
46   - def to_hash
47   - hash = {}
48   -
49   - # standard request param processing
50   - hash[:sort] = @params[:sort]
51   - hash[:q] = @params[:query]
52   - hash["q.op"] = @params[:operator]
53   - hash[:df] = @params[:default_field]
54   - hash[:echoParams] = 'explicit'
55   -
56   - # common parameter processing
57   - hash[:start] = @params[:start]
58   - hash[:rows] = @params[:rows]
59   - hash[:fq] = @params[:filter_queries]
60   - hash[:fl] = @params[:field_list].join(',')
61   - hash[:debugQuery] = @params[:debug_query]
62   - hash[:explainOther] = @params[:explain_other]
63   - hash[:shards] = @params[:shards].join(',') unless @params[:shards].empty?
64   -
65   - hash[:sfield] = 'latlng'
66   - hash[:d] = @params[:radius]
67   - hash[:pt] = "#{@params[:latitude]}, #{@params[:longitude]}" if @params[:latitude] and @params[:longitude]
68   -
69   - # facet parameter processing
70   - if @params[:facets]
71   - # TODO need validation of all that is under the :facets Hash too
72   - hash[:facet] = true
73   - hash["facet.field"] = []
74   - hash["facet.query"] = @params[:facets][:queries]
75   - hash["facet.sort"] = @params[:facets][:sort]
76   - hash["facet.limit"] = @params[:facets][:limit]
77   - hash["facet.missing"] = @params[:facets][:missing]
78   - hash["facet.mincount"] = @params[:facets][:mincount]
79   - hash["facet.prefix"] = @params[:facets][:prefix]
80   - hash["facet.offset"] = @params[:facets][:offset]
81   - if @params[:facets][:fields] # facet fields are optional (could be facet.query only)
82   - @params[:facets][:fields].each do |f|
83   - if f.kind_of? Hash
84   - key = f.keys[0]
85   - value = f[key]
86   - hash["facet.field"] << key
87   - hash["f.#{key}.facet.sort"] = value[:sort]
88   - hash["f.#{key}.facet.limit"] = value[:limit]
89   - hash["f.#{key}.facet.missing"] = value[:missing]
90   - hash["f.#{key}.facet.mincount"] = value[:mincount]
91   - hash["f.#{key}.facet.prefix"] = value[:prefix]
92   - hash["f.#{key}.facet.offset"] = value[:offset]
93   - else
94   - hash["facet.field"] << f
95   - end
96   - end
97   - end
98   -
99   - if @params[:date_facets]
100   - hash["facet.date"] = []
101   - if @params[:date_facets][:fields]
102   - @params[:date_facets][:fields].each do |f|
103   - if f.kind_of? Hash
104   - key = f.keys[0]
105   - hash["facet.date"] << key
106   - f[key].each { |k, v|
107   - hash["f.#{key}.facet.date.#{k}"] = v
108   - }
109   - else
110   - hash["facet.date"] << f
111   - end
112   - end
113   - end
114   - hash["facet.date.start"] = @params[:date_facets][:start]
115   - hash["facet.date.end"] = @params[:date_facets][:end]
116   - hash["facet.date.gap"] = @params[:date_facets][:gap]
117   - hash["facet.date.other"] = @params[:date_facets][:other]
118   - hash["facet.date.hardend"] = @params[:date_facets][:hardend]
119   - if @params[:date_facets][:filter]
120   - if hash[:fq]
121   - hash[:fq] << @params[:date_facets][:filter]
122   - else
123   - hash[:fq] = @params[:date_facets][:filter]
124   - end
125   - end
126   - end
127   - end
128   -
129   - # highlighting parameter processing - http://wiki.apache.org/solr/HighlightingParameters
130   - if @params[:highlighting]
131   - hash[:hl] = true
132   - hash["hl.fl"] = @params[:highlighting][:field_list].join(',') if @params[:highlighting][:field_list]
133   -
134   - snippets = @params[:highlighting][:max_snippets]
135   - if snippets
136   - if snippets.kind_of? Hash
137   - if snippets[:default]
138   - hash["hl.snippets"] = snippets[:default]
139   - end
140   - if snippets[:fields]
141   - snippets[:fields].each do |k,v|
142   - hash["f.#{k}.hl.snippets"] = v
143   - end
144   - end
145   - else
146   - hash["hl.snippets"] = snippets
147   - end
148   - end
149   -
150   - fragsize = @params[:highlighting][:fragment_size]
151   - if fragsize
152   - if fragsize.kind_of? Hash
153   - if fragsize[:default]
154   - hash["hl.fragsize"] = fragsize[:default]
155   - end
156   - if fragsize[:fields]
157   - fragsize[:fields].each do |k,v|
158   - hash["f.#{k}.hl.fragsize"] = v
159   - end
160   - end
161   - else
162   - hash["hl.fragsize"] = fragsize
163   - end
164   - end
165   -
166   - rfm = @params[:highlighting][:require_field_match]
167   - if nil != rfm
168   - if rfm.kind_of? Hash
169   - if nil != rfm[:default]
170   - hash["hl.requireFieldMatch"] = rfm[:default]
171   - end
172   - if rfm[:fields]
173   - rfm[:fields].each do |k,v|
174   - hash["f.#{k}.hl.requireFieldMatch"] = v
175   - end
176   - end
177   - else
178   - hash["hl.requireFieldMatch"] = rfm
179   - end
180   - end
181   -
182   - mac = @params[:highlighting][:max_analyzed_chars]
183   - if mac
184   - if mac.kind_of? Hash
185   - if mac[:default]
186   - hash["hl.maxAnalyzedChars"] = mac[:default]
187   - end
188   - if mac[:fields]
189   - mac[:fields].each do |k,v|
190   - hash["f.#{k}.hl.maxAnalyzedChars"] = v
191   - end
192   - end
193   - else
194   - hash["hl.maxAnalyzedChars"] = mac
195   - end
196   - end
197   -
198   - prefix = @params[:highlighting][:prefix]
199   - if prefix
200   - if prefix.kind_of? Hash
201   - if prefix[:default]
202   - hash["hl.simple.pre"] = prefix[:default]
203   - end
204   - if prefix[:fields]
205   - prefix[:fields].each do |k,v|
206   - hash["f.#{k}.hl.simple.pre"] = v
207   - end
208   - end
209   - else
210   - hash["hl.simple.pre"] = prefix
211   - end
212   - end
213   -
214   - suffix = @params[:highlighting][:suffix]
215   - if suffix
216   - if suffix.kind_of? Hash
217   - if suffix[:default]
218   - hash["hl.simple.post"] = suffix[:default]
219   - end
220   - if suffix[:fields]
221   - suffix[:fields].each do |k,v|
222   - hash["f.#{k}.hl.simple.post"] = v
223   - end
224   - end
225   - else
226   - hash["hl.simple.post"] = suffix
227   - end
228   - end
229   -
230   - formatter = @params[:highlighting][:formatter]
231   - if formatter
232   - if formatter.kind_of? Hash
233   - if formatter[:default]
234   - hash["hl.formatter"] = formatter[:default]
235   - end
236   - if formatter[:fields]
237   - formatter[:fields].each do |k,v|
238   - hash["f.#{k}.hl.formatter"] = v
239   - end
240   - end
241   - else
242   - hash["hl.formatter"] = formatter
243   - end
244   - end
245   -
246   - fragmenter = @params[:highlighting][:fragmenter]
247   - if fragmenter
248   - if fragmenter.kind_of? Hash
249   - if fragmenter[:default]
250   - hash["hl.fragmenter"] = fragmenter[:default]
251   - end
252   - if fragmenter[:fields]
253   - fragmenter[:fields].each do |k,v|
254   - hash["f.#{k}.hl.fragmenter"] = v
255   - end
256   - end
257   - else
258   - hash["hl.fragmenter"] = fragmenter
259   - end
260   - end
261   -
262   - merge_contiguous = @params[:highlighting][:merge_contiguous]
263   - if nil != merge_contiguous
264   - if merge_contiguous.kind_of? Hash
265   - if nil != merge_contiguous[:default]
266   - hash["hl.mergeContiguous"] = merge_contiguous[:default]
267   - end
268   - if merge_contiguous[:fields]
269   - merge_contiguous[:fields].each do |k,v|
270   - hash["f.#{k}.hl.mergeContiguous"] = v
271   - end
272   - end
273   - else
274   - hash["hl.mergeContiguous"] = merge_contiguous
275   - end
276   - end
277   -
278   - increment = @params[:highlighting][:increment]
279   - if increment
280   - if increment.kind_of? Hash
281   - if increment[:default]
282   - hash["hl.increment"] = increment[:default]
283   - end
284   - if increment[:fields]
285   - increment[:fields].each do |k,v|
286   - hash["f.#{k}.hl.increment"] = v
287   - end
288   - end
289   - else
290   - hash["hl.increment"] = increment
291   - end
292   - end
293   -
294   - # support "old style"
295   - alternate_fields = @params[:highlighting][:alternate_fields]
296   - if alternate_fields
297   - alternate_fields.each do |f,v|
298   - hash["f.#{f}.hl.alternateField"] = v
299   - end
300   - end
301   -
302   - alternate_field = @params[:highlighting][:alternate_field]
303   - if alternate_field
304   - if alternate_field.kind_of? Hash
305   - if alternate_field[:default]
306   - hash["hl.alternateField"] = alternate_field[:default]
307   - end
308   - if alternate_field[:fields]
309   - alternate_field[:fields].each do |k,v|
310   - hash["f.#{k}.hl.alternateField"] = v
311   - end
312   - end
313   - else
314   - hash["hl.alternateField"] = alternate_field
315   - end
316   - end
317   -
318   - mafl = @params[:highlighting][:max_alternate_field_length]
319   - if mafl
320   - if mafl.kind_of? Hash
321   - if mafl[:default]
322   - hash["hl.maxAlternateFieldLength"] = mafl[:default]
323   - end
324   - if mafl[:fields]
325   - mafl[:fields].each do |k,v|
326   - hash["f.#{k}.hl.maxAlternateFieldLength"] = v
327   - end
328   - else
329   - # support "old style"
330   - mafl.each do |k,v|
331   - hash["f.#{k}.hl.maxAlternateFieldLength"] = v
332   - end
333   - end
334   - else
335   - hash["hl.maxAlternateFieldLength"] = mafl
336   - end
337   - end
338   -
339   - hash["hl.usePhraseHighlighter"] = @params[:highlighting][:use_phrase_highlighter]
340   -
341   - regex = @params[:highlighting][:regex]
342   - if regex
343   - if regex[:slop]
344   - if regex[:slop].kind_of? Hash
345   - if regex[:slop][:default]
346   - hash["hl.regex.slop"] = regex[:slop][:default]
347   - end
348   - if regex[:slop][:fields]
349   - regex[:slop][:fields].each do |k,v|
350   - hash["f.#{k}.hl.regex.slop"] = v
351   - end
352   - end
353   - else
354   - hash["hl.regex.slop"] = regex[:slop]
355   - end
356   - end
357   - if regex[:pattern]
358   - if regex[:pattern].kind_of? Hash
359   - if regex[:pattern][:default]
360   - hash["hl.regex.pattern"] = regex[:pattern][:default]
361   - end
362   - if regex[:pattern][:fields]
363   - regex[:pattern][:fields].each do |k,v|
364   - hash["f.#{k}.hl.regex.pattern"] = v
365   - end
366   - end
367   - else
368   - hash["hl.regex.pattern"] = regex[:pattern]
369   - end
370   - end
371   - if regex[:max_analyzed_chars]
372   - if regex[:max_analyzed_chars].kind_of? Hash
373   - if regex[:max_analyzed_chars][:default]
374   - hash["hl.regex.maxAnalyzedChars"] = regex[:max_analyzed_chars][:default]
375   - end
376   - if regex[:max_analyzed_chars][:fields]
377   - regex[:max_analyzed_chars][:fields].each do |k,v|
378   - hash["f.#{k}.hl.regex.maxAnalyzedChars"] = v
379   - end
380   - end
381   - else
382   - hash["hl.regex.maxAnalyzedChars"] = regex[:max_analyzed_chars]
383   - end
384   - end
385   - end
386   -
387   - end
388   -
389   - if @params[:mlt]
390   - hash[:mlt] = true
391   - hash["mlt.count"] = @params[:mlt][:count]
392   - hash["mlt.fl"] = @params[:mlt][:field_list].join(',')
393   - hash["mlt.mintf"] = @params[:mlt][:min_term_freq]
394   - hash["mlt.mindf"] = @params[:mlt][:min_doc_freq]
395   - hash["mlt.minwl"] = @params[:mlt][:min_word_length]
396   - hash["mlt.maxwl"] = @params[:mlt][:max_word_length]
397   - hash["mlt.maxqt"] = @params[:mlt][:max_query_terms]
398   - hash["mlt.maxntp"] = @params[:mlt][:max_tokens_parsed]
399   - hash["mlt.boost"] = @params[:mlt][:boost]
400   - end
401   -
402   - hash[:spellcheck] = true
403   - hash['spellcheck.collate'] = true
404   -
405   - hash.merge(super.to_hash)
406   - end
407   -
408   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/request/update.rb
... ... @@ -1,23 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -# a parent class for all requests that go through the solr update handler
14   -# TODO: Use new xml update handler for better error responses
15   -class Solr::Request::Update < Solr::Request::Base
16   - def response_format
17   - :xml
18   - end
19   -
20   - def handler
21   - 'update'
22   - end
23   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/response.rb
... ... @@ -1,27 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -module Solr; module Response; end; end
14   -require File.expand_path("#{File.dirname(__FILE__)}/response/base")
15   -require File.expand_path("#{File.dirname(__FILE__)}/response/xml")
16   -require File.expand_path("#{File.dirname(__FILE__)}/response/ruby")
17   -require File.expand_path("#{File.dirname(__FILE__)}/response/ping")
18   -require File.expand_path("#{File.dirname(__FILE__)}/response/add_document")
19   -require File.expand_path("#{File.dirname(__FILE__)}/response/modify_document")
20   -require File.expand_path("#{File.dirname(__FILE__)}/response/standard")
21   -require File.expand_path("#{File.dirname(__FILE__)}/response/spellcheck")
22   -require File.expand_path("#{File.dirname(__FILE__)}/response/dismax")
23   -require File.expand_path("#{File.dirname(__FILE__)}/response/commit")
24   -require File.expand_path("#{File.dirname(__FILE__)}/response/delete")
25   -require File.expand_path("#{File.dirname(__FILE__)}/response/index_info")
26   -require File.expand_path("#{File.dirname(__FILE__)}/response/optimize")
27   -require File.expand_path("#{File.dirname(__FILE__)}/response/select")
28 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/lib/solr/response/add_document.rb
... ... @@ -1,17 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Response::AddDocument < Solr::Response::Xml
14   - def initialize(xml)
15   - super
16   - end
17   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/response/base.rb
... ... @@ -1,42 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Response::Base
14   - attr_reader :raw_response
15   -
16   - def initialize(raw_response)
17   - @raw_response = raw_response
18   - end
19   -
20   - # factory method for creating a Solr::Response::* from
21   - # a request and the raw response content
22   - def self.make_response(request, raw)
23   -
24   - # make sure response format seems sane
25   - unless [:xml, :ruby].include?(request.response_format)
26   - raise Solr::Exception.new("unknown response format: #{request.response_format}" )
27   - end
28   -
29   - # TODO: Factor out this case... perhaps the request object should provide the response class instead? Or dynamically align by class name?
30   - # Maybe the request itself could have the response handling features that get mixed in with a single general purpose response object?
31   -
32   - begin
33   - klass = eval(request.class.name.sub(/Request/,'Response'))
34   - rescue NameError
35   - raise Solr::Exception.new("unknown request type: #{request.class}")
36   - else
37   - klass.new(raw)
38   - end
39   -
40   - end
41   -
42   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/response/commit.rb
... ... @@ -1,15 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Response::Commit < Solr::Response::Xml
14   -end
15   -
vendor/plugins/acts_as_solr_reloaded/lib/solr/response/delete.rb
... ... @@ -1,13 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Response::Delete < Solr::Response::Xml; end
vendor/plugins/acts_as_solr_reloaded/lib/solr/response/dismax.rb
... ... @@ -1,8 +0,0 @@
1   -class Solr::Response::Dismax < Solr::Response::Standard
2   - # no need for special processing
3   -
4   - # FIXME: 2007-02-07 <coda.hale@gmail.com> -- The existence of this class indicates that
5   - # the Request/Response pair architecture is a little hinky. Perhaps we could refactor
6   - # out some of the most common functionality -- Common Query Parameters, Highlighting Parameters,
7   - # Simple Facet Parameters, etc. -- into modules?
8   -end
9 0 \ No newline at end of file
vendor/plugins/acts_as_solr_reloaded/lib/solr/response/index_info.rb
... ... @@ -1,26 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Response::IndexInfo < Solr::Response::Ruby
14   - def initialize(ruby_code)
15   - super
16   - end
17   -
18   - def num_docs
19   - return @data['index']['numDocs']
20   - end
21   -
22   - def field_names
23   - return @data['fields'].keys
24   - end
25   -
26   -end
vendor/plugins/acts_as_solr_reloaded/lib/solr/response/modify_document.rb
... ... @@ -1,17 +0,0 @@
1   -# The ASF licenses this file to You under the Apache License, Version 2.0
2   -# (the "License"); you may not use this file except in compliance with
3   -# the License. You may obtain a copy of the License at
4   -#
5   -# http://www.apache.org/licenses/LICENSE-2.0
6   -#
7   -# Unless required by applicable law or agreed to in writing, software
8   -# distributed under the License is distributed on an "AS IS" BASIS,
9   -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   -# See the License for the specific language governing permissions and
11   -# limitations under the License.
12   -
13   -class Solr::Response::ModifyDocument < Solr::Response::Xml
14   - def initialize(xml)
15   - super
16   - end
17   -end