onemorecloud-websolr-rails 1.1.1 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.1
1
+ 1.3.3
@@ -1,22 +1,22 @@
1
- ENV['RAILS_ENV'] = (ENV['RAILS_ENV'] || 'development').dup
2
- # RAILS_ROOT isn't defined yet, so figure it out.
3
- rails_root_dir = "#{File.dirname(File.expand_path(__FILE__))}/../../../../"
4
- SOLR_PATH = "#{File.dirname(File.expand_path(__FILE__))}/../solr" unless defined? SOLR_PATH
5
-
6
- SOLR_LOGS_PATH = "#{rails_root_dir}/log" unless defined? SOLR_LOGS_PATH
7
- SOLR_PIDS_PATH = "#{rails_root_dir}/tmp/pids" unless defined? SOLR_PIDS_PATH
8
- SOLR_DATA_PATH = "#{rails_root_dir}/solr/#{ENV['RAILS_ENV']}" unless defined? SOLR_DATA_PATH
9
-
10
- unless defined? SOLR_PORT
11
- config = YAML::load_file(rails_root_dir+'/config/solr.yml')
12
-
13
- SOLR_PORT = ENV['PORT'] || URI.parse(config[ENV['RAILS_ENV']]['url']).port
14
- end
15
-
16
- SOLR_JVM_OPTIONS = config[ENV['RAILS_ENV']]['jvm_options'] unless defined? SOLR_JVM_OPTIONS
17
-
18
- if ENV['RAILS_ENV'] == 'test'
19
- DB = (ENV['DB'] ? ENV['DB'] : 'mysql') unless defined?(DB)
20
- MYSQL_USER = (ENV['MYSQL_USER'].nil? ? 'root' : ENV['MYSQL_USER']) unless defined? MYSQL_USER
21
- require File.join(File.dirname(File.expand_path(__FILE__)), '..', 'test', 'db', 'connections', DB, 'connection.rb')
22
- end
1
+ # ENV['RAILS_ENV'] = (ENV['RAILS_ENV'] || 'development').dup
2
+ # # RAILS_ROOT isn't defined yet, so figure it out.
3
+ # rails_root_dir = "."
4
+ # SOLR_PATH = "#{File.dirname(File.expand_path(__FILE__))}/../solr" unless defined? SOLR_PATH
5
+ #
6
+ # SOLR_LOGS_PATH = "#{rails_root_dir}/log" unless defined? SOLR_LOGS_PATH
7
+ # SOLR_PIDS_PATH = "#{rails_root_dir}/tmp/pids" unless defined? SOLR_PIDS_PATH
8
+ # SOLR_DATA_PATH = "#{rails_root_dir}/solr/#{ENV['RAILS_ENV']}" unless defined? SOLR_DATA_PATH
9
+ #
10
+ # unless defined? SOLR_PORT
11
+ # config = YAML::load_file(rails_root_dir+'/config/solr.yml')
12
+ #
13
+ # SOLR_PORT = ENV['PORT'] || URI.parse(config[ENV['RAILS_ENV']]['url']).port
14
+ # end
15
+ #
16
+ # SOLR_JVM_OPTIONS = config[ENV['RAILS_ENV']]['jvm_options'] unless defined? SOLR_JVM_OPTIONS
17
+ #
18
+ # if ENV['RAILS_ENV'] == 'test'
19
+ # DB = (ENV['DB'] ? ENV['DB'] : 'mysql') unless defined?(DB)
20
+ # MYSQL_USER = (ENV['MYSQL_USER'].nil? ? 'root' : ENV['MYSQL_USER']) unless defined? MYSQL_USER
21
+ # require File.join(File.dirname(File.expand_path(__FILE__)), '..', 'test', 'db', 'connections', DB, 'connection.rb')
22
+ # end
@@ -1,13 +1,13 @@
1
1
  #!/bin/sh
