tire-contrib 0.0.3.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -1,15 +1,27 @@
1
1
  Tire Contributed Components
2
2
  ================================
3
3
 
4
- Contributions, additions, extensions and other utilities for the [Tire](http://karmi.github.com/tire/)
5
- Rubygem for _ElasticSearch_.
4
+ Extension, additions, other utilities for the [_Tire_](http://karmi.github.com/tire/)
5
+ Rubygem for [_ElasticSearch_](http://www.elasticsearch.org/).
6
6
 
7
- See specific files or folders inside the `lib/tire` folder.
7
+ Add this to your _Gemfile_:
8
8
 
9
- rails-logger
10
- ------------
9
+ gem 'tire-contrib'
11
10
 
12
- Adds support for displaying Tire related statistics to Rails' log.
11
+ Then require the component you want to use in your application initializer. For example:
12
+
13
+ require 'tire/rails/logger'
14
+
15
+ See specific files and folders inside the `lib/tire` folder for instructions and documentation.
16
+
17
+
18
+ ### More Like This Queries ###
19
+
20
+ Adds support for [“more like this”](http://www.elasticsearch.org/guide/reference/query-dsl/mlt-query.html) queries.
21
+
22
+ ### Rails Logger ###
23
+
24
+ Adds support for displaying Tire related statistics in the Rails' log.
13
25
 
14
26
  -----
15
27
 
data/Rakefile CHANGED
@@ -1,2 +1,10 @@
1
1
  require 'bundler'
2
2
  Bundler::GemHelper.install_tasks
3
+
4
+ require 'rake/testtask'
5
+ Rake::TestTask.new(:test) do |test|
6
+ test.libs << 'lib' << 'test'
7
+ test.test_files = FileList['test/**/*_test.rb']
8
+ test.verbose = true
9
+ # test.warning = true
10
+ end
@@ -0,0 +1,3 @@
1
+ This directory contains the extensions to [_Tire_](http://github.com/karmi/tire).
2
+
3
+ Please refer to the relevant Ruby files for instructions on usage and other documentation.
@@ -0,0 +1,30 @@
1
+ module Tire
2
+ module Search
3
+ module MoreLikeThis
4
+ def more_like_this(like_text, options = {})
5
+ @value = {:mlt => {:like_text => like_text}}
6
+ @value[:mlt].update(validate_more_like_this_options(options))
7
+ @value
8
+ end
9
+
10
+ def more_like_this_field(field, like_text, options = {})
11
+ @value = {:mlt_field => {field => {:like_text => like_text}}}
12
+ # :fields is invalid in this context. Better than doing some kind of meta-black magic.
13
+ options.delete(:fields)
14
+ @value[:mlt_field][field].update(validate_more_like_this_options(options))
15
+ @value
16
+ end
17
+
18
+ alias_method :mlt, :more_like_this
19
+ alias_method :mlt_field, :more_like_this_field
20
+
21
+ private
22
+ def validate_more_like_this_options(options)
23
+ valid_options = [:fields, :percent_terms_to_match, :min_term_freq,
24
+ :max_query_terms, :stop_words, :min_doc_freq, :max_doc_freq,
25
+ :min_word_len, :max_word_len, :boost_terms, :boost, :analyzer]
26
+ options.delete_if { |key, value| !valid_options.member? key }
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,43 @@
1
+ # More Like This
2
+ # ==============
3
+ #
4
+ # Author: Mereghost <marcello.rocha@gmail.com>
5
+ #
6
+ #
7
+ # Adds support for "more_like_this" and "more_like_this_field" queries in Tire DSL.
8
+ #
9
+ # It hooks into the Query class and inserts the more_like_this and more_like_this_field query types.
10
+ #
11
+ #
12
+ # Usage:
13
+ # ------
14
+ #
15
+ # Require the component:
16
+ #
17
+ # require 'tire/queries/more_like_this'
18
+ #
19
+ # From that point on you should have the more_like_this (aliased to mlt) and
20
+ # the more_like_this_field (aliased to mlt_field) queries available.
21
+ #
22
+ #
23
+ # Example:
24
+ # -------
25
+ #
26
+ # Tire.search 'articles' do
27
+ # query do
28
+ # more_like_this 'search for similar text'
29
+ # more_like_this_field :field_name, 'similar text'
30
+ # end
31
+ # end
32
+ #
33
+ # For available options for these queries see:
34
+ #
35
+ # * <http://www.elasticsearch.org/guide/reference/query-dsl/mlt-query.html>
36
+ # * <http://www.elasticsearch.org/guide/reference/query-dsl/mlt-field-query.html>
37
+ #
38
+ #
39
+ require 'tire/queries/more_like_this/more_like_this'
40
+
41
+ Tire::Search::Query.class_eval do
42
+ include Tire::Search::MoreLikeThis
43
+ end
@@ -0,0 +1,19 @@
1
+ module Tire
2
+ module Rails
3
+ module Instrumentation
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ alias_method_chain :perform, :instrumentation
8
+ end
9
+
10
+ def perform_with_instrumentation
11
+ # Wrapper around the Search.perform method that logs search times.
12
+ #
13
+ ActiveSupport::Notifications.instrument("search.tire", :name => 'Search', :search => self.to_json) do
14
+ perform_without_instrumentation
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -3,9 +3,9 @@ module Tire
3
3
  class Railtie < ::Rails::Railtie
4
4
 
5
5
  initializer "tire.initializer" do |app|
6
- require 'tire/rails-logger/instrumentation'
7
- require 'tire/rails-logger/log_subscriber'
8
- require 'tire/rails-logger/controller_runtime'
6
+ require 'tire/rails/logger/instrumentation'
7
+ require 'tire/rails/logger/log_subscriber'
8
+ require 'tire/rails/logger/controller_runtime'
9
9
 
10
10
  # Inject instrumentation into Tire::Search
11
11
  #
@@ -14,17 +14,17 @@
14
14
  #
15
15
  # Require the component in your `application.rb`:
16
16
  #
17
- # require 'tire/rails-logger'
17
+ # require 'tire/rails/logger'
18
18
  #
19
19
  # You should see an output like this in your application log:
20
20
  #
21
21
  # Started GET "/articles?utf8=%E2%9C%93&q=bull*&commit=search" for 127.0.0.1 at 2011-09-15 19:07:00 +0200
22
22
  # Processing by ArticlesController#index as HTML
23
23
  # Parameters: {"utf8"=>"✓", "q"=>"bull*", "commit"=>"search"}
24
- # Tire search (6.7ms) {"query":{"query_string":{"query":"bull*"}}}
24
+ # Search (6.7ms) {"query":{"query_string":{"query":"bull*"}}}
25
25
  # Article Load (0.3ms) SELECT `articles`.* FROM `articles` WHERE `articles`.`id` IN (104126575)
26
26
  # Rendered articles/index.html.erb within layouts/application (13.0ms)
27
27
  # Completed 200 OK in 63ms (Views: 53.7ms | ActiveRecord: 1.8ms | Tire: 6.7ms)
28
28
  #
29
29
  #
30
- require 'tire/rails-logger/railtie'
30
+ require 'tire/rails/logger/railtie'
@@ -0,0 +1,2 @@
1
+ The `tire-contrib` namespace is **not** used for any code.
2
+ See the `tire` directory.
@@ -1,5 +1,5 @@
1
1
  module Tire
2
2
  module Contrib
3
- VERSION = "0.0.3.6"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
data/lib/tire-contrib.rb CHANGED
@@ -1,5 +1,4 @@
1
- # Require all Tire::Contrib components
2
- #
3
- Dir[ File.join File.expand_path('../', __FILE__), 'tire', '*.rb' ].each do |component|
4
- # require component
1
+ module Tire
2
+ module Contrib
3
+ end
5
4
  end
@@ -0,0 +1,37 @@
1
+ require 'tire'
2
+ require 'tire/queries/more_like_this'
3
+ require 'shoulda'
4
+
5
+ module Tire
6
+ module Search
7
+ class MoreLikeThisTest < Test::Unit::TestCase
8
+ context "More Like This queries" do
9
+ should "search for similar documents" do
10
+ assert_equal({:mlt => {:like_text => 'similar text'}}, Query.new.mlt('similar text'))
11
+ end
12
+
13
+ should "allow to pass a list of fields to a mlt query" do
14
+ assert_equal({:mlt => {:like_text => 'similar text', :fields => ['foo', 'bar.baz']}},
15
+ Query.new.mlt('similar text', :fields => ['foo', 'bar.baz']))
16
+ assert_equal({:mlt => {:like_text => 'similar text', :fields => ['foo', 'bar.baz'], :min_term_freq => 3}},
17
+ Query.new.mlt('similar text', :fields => ['foo', 'bar.baz'], :min_term_freq => 3))
18
+ end
19
+
20
+ should "search for similar text on a selected field (mlt_field)" do
21
+ assert_equal({:mlt_field => {:foo => {:like_text => 'similar text'}}},
22
+ Query.new.mlt_field(:foo, 'similar text'))
23
+ assert_equal({:mlt_field => {:foo => {:like_text => 'similar text', :min_term_freq => 1}}},
24
+ Query.new.mlt_field(:foo, 'similar text', :min_term_freq => 1))
25
+ end
26
+ end
27
+ context "validate the options passed" do
28
+ should "drop all the invalid keys" do
29
+ assert_equal({:mlt => {:like_text => 'similar text', :fields => ['foo', 'bar.baz']}},
30
+ Query.new.mlt('similar text', :fields => ['foo', 'bar.baz'], :foo => :bar))
31
+ assert_equal({:mlt_field => {:foo => {:like_text => 'similar text'}}},
32
+ Query.new.mlt_field(:foo, 'similar text', :fields => [:bar]))
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -58,7 +58,7 @@ module Tire
58
58
  ActiveRecordArticle.search '*', :load => true
59
59
  wait
60
60
  assert_equal 1, @logger.logged(:debug).size
61
- assert_match /Tire/, @logger.logged(:debug).last
61
+ assert_match /Search \(\d+\.?\d*ms\)/, @logger.logged(:debug).last
62
62
  end
63
63
 
64
64
  end
data/tire-contrib.gemspec CHANGED
@@ -19,8 +19,9 @@ Gem::Specification.new do |s|
19
19
  s.add_development_dependency "turn"
20
20
  s.add_development_dependency "shoulda"
21
21
  s.add_development_dependency "mocha"
22
- s.add_development_dependency "sdoc"
23
- s.add_development_dependency "rcov"
22
+ s.add_development_dependency "activerecord"
23
+ s.add_development_dependency "activesupport"
24
+ s.add_development_dependency "sqlite3"
24
25
 
25
26
  s.extra_rdoc_files = [ "README.markdown", "MIT-LICENSE" ]
26
27
  s.rdoc_options = [ "--charset=UTF-8" ]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tire-contrib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3.6
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-03-13 00:00:00.000000000 Z
13
+ date: 2012-03-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: tire
17
- requirement: &70127244984360 !ruby/object:Gem::Requirement
17
+ requirement: &70240919138540 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70127244984360
25
+ version_requirements: *70240919138540
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: bundler
28
- requirement: &70127244980560 !ruby/object:Gem::Requirement
28
+ requirement: &70240919135160 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 1.1.0
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *70127244980560
36
+ version_requirements: *70240919135160
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: turn
39
- requirement: &70127244977360 !ruby/object:Gem::Requirement
39
+ requirement: &70240919151640 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *70127244977360
47
+ version_requirements: *70240919151640
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: shoulda
50
- requirement: &70127244990880 !ruby/object:Gem::Requirement
50
+ requirement: &70240919149000 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *70127244990880
58
+ version_requirements: *70240919149000
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: mocha
61
- requirement: &70127244987900 !ruby/object:Gem::Requirement
61
+ requirement: &70240919148260 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *70127244987900
69
+ version_requirements: *70240919148260
70
70
  - !ruby/object:Gem::Dependency
71
- name: sdoc
72
- requirement: &70127245027000 !ruby/object:Gem::Requirement
71
+ name: activerecord
72
+ requirement: &70240919146940 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *70127245027000
80
+ version_requirements: *70240919146940
81
81
  - !ruby/object:Gem::Dependency
82
- name: rcov
83
- requirement: &70127245058320 !ruby/object:Gem::Requirement
82
+ name: activesupport
83
+ requirement: &70240919160100 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,7 +88,18 @@ dependencies:
88
88
  version: '0'
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *70127245058320
91
+ version_requirements: *70240919160100
92
+ - !ruby/object:Gem::Dependency
93
+ name: sqlite3
94
+ requirement: &70240919157720 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ type: :development
101
+ prerelease: false
102
+ version_requirements: *70240919157720
92
103
  description:
93
104
  email:
94
105
  - karmi@karmi.cz
@@ -105,14 +116,19 @@ files:
105
116
  - README.markdown
106
117
  - Rakefile
107
118
  - lib/tire-contrib.rb
119
+ - lib/tire-contrib/README.markdown
108
120
  - lib/tire-contrib/version.rb
109
- - lib/tire/rails-logger.rb
110
- - lib/tire/rails-logger/controller_runtime.rb
111
- - lib/tire/rails-logger/instrumentation.rb
112
- - lib/tire/rails-logger/log_subscriber.rb
113
- - lib/tire/rails-logger/railtie.rb
114
- - test/rails-logger/active_record_article.rb
115
- - test/rails-logger/log_subscriber_test.rb
121
+ - lib/tire/README.markdown
122
+ - lib/tire/queries/more_like_this.rb
123
+ - lib/tire/queries/more_like_this/more_like_this.rb
124
+ - lib/tire/rails/logger.rb
125
+ - lib/tire/rails/logger/controller_runtime.rb
126
+ - lib/tire/rails/logger/instrumentation.rb
127
+ - lib/tire/rails/logger/log_subscriber.rb
128
+ - lib/tire/rails/logger/railtie.rb
129
+ - test/queries/more_like_this/more_like_this_test.rb
130
+ - test/rails/logger/active_record_article.rb
131
+ - test/rails/logger/log_subscriber_test.rb
116
132
  - test/test_helper.rb
117
133
  - tire-contrib.gemspec
118
134
  homepage: ''
@@ -141,7 +157,8 @@ signing_key:
141
157
  specification_version: 3
142
158
  summary: Contributions and additions for the Tire gem
143
159
  test_files:
144
- - test/rails-logger/active_record_article.rb
145
- - test/rails-logger/log_subscriber_test.rb
160
+ - test/queries/more_like_this/more_like_this_test.rb
161
+ - test/rails/logger/active_record_article.rb
162
+ - test/rails/logger/log_subscriber_test.rb
146
163
  - test/test_helper.rb
147
164
  has_rdoc:
@@ -1,21 +0,0 @@
1
- module Tire
2
- module Rails
3
- module Instrumentation
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
- alias_method_chain :perform, :instrumentation
8
- end
9
-
10
- module InstanceMethods
11
- def perform_with_instrumentation
12
- # Wrapper around the Search.perform method that logs search times.
13
- #
14
- ActiveSupport::Notifications.instrument("search.tire", :name => 'Search', :search => self.to_json) do
15
- perform_without_instrumentation
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end