acts_as_solr_reloaded 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.0
1
+ 1.2.0
data/lib/acts_as_solr.rb CHANGED
@@ -31,11 +31,14 @@ require File.dirname(__FILE__) + '/acts_as_solr/acts_methods'
31
31
  require File.dirname(__FILE__) + '/acts_as_solr/common_methods'
32
32
  require File.dirname(__FILE__) + '/acts_as_solr/parser_methods'
33
33
  require File.dirname(__FILE__) + '/acts_as_solr/class_methods'
34
+ require File.dirname(__FILE__) + '/acts_as_solr/dynamic_attribute'
35
+ require File.dirname(__FILE__) + '/acts_as_solr/local'
34
36
  require File.dirname(__FILE__) + '/acts_as_solr/instance_methods'
35
37
  require File.dirname(__FILE__) + '/acts_as_solr/common_methods'
36
38
  require File.dirname(__FILE__) + '/acts_as_solr/deprecation'
37
39
  require File.dirname(__FILE__) + '/acts_as_solr/search_results'
38
40
  require File.dirname(__FILE__) + '/acts_as_solr/lazy_document'
41
+ require File.dirname(__FILE__) + '/acts_as_solr/mongo_mapper'
39
42
  module ActsAsSolr
40
43
 
41
44
  class Post
@@ -62,4 +65,4 @@ module ActsAsSolr
62
65
  end
63
66
 
64
67
  # reopen ActiveRecord and include the acts_as_solr method
65
- ActiveRecord::Base.extend ActsAsSolr::ActsMethods
68
+ ActiveRecord::Base.extend ActsAsSolr::ActsMethods
@@ -267,7 +267,7 @@ module ActsAsSolr #:nodoc:
267
267
  }
268
268
  self.solr_configuration = {
269
269
  :type_field => "type_s",
270
- :primary_key_field => "pk_i",
270
+ :primary_key_field => "pk_s",
271
271
  :default_boost => 1.0
272
272
  }
273
273
 
@@ -349,15 +349,25 @@ module ActsAsSolr #:nodoc:
349
349
  if configuration[:facets] && configuration[:facets].include?(field)
350
350
  :facet
351
351
  elsif column = columns_hash[field.to_s]
352
- case column.type
353
- when :string then :text
354
- when :datetime then :date
355
- when :time then :date
356
- else column.type
352
+ column_type = format_column_type(column.type)
353
+
354
+ case column_type
355
+ when :string then :text
356
+ when :datetime then :date
357
+ when :time then :date
358
+ else column_type
357
359
  end
358
360
  else
359
361
  :text
360
362
  end
361
363
  end
364
+
365
+ def format_column_type(type)
366
+ if type.class.eql? Symbol
367
+ type
368
+ else
369
+ type.to_s.eql?("ObjectId") ? :string : type.to_s.downcase.to_sym
370
+ end
371
+ end
362
372
  end
363
- end
373
+ end
@@ -83,7 +83,5 @@ module ActsAsSolr #:nodoc:
83
83
  def record_id(object)
84
84
  eval "object.#{object.class.primary_key}"
85
85
  end
86
-
87
86
  end
88
-
89
87
  end
@@ -1,6 +1,3 @@
1
- require 'acts_as_solr/dynamic_attribute'
2
- require 'acts_as_solr/local'
3
-
4
1
  module ActsAsSolr #:nodoc:
5
2
 
6
3
  module InstanceMethods
@@ -14,7 +11,7 @@ module ActsAsSolr #:nodoc:
14
11
  def solr_save
15
12
  return true if indexing_disabled?
16
13
  if evaluate_condition(:if, self)
17
- logger.debug "solr_save: #{self.class.name} : #{record_id(self)}"
14
+ debug "solr_save: #{self.class.name} : #{record_id(self)}"
18
15
  solr_add to_solr_doc
19
16
  solr_commit if configuration[:auto_commit]
20
17
  true
@@ -30,7 +27,7 @@ module ActsAsSolr #:nodoc:
30
27
  # remove from index
31
28
  def solr_destroy
32
29
  return true if indexing_disabled?
33
- logger.debug "solr_destroy: #{self.class.name} : #{record_id(self)}"
30
+ debug "solr_destroy: #{self.class.name} : #{record_id(self)}"
34
31
  solr_delete solr_id
35
32
  solr_commit if configuration[:auto_commit]
36
33
  true
@@ -38,7 +35,7 @@ module ActsAsSolr #:nodoc:
38
35
 
39
36
  # convert instance to Solr document
