acts_as_solr 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore CHANGED
@@ -6,3 +6,4 @@ coverage.data
6
6
  solr/solr/data/*
7
7
  .svn
8
8
  test/db/*.db
9
+ pkg
data/Rakefile CHANGED
@@ -1,6 +1,18 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
3
 
4
+ require 'rake/testtask'
5
+ require 'rake/rdoctask'
6
+
7
+ Dir["#{File.dirname(__FILE__)}/lib/tasks/**/*.rake"].sort.each { |ext| load ext }
8
+
9
+ desc "Default Task"
10
+ task :default => [:test]
11
+
12
+ desc "Runs the unit tests"
13
+ task :test => "test:unit"
14
+
15
+
4
16
  begin
5
17
  require 'jeweler'
6
18
  Jeweler::Tasks.new do |gem|
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.1.1
data/acts_as_solr.gemspec CHANGED
@@ -1,15 +1,15 @@
1
1
  # Generated by jeweler
2
- # DO NOT EDIT THIS FILE
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{acts_as_solr}
8
- s.version = "1.0.0"
8
+ s.version = "1.1.1"
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-10-18}
12
+ s.date = %q{2009-12-09}
13
13
  s.description = %q{Acts As Solr}
14
14
  s.email = %q{kyle@onemorecloud.com}
