elastic_searchable 0.1.2 → 0.1.3

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/Gemfile CHANGED
@@ -12,6 +12,7 @@ gem 'larsklevan-after_commit', '~> 1.0.5', :require => 'after_commit'
12
12
  group :development do
13
13
  gem "shoulda", ">= 0"
14
14
  gem "bundler", "~> 1.0.0"
15
+ gem 'mocha', '>= 0'
15
16
  gem "jeweler", "~> 1.5.2"
16
17
  gem "rcov", ">= 0"
17
18
  gem 'sqlite3-ruby', '~> 1.3.2'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{elastic_searchable}
8
- s.version = "0.1.2"
8
+ s.version = "0.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ryan Sonnek"]
12
- s.date = %q{2011-01-25}
12
+ s.date = %q{2011-01-26}
13
13
  s.description = %q{integrate the elastic search engine with rails}
14
14
  s.email = %q{ryan@codecrate.com}
15
15
  s.extra_rdoc_files = [
@@ -54,6 +54,7 @@ Gem::Specification.new do |s|
54
54
  s.add_runtime_dependency(%q<larsklevan-after_commit>, ["~> 1.0.5"])
55
55
  s.add_development_dependency(%q<shoulda>, [">= 0"])
56
56
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
57
+ s.add_development_dependency(%q<mocha>, [">= 0"])
57
58
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
58
59
  s.add_development_dependency(%q<rcov>, [">= 0"])
59
60
  s.add_development_dependency(%q<sqlite3-ruby>, ["~> 1.3.2"])
@@ -65,6 +66,7 @@ Gem::Specification.new do |s|
65
66
  s.add_dependency(%q<larsklevan-after_commit>, ["~> 1.0.5"])
66
67
  s.add_dependency(%q<shoulda>, [">= 0"])
67
68
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
69
+ s.add_dependency(%q<mocha>, [">= 0"])
68
70
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
69
71
  s.add_dependency(%q<rcov>, [">= 0"])
70
72
  s.add_dependency(%q<sqlite3-ruby>, ["~> 1.3.2"])
@@ -77,6 +79,7 @@ Gem::Specification.new do |s|
77
79
  s.add_dependency(%q<larsklevan-after_commit>, ["~> 1.0.5"])
78
80
  s.add_dependency(%q<shoulda>, [">= 0"])
79
81
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
82
+ s.add_dependency(%q<mocha>, [">= 0"])
80
83
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
81
84
  s.add_dependency(%q<rcov>, [">= 0"])
82
85
  s.add_dependency(%q<sqlite3-ruby>, ["~> 1.3.2"])
@@ -14,12 +14,16 @@ module ElasticSearchable
14
14
  module ClassMethods
15
15
  attr_accessor :index_name
16
16
  attr_accessor :elastic_search_type
17
+ attr_accessor :elastic_options
17
18
 
18
19
  # Valid options:
19
20
  # :index_name (will default class name using method "underscore")
21
+ # :if
22
+ # :unless
20
23
  def elastic_searchable(options = {})
21
24
  options.symbolize_keys!
22
-
25
+
26
+ self.elastic_options = options
23
27
  @index_name = options[:index_name] || self.name.underscore.gsub(/\//,'-')
24
28
  @elastic_search_type = options[:elastic_search_type] || self.name.underscore.singularize.gsub(/\//,'-')
25
29
 
@@ -43,7 +47,7 @@ module ElasticSearchable
43
47
  def indexed_json_document
44
48
  self.to_json
45
49
  end
46
- def local_index_in_elastic_search(options = {})
50
+ def index_in_elastic_search(options = {})
47
51
  options[:id] ||= self.id.to_s
48
52
  document = self.indexed_json_document
49
53
  ElasticSearchable.searcher.index document, self.class.elastic_search_options(options)
@@ -11,18 +11,19 @@ module ElasticSearchable
11
11
  backgrounded :delete_id_from_index => {:queue => 'searchindex'}
12
12
  end
13
13
 
14
+ callback_options = self.elastic_options.slice :if, :unless
14
15
  define_callbacks :after_index_on_create, :after_index_on_update, :after_index
15
- after_commit_on_create :update_index_on_create_backgrounded
16
- after_commit_on_update :update_index_on_update_backgrounded
16
+ after_commit_on_create :update_index_on_create_backgrounded, callback_options
17
+ after_commit_on_update :update_index_on_update_backgrounded, callback_options
17
18
  after_commit_on_destroy Proc.new {|o| o.class.delete_id_from_index_backgrounded(o.id) }
18
19
  end
19
20
  end
20
21
 
21
22
  def update_index_on_create
22
- local_index_in_elastic_search :lifecycle => :create
23
+ index_in_elastic_search :lifecycle => :create
23
24
  end
24
25
  def update_index_on_update
25
- local_index_in_elastic_search :lifecycle => :update
26
+ index_in_elastic_search :lifecycle => :update
26
27
  end
27
28
  end
28
29
  end
@@ -7,7 +7,7 @@ module ElasticSearchable
7
7
  ElasticSearchable.searcher.update_mapping(@mapping, self.elastic_search_options) if @mapping
8
8
 
9
9
  self.find_each do |record|
10
- record.local_index_in_elastic_search
10
+ record.run_callbacks :after_commit_on_update
11
11
  end
12
12
  self.refresh_index
13
13
  end
data/test/helper.rb CHANGED
@@ -9,6 +9,7 @@ rescue Bundler::BundlerError => e
9
9
  end
10
10
  require 'test/unit'
11
11
  require 'shoulda'
12
+ require 'mocha'
12
13
 
13
14
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
15
  $LOAD_PATH.unshift(File.dirname(__FILE__))
@@ -6,6 +6,11 @@ class TestElasticSearchable < Test::Unit::TestCase
6
6
  t.column :title, :string
7
7
  t.column :body, :string
8
8
  end
9
+
10
+ create_table :blogs, :force => true do |t|
11
+ t.column :title, :string
12
+ t.column :body, :string
13
+ end
9
14
  end
10
15
 
11
16
  class Post < ActiveRecord::Base
@@ -52,4 +57,30 @@ class TestElasticSearchable < Test::Unit::TestCase
52
57
  end
53
58
  end
54
59
  end
60
+
61
+ class Blog < ActiveRecord::Base
62
+ elastic_searchable :if => proc {|b| b.should_index? }
63
+ def should_index?
64
+ false
65
+ end
66
+ end
67
+ context 'activerecord class with :if=>proc' do
68
+ context 'when creating new instance' do
69
+ setup do
70
+ Blog.any_instance.expects(:index_in_elastic_search).never
71
+ Blog.delete_all
72
+ Blog.create_index
73
+ Blog.create! :title => 'foo'
74
+ end
75
+ should 'not index record' do end #see expectations
76
+
77
+ context 'recreating new index' do
78
+ setup do
79
+ Blog.any_instance.expects(:index_in_elastic_search).never
80
+ Blog.create_index
81
+ end
82
+ should 'not index record' do end #see expectations
83
+ end
84
+ end
85
+ end
55
86
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elastic_searchable
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 2
10
- version: 0.1.2
9
+ - 3
10
+ version: 0.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan Sonnek
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-25 00:00:00 -06:00
18
+ date: 2011-01-26 00:00:00 -06:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -131,6 +131,20 @@ dependencies:
131
131
  - !ruby/object:Gem::Dependency
132
132
  type: :development
133
133
  version_requirements: &id008 !ruby/object:Gem::Requirement
134
+ none: false
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ hash: 3
139
+ segments:
140
+ - 0
141
+ version: "0"
142
+ requirement: *id008
143
+ prerelease: false
144
+ name: mocha
145
+ - !ruby/object:Gem::Dependency
146
+ type: :development
147
+ version_requirements: &id009 !ruby/object:Gem::Requirement
134
148
  none: false
135
149
  requirements:
136
150
  - - ~>
@@ -141,12 +155,12 @@ dependencies:
141
155
  - 5
142
156
  - 2
143
157
  version: 1.5.2
144
- requirement: *id008
158
+ requirement: *id009
145
159
  prerelease: false
146
160
  name: jeweler
147
161
  - !ruby/object:Gem::Dependency
148
162
  type: :development
149
- version_requirements: &id009 !ruby/object:Gem::Requirement
163
+ version_requirements: &id010 !ruby/object:Gem::Requirement
150
164
  none: false
151
165
  requirements:
152
166
  - - ">="
@@ -155,12 +169,12 @@ dependencies:
155
169
  segments:
156
170
  - 0
157
171
  version: "0"
158
- requirement: *id009
172
+ requirement: *id010
159
173
  prerelease: false
160
174
  name: rcov
161
175
  - !ruby/object:Gem::Dependency
162
176
  type: :development
163
- version_requirements: &id010 !ruby/object:Gem::Requirement
177
+ version_requirements: &id011 !ruby/object:Gem::Requirement
164
178
  none: false
165
179
  requirements:
166
180
  - - ~>
@@ -171,7 +185,7 @@ dependencies:
171
185
  - 3
172
186
  - 2
173
187
  version: 1.3.2
174
- requirement: *id010
188
+ requirement: *id011
175
189
  prerelease: false
176
190
  name: sqlite3-ruby
177
191
  description: integrate the elastic search engine with rails