sunspot_mongo_mapper 0.1.0 → 0.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.
@@ -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