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.
@@ -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,11 @@
1
+ require 'rails'
2
+
3
+ module Sunspot
4
+ module MongoMapper
5
+ class Railtie < ::Rails::Railtie
6
+ rake_tasks do
7
+ load "sunspot/mongo_mapper/tasks.rb"
8
+ end
9
+ end
10
+ end
11
+ 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
@@ -1,3 +1,4 @@
1
1
  require 'sunspot/mongo_mapper'
2
+ require 'sunspot/mongo_mapper/railtie'
2
3
 
3
4
  MongoMapper::Document.plugin Sunspot::MongoMapper
@@ -0,0 +1,11 @@
1
+ require 'bundler'
2
+ Bundler.require :default, :test
3
+ require 'sunspot_mongo_mapper'
4
+
5
+ MongoMapper.database = 'sunspot_mongo_mapper'
6
+
7
+ RSpec.configure do |config|
8
+ config.before do
9
+ MongoMapper.database.collections.each(&:remove)
10
+ end
11
+ end
@@ -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.0'
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: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
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-17 00:00:00 -05:00
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: rspec
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: *id004
94
+ version_requirements: *id005
80
95
  - !ruby/object:Gem::Dependency
81
96
  name: rake
82
97
  prerelease: false
83
- requirement: &id005 !ruby/object:Gem::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: *id005
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