2
- git clone git@github.com:onemorecloud/websolr-rails.git /tmp/websolr-rails
3
- rm -rf /tmp/websolr-rails-rdoc
4
- rdoc --op /tmp/websolr-rails-rdoc --main README.rdoc README.rdoc lib
5
- cd /tmp/websolr-rails
6
- git checkout origin/gh-pages
7
- git checkout -b gh-pages
8
- git checkout gh-pages
9
- mv /tmp/websolr-rails-rdoc/* .
10
- git add .
11
- git add -u
12
- git commit -m "updating rdoc"
2
+ rm -rf /tmp/websolr-rails*
3
+ git clone git@github.com:onemorecloud/websolr-rails.git /tmp/websolr-rails
4
+ rdoc --op /tmp/websolr-rails-rdoc --main README.rdoc README.rdoc lib
5
+ cd /tmp/websolr-rails
6
+ git checkout origin/gh-pages
7
+ git checkout -b gh-pages
8
+ rm -rf /tmp/websolr-rails/*
9
+ mv /tmp/websolr-rails-rdoc/* .
10
+ git add .
11
+ git add -u
12
+ git commit -m "updating rdoc"
13
13
  git push origin gh-pages
@@ -31,18 +31,22 @@ require File.dirname(__FILE__) + '/common_methods'
31
31
  require File.dirname(__FILE__) + '/deprecation'
32
32
  require File.dirname(__FILE__) + '/search_results'
33
33
  require File.dirname(__FILE__) + '/lazy_document'
34
+ require File.dirname(__FILE__) + '/will_paginate_support'
34
35
  module ActsAsSolr
35
36
 
36
37
  class Post
37
38
  def self.execute(request)
38
39
  begin
39
- if File.exists?(RAILS_ROOT+'/config/solr.yml')
40
- config = YAML::load_file(RAILS_ROOT+'/config/solr.yml')
41
- url = config[RAILS_ENV]['url']
42
- # for backwards compatibility
43
- url ||= "http://#{config[RAILS_ENV]['host']}:#{config[RAILS_ENV]['port']}/#{config[RAILS_ENV]['servlet_path']}"
44
- else
45
- url = 'http://localhost:8982/solr'
40
+ # if File.exists?(RAILS_ROOT+'/config/solr.yml')
41
+ # config = YAML::load_file(RAILS_ROOT+'/config/solr.yml')
42
+ # url = config[RAILS_ENV]['url']
43
+ # # for backwards compatibility
44
+ # url ||= "http://#{config[RAILS_ENV]['host']}:#{config[RAILS_ENV]['port']}/#{config[RAILS_ENV]['servlet_path']}"
45
+ # else
46
+ # url = 'http://localhost:8982/solr'
47
+ # end
48
+ unless url = ENV["WEBSOLR_URL"]
49
+ raise "WEBSOLR_URL was not defined. Have you run websolr configure?"
46
50
  end
47
51
  connection = Solr::Connection.new(url)
48
52
  return connection.send(request)
@@ -205,6 +205,8 @@ module ActsAsSolr #:nodoc:
205
205
  if configuration[:include].respond_to?(:each)
206
206
  process_includes(configuration[:include])
207
207
  end
208
+
209
+ alias_method_chain :method_missing, :solr_magic
208
210
  end
209
211
 
210
212
  private
@@ -6,6 +6,20 @@ module ActsAsSolr #:nodoc:
6
6
  def solr_id
7
7
  "#{self.class.name}:#{record_id(self)}"
8
8
  end
9
+
10
+ def init_solr(data)
11
+ @solr_data = data
12
+ end
13
+
14
+ def method_missing_with_solr_magic(method, *a, &b)
15
+ if method.to_s =~ /^highlighted_(.*)$/ && a.length == 0
16
+ original_field = $1
17
+ @solr_data && @solr_data[:highlights] && @solr_data[:highlights][id] &&
18
+ @solr_data[:highlights][id][original_field].join(" ") || send(original_field)
19
+ else
20
+ method_missing_without_solr_magic(method, *a, &b)
21
+ end
22
+ end
9
23
 
10
24
  # saves to the Solr index
11
25
  def solr_save
@@ -4,7 +4,7 @@ module ActsAsSolr #:nodoc:
4
4
 
5
5
  # Method used by mostly all the ClassMethods when doing a search
6
6
  def parse_query(query=nil, options={}, models=nil)
7
- valid_options = [:offset, :limit, :facets, :models, :results_format, :order, :scores, :operator, :include, :lazy]
7
+ valid_options = [:offset, :limit, :facets, :models, :results_format, :order, :scores, :operator, :include, :lazy, :highlight]
8
8
  query_options = {}
9
9
 
10
10
  return nil if (query.nil? || query.strip == '')
@@ -15,6 +15,20 @@ module ActsAsSolr #:nodoc:
15
15
  query_options[:start] = options[:offset]
16
16
  query_options[:rows] = options[:limit]
17
17
  query_options[:operator] = options[:operator]
18
+
19
+ if options[:highlight] == true
20
+ options[:highlight] = {:fields => "*"}
21
+ end
22
+
23
+ if options[:highlight]
24
+ query_options[:highlighting] = {}
25
+ query_options[:highlighting][:field_list] = []
26
+ query_options[:highlighting][:field_list] << options[:highlight][:fields].collect {|k| "#{k}_t"} if options[:highlight][:fields]
27
+ query_options[:highlighting][:require_field_match] = options[:highlight][:require_field_match] if options[:highlight][:require_field_match]
28
+ query_options[:highlighting][:max_snippets] = options[:highlight][:max_snippets] if options[:highlight][:max_snippets]
29
+ query_options[:highlighting][:prefix] = options[:highlight][:prefix] if options[:highlight][:prefix]
30
+ query_options[:highlighting][:suffix] = options[:highlight][:suffix] if options[:highlight][:suffix]
31
+ end
18
32
 
19
33
  # first steps on the facet parameter processing
20
34
  if options[:facets]
@@ -29,7 +43,6 @@ module ActsAsSolr #:nodoc:
29
43
  query_options[:filter_queries] = replace_types([*options[:facets][:browse]].collect{|k| "#{k.sub!(/ *: */,"_facet:")}"}) if options[:facets][:browse]