15
15
  s.extra_rdoc_files = [
@@ -184,7 +184,7 @@ Gem::Specification.new do |s|
184
184
  s.homepage = %q{http://github.com/onemorecloud/acts_as_solr}
185
185
  s.rdoc_options = ["--charset=UTF-8"]
186
186
  s.require_paths = ["lib"]
187
- s.rubygems_version = %q{1.3.4}
187
+ s.rubygems_version = %q{1.3.5}
188
188
  s.summary = %q{Solr integration for rails}
189
189
  s.test_files = [
190
190
  "test/db/connections/mysql/connection.rb",
@@ -235,3 +235,4 @@ Gem::Specification.new do |s|
235
235
  s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
236
236
  end
237
237
  end
238
+
data/lib/acts_methods.rb CHANGED
@@ -210,6 +210,12 @@ module ActsAsSolr #:nodoc:
210
210
  alias_method_chain :method_missing, :solr_magic
211
211
  @already_solr_magic = true
212
212
  end
213
+ rescue ActiveRecord::StatementInvalid
214
+ @acts_as_solr_needs_reload = true
215
+ end
216
+
217
+ def acts_as_solr_needs_reload?
218
+ @acts_as_solr_needs_reload
213
219
  end
214
220
 
215
221
  private
data/lib/class_methods.rb CHANGED
@@ -113,6 +113,7 @@ module ActsAsSolr #:nodoc:
113
113
  #
114
114
  def find_by_solr(query, options={})
115
115
  data = parse_query(query, options)
116
+ puts data.inspect
116
117
  return parse_results(data, options) if data
117
118
  end
118
119
 
@@ -24,6 +24,10 @@ module ActsAsSolr #:nodoc:
24
24
 
25
25
  # saves to the Solr index
26
26
  def solr_save
27
+ if self.class.respond_to?(:acts_as_solr_needs_reload?) && self.class.acts_as_solr_needs_reload?
28
+ self.class.acts_as_solr
29
+ end
30
+
27
31
  return true if indexing_disabled?
28
32
  if evaluate_condition(:if, self)
29
33
  logger.debug "solr_save: #{self.class.name} : #{record_id(self)}"
@@ -33,6 +37,8 @@ module ActsAsSolr #:nodoc:
33
37
  else
34
38
  solr_destroy
35
39
  end
40
+ rescue ConnectionError
41
+ false
36
42
  end
37
43
 
38
44
  def indexing_disabled?
@@ -46,6 +52,8 @@ module ActsAsSolr #:nodoc:
46
52
  solr_delete solr_id
47
53
  solr_commit if configuration[:auto_commit]
48
54
  true
55
+ rescue ConnectionError
56
+ false
49
57
  end
50
58
 
51
59
  # convert instance to Solr document
@@ -4,6 +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
+
7
8
  valid_options = [:offset, :limit, :facets, :models, :results_format, :order, :scores, :operator, :include, :lazy, :highlight]
8
9
  query_options = {}
9
10
 
@@ -87,11 +88,14 @@ module ActsAsSolr #:nodoc:
87
88
  order = options[:order].split(/\s*,\s*/).collect{|e| e.gsub(/\s+/,'_t ').gsub(/\bscore_t\b/, 'score') }.join(',') if options[:order]
88
89
  query_options[:query] = replace_types([query])[0] # TODO adjust replace_types to work with String or Array
89
90
 
90
- if options[:order]
91
- # TODO: set the sort parameter instead of the old ;order. style.
92
- query_options[:query] << ';' << replace_types([order], false)[0]
91
+ if options[:order].is_a?(String)
92
+ string = replace_types([order], false)[0]
93
+ field, direction = string.split(/\s+/)
94
+ direction = direction.to_s =~ /asc/i ? :ascending : :descending
95
+ query_options[:sort] = [{field => direction}]
96
+ elsif options[:order]
97
+ query_options[:sort] = options[:order]
93
98
  end
94
-
95
99
  ActsAsSolr::Post.execute(Solr::Request::Standard.new(query_options))
96
100
  rescue
97
101
  raise "There was a problem executing your search: #{$!} in #{$!.backtrace.first}"
@@ -164,13 +168,13 @@ module ActsAsSolr #:nodoc:
164
168
 
165
169
  # Reorders the instances keeping the order returned from Solr
166
170
  def reorder(things, ids)
167
- ordered_things = Array.new(things.size)
168
- raise "Out of sync! Found #{ids.size} items in index, but only #{things.size} were found in database!" unless things.size == ids.size
171
+ ordered_things = Array.new([things.size, ids.size].max)
172
+ # raise "Out of sync! Found #{ids.size} items in index, but only #{things.size} were found in database!" unless things.size == ids.size
169
173
  things.each do |thing|
170
174
  position = ids.index(thing.id)
171
175
  ordered_things[position] = thing
172
176
  end
173
- ordered_things
177
+ ordered_things.compact
174
178
  end
175
179
 
176
180
  # Replaces the field types based on the types (if any) specified
@@ -50,7 +50,8 @@ class Solr::Request::Standard < Solr::Request::Select
50
50
  key = sort.keys[0]
51
51
  "#{key.to_s} #{sort[key] == :descending ? 'desc' : 'asc'}"
52
52
  end.join(',') if @params[:sort]
53
- hash[:q] = sort ? "#{@params[:query]};#{sort}" : @params[:query]
53
+ hash[:q] = @params[:query]
54
+ hash[:sort] = sort if sort
54
55
  hash["q.op"] = @params[:operator]
55
56
  hash[:df] = @params[:default_field]
56
57
 
@@ -1,4 +1,5 @@
1
1
  <?xml version="1.0" encoding="UTF-8" ?>
2
+ <!--META:NAME acts_as_solr for Ruby on Rails-->
2
3
  <!--
3
4
  Licensed to the Apache Software Foundation (ASF) under one or more
4
5
  contributor license agreements. See the NOTICE file distributed with
@@ -50,7 +51,8 @@
50
51
 
51
52
  <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
52
53
  <analyzer type="index">
53
- <tokenizer class="solr.WhitespaceTokenizerFactory"/>
54
+ <tokenizer class="solr.ChineseTokenizerFactory"/>
55
+ <filter class="solr.ChineseFilterFactory" />
54
56
  <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
55
57
  <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
56
58
  <filter class="solr.LowerCaseFilterFactory"/>
@@ -58,7 +60,8 @@
58
60
  <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
59
61
  </analyzer>
60
62
  <analyzer type="query">
61
- <tokenizer class="solr.WhitespaceTokenizerFactory"/>
63
+ <tokenizer class="solr.ChineseTokenizerFactory"/>
64
+ <filter class="solr.ChineseFilterFactory" />
62
65
  <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
63
66
  <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
64
67
  <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
@@ -100,19 +103,19 @@
100
103
  <field name="id" type="string" indexed="true" stored="true" required="true" />
101
104
  <field name="pk_i" type="integer" indexed="true" stored="true"/>
102
105
  <field name="pk_s" type="string" indexed="true" stored="true"/>
103
- <field name="text" type="text" indexed="true" stored="false" multiValued="true"/>
104
-
105
- <dynamicField name="*_i" type="integer" indexed="true" stored="false"/>
106
- <dynamicField name="*_t" type="text" indexed="true" stored="false"/>
107
- <dynamicField name="*_f" type="float" indexed="true" stored="false"/>
108
- <dynamicField name="*_b" type="boolean" indexed="true" stored="false"/>
109
- <dynamicField name="*_d" type="date" indexed="true" stored="false"/>
110
- <dynamicField name="*_s" type="string" indexed="true" stored="false"/>
111
- <dynamicField name="*_ri" type="sint" indexed="true" stored="false"/>
112
- <dynamicField name="*_rf" type="sfloat" indexed="true" stored="false"/>
113
- <dynamicField name="*_facet" type="string" indexed="true" stored="false"/>
114
- <dynamicField name="*_s_mv" type="string" indexed="true" stored="false" multiValued="true"/>
115
- <dynamicField name="*_zh_text" type="text_zh" indexed="true" stored="false" multiValued="true"/>
106
+ <field name="text" type="text" indexed="true" stored="true" multiValued="true"/>
107
+
108
+ <dynamicField name="*_i" type="integer" indexed="true" stored="true"/>
109
+ <dynamicField name="*_t" type="text" indexed="true" stored="true"/>
110
+ <dynamicField name="*_f" type="float" indexed="true" stored="true"/>
111
+ <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
112
+ <dynamicField name="*_d" type="date" indexed="true" stored="true"/>
113
+ <dynamicField name="*_s" type="string" indexed="true" stored="true"/>
114
+ <dynamicField name="*_ri" type="sint" indexed="true" stored="true"/>
115
+ <dynamicField name="*_rf" type="sfloat" indexed="true" stored="true"/>
116
+ <dynamicField name="*_facet" type="string" indexed="true" stored="true"/>
117
+ <dynamicField name="*_s_mv" type="string" indexed="true" stored="true" multiValued="true"/>
118
+ <dynamicField name="*_zh_text" type="text_zh" indexed="true" stored="true" multiValued="true"/>
116
119
  <dynamicField name="*_display" type="text" indexed="false" stored="true" multiValued="true"/>
117
120
  </fields>
118
121
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_solr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.1
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-10-18 00:00:00 -07:00
12
+ date: 2009-12-09 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -219,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
219
219
  requirements: []
220
220
 
221
221
  rubyforge_project:
222
- rubygems_version: 1.3.4
222
+ rubygems_version: 1.3.5
223
223
  signing_key:
224
224
  specification_version: 3
225
225
  summary: Solr integration for rails