40
37
  def to_solr_doc
41
- logger.debug "to_solr_doc: creating doc for class: #{self.class.name}, id: #{record_id(self)}"
38
+ debug "to_solr_doc: creating doc for class: #{self.class.name}, id: #{record_id(self)}"
42
39
  doc = Solr::Document.new
43
40
  doc.boost = validate_boost(configuration[:boost]) if configuration[:boost]
44
41
 
@@ -81,11 +78,16 @@ module ActsAsSolr #:nodoc:
81
78
  add_tags(doc)
82
79
  add_space(doc)
83
80
 
84
- logger.debug doc.to_xml
81
+ debug doc.to_xml
85
82
  doc
86
83
  end
87
84
 
88
85
  private
86
+
87
+ def debug(text)
88
+ logger.debug text rescue nil
89
+ end
90
+
89
91
  def add_space(doc)
90
92
  if configuration[:spatial] and local
91
93
  doc << Solr::Field.new("lat" => local.latitude)
@@ -0,0 +1,27 @@
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 find(*args)
18
+ if args.first.instance_of? Array
19
+ ids = args.first.map { |id| Mongo::ObjectID.from_string(id) }
20
+ super :all, :conditions => {primary_key => ids}
21
+ else
22
+ super *args
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -104,7 +104,7 @@ module ActsAsSolr #:nodoc:
104
104
  end
105
105
 
106
106
  def solr_type_condition
107
- subclasses.inject("(#{solr_configuration[:type_field]}:#{self.name}") do |condition, subclass|
107
+ (subclasses || []).inject("(#{solr_configuration[:type_field]}:#{self.name}") do |condition, subclass|
108
108
  condition << " OR #{solr_configuration[:type_field]}:#{subclass.name}"
109
109
  end << ')'
110
110
  end
@@ -148,12 +148,11 @@ module ActsAsSolr #:nodoc:
148
148
  result = if configuration[:lazy] && configuration[:format] != :ids
149
149
  ids.collect {|id| ActsAsSolr::LazyDocument.new(id, self)}
150
150
  elsif configuration[:format] == :objects
151
- conditions = [ "#{self.table_name}.#{primary_key} in (?)", ids ]
152
- find_options = {:conditions => conditions}
151
+ find_options = {}
153
152
  find_options[:include] = options[:include] if options[:include]
154
153
  find_options[:select] = options[:select] if options[:select]
155
154
  find_options[:joins] = options[:joins] if options[:joins]
156
- result = reorder(self.find(:all, find_options), ids)
155
+ result = reorder(self.find(ids, find_options), ids)
157
156
  else
158
157
  ids
159
158
  end
@@ -166,7 +165,7 @@ module ActsAsSolr #:nodoc:
166
165
  ordered_things = Array.new(things.size)
167
166
  raise "Out of sync! Found #{ids.size} items in index, but only #{things.size} were found in database!" unless things.size == ids.size
168
167
  things.each do |thing|
169
- position = ids.index(thing.id)
168
+ position = ids.index(thing.id.to_s)
170
169
  ordered_things[position] = thing
171
170
  end
172
171
  ordered_things
data/test/db/test.db CHANGED
Binary file
@@ -4,6 +4,8 @@ require "#{File.dirname(File.expand_path(__FILE__))}/../test_helper"
4
4
  class ActsAsSolrTest < Test::Unit::TestCase
5
5
 
6
6
  fixtures :books, :movies, :electronics, :postings, :authors, :advertises
7
+
8
+ Document.destroy_all
7
9
 
8
10
  DynamicAttribute.delete_all
9
11
  Advertise.first.dynamic_attributes.create! :name => 'Description', :value => 'A very cool bike'
@@ -118,7 +120,7 @@ class ActsAsSolrTest < Test::Unit::TestCase
118
120
  'author:peter AND ruby'].each do |term|
119
121
  records = Book.find_id_by_solr term
120
122
  assert_equal 1, records.docs.size
121
- assert_equal [2], records.docs
123
+ assert_equal ['2'], records.docs
122
124
  end
123
125
  end
124
126
 
@@ -130,7 +132,7 @@ class ActsAsSolrTest < Test::Unit::TestCase
130
132
  'author:clancy AND splinter'].each do |term|
131
133
  records = Book.find_id_by_solr term
132
134
  assert_equal 1, records.docs.size
133
- assert_equal [1], records.docs
135
+ assert_equal ['1'], records.docs
134
136
  end
135
137
  end
136
138
 