30
44
  query_options[:facets][:queries] = replace_types(options[:facets][:query].collect{|k| "#{k.sub!(/ *: */,"_t:")}"}) if options[:facets][:query]
31
45
 
32
-
33
46
  if options[:facets][:dates]
34
47
  query_options[:date_facets] = {}
35
48
  # if options[:facets][:dates][:fields] exists then :start, :end, and :gap must be there
@@ -112,9 +125,25 @@ module ActsAsSolr #:nodoc:
112
125
 
113
126
  add_scores(result, solr_data) if configuration[:format] == :objects && options[:scores]
114
127
 
128
+ highlighted = {}
129
+ solr_data.highlighting.map do |x,y|
130
+ e={}
131
+ y1=y.map{|x1,y1| e[x1.gsub(/_[^_]*/,"")]=y1} unless y.nil?
132
+ highlighted[x.gsub(/[^:]*:/,"").to_i]=e
133
+ end unless solr_data.highlighting.nil?
134
+
115
135
  results.update(:facets => solr_data.data['facet_counts']) if options[:facets]
116
136
  results.update({:docs => result, :total => solr_data.total_hits, :max_score => solr_data.max_score, :query_time => solr_data.data['responseHeader']['QTime']})
117
- SearchResults.new(results)
137
+ results.update({:highlights=>highlighted})
138
+
139
+
140
+ sr = SearchResults.new(results)
141
+
142
+ sr.records.each do |model|
143
+ model.init_solr(results)
144
+ end
145
+
146
+ sr
118
147
  end
119
148
 
120
149
 
@@ -58,6 +58,10 @@ module ActsAsSolr #:nodoc:
58
58
  @solr_data[:query_time]
59
59
  end
60
60
 
61
+ def highlights
62
+ @solr_data[:highlights]
63
+ end
64
+
61
65
  alias docs results
62
66
  alias records results
63
67
  alias num_found total
@@ -51,6 +51,10 @@ class Solr::Response::Standard < Solr::Response::Ruby
51
51
  @data['highlighting'][id.to_s][field.to_s] rescue nil
52
52
  end
53
53
 
54
+ def highlighting
55
+ @data['highlighting']
56
+ end
57
+
54
58
  # supports enumeration of hits
55
59
  # TODO revisit - should this iterate through *all* hits by re-requesting more?
