tire-contrib 0.0.3.6 → 0.1.0

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/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