@@ -142,7 +144,7 @@ class ActsAsSolrTest < Test::Unit::TestCase
142
144
  'dummy OR cell'].each do |term|
143
145
  records = Book.find_id_by_solr term
144
146
  assert_equal 2, records.docs.size
145
- assert_equal [1,2], records.docs
147
+ assert_equal ['1','2'], records.docs
146
148
  end
147
149
  end
148
150
 
@@ -460,4 +462,8 @@ class ActsAsSolrTest < Test::Unit::TestCase
460
462
  assert_equal expected, records.highlights.values.first
461
463
  end
462
464
 
465
+ def test_mongo_mappers_documents_are_found
466
+ Document.new(:name => "mapper").save
467
+ assert_equal "mapper", Document.search("mapper").docs.first.name
468
+ end
463
469
  end
@@ -0,0 +1,6 @@
1
+ class Document
2
+ include MongoMapper::Document
3
+ include ActsAsSolr::MongoMapper
4
+ key :name, String
5
+ acts_as_solr
6
+ end
data/test/test_helper.rb CHANGED
@@ -10,6 +10,10 @@ begin
10
10
  rescue
11
11
  end
12
12
 
13
+ require 'mongo_mapper'
14
+
15
+ MongoMapper.database = "acts_as_solr_reloaded-test"
16
+
13
17
  RAILS_ROOT = File.dirname(__FILE__) unless defined? RAILS_ROOT
14
18
  RAILS_ENV = 'test' unless defined? RAILS_ENV
15
19
  ENV["RAILS_ENV"] = "test"
@@ -47,6 +47,13 @@ class ActsMethodsTest < Test::Unit::TestCase
47
47
 
48
48
  class NotTaggable < Abstract
49
49
  end
50
+
51
+ class Mapper
52
+ include MongoMapper::Document
53
+ include ActsAsSolr::MongoMapper
54
+ key :value1, String
55
+ acts_as_solr
56
+ end
50
57
 
51
58
  should "define the model as taggable if taggable is true" do
52
59
  assert Taggable.taggable?
@@ -55,6 +62,14 @@ class ActsMethodsTest < Test::Unit::TestCase
55
62
  should "not define the model as taggable if taggable is not true" do
56
63
  assert !NotTaggable.taggable?
57
64
  end
65
+
66
+ should "define the type of a MongoMapper document id as text" do
67
+ assert_equal :text, Mapper.configuration[:solr_fields][:_id][:type]
68
+ end
69
+
70
+ should "recognize the type String of a MongoMapper key as text" do
71
+ assert_equal :text, Mapper.configuration[:solr_fields][:value1][:type]
72
+ end
58
73
 
59
74
  context "when getting field values" do
60
75
  setup do
@@ -3,6 +3,16 @@ require File.expand_path("#{File.dirname(__FILE__)}/test_helper")
3
3
  class CommonMethodsTest < Test::Unit::TestCase
4
4
  include ActsAsSolr::CommonMethods
5
5
 
6
+ class Mongo
7
+ include MongoMapper::Document
8
+ include ActsAsSolr::MongoMapper
9
+ acts_as_solr
10
+
11
+ def id
12
+ '4b5e0119f3a4b02902000001'
13
+ end
14
+ end
15
+
6
16
  class << self
7
17
  def primary_key
8
18
  "id"
@@ -104,8 +114,15 @@ class CommonMethodsTest < Test::Unit::TestCase
104
114
  end
105
115
 
106
116
  context "when determining the record id" do
107
- should "return the primary key value" do
108
- assert_equal 10, record_id(self)
117
+ context "on ActiveRecord" do
118
+ should "return the primary key value" do
119
+ assert_equal 10, record_id(self)
120
+ end
121
+ end
122
+ context "on MongoMapper" do
123
+ should "return the id value" do
124
+ assert_equal '4b5e0119f3a4b02902000001', record_id(Mongo.new)
125
+ end
109
126
  end
110
127
  end
111
128
  end
@@ -39,7 +39,7 @@ class ParserMethodsTest < Test::Unit::TestCase
39
39
  end
40
40
 
41
41
  should "query with the record ids" do
42
- @parser.expects(:find).with(:all, :conditions => ["documents.id in (?)", [1, 2]]).returns [1, 2]
42
+ @parser.expects(:find).with([1, 2], {}).returns [1, 2]
43
43
  @parser.parse_results(@results)
44
44
  end
45
45
 
@@ -49,7 +49,7 @@ class ParserMethodsTest < Test::Unit::TestCase
49
49
  end
