active-fedora 9.9.1 → 9.10.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -2
- data/.travis.yml +2 -6
- data/active-fedora.gemspec +9 -6
- data/lib/active_fedora.rb +31 -15
- data/lib/active_fedora/associations.rb +1 -1
- data/lib/active_fedora/associations/association.rb +6 -2
- data/lib/active_fedora/associations/belongs_to_association.rb +0 -10
- data/lib/active_fedora/associations/builder/association.rb +85 -12
- data/lib/active_fedora/associations/builder/belongs_to.rb +3 -1
- data/lib/active_fedora/associations/builder/collection_association.rb +4 -3
- data/lib/active_fedora/associations/builder/contains.rb +7 -2
- data/lib/active_fedora/associations/builder/directly_contains.rb +7 -3
- data/lib/active_fedora/associations/builder/directly_contains_one.rb +8 -4
- data/lib/active_fedora/associations/builder/has_and_belongs_to_many.rb +6 -2
- data/lib/active_fedora/associations/builder/has_many.rb +6 -2
- data/lib/active_fedora/associations/builder/indirectly_contains.rb +7 -3
- data/lib/active_fedora/associations/builder/property.rb +7 -2
- data/lib/active_fedora/associations/builder/singular_association.rb +3 -1
- data/lib/active_fedora/associations/builder/singular_property.rb +3 -1
- data/lib/active_fedora/associations/collection_association.rb +9 -5
- data/lib/active_fedora/associations/collection_proxy.rb +1 -1
- data/lib/active_fedora/associations/contained_finder.rb +1 -2
- data/lib/active_fedora/associations/directly_contains_one_association.rb +1 -1
- data/lib/active_fedora/associations/has_many_association.rb +1 -5
- data/lib/active_fedora/associations/rdf.rb +1 -20
- data/lib/active_fedora/attached_files.rb +1 -1
- data/lib/active_fedora/attribute_methods.rb +18 -0
- data/lib/active_fedora/attributes.rb +1 -1
- data/lib/active_fedora/autosave_association.rb +8 -12
- data/lib/active_fedora/base.rb +0 -2
- data/lib/active_fedora/caching_connection.rb +1 -1
- data/lib/active_fedora/default_model_mapper.rb +24 -0
- data/lib/active_fedora/fedora.rb +1 -1
- data/lib/active_fedora/file/attributes.rb +4 -5
- data/lib/active_fedora/identifiable.rb +5 -0
- data/lib/active_fedora/indexing.rb +13 -7
- data/lib/active_fedora/indexing_service.rb +4 -4
- data/lib/active_fedora/ldp_resource.rb +1 -0
- data/lib/active_fedora/model.rb +18 -16
- data/lib/active_fedora/model_classifier.rb +77 -0
- data/lib/active_fedora/nested_attributes.rb +145 -18
- data/lib/active_fedora/persistence.rb +1 -1
- data/lib/active_fedora/predicates.rb +3 -0
- data/lib/active_fedora/qualified_dublin_core_datastream.rb +1 -1
- data/lib/active_fedora/query_result_builder.rb +12 -28
- data/lib/active_fedora/querying.rb +1 -1
- data/lib/active_fedora/rdf/datastream_indexing.rb +1 -1
- data/lib/active_fedora/reflection.rb +15 -7
- data/lib/active_fedora/relation.rb +17 -0
- data/lib/active_fedora/relation/calculations.rb +1 -5
- data/lib/active_fedora/relation/finder_methods.rb +39 -26
- data/lib/active_fedora/scoping.rb +5 -0
- data/lib/active_fedora/scoping/default.rb +113 -0
- data/lib/active_fedora/scoping/named.rb +11 -3
- data/lib/active_fedora/simple_datastream.rb +1 -1
- data/lib/active_fedora/solr_hit.rb +71 -0
- data/lib/active_fedora/solr_instance_loader.rb +12 -36
- data/lib/active_fedora/solr_query_builder.rb +20 -25
- data/lib/active_fedora/solr_service.rb +24 -13
- data/lib/active_fedora/type.rb +8 -0
- data/lib/active_fedora/type/boolean.rb +23 -0
- data/lib/active_fedora/type/value.rb +118 -0
- data/lib/active_fedora/validations.rb +14 -5
- data/lib/active_fedora/version.rb +1 -1
- data/lib/active_fedora/versionable.rb +8 -7
- data/spec/config_helper.rb +0 -5
- data/spec/integration/associations_spec.rb +5 -5
- data/spec/integration/base_spec.rb +4 -4
- data/spec/integration/bug_spec.rb +0 -1
- data/spec/integration/full_featured_model_spec.rb +4 -4
- data/spec/integration/has_and_belongs_to_many_associations_spec.rb +1 -1
- data/spec/integration/has_many_associations_spec.rb +30 -1
- data/spec/integration/indirect_container_spec.rb +1 -1
- data/spec/integration/nested_attribute_spec.rb +6 -0
- data/spec/integration/ntriples_datastream_spec.rb +4 -4
- data/spec/integration/om_datastream_spec.rb +1 -1
- data/spec/integration/relation_delegation_spec.rb +1 -1
- data/spec/integration/scoped_query_spec.rb +12 -12
- data/spec/integration/solr_hit_spec.rb +52 -0
- data/spec/samples/hydra-mods_article_datastream.rb +2 -2
- data/spec/spec_helper.rb +5 -9
- data/spec/unit/active_fedora_spec.rb +0 -26
- data/spec/unit/base_spec.rb +20 -0
- data/spec/unit/builder/has_and_belongs_to_many_spec.rb +2 -3
- data/spec/unit/callback_spec.rb +3 -8
- data/spec/unit/default_model_mapper_spec.rb +39 -0
- data/spec/unit/finder_methods_spec.rb +30 -6
- data/spec/unit/has_many_association_spec.rb +23 -1
- data/spec/unit/indexing_spec.rb +17 -3
- data/spec/unit/model_classifier_spec.rb +49 -0
- data/spec/unit/model_spec.rb +0 -9
- data/spec/unit/ntriples_datastream_spec.rb +16 -16
- data/spec/unit/om_datastream_spec.rb +7 -7
- data/spec/unit/qualified_dublin_core_datastream_spec.rb +1 -1
- data/spec/unit/query_result_builder_spec.rb +4 -10
- data/spec/unit/query_spec.rb +28 -28
- data/spec/unit/rdf/indexing_service_spec.rb +16 -16
- data/spec/unit/scoping_spec.rb +67 -0
- data/spec/unit/simple_datastream_spec.rb +2 -2
- data/spec/unit/solr_config_options_spec.rb +29 -32
- data/spec/unit/solr_hit_spec.rb +58 -0
- data/spec/unit/solr_query_builder_spec.rb +9 -1
- data/spec/unit/solr_service_spec.rb +19 -3
- metadata +73 -17
- data/spec/support/freeze_mocks.rb +0 -12
@@ -21,9 +21,17 @@ module ActiveFedora
|
|
21
21
|
if current_scope
|
22
22
|
current_scope.clone
|
23
23
|
else
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
default_scoped
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def default_scoped
|
29
|
+
scope = build_default_scope
|
30
|
+
|
31
|
+
if scope
|
32
|
+
relation.spawn.merge!(scope)
|
33
|
+
else
|
34
|
+
relation
|
27
35
|
end
|
28
36
|
end
|
29
37
|
end
|
@@ -79,7 +79,7 @@ module ActiveFedora
|
|
79
79
|
next if field_key == :location ## FIXME HYDRA-825
|
80
80
|
things = send(field_key)
|
81
81
|
next unless things
|
82
|
-
field_symbol = ActiveFedora
|
82
|
+
field_symbol = ActiveFedora.index_field_mapper.solr_name(field_key, type: field_info[:type])
|
83
83
|
things.val.each do |val|
|
84
84
|
::Solrizer::Extractor.insert_solr_field_value(solr_doc, field_symbol, val.to_s)
|
85
85
|
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module ActiveFedora
|
2
|
+
class SolrHit < Delegator
|
3
|
+
def self.for(hit)
|
4
|
+
return hit if hit.is_a? ActiveFedora::SolrHit
|
5
|
+
|
6
|
+
SolrHit.new(hit)
|
7
|
+
end
|
8
|
+
|
9
|
+
delegate :models, to: :classifier
|
10
|
+
|
11
|
+
def __getobj__
|
12
|
+
@document # return object we are delegating to, required
|
13
|
+
end
|
14
|
+
|
15
|
+
alias static_config __getobj__
|
16
|
+
|
17
|
+
def __setobj__(obj)
|
18
|
+
@document = obj
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_reader :document
|
22
|
+
|
23
|
+
def initialize(document)
|
24
|
+
super
|
25
|
+
@document = document
|
26
|
+
end
|
27
|
+
|
28
|
+
def id
|
29
|
+
document[ActiveFedora.id_field]
|
30
|
+
end
|
31
|
+
|
32
|
+
def rdf_uri
|
33
|
+
::RDF::URI.new(ActiveFedora::Base.id_to_uri(id))
|
34
|
+
end
|
35
|
+
|
36
|
+
def model(opts = {})
|
37
|
+
best_model_match = classifier.best_model(opts)
|
38
|
+
ActiveFedora::Base.logger.warn "Could not find a model for #{id}, defaulting to ActiveFedora::Base" if ActiveFedora::Base.logger && best_model_match == ActiveFedora::Base
|
39
|
+
best_model_match
|
40
|
+
end
|
41
|
+
|
42
|
+
def model?(model_to_check)
|
43
|
+
models.any? do |model|
|
44
|
+
model_to_check >= model
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def instantiate_with_json
|
49
|
+
model.allocate.init_with_json(profile_json) do |allocated_object|
|
50
|
+
create_key = allocated_object.indexing_service.class.create_time_solr_name
|
51
|
+
modified_key = allocated_object.indexing_service.class.modified_time_solr_name
|
52
|
+
allocated_object.resource.set_value(:create_date, DateTime.parse(document[create_key])) if document[create_key]
|
53
|
+
allocated_object.resource.set_value(:modified_date, DateTime.parse(document[modified_key])) if document[modified_key]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def reify(opts = {})
|
58
|
+
model(opts).find(id, cast: true)
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def classifier
|
64
|
+
ActiveFedora.model_mapper.classifier(document)
|
65
|
+
end
|
66
|
+
|
67
|
+
def profile_json
|
68
|
+
Array(document[ActiveFedora::IndexingService.profile_solr_name]).first
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -12,13 +12,12 @@ module ActiveFedora
|
|
12
12
|
def initialize(context, id, solr_doc = nil)
|
13
13
|
@context = context
|
14
14
|
@id = id
|
15
|
-
|
16
|
-
validate_solr_doc_and_id!(@solr_doc)
|
15
|
+
self.solr_doc = solr_doc
|
17
16
|
end
|
18
17
|
|
19
18
|
def object
|
20
19
|
return @object if @object
|
21
|
-
@object =
|
20
|
+
@object = solr_doc.instantiate_with_json
|
22
21
|
@object.readonly!
|
23
22
|
@object.freeze
|
24
23
|
@object
|
@@ -26,46 +25,23 @@ module ActiveFedora
|
|
26
25
|
|
27
26
|
private
|
28
27
|
|
29
|
-
def allocate_object
|
30
|
-
active_fedora_class.allocate.init_with_json(profile_json) do |allocated_object|
|
31
|
-
create_key = allocated_object.indexing_service.class.create_time_solr_name
|
32
|
-
modified_key = allocated_object.indexing_service.class.modified_time_solr_name
|
33
|
-
allocated_object.resource.set_value(:create_date, DateTime.parse(solr_doc[create_key])) if solr_doc[create_key]
|
34
|
-
allocated_object.resource.set_value(:modified_date, DateTime.parse(solr_doc[modified_key])) if solr_doc[modified_key]
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
28
|
def solr_doc
|
39
29
|
@solr_doc ||= begin
|
40
|
-
|
41
|
-
if result.empty?
|
42
|
-
raise ActiveFedora::ObjectNotFoundError, "Object #{id} not found in solr"
|
43
|
-
end
|
44
|
-
@solr_doc = result.first
|
45
|
-
validate_solr_doc_and_id!(@solr_doc)
|
46
|
-
@solr_doc
|
30
|
+
self.solr_doc = context.search_by_id(id)
|
47
31
|
end
|
48
32
|
end
|
49
33
|
|
50
|
-
def
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
def active_fedora_class
|
58
|
-
@active_fedora_class ||= ActiveFedora::QueryResultBuilder.class_from_solr_document(solr_doc)
|
34
|
+
def solr_doc=(solr_doc)
|
35
|
+
unless solr_doc.nil?
|
36
|
+
solr_doc = ActiveFedora::SolrHit.for(solr_doc)
|
37
|
+
validate_solr_doc_and_id!(solr_doc)
|
38
|
+
@solr_doc = solr_doc
|
39
|
+
end
|
59
40
|
end
|
60
41
|
|
61
|
-
def
|
62
|
-
|
63
|
-
|
64
|
-
unless profile_json.present?
|
65
|
-
raise ActiveFedora::ObjectNotFoundError, "Object #{id} does not contain a solrized profile"
|
66
|
-
end
|
67
|
-
profile_json
|
68
|
-
end
|
42
|
+
def validate_solr_doc_and_id!(document)
|
43
|
+
return if id == document.id
|
44
|
+
raise ActiveFedora::FedoraSolrMismatchError, id, document.id
|
69
45
|
end
|
70
46
|
end
|
71
47
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module ActiveFedora
|
2
2
|
module SolrQueryBuilder
|
3
|
-
|
3
|
+
extend Deprecation
|
4
4
|
|
5
5
|
class << self
|
6
6
|
# Construct a solr query for a list of ids
|
@@ -10,18 +10,21 @@ module ActiveFedora
|
|
10
10
|
def construct_query_for_ids(id_array)
|
11
11
|
ids = id_array.reject(&:blank?)
|
12
12
|
return "id:NEVER_USE_THIS_ID" if ids.empty?
|
13
|
-
"{!terms f=#{
|
13
|
+
"{!terms f=#{ActiveFedora.id_field}}#{ids.join(',')}"
|
14
14
|
end
|
15
15
|
|
16
16
|
# Create a raw query clause suitable for sending to solr as an fq element
|
17
17
|
# @param [String] key
|
18
18
|
# @param [String] value
|
19
19
|
def raw_query(key, value)
|
20
|
+
Deprecation.warn(ActiveFedora::SolrQueryBuilder, 'ActiveFedora::SolrQueryBuilder.raw_query is deprecated and will be removed in ActiveFedora 10.0. Use .construct_query instead.')
|
20
21
|
"_query_:\"{!raw f=#{key}}#{value.gsub('"', '\"')}\""
|
21
22
|
end
|
22
23
|
|
24
|
+
# @deprecated
|
23
25
|
def solr_name(*args)
|
24
|
-
|
26
|
+
Deprecation.warn(ActiveFedora::SolrQueryBuilder, 'ActiveFedora::SolrQueryBuilder.solr_name is deprecated and will be removed in ActiveFedora 10.0. Use ActiveFedora.index_field_mapper.solr_name instead.')
|
27
|
+
ActiveFedora.index_field_mapper.solr_name(*args)
|
25
28
|
end
|
26
29
|
|
27
30
|
# Create a query with a clause for each key, value
|
@@ -29,9 +32,9 @@ module ActiveFedora
|
|
29
32
|
# @param [String] join_with ('AND') the value we're joining the clauses with
|
30
33
|
# @example
|
31
34
|
# construct_query_for_rel [[:has_model, "info:fedora/afmodel:ComplexCollection"], [:has_model, "info:fedora/afmodel:ActiveFedora_Base"]], 'OR'
|
32
|
-
# # => _query_:"{!
|
35
|
+
# # => _query_:"{!field f=has_model_ssim}info:fedora/afmodel:ComplexCollection" OR _query_:"{!field f=has_model_ssim}info:fedora/afmodel:ActiveFedora_Base"
|
33
36
|
#
|
34
|
-
# construct_query_for_rel [[Book.
|
37
|
+
# construct_query_for_rel [[Book._reflect_on_association(:library), "foo/bar/baz"]]
|
35
38
|
def construct_query_for_rel(field_pairs, join_with = ' AND ')
|
36
39
|
field_pairs = field_pairs.to_a if field_pairs.is_a? Hash
|
37
40
|
construct_query(property_values_to_solr(field_pairs), join_with)
|
@@ -43,7 +46,7 @@ module ActiveFedora
|
|
43
46
|
# @return [String] a solr query
|
44
47
|
# @example
|
45
48
|
# construct_query([['library_id_ssim', '123'], ['owner_ssim', 'Fred']])
|
46
|
-
# # => "_query_:\"{!
|
49
|
+
# # => "_query_:\"{!field f=library_id_ssim}123\" AND _query_:\"{!field f=owner_ssim}Fred\""
|
47
50
|
def construct_query(field_pairs, join_with = ' AND ')
|
48
51
|
pairs_to_clauses(field_pairs).join(join_with)
|
49
52
|
end
|
@@ -66,12 +69,7 @@ module ActiveFedora
|
|
66
69
|
values << nil if values.empty?
|
67
70
|
values.map do |value|
|
68
71
|
if value.present?
|
69
|
-
|
70
|
-
# If you do a raw query on a parsed field you won't get the matches you expect.
|
71
|
-
"#{field}:#{solr_escape(value)}"
|
72
|
-
else
|
73
|
-
raw_query(field, value)
|
74
|
-
end
|
72
|
+
field_query(field, value)
|
75
73
|
else
|
76
74
|
# Check that the field is not present. In SQL: "WHERE field IS NULL"
|
77
75
|
"-#{field}:[* TO *]"
|
@@ -79,16 +77,6 @@ module ActiveFedora
|
|
79
77
|
end
|
80
78
|
end
|
81
79
|
|
82
|
-
def parsed?(field)
|
83
|
-
field.end_with?(PARSED_SUFFIX)
|
84
|
-
end
|
85
|
-
|
86
|
-
# Adds esaping for spaces which are not handled by RSolr.solr_escape
|
87
|
-
# See rsolr/rsolr#101
|
88
|
-
def solr_escape(terms)
|
89
|
-
RSolr.solr_escape(terms).gsub(/\s+/, "\\ ")
|
90
|
-
end
|
91
|
-
|
92
80
|
# Given a list of pairs (e.g. [field name, values]), convert the field names
|
93
81
|
# to solr names
|
94
82
|
# @param [Array<Array>] pairs a list of pairs of property name and values
|
@@ -97,8 +85,8 @@ module ActiveFedora
|
|
97
85
|
# property_values_to_solr([['library_id', '123'], ['owner', 'Fred']])
|
98
86
|
# # => [['library_id_ssim', '123'], ['owner_ssim', 'Fred']]
|
99
87
|
def property_values_to_solr(pairs)
|
100
|
-
pairs.
|
101
|
-
|
88
|
+
pairs.map do |(property, value)|
|
89
|
+
[solr_field(property), value]
|
102
90
|
end
|
103
91
|
end
|
104
92
|
|
@@ -109,9 +97,16 @@ module ActiveFedora
|
|
109
97
|
when ActiveFedora::Reflection::AssociationReflection
|
110
98
|
field.solr_key
|
111
99
|
else
|
112
|
-
solr_name(field, :symbol)
|
100
|
+
ActiveFedora.index_field_mapper.solr_name(field, :symbol)
|
113
101
|
end
|
114
102
|
end
|
103
|
+
|
104
|
+
# Create a raw query clause suitable for sending to solr as an fq element
|
105
|
+
# @param [String] key
|
106
|
+
# @param [String] value
|
107
|
+
def field_query(key, value)
|
108
|
+
"_query_:\"{!field f=#{key}}#{value.gsub('"', '\"')}\""
|
109
|
+
end
|
115
110
|
end
|
116
111
|
end
|
117
112
|
end
|
@@ -49,19 +49,19 @@ module ActiveFedora
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def reify_solr_result(hit, opts = {})
|
52
|
-
Deprecation.warn SolrService, "SolrService.reify_solr_result is deprecated. Use
|
52
|
+
Deprecation.warn SolrService, "SolrService.reify_solr_result is deprecated. Use SolrHit#reify instead. This will be removed in active-fedora 10.0"
|
53
53
|
QueryResultBuilder.reify_solr_result(hit, opts)
|
54
54
|
end
|
55
55
|
|
56
56
|
# Returns all possible classes for the solr object
|
57
57
|
def classes_from_solr_document(hit, opts = {})
|
58
|
-
Deprecation.warn SolrService, "SolrService.classes_from_solr_document is deprecated. Use
|
58
|
+
Deprecation.warn SolrService, "SolrService.classes_from_solr_document is deprecated. Use SolrHit#models instead. This will be removed in active-fedora 10.0"
|
59
59
|
QueryResultBuilder.classes_from_solr_document(hit, opts)
|
60
60
|
end
|
61
61
|
|
62
62
|
# Returns the best singular class for the solr object
|
63
63
|
def class_from_solr_document(hit, opts = {})
|
64
|
-
Deprecation.warn SolrService, "SolrService.class_from_solr_document is deprecated. Use
|
64
|
+
Deprecation.warn SolrService, "SolrService.class_from_solr_document is deprecated. Use SolrHit#model instead. This will be removed in active-fedora 10.0"
|
65
65
|
QueryResultBuilder.class_from_solr_document(hit, opts)
|
66
66
|
end
|
67
67
|
|
@@ -83,8 +83,8 @@ module ActiveFedora
|
|
83
83
|
# @param [String] key
|
84
84
|
# @param [String] value
|
85
85
|
def raw_query(key, value)
|
86
|
-
Deprecation.warn SolrService, "SolrService.raw_query is deprecated. Use SolrQueryBuilder.
|
87
|
-
SolrQueryBuilder.
|
86
|
+
Deprecation.warn SolrService, "SolrService.raw_query is deprecated. Use SolrQueryBuilder.construct_query instead. This will be removed in active-fedora 10.0"
|
87
|
+
SolrQueryBuilder.construct_query(key, value)
|
88
88
|
end
|
89
89
|
|
90
90
|
def solr_name(*args)
|
@@ -97,20 +97,31 @@ module ActiveFedora
|
|
97
97
|
# @param [String] join_with ('AND') the value we're joining the clauses with
|
98
98
|
# @example
|
99
99
|
# construct_query_for_rel [[:has_model, "info:fedora/afmodel:ComplexCollection"], [:has_model, "info:fedora/afmodel:ActiveFedora_Base"]], 'OR'
|
100
|
-
# # => _query_:"{!
|
100
|
+
# # => _query_:"{!field f=has_model_ssim}info:fedora/afmodel:ComplexCollection" OR _query_:"{!field f=has_model_ssim}info:fedora/afmodel:ActiveFedora_Base"
|
101
101
|
#
|
102
|
-
# construct_query_for_rel [[Book.
|
102
|
+
# construct_query_for_rel [[Book._reflect_on_association(:library), "foo/bar/baz"]]
|
103
103
|
def construct_query_for_rel(field_pairs, join_with = 'AND')
|
104
104
|
Deprecation.warn SolrService, "SolrService.construct_query_for_rel is deprecated. Use SolrQueryBuilder.construct_query_for_rel instead. This will be removed in active-fedora 10.0"
|
105
105
|
SolrQueryBuilder.construct_query_for_rel(field_pairs, join_with)
|
106
106
|
end
|
107
107
|
|
108
|
+
def get(query, args = {})
|
109
|
+
args = args.merge(q: query, qt: 'standard')
|
110
|
+
SolrService.instance.conn.get(select_path, params: args)
|
111
|
+
end
|
112
|
+
|
108
113
|
def query(query, args = {})
|
109
114
|
raw = args.delete(:raw)
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
115
|
+
result = get(query, args)
|
116
|
+
|
117
|
+
if raw
|
118
|
+
Deprecation.warn SolrService, "SolrService.query with raw: true is deprecated. Use SolrService.get instead. This will be removed in active-fedora 10.0"
|
119
|
+
return result
|
120
|
+
end
|
121
|
+
|
122
|
+
result['response']['docs'].map do |doc|
|
123
|
+
ActiveFedora::SolrHit.new(doc)
|
124
|
+
end
|
114
125
|
end
|
115
126
|
|
116
127
|
def delete(id)
|
@@ -122,8 +133,8 @@ module ActiveFedora
|
|
122
133
|
# @param [Hash] args arguments to pass through to `args' param of SolrService.query (note that :rows will be overwritten to 0)
|
123
134
|
# @return [Integer] number of records matching
|
124
135
|
def count(query, args = {})
|
125
|
-
args = args.merge(
|
126
|
-
SolrService.
|
136
|
+
args = args.merge(rows: 0)
|
137
|
+
SolrService.get(query, args)['response']['numFound'].to_i
|
127
138
|
end
|
128
139
|
|
129
140
|
# @param [Hash] doc the document to index
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# DO NOT EDIT THIS FILE
|
2
|
+
# Plucked from ActiveModel::Type::Boolean in Rails 5
|
3
|
+
module ActiveFedora
|
4
|
+
module Type
|
5
|
+
class Boolean < Value # :nodoc:
|
6
|
+
FALSE_VALUES = [false, 0, '0', 'f', 'F', 'false', 'FALSE', 'off', 'OFF'].to_set
|
7
|
+
|
8
|
+
def type
|
9
|
+
:boolean
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def cast_value(value)
|
15
|
+
if value == ''
|
16
|
+
nil
|
17
|
+
else
|
18
|
+
!FALSE_VALUES.include?(value)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# DO NOT EDIT THIS FILE
|
2
|
+
# Plucked from ActiveModel::Type::Boolean in Rails 5
|
3
|
+
module ActiveFedora
|
4
|
+
module Type
|
5
|
+
class Value
|
6
|
+
attr_reader :precision, :scale, :limit
|
7
|
+
|
8
|
+
def initialize(precision: nil, limit: nil, scale: nil)
|
9
|
+
@precision = precision
|
10
|
+
@scale = scale
|
11
|
+
@limit = limit
|
12
|
+
end
|
13
|
+
|
14
|
+
def type # :nodoc:
|
15
|
+
end
|
16
|
+
|
17
|
+
# Converts a value from database input to the appropriate ruby type. The
|
18
|
+
# return value of this method will be returned from
|
19
|
+
# ActiveRecord::AttributeMethods::Read#read_attribute. The default
|
20
|
+
# implementation just calls Value#cast.
|
21
|
+
#
|
22
|
+
# +value+ The raw input, as provided from the database.
|
23
|
+
def deserialize(value)
|
24
|
+
cast(value)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Type casts a value from user input (e.g. from a setter). This value may
|
28
|
+
# be a string from the form builder, or a ruby object passed to a setter.
|
29
|
+
# There is currently no way to differentiate between which source it came
|
30
|
+
# from.
|
31
|
+
#
|
32
|
+
# The return value of this method will be returned from
|
33
|
+
# ActiveRecord::AttributeMethods::Read#read_attribute. See also:
|
34
|
+
# Value#cast_value.
|
35
|
+
#
|
36
|
+
# +value+ The raw input, as provided to the attribute setter.
|
37
|
+
def cast(value)
|
38
|
+
cast_value(value) unless value.nil?
|
39
|
+
end
|
40
|
+
|
41
|
+
# Casts a value from the ruby type to a type that the database knows how
|
42
|
+
# to understand. The returned value from this method should be a
|
43
|
+
# +String+, +Numeric+, +Date+, +Time+, +Symbol+, +true+, +false+, or
|
44
|
+
# +nil+.
|
45
|
+
def serialize(value)
|
46
|
+
value
|
47
|
+
end
|
48
|
+
|
49
|
+
# Type casts a value for schema dumping. This method is private, as we are
|
50
|
+
# hoping to remove it entirely.
|
51
|
+
def type_cast_for_schema(value) # :nodoc:
|
52
|
+
value.inspect
|
53
|
+
end
|
54
|
+
|
55
|
+
# These predicates are not documented, as I need to look further into
|
56
|
+
# their use, and see if they can be removed entirely.
|
57
|
+
def binary? # :nodoc:
|
58
|
+
false
|
59
|
+
end
|
60
|
+
|
61
|
+
# Determines whether a value has changed for dirty checking. +old_value+
|
62
|
+
# and +new_value+ will always be type-cast. Types should not need to
|
63
|
+
# override this method.
|
64
|
+
def changed?(old_value, new_value, _new_value_before_type_cast)
|
65
|
+
old_value != new_value
|
66
|
+
end
|
67
|
+
|
68
|
+
# Determines whether the mutable value has been modified since it was
|
69
|
+
# read. Returns +false+ by default. If your type returns an object
|
70
|
+
# which could be mutated, you should override this method. You will need
|
71
|
+
# to either:
|
72
|
+
#
|
73
|
+
# - pass +new_value+ to Value#serialize and compare it to
|
74
|
+
# +raw_old_value+
|
75
|
+
#
|
76
|
+
# or
|
77
|
+
#
|
78
|
+
# - pass +raw_old_value+ to Value#deserialize and compare it to
|
79
|
+
# +new_value+
|
80
|
+
#
|
81
|
+
# +raw_old_value+ The original value, before being passed to
|
82
|
+
# +deserialize+.
|
83
|
+
#
|
84
|
+
# +new_value+ The current value, after type casting.
|
85
|
+
def changed_in_place?(_raw_old_value, _new_value)
|
86
|
+
false
|
87
|
+
end
|
88
|
+
|
89
|
+
def map(value) # :nodoc:
|
90
|
+
yield value
|
91
|
+
end
|
92
|
+
|
93
|
+
def ==(other)
|
94
|
+
self.class == other.class &&
|
95
|
+
precision == other.precision &&
|
96
|
+
scale == other.scale &&
|
97
|
+
limit == other.limit
|
98
|
+
end
|
99
|
+
alias eql? ==
|
100
|
+
|
101
|
+
def hash
|
102
|
+
[self.class, precision, scale, limit].hash
|
103
|
+
end
|
104
|
+
|
105
|
+
def assert_valid_value(*)
|
106
|
+
end
|
107
|
+
|
108
|
+
private
|
109
|
+
|
110
|
+
# Convenience method for types which do not need separate type casting
|
111
|
+
# behavior for user and database inputs. Called by Value#cast for
|
112
|
+
# values except +nil+.
|
113
|
+
def cast_value(value) # :doc:
|
114
|
+
value
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|