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 +1 -0
- data/VERSION +1 -1
- data/elastic_searchable.gemspec +5 -2
- data/lib/elastic_searchable/active_record.rb +6 -2
- data/lib/elastic_searchable/callbacks.rb +5 -4
- data/lib/elastic_searchable/index.rb +1 -1
- data/test/helper.rb +1 -0
- data/test/test_elastic_searchable.rb +31 -0
- metadata +23 -9
data/Gemfile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/elastic_searchable.gemspec
CHANGED
@@ -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.
|
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-
|
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
|
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
|
-
|
23
|
+
index_in_elastic_search :lifecycle => :create
|
23
24
|
end
|
24
25
|
def update_index_on_update
|
25
|
-
|
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.
|
10
|
+
record.run_callbacks :after_commit_on_update
|
11
11
|
end
|
12
12
|
self.refresh_index
|
13
13
|
end
|
data/test/helper.rb
CHANGED
@@ -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:
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
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-
|
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: *
|
158
|
+
requirement: *id009
|
145
159
|
prerelease: false
|
146
160
|
name: jeweler
|
147
161
|
- !ruby/object:Gem::Dependency
|
148
162
|
type: :development
|
149
|
-
version_requirements: &
|
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: *
|
172
|
+
requirement: *id010
|
159
173
|
prerelease: false
|
160
174
|
name: rcov
|
161
175
|
- !ruby/object:Gem::Dependency
|
162
176
|
type: :development
|
163
|
-
version_requirements: &
|
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: *
|
188
|
+
requirement: *id011
|
175
189
|
prerelease: false
|
176
190
|
name: sqlite3-ruby
|
177
191
|
description: integrate the elastic search engine with rails
|