50
50
 
51
51
  should "add :include if :include was specified" do
52
- @parser.expects(:find).with(:all, :conditions => ["documents.id in (?)", [1, 2]], :include => [:author]).returns [1, 2]
52
+ @parser.expects(:find).with([1, 2], :include => [:author]).returns [1, 2]
53
53
  @parser.parse_results(@results, :include => [:author])
54
54
  end
55
55
  end
@@ -140,7 +140,7 @@ class ParserMethodsTest < Test::Unit::TestCase
140
140
  thing3 = stub(:things3)
141
141
  thing3.stubs(:id).returns 3
142
142
  things = [thing1, thing2, thing3]
143
- reordered = @parser.reorder(things, [1, 3, 5])
143
+ reordered = @parser.reorder(things, ['1', '3', '5'])
144
144
  assert_equal [1, 3, 5], reordered.collect{|thing| thing.id}
145
145
  end
146
146
  end
@@ -162,7 +162,7 @@ class ParserMethodsTest < Test::Unit::TestCase
162
162
  end
163
163
 
164
164
  should "set the relevancy of the specified fields and non-filtered terms" do
165
- expected = "(aeroplane brasil continent_t:south OR description_t:(aeroplane brasil)^3 OR tag_t:(aeroplane brasil)^5)"
165
+ expected = "(aeroplane brasil continent_t:south OR tag_t:(aeroplane brasil)^5 OR description_t:(aeroplane brasil)^3)"
166
166
  ActsAsSolr::Post.expects(:execute).with {|request, core|
167
167
  request.to_hash[:q].starts_with? expected
168
168
  }
@@ -178,7 +178,7 @@ class ParserMethodsTest < Test::Unit::TestCase
178
178
  end
179
179
 
180
180
  should "set the relevance with simple queries" do
181
- expected = "(car OR description_t:(car)^3 OR tag_t:(car)^5)"
181
+ expected = "(car OR tag_t:(car)^5 OR description_t:(car)^3)"
182
182
  ActsAsSolr::Post.expects(:execute).with {|request, core|
183
183
  request.to_hash[:q].starts_with? expected
184
184
  }
@@ -15,10 +15,6 @@ class SolrInstance
15
15
  "id"
16
16
  end
17
17
 
18
- def logger
19
- @logger ||= Logger.new(StringIO.new)
20
- end
21
-
22
18
  def record_id(obj)
23
19
  10
24
20
  end
@@ -12,6 +12,7 @@ require File.expand_path("#{dir}/solr_instance")
12
12
  require File.expand_path("#{dir}/parser_instance")
13
13
  require 'erb'
14
14
  require 'ostruct'
15
+ require 'mongo_mapper'
15
16
 
16
17
  if RUBY_VERSION =~ /^1\.9/
17
18
  puts "\nRunning the unit test suite doesn't as of yet work with Ruby 1.9, because Mocha hasn't yet been updated to use minitest."
@@ -22,3 +23,9 @@ end
22
23
  require 'mocha'
23
24
  gem 'thoughtbot-shoulda'
24
25
  require 'shoulda'
26
+
27
+ class Rails
28
+ def self.logger
29
+ Logger.new(StringIO.new)
30
+ end
31
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_solr_reloaded
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Diego Carrion
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-23 00:00:00 -02:00
12
+ date: 2010-01-26 00:00:00 -02:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -45,6 +45,7 @@ files:
45
45
  - lib/acts_as_solr/instance_methods.rb
46
46
  - lib/acts_as_solr/lazy_document.rb
47
47
  - lib/acts_as_solr/local.rb
48
+ - lib/acts_as_solr/mongo_mapper.rb
48
49
  - lib/acts_as_solr/parser_methods.rb
49
50
  - lib/acts_as_solr/search_results.rb
50
51
  - lib/acts_as_solr/solr_fixtures.rb
@@ -203,6 +204,7 @@ files:
203
204
  - test/models/author.rb
204
205
  - test/models/book.rb
205
206
  - test/models/category.rb
207
+ - test/models/document.rb
206
208
  - test/models/dynamic_attribute.rb
207
209
  - test/models/electronic.rb
208
210
  - test/models/gadget.rb
@@ -271,6 +273,7 @@ test_files:
271
273
  - test/models/author.rb
272
274
  - test/models/book.rb
273
275
  - test/models/category.rb
276
+ - test/models/document.rb
274
277
  - test/models/dynamic_attribute.rb
275
278
  - test/models/electronic.rb
276
279
  - test/models/gadget.rb