simple_solr 0.0.1 → 0.4.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/.gitignore +2 -0
- data/.rspec +1 -0
- data/CHANGELOG.rdoc +3 -0
- data/Gemfile +6 -1
- data/README.rdoc +103 -0
- data/Rakefile +5 -0
- data/lib/simple_solr/active_record.rb +83 -0
- data/lib/simple_solr/configuration.rb +88 -0
- data/lib/simple_solr/version.rb +1 -1
- data/lib/simple_solr.rb +16 -2
- data/simple_solr.gemspec +5 -3
- data/spec/config/master_slave.yml +5 -0
- data/spec/config/simple_solr.yml +3 -0
- data/spec/db/database.yml.example +3 -0
- data/spec/db/models.rb +17 -0
- data/spec/db/schema.rb +11 -0
- data/spec/simple_solr/active_record_spec.rb +51 -0
- data/spec/simple_solr/configuration_spec.rb +55 -0
- data/spec/simple_solr_spec.rb +4 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/support/database.rb +28 -0
- data/spec/support/rails.rb +12 -0
- metadata +75 -17
data/.gitignore
CHANGED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/CHANGELOG.rdoc
ADDED
data/Gemfile
CHANGED
data/README.rdoc
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
Extremely lightweight adapter between Rails and Solr.
|
2
|
+
|
3
|
+
SimpleSolr uses the REST interface that Solr offers and makes a great number
|
4
|
+
of assumptions. This has resulted in a very fast, very lightweight library
|
5
|
+
almost anyone can use straight away.
|
6
|
+
|
7
|
+
* only a few dozen lines of code
|
8
|
+
* extremely simple DSL
|
9
|
+
* only depends on httparty
|
10
|
+
* can handle all common use cases
|
11
|
+
* has support for master/slave configurations
|
12
|
+
* does not come with a bundled Solr
|
13
|
+
* does not send a bunch of magic fields
|
14
|
+
|
15
|
+
And my personal favorite:
|
16
|
+
|
17
|
+
* <b>does nothing for unconfigured environments</b>
|
18
|
+
|
19
|
+
If you have no +development+ section in the config file (see below) then
|
20
|
+
nothing will happen at all. Your models will not be indexed, but you are
|
21
|
+
freed from having to run a local Solr instance as well.
|
22
|
+
|
23
|
+
Naturally there are downsides as well.
|
24
|
+
|
25
|
+
* assumes an +id+ field present
|
26
|
+
* makes Solr commit after every change
|
27
|
+
* does not come with a bundled Solr
|
28
|
+
* no rake tasks included
|
29
|
+
|
30
|
+
This gem is not really suitable for use outside Rails, as it requires both
|
31
|
+
ActiveRecord and ActiveSupport.
|
32
|
+
|
33
|
+
I owe a great deal to @outoftime's Sunspot[https://github.com/outoftime/sunspot] library. If you need a fully-packed
|
34
|
+
solution that handles every Solr case you might have, use that instead.
|
35
|
+
|
36
|
+
|
37
|
+
== Installation
|
38
|
+
|
39
|
+
Rails 2, in config/environment.rb:
|
40
|
+
|
41
|
+
config.gem 'simple_solr'
|
42
|
+
|
43
|
+
Rails 3, in Gemfile:
|
44
|
+
|
45
|
+
gem 'simple_solr'
|
46
|
+
|
47
|
+
|
48
|
+
== Configuration
|
49
|
+
|
50
|
+
Create a file called <tt>config/simple_solr.yml</tt>.
|
51
|
+
|
52
|
+
production:
|
53
|
+
solr:
|
54
|
+
hostname: "slave.local"
|
55
|
+
port: 8000
|
56
|
+
path: "/solr"
|
57
|
+
master_solr:
|
58
|
+
hostname: "master.local"
|
59
|
+
port: 8000
|
60
|
+
path: "/solr"
|
61
|
+
|
62
|
+
If you have just one Solr server, leave out the master_solr section.
|
63
|
+
|
64
|
+
=== Your models
|
65
|
+
|
66
|
+
Then in your models include the following:
|
67
|
+
|
68
|
+
class Document < ActiveRecord::Base
|
69
|
+
simple_solr do
|
70
|
+
field :title
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
Only the fields listed in the +simple_solr+ block will be sent to Solr,
|
75
|
+
with the addition of the +id+ field which is always included. The type of
|
76
|
+
the field is not appended; the XML sent to Solr is as bare as possible.
|
77
|
+
|
78
|
+
This also means no type casting is performed on dates/times. If you need
|
79
|
+
anything like that, use a lambda to manipulate the field to your liking.
|
80
|
+
|
81
|
+
Full example:
|
82
|
+
|
83
|
+
class FullDocument < ActiveRecord::Base
|
84
|
+
simple_solr do
|
85
|
+
field :id, lambda { |record| "full-document-#{record.id}" }
|
86
|
+
field :title
|
87
|
+
field :date_creation, :created_at
|
88
|
+
field :shared, false
|
89
|
+
field :published, "Megacorp LLC"
|
90
|
+
field :body
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
As you can see you have a couple options with regards to the fields:
|
95
|
+
|
96
|
+
1. Do nothing - in which case the corresponding attribute is used
|
97
|
+
2. A symbol - uses the instance method with that name as the value
|
98
|
+
3. Static value such as a string or boolean - which is used verbatim
|
99
|
+
4. A lambda - for your every customization need.
|
100
|
+
|
101
|
+
Use the latter form if you want to add a dynamic field to Solr. The model
|
102
|
+
instance is passed as a parameter, so you can use every method inside
|
103
|
+
the block, or run a calculation, or whatever.
|
data/Rakefile
CHANGED
@@ -0,0 +1,83 @@
|
|
1
|
+
module SimpleSolr
|
2
|
+
module ActiveRecord
|
3
|
+
def self.included(base)
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def simple_solr(&block)
|
9
|
+
class_eval do
|
10
|
+
# httparty
|
11
|
+
include HTTParty
|
12
|
+
|
13
|
+
# callbacks
|
14
|
+
after_save :add_to_solr
|
15
|
+
after_destroy :delete_from_solr
|
16
|
+
end
|
17
|
+
|
18
|
+
# Store the simple_solr fields for this class
|
19
|
+
cattr_accessor :simple_solr_fields
|
20
|
+
self.simple_solr_fields = { id: nil }
|
21
|
+
block.call
|
22
|
+
|
23
|
+
include InstanceMethods
|
24
|
+
end
|
25
|
+
|
26
|
+
# gets called by every +field+ line inside the simple_solr block.
|
27
|
+
# It stores the given values in +simple_solr_fields+, which we later use to build the XML.
|
28
|
+
def field(name, value=nil)
|
29
|
+
simple_solr_fields[name] = value
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
module InstanceMethods
|
34
|
+
# callback which uses httparty to send a POST to solr.
|
35
|
+
def add_to_solr
|
36
|
+
if SimpleSolr.configuration.present?
|
37
|
+
self.class.post(SimpleSolr.configuration.master_uri + "/update?commit=true", :body => to_solr)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def delete_from_solr
|
42
|
+
if SimpleSolr.configuration.present?
|
43
|
+
self.class.post(SimpleSolr.configuration.master_uri + "/update?commit=true", :body => to_solr_delete)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
def to_solr_delete
|
49
|
+
xml = Builder::XmlMarkup.new
|
50
|
+
|
51
|
+
xml.delete do
|
52
|
+
xml.id id
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Convert this instance's attributes to an XML suitable for Solr.
|
57
|
+
# The fields in the XML are determined from the simple_solr block.
|
58
|
+
def to_solr
|
59
|
+
xml = Builder::XmlMarkup.new
|
60
|
+
|
61
|
+
xml.add do
|
62
|
+
xml.doc do
|
63
|
+
self.class.simple_solr_fields.each do |name, value|
|
64
|
+
if value.nil?
|
65
|
+
# no value given, get it from the attribute
|
66
|
+
xml.field self.send(name), :name => name
|
67
|
+
elsif value.is_a?(Symbol)
|
68
|
+
# symbol given, use it to get the attribute
|
69
|
+
xml.field self.send(value), :name => name
|
70
|
+
elsif value.is_a?(Proc)
|
71
|
+
# Procs are used to fetch information from the instance
|
72
|
+
xml.field value.call(self), :name => name
|
73
|
+
else
|
74
|
+
# value given, use it directly.
|
75
|
+
xml.field value, :name => name
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module SimpleSolr
|
2
|
+
# SimpleSolr is configured via the config/simple_solr.yml file, which
|
3
|
+
# contains properties keyed by environment name.
|
4
|
+
#
|
5
|
+
# production:
|
6
|
+
# solr:
|
7
|
+
# hostname: "solr.slave.local"
|
8
|
+
# port: 8983
|
9
|
+
# path: "/solr"
|
10
|
+
# master_solr:
|
11
|
+
# hostname: "solr.master.local"
|
12
|
+
# port: 8983
|
13
|
+
# path: "/solr"
|
14
|
+
#
|
15
|
+
# If the <code>master_solr</code> configuration is present, SimpleSolr will use
|
16
|
+
# the Solr instance specified there for all write operations, and the Solr
|
17
|
+
# configured under <code>solr</code> for all read operations.
|
18
|
+
class Configuration
|
19
|
+
# Define methods for the <code>solr</code> key. This key is normally used to
|
20
|
+
# configure SimpleSolr.
|
21
|
+
%w(hostname port path).each do |method|
|
22
|
+
define_method method do
|
23
|
+
configuration('solr', method) || self.send("default_#{method}")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Define methods for the <code>master_solr</code> key. When present, this key
|
28
|
+
# defines the Solr used for all write operations, while all read operations
|
29
|
+
# take place on the Solr defined in the <code>solr</code> key.
|
30
|
+
%w(hostname port path).each do |method|
|
31
|
+
define_method "master_#{method}" do
|
32
|
+
configuration('master_solr', method) || self.send(method)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def present?
|
37
|
+
not user_configuration.nil?
|
38
|
+
end
|
39
|
+
|
40
|
+
# Full URI to use for all read operations.
|
41
|
+
def uri
|
42
|
+
"#{hostname}:#{port}#{path}"
|
43
|
+
end
|
44
|
+
|
45
|
+
# Full URI to use for all write operations.
|
46
|
+
# Automatically falls back to the <code>uri</code> when no master defined.
|
47
|
+
def master_uri
|
48
|
+
"#{master_hostname}:#{master_port}#{master_path}"
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
def configuration(*keys)
|
53
|
+
keys.inject(user_configuration) do |hash, key|
|
54
|
+
hash[key] if hash
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def user_configuration
|
59
|
+
@user_configuration ||=
|
60
|
+
begin
|
61
|
+
path = File.join(::Rails.root, 'config', config_file_name)
|
62
|
+
if File.exist?(path)
|
63
|
+
File.open(path) do |file|
|
64
|
+
YAML.load(file)[::Rails.env]
|
65
|
+
end
|
66
|
+
else
|
67
|
+
{}
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def default_hostname
|
73
|
+
'localhost'
|
74
|
+
end
|
75
|
+
|
76
|
+
def default_port
|
77
|
+
8983
|
78
|
+
end
|
79
|
+
|
80
|
+
def default_path
|
81
|
+
"/solr"
|
82
|
+
end
|
83
|
+
|
84
|
+
def config_file_name
|
85
|
+
'simple_solr.yml'
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
data/lib/simple_solr/version.rb
CHANGED
data/lib/simple_solr.rb
CHANGED
@@ -1,5 +1,19 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
require 'httparty'
|
3
|
+
require 'builder'
|
4
|
+
|
5
|
+
require "simple_solr/active_record"
|
6
|
+
require "simple_solr/configuration"
|
1
7
|
require "simple_solr/version"
|
2
8
|
|
3
|
-
|
4
|
-
|
9
|
+
if defined?(ActiveRecord::Base)
|
10
|
+
ActiveRecord::Base.send :include, SimpleSolr::ActiveRecord
|
5
11
|
end
|
12
|
+
|
13
|
+
module SimpleSolr
|
14
|
+
class << self
|
15
|
+
def configuration
|
16
|
+
@configuration ||= SimpleSolr::Configuration.new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/simple_solr.gemspec
CHANGED
@@ -18,7 +18,9 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
s.add_development_dependency "rspec", ">= 2"
|
22
|
+
|
23
|
+
s.add_runtime_dependency "activerecord"
|
24
|
+
s.add_runtime_dependency "httparty"
|
25
|
+
s.add_runtime_dependency "builder"
|
24
26
|
end
|
data/spec/db/models.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# A bunch of models with varying amounts of simple_solrism.
|
2
|
+
|
3
|
+
class SimpleDocument < ActiveRecord::Base
|
4
|
+
simple_solr do
|
5
|
+
field :title
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class FullDocument < ActiveRecord::Base
|
10
|
+
simple_solr do
|
11
|
+
field :id, lambda { |record| "full-document-#{record.id}" }
|
12
|
+
field :title
|
13
|
+
field :date_creation, :created_at
|
14
|
+
field :shared, false
|
15
|
+
field :body
|
16
|
+
end
|
17
|
+
end
|
data/spec/db/schema.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SimpleSolr::ActiveRecord do
|
4
|
+
describe SimpleDocument do
|
5
|
+
it "provides simple_solr class method" do
|
6
|
+
SimpleDocument.should respond_to(:simple_solr)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "stores simple_solr fields" do
|
10
|
+
SimpleDocument.simple_solr_fields.should eq({:id => nil, :title => nil})
|
11
|
+
end
|
12
|
+
|
13
|
+
context "save" do
|
14
|
+
let(:document) { SimpleDocument.create! :title => 'Omg Ponies' }
|
15
|
+
|
16
|
+
it "posts to solr" do
|
17
|
+
SimpleDocument.should_receive(:post).with("test.local:8983/solr/update?commit=true", :body => "<add><doc><field name=\"id\">#{document.id}</field><field name=\"title\">Omg Ponies</field></doc></add>")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "destroy" do
|
22
|
+
let(:document) { SimpleDocument.create! :title => 'Omg Ponies' }
|
23
|
+
|
24
|
+
it "posts to solr" do
|
25
|
+
SimpleDocument.should_receive(:post).with("test.local:8983/solr/update?commit=true", :body => "<add><doc><field name=\"id\">#{document.id}</field><field name=\"title\">Omg Ponies</field></doc></add>")
|
26
|
+
SimpleDocument.should_receive(:post).with("test.local:8983/solr/update?commit=true", :body => "<delete><id>#{document.id}</id></delete>")
|
27
|
+
document.destroy
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "when unconfigured" do
|
32
|
+
before do
|
33
|
+
SimpleSolr.stub_chain(:configuration, :present?).and_return(false)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "does nothing" do
|
37
|
+
SimpleDocument.should_not_receive(:post)
|
38
|
+
document = SimpleDocument.new :title => 'Omg Ponies'
|
39
|
+
document.save
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe FullDocument do
|
45
|
+
let(:document) { FullDocument.create :title => "Rainbows" }
|
46
|
+
|
47
|
+
it "posts to solr after save" do
|
48
|
+
FullDocument.should_receive(:post).with("test.local:8983/solr?commit=true", :body => "<add><doc><field name=\"id\">full-document-#{document.id}</field><field name=\"title\">Rainbows</field><field name=\"date_creation\">#{document.created_at}</field><field name=\"shared\">false</field><field name=\"body\"></field></doc></add>")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SimpleSolr::Configuration do
|
4
|
+
it { should be_present}
|
5
|
+
|
6
|
+
its(:hostname) { should eq('test.local')}
|
7
|
+
its(:port) { should eq(8983)}
|
8
|
+
its(:path) { should eq('/solr')}
|
9
|
+
its(:uri) { should eq('test.local:8983/solr')}
|
10
|
+
|
11
|
+
its(:master_hostname) { should eq('test.local')}
|
12
|
+
its(:master_port) { should eq(8983)}
|
13
|
+
its(:master_path) { should eq('/solr')}
|
14
|
+
its(:master_uri) { should eq('test.local:8983/solr')}
|
15
|
+
|
16
|
+
context "unconfigured Rails env" do
|
17
|
+
before do
|
18
|
+
::Rails.stub(:env).and_return('staging')
|
19
|
+
end
|
20
|
+
|
21
|
+
it { should_not be_present }
|
22
|
+
end
|
23
|
+
|
24
|
+
context "missing config file" do
|
25
|
+
before do
|
26
|
+
::Rails.stub(:root).and_return(Pathname.new('/'))
|
27
|
+
end
|
28
|
+
|
29
|
+
its(:hostname) { should eq('localhost')}
|
30
|
+
its(:port) { should eq(8983)}
|
31
|
+
its(:path) { should eq('/solr')}
|
32
|
+
its(:uri) { should eq('localhost:8983/solr')}
|
33
|
+
|
34
|
+
its(:master_hostname) { should eq('localhost')}
|
35
|
+
its(:master_port) { should eq(8983)}
|
36
|
+
its(:master_path) { should eq('/solr')}
|
37
|
+
its(:master_uri) { should eq('localhost:8983/solr')}
|
38
|
+
end
|
39
|
+
|
40
|
+
context "master/slave configuration" do
|
41
|
+
before do
|
42
|
+
subject.stub(:config_file_name).and_return('master_slave.yml')
|
43
|
+
end
|
44
|
+
|
45
|
+
its(:hostname) { should eq('slave.local')}
|
46
|
+
its(:port) { should eq(8983)}
|
47
|
+
its(:path) { should eq('/solr')}
|
48
|
+
its(:uri) { should eq('slave.local:8983/solr')}
|
49
|
+
|
50
|
+
its(:master_hostname) { should eq('master.local')}
|
51
|
+
its(:master_port) { should eq(8983)}
|
52
|
+
its(:master_path) { should eq('/solr')}
|
53
|
+
its(:master_uri) { should eq('master.local:8983/solr')}
|
54
|
+
end
|
55
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
|
4
|
+
require 'simple_solr'
|
5
|
+
|
6
|
+
# Requires supporting files with custom matchers and macros, etc,
|
7
|
+
# in ./support/ and its subdirectories.
|
8
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
# some (optional) config here
|
12
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
ENV['DB'] ||= 'sqlite3'
|
4
|
+
|
5
|
+
database_yml = File.expand_path('../../db/database.yml', __FILE__)
|
6
|
+
if File.exists?(database_yml)
|
7
|
+
active_record_configuration = YAML.load_file(database_yml)[ENV['DB']]
|
8
|
+
|
9
|
+
ActiveRecord::Base.establish_connection(active_record_configuration)
|
10
|
+
|
11
|
+
ActiveRecord::Base.silence do
|
12
|
+
ActiveRecord::Migration.verbose = false
|
13
|
+
|
14
|
+
load(File.dirname(__FILE__) + '/../db/schema.rb')
|
15
|
+
load(File.dirname(__FILE__) + '/../db/models.rb')
|
16
|
+
end
|
17
|
+
|
18
|
+
else
|
19
|
+
raise "Please create #{database_yml} first to configure your database. Take a look at: #{database_yml}.example"
|
20
|
+
end
|
21
|
+
|
22
|
+
def clean_database!
|
23
|
+
[SimpleDocument].each do |model|
|
24
|
+
ActiveRecord::Base.connection.execute "DELETE FROM #{model.table_name}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
clean_database!
|
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_solr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 29
|
5
4
|
prerelease:
|
6
|
-
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 1
|
10
|
-
version: 0.0.1
|
5
|
+
version: 0.4.0
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- Joost Baaij
|
@@ -15,10 +10,53 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date: 2011-08-
|
13
|
+
date: 2011-08-16 00:00:00 +02:00
|
19
14
|
default_executable:
|
20
|
-
dependencies:
|
21
|
-
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: rspec
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "2"
|
25
|
+
type: :development
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activerecord
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: "0"
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: httparty
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: "0"
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id003
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: builder
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: "0"
|
58
|
+
type: :runtime
|
59
|
+
version_requirements: *id004
|
22
60
|
description: Rails plugins which connects to a Solr search engine with as less features as possible.
|
23
61
|
email:
|
24
62
|
- joost@spacebabies.nl
|
@@ -30,11 +68,27 @@ extra_rdoc_files: []
|
|
30
68
|
|
31
69
|
files:
|
32
70
|
- .gitignore
|
71
|
+
- .rspec
|
72
|
+
- CHANGELOG.rdoc
|
33
73
|
- Gemfile
|
74
|
+
- README.rdoc
|
34
75
|
- Rakefile
|
35
76
|
- lib/simple_solr.rb
|
77
|
+
- lib/simple_solr/active_record.rb
|
78
|
+
- lib/simple_solr/configuration.rb
|
36
79
|
- lib/simple_solr/version.rb
|
37
80
|
- simple_solr.gemspec
|
81
|
+
- spec/config/master_slave.yml
|
82
|
+
- spec/config/simple_solr.yml
|
83
|
+
- spec/db/database.yml.example
|
84
|
+
- spec/db/models.rb
|
85
|
+
- spec/db/schema.rb
|
86
|
+
- spec/simple_solr/active_record_spec.rb
|
87
|
+
- spec/simple_solr/configuration_spec.rb
|
88
|
+
- spec/simple_solr_spec.rb
|
89
|
+
- spec/spec_helper.rb
|
90
|
+
- spec/support/database.rb
|
91
|
+
- spec/support/rails.rb
|
38
92
|
has_rdoc: true
|
39
93
|
homepage: ""
|
40
94
|
licenses: []
|
@@ -49,18 +103,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
49
103
|
requirements:
|
50
104
|
- - ">="
|
51
105
|
- !ruby/object:Gem::Version
|
52
|
-
hash: 3
|
53
|
-
segments:
|
54
|
-
- 0
|
55
106
|
version: "0"
|
56
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
108
|
none: false
|
58
109
|
requirements:
|
59
110
|
- - ">="
|
60
111
|
- !ruby/object:Gem::Version
|
61
|
-
hash: 3
|
62
|
-
segments:
|
63
|
-
- 0
|
64
112
|
version: "0"
|
65
113
|
requirements: []
|
66
114
|
|
@@ -69,5 +117,15 @@ rubygems_version: 1.6.2
|
|
69
117
|
signing_key:
|
70
118
|
specification_version: 3
|
71
119
|
summary: Simple Solr client
|
72
|
-
test_files:
|
73
|
-
|
120
|
+
test_files:
|
121
|
+
- spec/config/master_slave.yml
|
122
|
+
- spec/config/simple_solr.yml
|
123
|
+
- spec/db/database.yml.example
|
124
|
+
- spec/db/models.rb
|
125
|
+
- spec/db/schema.rb
|
126
|
+
- spec/simple_solr/active_record_spec.rb
|
127
|
+
- spec/simple_solr/configuration_spec.rb
|
128
|
+
- spec/simple_solr_spec.rb
|
129
|
+
- spec/spec_helper.rb
|
130
|
+
- spec/support/database.rb
|
131
|
+
- spec/support/rails.rb
|