rsolr-footnotes 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,19 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "shoulda", ">= 0"
10
+ gem "mocha"
11
+ gem "bundler", "~> 1.0.0"
12
+ gem "jeweler", "~> 1.5.1"
13
+ gem "rcov", ">= 0"
14
+ end
15
+
16
+ gem "activesupport"
17
+ gem "rails"
18
+ gem "rails-footnotes"
19
+ gem "rsolr"
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Chris Beer
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,29 @@
1
+ = rsolr-footnotes
2
+
3
+ This gem provides a rails-footnote (https://github.com/josevalim/rails-footnotes) pane that displays request/response information from RSolr (https://github.com/mwmitchell/rsolr) queries.
4
+
5
+ Preliminary testing has only been performed in Blacklight (http://projectblacklight.org), but should presumably work with any Rails application that uses RSolr.
6
+
7
+ = Installation
8
+
9
+ === Rails 3.x
10
+
11
+ gem "rails-footnotes", ">= 3.7", :group => :development
12
+ gem "rsolr-footnotes", :group => :development
13
+
14
+
15
+ == Contributing to rsolr-footnotes
16
+
17
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
18
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
19
+ * Fork the project
20
+ * Start a feature/bugfix branch
21
+ * Commit and push until you are happy with your contribution
22
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
23
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
24
+
25
+ == Copyright
26
+
27
+ Copyright (c) 2011 Chris Beer. See LICENSE.txt for
28
+ further details.
29
+
data/Rakefile ADDED
@@ -0,0 +1,53 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'rake'
11
+
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gem|
14
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
+ gem.name = "rsolr-footnotes"
16
+ gem.homepage = "http://github.com/cbeer/rsolr-footnotes"
17
+ gem.license = "MIT"
18
+ gem.summary = %Q{rails-footnotes for rsolr}
19
+ # gem.description = %Q{TODO: longer description of your gem}
20
+ gem.email = "chris@cbeer.info"
21
+ gem.authors = ["Chris Beer"]
22
+ # Include your dependencies below. Runtime dependencies are required when using your gem,
23
+ # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
24
+ # gem.add_runtime_dependency 'jabber4r', '> 0.1'
25
+ # gem.add_development_dependency 'rspec', '> 1.2.3'
26
+ end
27
+ Jeweler::RubygemsDotOrgTasks.new
28
+
29
+ require 'rake/testtask'
30
+ Rake::TestTask.new(:test) do |test|
31
+ test.libs << 'lib' << 'test'
32
+ test.pattern = 'test/**/test_*.rb'
33
+ test.verbose = true
34
+ end
35
+
36
+ require 'rcov/rcovtask'
37
+ Rcov::RcovTask.new do |test|
38
+ test.libs << 'test'
39
+ test.pattern = 'test/**/test_*.rb'
40
+ test.verbose = true
41
+ end
42
+
43
+ task :default => :test
44
+
45
+ require 'rake/rdoctask'
46
+ Rake::RDocTask.new do |rdoc|
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = "rsolr-footnotes #{version}"
51
+ rdoc.rdoc_files.include('README*')
52
+ rdoc.rdoc_files.include('lib/**/*.rb')
53
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,94 @@
1
+ module Footnotes::Notes
2
+ class RsolrRequestsNote < AbstractNote
3
+ def self.query_subscriber
4
+ @@query_subscriber ||= RsolrSubscriber.new
5
+ end
6
+
7
+ def self.start!(controller)
8
+ self.query_subscriber.reset!
9
+ end
10
+
11
+ def events
12
+ self.class.query_subscriber.events
13
+ end
14
+
15
+ def self.title
16
+ "Solr Requests"
17
+ end
18
+
19
+ def stylesheet
20
+ <<-CSS
21
+ .rsolr_response_note { margin-bottom: 1em }
22
+ .rsolr_response_note .response { padding-left: 50px; color: #777; }
23
+
24
+ CSS
25
+ end
26
+
27
+ def content
28
+ html = ''
29
+
30
+ events.each_with_index do |event, index|
31
+ html << <<-HTML
32
+ <div class="rsolr_response_note">
33
+ <b>#{event.method.to_s.upcase} #{event.path}</b> (<a href="#{ event.uri.to_s }">[link]</a>)
34
+ <span>(#{ event.duration } ms)</span><br />
35
+ <span><b>params:</b> #{ event.params.inspect }</span><br />
36
+ <span><b>header:</b> #{ event.response["responseHeader"].inspect }</span><br />
37
+ <a href=\"javascript:Footnotes.toggle('rsolr_response_#{index}')\" style=\"color:#00A;\">toggle response</a>
38
+ <p class="response" id="rsolr_response_#{index}" style="display:none;">#{ event.response.inspect }</p>
39
+ </div>
40
+ HTML
41
+ end
42
+
43
+ html
44
+ end
45
+ end
46
+
47
+ class RsolrSubscriberNotificationEvent < ActiveSupport::Notifications::Event
48
+ def initialize *args
49
+ super(*args)
50
+ end
51
+
52
+ def path
53
+ payload[:path]
54
+ end
55
+
56
+ def response
57
+ payload[:response]
58
+ end
59
+
60
+ def params
61
+ payload[:params]
62
+ end
63
+
64
+ def query
65
+ payload[:query]
66
+ end
67
+
68
+ def method
69
+ payload[:method]
70
+ end
71
+
72
+ def uri
73
+ payload[:uri]
74
+ end
75
+ end
76
+
77
+ class RsolrSubscriber < ActiveSupport::LogSubscriber
78
+ attr_accessor :events
79
+
80
+ def initialize
81
+ self.events = []
82
+
83
+ ActiveSupport::Notifications.subscribe("execute.rsolr_client") do |*args|
84
+ # args.last[:caller] = caller
85
+ @events << RsolrSubscriberNotificationEvent.new(*args)
86
+ end
87
+ end
88
+
89
+ def reset!
90
+ self.events.clear
91
+ end
92
+
93
+ end
94
+ end
@@ -0,0 +1,25 @@
1
+ module RSolr::Ext
2
+ module Notifications
3
+ def self.included(base)
4
+ base.send :extend, ClassMethods
5
+ end
6
+
7
+ def execute_with_notifications(*args)
8
+ payload = args.first.dup
9
+ ActiveSupport::Notifications.instrument("execute.rsolr_client", payload) do
10
+ payload[:response] = execute_without_notifications(*args)
11
+ end
12
+ end
13
+
14
+ module ClassMethods
15
+ def enable_notifications!
16
+ self.class_exec do
17
+ unless method_defined?(:execute_without_notifications)
18
+ alias_method :execute_without_notifications, :execute
19
+ alias_method :execute, :execute_with_notifications
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,9 @@
1
+ require 'rsolr-footnotes'
2
+ require 'rails'
3
+
4
+ module RsolrFootnotes
5
+ class Railtie < Rails::Railtie
6
+ RsolrFootnotes.load!
7
+ Footnotes::Filter.notes += [:rsolr_requests]
8
+ end
9
+ end
@@ -0,0 +1,24 @@
1
+ require 'rsolr'
2
+ require 'rails-footnotes'
3
+ require 'rails-footnotes/footnotes'
4
+ require 'rails-footnotes/notes/abstract_note'
5
+ require 'active_support/notifications'
6
+
7
+ module RsolrFootnotes
8
+ # Load the plugin and footnote pane
9
+ def self.load!
10
+ Dir[File.join(File.dirname(__FILE__), 'notes', '*.rb')].each { |note| require note }
11
+ self.setup_rsolr_notifications!
12
+ end
13
+
14
+ # Inject notifications into RSolr
15
+ def self.setup_rsolr_notifications!
16
+ require 'rsolr-ext/notifications'
17
+
18
+ RSolr::Client.send(:include, RSolr::Ext::Notifications)
19
+ RSolr::Client.enable_notifications!
20
+ end
21
+
22
+ require File.join(File.dirname(__FILE__), 'rsolr-footnotes', 'railtie') if defined?(Rails)
23
+
24
+ end
@@ -0,0 +1,80 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{rsolr-footnotes}
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Chris Beer"]
12
+ s.date = %q{2011-05-07}
13
+ s.email = %q{chris@cbeer.info}
14
+ s.extra_rdoc_files = [
15
+ "LICENSE.txt",
16
+ "README.rdoc"
17
+ ]
18
+ s.files = [
19
+ "Gemfile",
20
+ "LICENSE.txt",
21
+ "README.rdoc",
22
+ "Rakefile",
23
+ "VERSION",
24
+ "lib/notes/rsolr_requests_note.rb",
25
+ "lib/rsolr-ext/notifications.rb",
26
+ "lib/rsolr-footnotes.rb",
27
+ "lib/rsolr-footnotes/railtie.rb",
28
+ "rsolr-footnotes.gemspec",
29
+ "test/helper.rb",
30
+ "test/test_rsolr-footnotes.rb",
31
+ "test/test_rsolr-notifications.rb"
32
+ ]
33
+ s.homepage = %q{http://github.com/cbeer/rsolr-footnotes}
34
+ s.licenses = ["MIT"]
35
+ s.require_paths = ["lib"]
36
+ s.rubygems_version = %q{1.5.3}
37
+ s.summary = %q{rails-footnotes for rsolr}
38
+ s.test_files = [
39
+ "test/helper.rb",
40
+ "test/test_rsolr-footnotes.rb",
41
+ "test/test_rsolr-notifications.rb"
42
+ ]
43
+
44
+ if s.respond_to? :specification_version then
45
+ s.specification_version = 3
46
+
47
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
48
+ s.add_runtime_dependency(%q<activesupport>, [">= 0"])
49
+ s.add_runtime_dependency(%q<rails>, [">= 0"])
50
+ s.add_runtime_dependency(%q<rails-footnotes>, [">= 0"])
51
+ s.add_runtime_dependency(%q<rsolr>, [">= 0"])
52
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
53
+ s.add_development_dependency(%q<mocha>, [">= 0"])
54
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
55
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
56
+ s.add_development_dependency(%q<rcov>, [">= 0"])
57
+ else
58
+ s.add_dependency(%q<activesupport>, [">= 0"])
59
+ s.add_dependency(%q<rails>, [">= 0"])
60
+ s.add_dependency(%q<rails-footnotes>, [">= 0"])
61
+ s.add_dependency(%q<rsolr>, [">= 0"])
62
+ s.add_dependency(%q<shoulda>, [">= 0"])
63
+ s.add_dependency(%q<mocha>, [">= 0"])
64
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
65
+ s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
66
+ s.add_dependency(%q<rcov>, [">= 0"])
67
+ end
68
+ else
69
+ s.add_dependency(%q<activesupport>, [">= 0"])
70
+ s.add_dependency(%q<rails>, [">= 0"])
71
+ s.add_dependency(%q<rails-footnotes>, [">= 0"])
72
+ s.add_dependency(%q<rsolr>, [">= 0"])
73
+ s.add_dependency(%q<shoulda>, [">= 0"])
74
+ s.add_dependency(%q<mocha>, [">= 0"])
75
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
76
+ s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
77
+ s.add_dependency(%q<rcov>, [">= 0"])
78
+ end
79
+ end
80
+
data/test/helper.rb ADDED
@@ -0,0 +1,25 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+ require 'mocha'
13
+
14
+ require 'rails'
15
+ require 'active_support'
16
+ require 'active_support/all'
17
+ require 'rails-footnotes'
18
+ require 'rails-footnotes/notes/abstract_note'
19
+
20
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
21
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
22
+ require 'rsolr-footnotes'
23
+
24
+ class Test::Unit::TestCase
25
+ end
@@ -0,0 +1,24 @@
1
+ require 'helper'
2
+
3
+ class TestRsolrFootnotes < Test::Unit::TestCase
4
+ def setup
5
+ @mock_controller = mock()
6
+ RsolrFootnotes.setup_rsolr_notifications!
7
+
8
+ Footnotes::Notes::RsolrRequestsNote.start!(@mock_controller)
9
+
10
+ @note = Footnotes::Notes::RsolrRequestsNote.new(@mock_controller)
11
+ @mock_connection = mock()
12
+ @mock_connection.expects(:execute).returns({:body => '{}', :headers => nil, :status => 200})
13
+
14
+ @solr = RSolr.connect :url => 'http://solrserver.example.com'
15
+ @solr.expects(:connection).returns(@mock_connection)
16
+
17
+ end
18
+
19
+ should "add notifications to rsolr" do
20
+ @solr.head("admin/ping")
21
+ assert_equal 1, @note.events.length
22
+ assert_equal "admin/ping", @note.events.first.path
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ require 'helper'
2
+
3
+ class TestRsolrNotifications < Test::Unit::TestCase
4
+ should "add notifications to rsolr" do
5
+ RsolrFootnotes.setup_rsolr_notifications!
6
+
7
+ @events = []
8
+ ActiveSupport::Notifications.subscribe("execute.rsolr_client") do |*args|
9
+ @events << ActiveSupport::Notifications::Event.new(*args)
10
+ end
11
+
12
+ solr = RSolr.connect :url => 'http://solrserver.example.com'
13
+
14
+ @mock_connection = mock()
15
+ @mock_connection.expects(:execute).returns({:body => '{}', :headers => nil, :status => 200})
16
+ solr.expects(:connection).returns(@mock_connection)
17
+
18
+ solr.head("admin/ping")
19
+
20
+ assert_equal 1, @events.length
21
+ assert_equal({}, @events.first.payload[:response])
22
+
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,211 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rsolr-footnotes
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Chris Beer
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-05-07 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ type: :runtime
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ name: activesupport
33
+ version_requirements: *id001
34
+ prerelease: false
35
+ - !ruby/object:Gem::Dependency
36
+ type: :runtime
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ name: rails
47
+ version_requirements: *id002
48
+ prerelease: false
49
+ - !ruby/object:Gem::Dependency
50
+ type: :runtime
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ name: rails-footnotes
61
+ version_requirements: *id003
62
+ prerelease: false
63
+ - !ruby/object:Gem::Dependency
64
+ type: :runtime
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
74
+ name: rsolr
75
+ version_requirements: *id004
76
+ prerelease: false
77
+ - !ruby/object:Gem::Dependency
78
+ type: :development
79
+ requirement: &id005 !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ hash: 3
85
+ segments:
86
+ - 0
87
+ version: "0"
88
+ name: shoulda
89
+ version_requirements: *id005
90
+ prerelease: false
91
+ - !ruby/object:Gem::Dependency
92
+ type: :development
93
+ requirement: &id006 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ hash: 3
99
+ segments:
100
+ - 0
101
+ version: "0"
102
+ name: mocha
103
+ version_requirements: *id006
104
+ prerelease: false
105
+ - !ruby/object:Gem::Dependency
106
+ type: :development
107
+ requirement: &id007 !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ~>
111
+ - !ruby/object:Gem::Version
112
+ hash: 23
113
+ segments:
114
+ - 1
115
+ - 0
116
+ - 0
117
+ version: 1.0.0
118
+ name: bundler
119
+ version_requirements: *id007
120
+ prerelease: false
121
+ - !ruby/object:Gem::Dependency
122
+ type: :development
123
+ requirement: &id008 !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ~>
127
+ - !ruby/object:Gem::Version
128
+ hash: 1
129
+ segments:
130
+ - 1
131
+ - 5
132
+ - 1
133
+ version: 1.5.1
134
+ name: jeweler
135
+ version_requirements: *id008
136
+ prerelease: false
137
+ - !ruby/object:Gem::Dependency
138
+ type: :development
139
+ requirement: &id009 !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ hash: 3
145
+ segments:
146
+ - 0
147
+ version: "0"
148
+ name: rcov
149
+ version_requirements: *id009
150
+ prerelease: false
151
+ description:
152
+ email: chris@cbeer.info
153
+ executables: []
154
+
155
+ extensions: []
156
+
157
+ extra_rdoc_files:
158
+ - LICENSE.txt
159
+ - README.rdoc
160
+ files:
161
+ - Gemfile
162
+ - LICENSE.txt
163
+ - README.rdoc
164
+ - Rakefile
165
+ - VERSION
166
+ - lib/notes/rsolr_requests_note.rb
167
+ - lib/rsolr-ext/notifications.rb
168
+ - lib/rsolr-footnotes.rb
169
+ - lib/rsolr-footnotes/railtie.rb
170
+ - rsolr-footnotes.gemspec
171
+ - test/helper.rb
172
+ - test/test_rsolr-footnotes.rb
173
+ - test/test_rsolr-notifications.rb
174
+ has_rdoc: true
175
+ homepage: http://github.com/cbeer/rsolr-footnotes
176
+ licenses:
177
+ - MIT
178
+ post_install_message:
179
+ rdoc_options: []
180
+
181
+ require_paths:
182
+ - lib
183
+ required_ruby_version: !ruby/object:Gem::Requirement
184
+ none: false
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ hash: 3
189
+ segments:
190
+ - 0
191
+ version: "0"
192
+ required_rubygems_version: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ hash: 3
198
+ segments:
199
+ - 0
200
+ version: "0"
201
+ requirements: []
202
+
203
+ rubyforge_project:
204
+ rubygems_version: 1.5.3
205
+ signing_key:
206
+ specification_version: 3
207
+ summary: rails-footnotes for rsolr
208
+ test_files:
209
+ - test/helper.rb
210
+ - test/test_rsolr-footnotes.rb
211
+ - test/test_rsolr-notifications.rb