56
60
  def each
@@ -5,58 +5,58 @@ require 'active_record'
5
5
 
6
6
  namespace :solr do
7
7
 
8
- desc 'Starts Solr. Options accepted: RAILS_ENV=your_env, PORT=XX. Defaults to development if none.'
9
- task :start do
10
- require "#{File.dirname(__FILE__)}/../../config/solr_environment.rb"
11
- begin
12
- n = Net::HTTP.new('127.0.0.1', SOLR_PORT)
13
- n.request_head('/').value
14
-
15
- rescue Net::HTTPServerException #responding
16
- puts "Port #{SOLR_PORT} in use" and return
17
-
18
- rescue Errno::ECONNREFUSED #not responding
19
- Dir.chdir(SOLR_PATH) do
20
- pid = fork do
21
- #STDERR.close
22
- exec "java #{SOLR_JVM_OPTIONS} -Dsolr.data.dir=#{SOLR_DATA_PATH} -Djetty.logs=#{SOLR_LOGS_PATH} -Djetty.port=#{SOLR_PORT} -jar start.jar"
23
- end
24
- sleep(5)
25
- File.open("#{SOLR_PIDS_PATH}/#{ENV['RAILS_ENV']}_pid", "w"){ |f| f << pid}
26
- puts "#{ENV['RAILS_ENV']} Solr started successfully on #{SOLR_PORT}, pid: #{pid}."
27
- end
28
- end
29
- end
8
+ # desc 'Starts Solr. Options accepted: RAILS_ENV=your_env, PORT=XX. Defaults to development if none.'
9
+ # task :start do
10
+ # require "#{File.dirname(__FILE__)}/../../config/solr_environment.rb"
11
+ # begin
12
+ # n = Net::HTTP.new('127.0.0.1', SOLR_PORT)
13
+ # n.request_head('/').value
14
+ #
15
+ # rescue Net::HTTPServerException #responding
16
+ # puts "Port #{SOLR_PORT} in use" and return
17
+ #
18
+ # rescue Errno::ECONNREFUSED #not responding
19
+ # Dir.chdir(SOLR_PATH) do
20
+ # pid = fork do
21
+ # #STDERR.close
22
+ # exec "java #{SOLR_JVM_OPTIONS} -Dsolr.data.dir=#{SOLR_DATA_PATH} -Djetty.logs=#{SOLR_LOGS_PATH} -Djetty.port=#{SOLR_PORT} -jar start.jar"
23
+ # end
24
+ # sleep(5)
25
+ # File.open("#{SOLR_PIDS_PATH}/#{ENV['RAILS_ENV']}_pid", "w"){ |f| f << pid}
26
+ # puts "#{ENV['RAILS_ENV']} Solr started successfully on #{SOLR_PORT}, pid: #{pid}."
27
+ # end
28
+ # end
29
+ # end
30
30
 
31
- desc 'Stops Solr. Specify the environment by using: RAILS_ENV=your_env. Defaults to development if none.'
32
- task :stop do
33
- require "#{File.dirname(__FILE__)}/../../config/solr_environment.rb"
34
- fork do
35
- file_path = "#{SOLR_PIDS_PATH}/#{ENV['RAILS_ENV']}_pid"
36
- if File.exists?(file_path)
37
- File.open(file_path, "r") do |f|
38
- pid = f.readline
39
- Process.kill('TERM', pid.to_i)
40
- end
41
- File.unlink(file_path)
42
- Rake::Task["solr:destroy_index"].invoke if ENV['RAILS_ENV'] == 'test'
43
- puts "Solr shutdown successfully."
44
- else
45
- puts "PID file not found at #{file_path}. Either Solr is not running or no PID file was written."
46
- end
47
- end
48
- end
31
+ # desc 'Stops Solr. Specify the environment by using: RAILS_ENV=your_env. Defaults to development if none.'
32
+ # task :stop do
33
+ # require "#{File.dirname(__FILE__)}/../../config/solr_environment.rb"
34
+ # fork do
35
+ # file_path = "#{SOLR_PIDS_PATH}/#{ENV['RAILS_ENV']}_pid"
36
+ # if File.exists?(file_path)
37
+ # File.open(file_path, "r") do |f|
38
+ # pid = f.readline
39
+ # Process.kill('TERM', pid.to_i)
40
+ # end
41
+ # File.unlink(file_path)
42
+ # Rake::Task["solr:destroy_index"].invoke if ENV['RAILS_ENV'] == 'test'
43
+ # puts "Solr shutdown successfully."
44
+ # else
45
+ # puts "PID file not found at #{file_path}. Either Solr is not running or no PID file was written."
46
+ # end
47
+ # end
48
+ # end
49
49
 
