sunspot_mongo_mapper 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/sunspot/mongo_mapper.rb +20 -0
- data/lib/sunspot/mongo_mapper/railtie.rb +11 -0
- data/lib/sunspot/mongo_mapper/tasks.rb +24 -0
- data/lib/sunspot_mongo_mapper.rb +1 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/sunspot_mongo_mapper_spec.rb +34 -0
- data/sunspot_mongo_mapper.gemspec +2 -1
- metadata +30 -10
data/lib/sunspot/mongo_mapper.rb
CHANGED
@@ -27,5 +27,25 @@ module Sunspot
|
|
27
27
|
@clazz.all(:id.in => ids)
|
28
28
|
end
|
29
29
|
end
|
30
|
+
|
31
|
+
module ClassMethods
|
32
|
+
def find_in_batches(options = {}, &block)
|
33
|
+
puts "finding in batches: #{options.inspect}"
|
34
|
+
batch_size = options.delete(:batch_size) || 1000
|
35
|
+
start = options.delete(:start) || 0
|
36
|
+
options.delete(:include)
|
37
|
+
records = []
|
38
|
+
|
39
|
+
query(options).skip(start).order(:id.asc).each do |record|
|
40
|
+
records << record
|
41
|
+
if records.size == batch_size
|
42
|
+
yield records
|
43
|
+
records = []
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
yield records unless records.blank?
|
48
|
+
end
|
49
|
+
end
|
30
50
|
end
|
31
51
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
Rake.application['sunspot:reindex'].clear
|
2
|
+
|
3
|
+
namespace :sunspot do
|
4
|
+
desc "Reindex all solr models that are located in your application's models directory."
|
5
|
+
task :reindex, [:batch_size, :models] => :environment do |t, args|
|
6
|
+
reindex_options = {:batch_commit => false}
|
7
|
+
case args[:batch_size]
|
8
|
+
when 'false'
|
9
|
+
reindex_options[:batch_size] = nil
|
10
|
+
when /^\d+$/
|
11
|
+
reindex_options[:batch_size] = args[:batch_size].to_i if args[:batch_size].to_i > 0
|
12
|
+
end
|
13
|
+
unless args[:models]
|
14
|
+
all_files = Dir.glob(Rails.root.join('app', 'models', '*.rb'))
|
15
|
+
all_models = all_files.map { |path| File.basename(path, '.rb').camelize.constantize }
|
16
|
+
sunspot_models = all_models.select { |m| m.respond_to?(:searchable?) && m.searchable? }
|
17
|
+
else
|
18
|
+
sunspot_models = args[:models].split('+').map{|m| m.constantize}
|
19
|
+
end
|
20
|
+
sunspot_models.each do |model|
|
21
|
+
model.solr_reindex reindex_options
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/sunspot_mongo_mapper.rb
CHANGED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sunspot::MongoMapper do
|
4
|
+
class Post
|
5
|
+
include MongoMapper::Document
|
6
|
+
end
|
7
|
+
|
8
|
+
describe '.find_in_batches' do
|
9
|
+
before do
|
10
|
+
3.times {|i| Post.create!(:title => "Post #{i}") }
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should yield array of records in order' do
|
14
|
+
results = []
|
15
|
+
|
16
|
+
Post.find_in_batches(:batch_size => 2) do |records|
|
17
|
+
results << records
|
18
|
+
end
|
19
|
+
|
20
|
+
results[0].length.should == 2
|
21
|
+
results[1].length.should == 1
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should pass conditions' do
|
25
|
+
results = []
|
26
|
+
Post.find_in_batches(:title => 'Post 1') do |records|
|
27
|
+
results.concat records
|
28
|
+
end
|
29
|
+
|
30
|
+
results.size.should == 1
|
31
|
+
results.first.title.should == 'Post 1'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'sunspot_mongo_mapper'
|
5
|
-
s.version = '0.1.
|
5
|
+
s.version = '0.1.1'
|
6
6
|
s.authors = ['Brandon Keepers']
|
7
7
|
s.email = ['brandon@opensoul.org']
|
8
8
|
s.homepage = "https://github.com/bkeepers/sunspot_mongo_mapper"
|
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.add_runtime_dependency 'mongo_mapper'
|
18
18
|
s.add_runtime_dependency 'sunspot', '~> 1.1'
|
19
19
|
s.add_runtime_dependency 'sunspot_rails', '~> 1.1'
|
20
|
+
s.add_runtime_dependency 'rails', '~> 3.0'
|
20
21
|
s.add_development_dependency 'rspec', '~> 2.0'
|
21
22
|
s.add_development_dependency 'rake'
|
22
23
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sunspot_mongo_mapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Brandon Keepers
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-11-
|
18
|
+
date: 2011-11-18 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -63,9 +63,24 @@ dependencies:
|
|
63
63
|
type: :runtime
|
64
64
|
version_requirements: *id003
|
65
65
|
- !ruby/object:Gem::Dependency
|
66
|
-
name:
|
66
|
+
name: rails
|
67
67
|
prerelease: false
|
68
68
|
requirement: &id004 !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ~>
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
hash: 7
|
74
|
+
segments:
|
75
|
+
- 3
|
76
|
+
- 0
|
77
|
+
version: "3.0"
|
78
|
+
type: :runtime
|
79
|
+
version_requirements: *id004
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: rspec
|
82
|
+
prerelease: false
|
83
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
69
84
|
none: false
|
70
85
|
requirements:
|
71
86
|
- - ~>
|
@@ -76,11 +91,11 @@ dependencies:
|
|
76
91
|
- 0
|
77
92
|
version: "2.0"
|
78
93
|
type: :development
|
79
|
-
version_requirements: *
|
94
|
+
version_requirements: *id005
|
80
95
|
- !ruby/object:Gem::Dependency
|
81
96
|
name: rake
|
82
97
|
prerelease: false
|
83
|
-
requirement: &
|
98
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
84
99
|
none: false
|
85
100
|
requirements:
|
86
101
|
- - ">="
|
@@ -90,7 +105,7 @@ dependencies:
|
|
90
105
|
- 0
|
91
106
|
version: "0"
|
92
107
|
type: :development
|
93
|
-
version_requirements: *
|
108
|
+
version_requirements: *id006
|
94
109
|
description: A Sunspot wrapper for MongoMapper.
|
95
110
|
email:
|
96
111
|
- brandon@opensoul.org
|
@@ -107,7 +122,11 @@ files:
|
|
107
122
|
- README.md
|
108
123
|
- Rakefile
|
109
124
|
- lib/sunspot/mongo_mapper.rb
|
125
|
+
- lib/sunspot/mongo_mapper/railtie.rb
|
126
|
+
- lib/sunspot/mongo_mapper/tasks.rb
|
110
127
|
- lib/sunspot_mongo_mapper.rb
|
128
|
+
- spec/spec_helper.rb
|
129
|
+
- spec/sunspot_mongo_mapper_spec.rb
|
111
130
|
- sunspot_mongo_mapper.gemspec
|
112
131
|
has_rdoc: true
|
113
132
|
homepage: https://github.com/bkeepers/sunspot_mongo_mapper
|
@@ -143,5 +162,6 @@ rubygems_version: 1.6.1
|
|
143
162
|
signing_key:
|
144
163
|
specification_version: 3
|
145
164
|
summary: A Sunspot wrapper for MongoMapper.
|
146
|
-
test_files:
|
147
|
-
|
165
|
+
test_files:
|
166
|
+
- spec/spec_helper.rb
|
167
|
+
- spec/sunspot_mongo_mapper_spec.rb
|