jbasdf-muck-solr 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/CHANGE_LOG +239 -0
- data/LICENSE +19 -0
- data/README.markdown +118 -0
- data/README.rdoc +107 -0
- data/Rakefile +99 -0
- data/TESTING_THE_PLUGIN +25 -0
- data/VERSION.yml +4 -0
- data/config/solr.yml +15 -0
- data/config/solr_environment.rb +32 -0
- data/lib/acts_as_solr/acts_methods.rb +352 -0
- data/lib/acts_as_solr/class_methods.rb +236 -0
- data/lib/acts_as_solr/common_methods.rb +89 -0
- data/lib/acts_as_solr/deprecation.rb +61 -0
- data/lib/acts_as_solr/instance_methods.rb +165 -0
- data/lib/acts_as_solr/lazy_document.rb +18 -0
- data/lib/acts_as_solr/parser_methods.rb +203 -0
- data/lib/acts_as_solr/search_results.rb +68 -0
- data/lib/acts_as_solr/solr_fixtures.rb +13 -0
- data/lib/acts_as_solr/tasks/database.rake +16 -0
- data/lib/acts_as_solr/tasks/solr.rake +135 -0
- data/lib/acts_as_solr/tasks/test.rake +5 -0
- data/lib/acts_as_solr/tasks.rb +10 -0
- data/lib/acts_as_solr.rb +65 -0
- data/lib/solr/connection.rb +177 -0
- data/lib/solr/document.rb +75 -0
- data/lib/solr/exception.rb +13 -0
- data/lib/solr/field.rb +36 -0
- data/lib/solr/importer/array_mapper.rb +26 -0
- data/lib/solr/importer/delimited_file_source.rb +38 -0
- data/lib/solr/importer/hpricot_mapper.rb +27 -0
- data/lib/solr/importer/mapper.rb +51 -0
- data/lib/solr/importer/solr_source.rb +41 -0
- data/lib/solr/importer/xpath_mapper.rb +35 -0
- data/lib/solr/importer.rb +19 -0
- data/lib/solr/indexer.rb +52 -0
- data/lib/solr/request/add_document.rb +58 -0
- data/lib/solr/request/base.rb +36 -0
- data/lib/solr/request/commit.rb +29 -0
- data/lib/solr/request/delete.rb +48 -0
- data/lib/solr/request/dismax.rb +46 -0
- data/lib/solr/request/index_info.rb +22 -0
- data/lib/solr/request/modify_document.rb +46 -0
- data/lib/solr/request/optimize.rb +19 -0
- data/lib/solr/request/ping.rb +36 -0
- data/lib/solr/request/select.rb +54 -0
- data/lib/solr/request/spellcheck.rb +30 -0
- data/lib/solr/request/standard.rb +402 -0
- data/lib/solr/request/update.rb +23 -0
- data/lib/solr/request.rb +26 -0
- data/lib/solr/response/add_document.rb +17 -0
- data/lib/solr/response/base.rb +42 -0
- data/lib/solr/response/commit.rb +15 -0
- data/lib/solr/response/delete.rb +13 -0
- data/lib/solr/response/dismax.rb +8 -0
- data/lib/solr/response/index_info.rb +26 -0
- data/lib/solr/response/modify_document.rb +17 -0
- data/lib/solr/response/optimize.rb +14 -0
- data/lib/solr/response/ping.rb +26 -0
- data/lib/solr/response/ruby.rb +42 -0
- data/lib/solr/response/select.rb +17 -0
- data/lib/solr/response/spellcheck.rb +20 -0
- data/lib/solr/response/standard.rb +60 -0
- data/lib/solr/response/xml.rb +39 -0
- data/lib/solr/response.rb +27 -0
- data/lib/solr/solrtasks.rb +27 -0
- data/lib/solr/util.rb +32 -0
- data/lib/solr/xml.rb +44 -0
- data/lib/solr.rb +26 -0
- data/solr/CHANGES.txt +1207 -0
- data/solr/LICENSE.txt +712 -0
- data/solr/NOTICE.txt +90 -0
- data/solr/etc/jetty.xml +205 -0
- data/solr/etc/webdefault.xml +379 -0
- data/solr/lib/easymock.jar +0 -0
- data/solr/lib/jetty-6.1.3.jar +0 -0
- data/solr/lib/jetty-util-6.1.3.jar +0 -0
- data/solr/lib/jsp-2.1/ant-1.6.5.jar +0 -0
- data/solr/lib/jsp-2.1/core-3.1.1.jar +0 -0
- data/solr/lib/jsp-2.1/jsp-2.1.jar +0 -0
- data/solr/lib/jsp-2.1/jsp-api-2.1.jar +0 -0
- data/solr/lib/servlet-api-2.4.jar +0 -0
- data/solr/lib/servlet-api-2.5-6.1.3.jar +0 -0
- data/solr/lib/xpp3-1.1.3.4.O.jar +0 -0
- data/solr/solr/README.txt +52 -0
- data/solr/solr/bin/abc +176 -0
- data/solr/solr/bin/abo +176 -0
- data/solr/solr/bin/backup +108 -0
- data/solr/solr/bin/backupcleaner +142 -0
- data/solr/solr/bin/commit +128 -0
- data/solr/solr/bin/optimize +129 -0
- data/solr/solr/bin/readercycle +129 -0
- data/solr/solr/bin/rsyncd-disable +77 -0
- data/solr/solr/bin/rsyncd-enable +76 -0
- data/solr/solr/bin/rsyncd-start +145 -0
- data/solr/solr/bin/rsyncd-stop +105 -0
- data/solr/solr/bin/scripts-util +83 -0
- data/solr/solr/bin/snapcleaner +148 -0
- data/solr/solr/bin/snapinstaller +168 -0
- data/solr/solr/bin/snappuller +248 -0
- data/solr/solr/bin/snappuller-disable +77 -0
- data/solr/solr/bin/snappuller-enable +77 -0
- data/solr/solr/bin/snapshooter +109 -0
- data/solr/solr/conf/admin-extra.html +31 -0
- data/solr/solr/conf/protwords.txt +21 -0
- data/solr/solr/conf/schema.xml +126 -0
- data/solr/solr/conf/scripts.conf +24 -0
- data/solr/solr/conf/solrconfig.xml +458 -0
- data/solr/solr/conf/stopwords.txt +57 -0
- data/solr/solr/conf/synonyms.txt +31 -0
- data/solr/solr/conf/xslt/example.xsl +132 -0
- data/solr/solr/conf/xslt/example_atom.xsl +63 -0
- data/solr/solr/conf/xslt/example_rss.xsl +62 -0
- data/solr/start.jar +0 -0
- data/solr/webapps/solr.war +0 -0
- data/test/config/solr.yml +2 -0
- data/test/db/connections/mysql/connection.rb +10 -0
- data/test/db/connections/sqlite/connection.rb +8 -0
- data/test/db/migrate/001_create_books.rb +15 -0
- data/test/db/migrate/002_create_movies.rb +12 -0
- data/test/db/migrate/003_create_categories.rb +11 -0
- data/test/db/migrate/004_create_electronics.rb +16 -0
- data/test/db/migrate/005_create_authors.rb +12 -0
- data/test/db/migrate/006_create_postings.rb +9 -0
- data/test/db/migrate/007_create_posts.rb +13 -0
- data/test/db/migrate/008_create_gadgets.rb +11 -0
- data/test/fixtures/authors.yml +9 -0
- data/test/fixtures/books.yml +13 -0
- data/test/fixtures/categories.yml +7 -0
- data/test/fixtures/db_definitions/mysql.sql +41 -0
- data/test/fixtures/electronics.yml +49 -0
- data/test/fixtures/movies.yml +9 -0
- data/test/fixtures/postings.yml +10 -0
- data/test/functional/acts_as_solr_test.rb +413 -0
- data/test/functional/association_indexing_test.rb +37 -0
- data/test/functional/faceted_search_test.rb +163 -0
- data/test/functional/multi_solr_search_test.rb +57 -0
- data/test/models/author.rb +10 -0
- data/test/models/book.rb +10 -0
- data/test/models/category.rb +8 -0
- data/test/models/electronic.rb +25 -0
- data/test/models/gadget.rb +9 -0
- data/test/models/movie.rb +17 -0
- data/test/models/novel.rb +2 -0
- data/test/models/post.rb +3 -0
- data/test/models/posting.rb +11 -0
- data/test/test_helper.rb +54 -0
- data/test/unit/acts_methods_shoulda.rb +68 -0
- data/test/unit/class_methods_shoulda.rb +85 -0
- data/test/unit/common_methods_shoulda.rb +111 -0
- data/test/unit/instance_methods_shoulda.rb +318 -0
- data/test/unit/lazy_document_shoulda.rb +34 -0
- data/test/unit/parser_instance.rb +19 -0
- data/test/unit/parser_methods_shoulda.rb +268 -0
- data/test/unit/solr_instance.rb +49 -0
- data/test/unit/test_helper.rb +24 -0
- metadata +241 -0
data/test/models/book.rb
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Table fields for 'electronics'
|
|
2
|
+
# - id
|
|
3
|
+
# - name
|
|
4
|
+
# - manufacturer
|
|
5
|
+
# - features
|
|
6
|
+
# - category
|
|
7
|
+
# - price
|
|
8
|
+
# - created_on
|
|
9
|
+
|
|
10
|
+
class Electronic < ActiveRecord::Base
|
|
11
|
+
acts_as_solr do
|
|
12
|
+
{
|
|
13
|
+
:facets => [:category, :manufacturer],
|
|
14
|
+
:fields => [:name, :manufacturer, :features, :category, {:created_at => :date}, {:updated_at => :date}, {:price => {:type => :range_float, :boost => 10.0}}],
|
|
15
|
+
:boost => 5.0,
|
|
16
|
+
:exclude_fields => [:features]
|
|
17
|
+
}
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# The following example would also convert the :price field type to :range_float
|
|
21
|
+
#
|
|
22
|
+
# acts_as_solr :facets => [:category, :manufacturer],
|
|
23
|
+
# :fields => [:name, :manufacturer, :features, :category, {:price => :range_float}],
|
|
24
|
+
# :boost => 5.0
|
|
25
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Table fields for 'movies'
|
|
2
|
+
# - id
|
|
3
|
+
# - name
|
|
4
|
+
# - description
|
|
5
|
+
|
|
6
|
+
class Movie < ActiveRecord::Base
|
|
7
|
+
acts_as_solr :additional_fields => [:current_time, {:time_on_xml => :date}]
|
|
8
|
+
|
|
9
|
+
def current_time
|
|
10
|
+
Time.now.to_s
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def time_on_xml
|
|
14
|
+
Time.now
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
data/test/models/post.rb
ADDED
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'test/unit'
|
|
3
|
+
require 'active_record'
|
|
4
|
+
require 'active_record/fixtures'
|
|
5
|
+
|
|
6
|
+
begin
|
|
7
|
+
require 'active_support/test_case'
|
|
8
|
+
rescue
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
RAILS_ROOT = File.dirname(__FILE__) unless defined? RAILS_ROOT
|
|
12
|
+
RAILS_ENV = 'test' unless defined? RAILS_ENV
|
|
13
|
+
ENV["RAILS_ENV"] = "test"
|
|
14
|
+
ENV["ACTS_AS_SOLR_TEST"] = "true"
|
|
15
|
+
|
|
16
|
+
require File.expand_path(File.dirname(__FILE__) + '/../lib/acts_as_solr')
|
|
17
|
+
require File.expand_path(File.dirname(__FILE__) + '/../config/solr_environment.rb')
|
|
18
|
+
|
|
19
|
+
# Load Models
|
|
20
|
+
models_dir = File.join(File.dirname( __FILE__ ), 'models')
|
|
21
|
+
require "#{models_dir}/book.rb"
|
|
22
|
+
Dir[ models_dir + '/*.rb'].each { |m| require m }
|
|
23
|
+
|
|
24
|
+
if defined?(ActiveSupport::TestCase)
|
|
25
|
+
class ActiveSupport::TestCase
|
|
26
|
+
include ActiveRecord::TestFixtures
|
|
27
|
+
self.fixture_path = File.dirname(__FILE__) + "/fixtures/"
|
|
28
|
+
end unless ActiveSupport::TestCase.respond_to?(:fixture_path=)
|
|
29
|
+
else
|
|
30
|
+
Test::Unit::TestCase.fixture_path = File.dirname(__FILE__) + "/fixtures/"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class Test::Unit::TestCase
|
|
34
|
+
def self.fixtures(*table_names)
|
|
35
|
+
fixture_path = defined?(ActiveSupport::TestCase) ? ActiveSupport::TestCase.fixture_path : Test::Unit::TestCase.fixture_path
|
|
36
|
+
if block_given?
|
|
37
|
+
Fixtures.create_fixtures(fixture_path, table_names) { yield }
|
|
38
|
+
else
|
|
39
|
+
Fixtures.create_fixtures(fixture_path, table_names)
|
|
40
|
+
end
|
|
41
|
+
table_names.each do |table_name|
|
|
42
|
+
clear_from_solr(table_name)
|
|
43
|
+
klass = instance_eval table_name.to_s.capitalize.singularize
|
|
44
|
+
klass.find(:all).each{|content| content.solr_save}
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
clear_from_solr(:novels)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
def self.clear_from_solr(table_name)
|
|
52
|
+
ActsAsSolr::Post.execute(Solr::Request::Delete.new(:query => "type_s:#{table_name.to_s.capitalize.singularize}"))
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/test_helper")
|
|
2
|
+
|
|
3
|
+
class ActsMethodsTest < Test::Unit::TestCase
|
|
4
|
+
class Model
|
|
5
|
+
attr_accessor :birthdate
|
|
6
|
+
|
|
7
|
+
def initialize(birthdate)
|
|
8
|
+
@birthdate = birthdate
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.configuration
|
|
12
|
+
@configuration ||= {:solr_fields => {}}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.columns_hash=(columns_hash)
|
|
16
|
+
@columns_hash = columns_hash
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.columns_hash
|
|
20
|
+
@columns_hash
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def [](key)
|
|
24
|
+
@birthday
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
self.extend ActsAsSolr::ActsMethods
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
context "when getting field values" do
|
|
32
|
+
setup do
|
|
33
|
+
Model.columns_hash = {"birthdate" => stub("column", :type => :date)}
|
|
34
|
+
Model.send(:get_field_value, :birthdate)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
should "define an accessor methods for a solr converted value" do
|
|
38
|
+
assert Model.instance_methods.include?("birthdate_for_solr")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
context "for date types" do
|
|
42
|
+
setup do
|
|
43
|
+
@model = Model.new(Date.today)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
should "return nil when field is nil" do
|
|
47
|
+
@model.birthdate = nil
|
|
48
|
+
assert_nil @model.birthdate_for_solr
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
should "return the formatted date" do
|
|
52
|
+
assert_equal Date.today.strftime("%Y-%m-%dT%H:%M:%SZ"), @model.birthdate_for_solr
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
context "for timestamp types" do
|
|
57
|
+
setup do
|
|
58
|
+
@now = Time.now
|
|
59
|
+
@model = Model.new(@now)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
should "return a formatted timestamp string for timestamps" do
|
|
63
|
+
assert_equal @now.utc.strftime("%Y-%m-%dT%H:%M:%SZ"), @model.birthdate_for_solr
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/test_helper")
|
|
2
|
+
|
|
3
|
+
class User
|
|
4
|
+
attr_accessor :name, :id
|
|
5
|
+
def self.find(*args)
|
|
6
|
+
@paul ||= User.new
|
|
7
|
+
@paul.name = "Paul"
|
|
8
|
+
@paul.id = 1
|
|
9
|
+
@paul
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.find_by_id(id)
|
|
13
|
+
find
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.primary_key
|
|
17
|
+
"id"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class ClassMethodsTest < Test::Unit::TestCase
|
|
22
|
+
include ActsAsSolr::ClassMethods
|
|
23
|
+
|
|
24
|
+
def solr_configuration
|
|
25
|
+
@solr_configuration ||= {:type_field => "type_t", :primary_key_field => "id"}
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
context "when multi-searching" do
|
|
29
|
+
setup do
|
|
30
|
+
stubs(:name).returns("User")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
should "include the type field in the query" do
|
|
34
|
+
expects(:parse_query).with("name:paul", {:results_format => :objects}, "AND (type_t:User)")
|
|
35
|
+
multi_solr_search("name:paul")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
should "add all models in the query" do
|
|
39
|
+
expects(:parse_query).with("name:paul", {:results_format => :objects, :models => ["Movie", "DVD"]}, "AND (type_t:User OR type_t:Movie OR type_t:DVD)")
|
|
40
|
+
multi_solr_search("name:paul", :models => ["Movie", "DVD"])
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
should "return an empty result set if no data was returned" do
|
|
44
|
+
stubs(:parse_query).returns(nil)
|
|
45
|
+
result = multi_solr_search("name:paul")
|
|
46
|
+
assert_equal 0, result.docs.size
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
should "return an empty result set if no results were found" do
|
|
50
|
+
stubs(:parse_query).returns(stub(:total_hits => 0, :hits => []))
|
|
51
|
+
result = multi_solr_search("name:paul")
|
|
52
|
+
assert_equal 0, result.docs.size
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
context "with results" do
|
|
56
|
+
should "find the objects in the database" do
|
|
57
|
+
stubs(:parse_query).returns(stub(:total_hits => 1, :hits => ["score" => 0.12956427, "id" => ["User:1"]]))
|
|
58
|
+
result = multi_solr_search("name:paul")
|
|
59
|
+
|
|
60
|
+
assert_equal(User.find, result.docs.first)
|
|
61
|
+
assert_equal 1, result.docs.size
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
context "when requesting ids" do
|
|
65
|
+
should "return only ids" do
|
|
66
|
+
stubs(:parse_query).returns(stub(:total_hits => 1, :hits => ["score" => 0.12956427, "id" => ["User:1"]]))
|
|
67
|
+
result = multi_solr_search("name:paul", :results_format => :ids)
|
|
68
|
+
assert_equal "User:1", result.docs.first["id"]
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
context "with scores" do
|
|
73
|
+
setup do
|
|
74
|
+
solr_configuration[:primary_key_field] = nil
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
should "add an accessor with the solr score" do
|
|
78
|
+
stubs(:parse_query).returns(stub(:total_hits => 1, :hits => ["score" => 0.12956427, "id" => ["User:1"]]))
|
|
79
|
+
result = multi_solr_search("name:paul", :scores => true)
|
|
80
|
+
assert_equal 0.12956427, result.docs.first.solr_score
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/test_helper")
|
|
2
|
+
|
|
3
|
+
class CommonMethodsTest < Test::Unit::TestCase
|
|
4
|
+
include ActsAsSolr::CommonMethods
|
|
5
|
+
|
|
6
|
+
class << self
|
|
7
|
+
def primary_key
|
|
8
|
+
"id"
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def id
|
|
13
|
+
10
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
context "when determining the field type" do
|
|
17
|
+
setup do
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
should "return i for an integer" do
|
|
21
|
+
assert_equal "i", get_solr_field_type(:integer)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
should "return f for a float" do
|
|
25
|
+
assert_equal "f", get_solr_field_type(:float)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
should "return b for a boolean" do
|
|
29
|
+
assert_equal "b", get_solr_field_type(:boolean)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
should "return s for a string" do
|
|
33
|
+
assert_equal "s", get_solr_field_type(:string)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
should "return t for a text" do
|
|
37
|
+
assert_equal "t", get_solr_field_type(:text)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
should "return d for a date" do
|
|
41
|
+
assert_equal "d", get_solr_field_type(:date)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
should "return ri for a range_integer" do
|
|
45
|
+
assert_equal "ri", get_solr_field_type(:range_integer)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
should "return rf for a range_float" do
|
|
49
|
+
assert_equal "rf", get_solr_field_type(:range_float)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
should "return facet for a facet field" do
|
|
53
|
+
assert_equal "facet", get_solr_field_type(:facet)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
should "return the string if one was given as an argument" do
|
|
57
|
+
assert_equal "string", get_solr_field_type("string")
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
should "raise an error if invalid field type was specified" do
|
|
61
|
+
assert_raise(RuntimeError) {get_solr_field_type(:something)}
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
should "raise an error if argument is not symbol or string" do
|
|
65
|
+
assert_raise(RuntimeError) {get_solr_field_type(123)}
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
context "when determining a default value for a field when it's nil" do
|
|
70
|
+
should "return 0.00 for a float" do
|
|
71
|
+
assert_equal 0.00, set_value_if_nil("f")
|
|
72
|
+
assert_equal 0.00, set_value_if_nil(:float)
|
|
73
|
+
assert_equal 0.00, set_value_if_nil("rf")
|
|
74
|
+
assert_equal 0.00, set_value_if_nil(:range_float)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
should "return 0 for an integer" do
|
|
78
|
+
assert_equal 0, set_value_if_nil(:integer)
|
|
79
|
+
assert_equal 0, set_value_if_nil(:range_integer)
|
|
80
|
+
assert_equal 0, set_value_if_nil("i")
|
|
81
|
+
assert_equal 0, set_value_if_nil("ri")
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
should "return false for a boolean" do
|
|
85
|
+
assert_equal "false", set_value_if_nil(:boolean)
|
|
86
|
+
assert_equal "false", set_value_if_nil("b")
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
should "return empty string for strings and text" do
|
|
90
|
+
assert_equal "", set_value_if_nil(:string)
|
|
91
|
+
assert_equal "", set_value_if_nil(:text)
|
|
92
|
+
assert_equal "", set_value_if_nil("t")
|
|
93
|
+
assert_equal "", set_value_if_nil("s")
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
should "return an empty string for a date" do
|
|
97
|
+
assert_equal "", set_value_if_nil(:date)
|
|
98
|
+
assert_equal "", set_value_if_nil("d")
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
should "return an empty string for everything else" do
|
|
102
|
+
assert_equal "", set_value_if_nil("something")
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
context "when determining the record id" do
|
|
107
|
+
should "return the primary key value" do
|
|
108
|
+
assert_equal 10, record_id(self)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|