50
- desc 'Remove Solr index'
51
- task :destroy_index do
52
- require "#{File.dirname(__FILE__)}/../../config/solr_environment.rb"
53
- raise "In production mode. I'm not going to delete the index, sorry." if ENV['RAILS_ENV'] == "production"
54
- if File.exists?("#{SOLR_DATA_PATH}")
55
- Dir["#{SOLR_DATA_PATH}/index/*"].each{|f| File.unlink(f)}
56
- Dir.rmdir("#{SOLR_DATA_PATH}/index")
57
- puts "Index files removed under " + ENV['RAILS_ENV'] + " environment"
58
- end
59
- end
50
+ # desc 'Remove Solr index'
51
+ # task :destroy_index do
52
+ # require "#{File.dirname(__FILE__)}/../../config/solr_environment.rb"
53
+ # raise "In production mode. I'm not going to delete the index, sorry." if ENV['RAILS_ENV'] == "production"
54
+ # if File.exists?("#{SOLR_DATA_PATH}")
55
+ # Dir["#{SOLR_DATA_PATH}/index/*"].each{|f| File.unlink(f)}
56
+ # Dir.rmdir("#{SOLR_DATA_PATH}/index")
57
+ # puts "Index files removed under " + ENV['RAILS_ENV'] + " environment"
58
+ # end
59
+ # end
60
60
 
61
61
  # this task is by Henrik Nyh
62
62
  # http://henrik.nyh.se/2007/06/rake-task-to-reindex-models-for-acts_as_solr
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- Dir[File.join(File.dirname(__FILE__), "..", "tasks", "*.rake"].each do |file|
2
+ Dir[File.join(File.dirname(__FILE__), "..", "tasks", "*.rake")].each do |file|
3
3
  load file
4
4
  end
@@ -0,0 +1,12 @@
1
+ module ActsAsSolr
2
+ module ClassMethods
3
+ def paginate_by_solr(query, options = {})
4
+ options[:total_entries] ||= count_by_solr(query)
5
+ method_missing :paginate_by_solr, query, options
6
+ end
7
+
8
+ def find_all_by_solr(*args)
9
+ find_by_solr(*args).records
10
+ end
11
+ end
12
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{websolr-rails}
8
- s.version = "1.1.1"
8
+ s.version = "1.3.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kyle Maxwell"]
12
- s.date = %q{2009-08-24}
12
+ s.date = %q{2009-08-26}
13
13
  s.default_executable = %q{websolr}
14
14
  s.description = %q{acts_as_solr compatible gem for websolr}
15
15
  s.email = %q{kyle@kylemaxwell.com}
@@ -94,6 +94,7 @@ Gem::Specification.new do |s|
94
94
  "lib/websolr_option_parser.rb",
95
95
  "lib/websolr_rails.rb",
96
96
  "lib/websolr_rails/tasks.rb",
97
+ "lib/will_paginate_support.rb",
97
98
  "solr/CHANGES.txt",
98
99
  "solr/LICENSE.txt",
99
100
  "solr/NOTICE.txt",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: onemorecloud-websolr-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle Maxwell
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-24 00:00:00 -07:00
12
+ date: 2009-08-26 00:00:00 -07:00
13
13
  default_executable: websolr
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -107,6 +107,7 @@ files:
107
107
  - lib/websolr_option_parser.rb
108
108
  - lib/websolr_rails.rb
109
109
  - lib/websolr_rails/tasks.rb
110
+ - lib/will_paginate_support.rb
110
111
  - solr/CHANGES.txt
111
112
  - solr/LICENSE.txt
112
113
  - solr/NOTICE.txt