elastic_searchable 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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