active-fedora 9.1.2 → 9.2.0.rc1
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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/Gemfile +1 -0
- data/History.txt +90 -0
- data/active-fedora.gemspec +2 -2
- data/lib/active_fedora.rb +17 -3
- data/lib/active_fedora/associations.rb +77 -0
- data/lib/active_fedora/associations/association.rb +2 -2
- data/lib/active_fedora/associations/basic_contains_association.rb +52 -0
- data/lib/active_fedora/associations/builder/directly_contains.rb +23 -0
- data/lib/active_fedora/associations/builder/directly_contains_one.rb +44 -0
- data/lib/active_fedora/associations/builder/has_and_belongs_to_many.rb +2 -23
- data/lib/active_fedora/associations/builder/indirectly_contains.rb +26 -0
- data/lib/active_fedora/associations/builder/property.rb +10 -0
- data/lib/active_fedora/associations/collection_association.rb +42 -45
- data/lib/active_fedora/associations/collection_proxy.rb +6 -0
- data/lib/active_fedora/associations/contained_finder.rb +41 -0
- data/lib/active_fedora/associations/container_proxy.rb +9 -0
- data/lib/active_fedora/associations/contains_association.rb +20 -38
- data/lib/active_fedora/associations/delete_proxy.rb +28 -0
- data/lib/active_fedora/associations/directly_contains_association.rb +56 -0
- data/lib/active_fedora/associations/directly_contains_one_association.rb +113 -0
- data/lib/active_fedora/associations/has_and_belongs_to_many_association.rb +6 -14
- data/lib/active_fedora/associations/has_many_association.rb +0 -3
- data/lib/active_fedora/associations/id_composite.rb +30 -0
- data/lib/active_fedora/associations/indirectly_contains_association.rb +90 -0
- data/lib/active_fedora/associations/rdf.rb +8 -4
- data/lib/active_fedora/associations/record_composite.rb +39 -0
- data/lib/active_fedora/attached_files.rb +1 -1
- data/lib/active_fedora/attributes.rb +28 -10
- data/lib/active_fedora/attributes/active_triple_attribute.rb +17 -0
- data/lib/active_fedora/attributes/om_attribute.rb +29 -0
- data/lib/active_fedora/attributes/rdf_datastream_attribute.rb +47 -0
- data/lib/active_fedora/attributes/stream_attribute.rb +46 -0
- data/lib/active_fedora/autosave_association.rb +2 -2
- data/lib/active_fedora/base.rb +3 -0
- data/lib/active_fedora/containers/container.rb +38 -0
- data/lib/active_fedora/containers/direct_container.rb +5 -0
- data/lib/active_fedora/containers/indirect_container.rb +7 -0
- data/lib/active_fedora/core.rb +4 -48
- data/lib/active_fedora/delegated_attribute.rb +5 -98
- data/lib/active_fedora/fedora.rb +1 -1
- data/lib/active_fedora/fedora_attributes.rb +4 -26
- data/lib/active_fedora/file.rb +87 -159
- data/lib/active_fedora/file/attributes.rb +63 -0
- data/lib/active_fedora/file/streaming.rb +46 -0
- data/lib/active_fedora/file_relation.rb +7 -0
- data/lib/active_fedora/identifiable.rb +87 -0
- data/lib/active_fedora/inbound_relation_connection.rb +21 -0
- data/lib/active_fedora/indexers.rb +10 -0
- data/lib/active_fedora/indexers/global_indexer.rb +30 -0
- data/lib/active_fedora/indexers/null_indexer.rb +12 -0
- data/lib/active_fedora/indexing/map.rb +4 -5
- data/lib/active_fedora/indexing_service.rb +3 -22
- data/lib/active_fedora/loadable_from_json.rb +8 -0
- data/lib/active_fedora/pathing.rb +24 -0
- data/lib/active_fedora/persistence.rb +15 -8
- data/lib/active_fedora/rdf.rb +2 -0
- data/lib/active_fedora/rdf/fcrepo4.rb +1 -0
- data/lib/active_fedora/rdf/field_map.rb +90 -0
- data/lib/active_fedora/rdf/field_map_entry.rb +28 -0
- data/lib/active_fedora/rdf/indexing_service.rb +9 -23
- data/lib/active_fedora/rdf/rdf_datastream.rb +1 -2
- data/lib/active_fedora/reflection.rb +16 -15
- data/lib/active_fedora/relation/delegation.rb +15 -4
- data/lib/active_fedora/relation/finder_methods.rb +4 -4
- data/lib/active_fedora/schema.rb +26 -0
- data/lib/active_fedora/schema_indexing_strategy.rb +25 -0
- data/lib/active_fedora/simple_datastream.rb +2 -2
- data/lib/active_fedora/solr_query_builder.rb +3 -2
- data/lib/active_fedora/version.rb +1 -1
- data/lib/active_fedora/with_metadata.rb +1 -1
- data/spec/integration/associations/rdf_spec.rb +49 -0
- data/spec/integration/base_spec.rb +19 -0
- data/spec/integration/belongs_to_association_spec.rb +6 -6
- data/spec/integration/collection_association_spec.rb +4 -4
- data/spec/integration/complex_rdf_datastream_spec.rb +12 -12
- data/spec/integration/datastream_rdf_nested_attributes_spec.rb +1 -1
- data/spec/integration/direct_container_spec.rb +254 -0
- data/spec/integration/directly_contains_one_association_spec.rb +102 -0
- data/spec/integration/file_spec.rb +16 -5
- data/spec/integration/has_many_associations_spec.rb +93 -58
- data/spec/integration/indirect_container_spec.rb +251 -0
- data/spec/integration/rdf_nested_attributes_spec.rb +1 -1
- data/spec/integration/relation_spec.rb +43 -27
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/attributes_spec.rb +6 -6
- data/spec/unit/collection_proxy_spec.rb +28 -0
- data/spec/unit/file_spec.rb +1 -1
- data/spec/unit/files_hash_spec.rb +4 -4
- data/spec/unit/has_and_belongs_to_many_association_spec.rb +11 -9
- data/spec/unit/indexers/global_indexer_spec.rb +41 -0
- data/spec/unit/indexing_service_spec.rb +0 -21
- data/spec/unit/loadable_from_json_spec.rb +31 -0
- data/spec/unit/pathing_spec.rb +37 -0
- data/spec/unit/rdf/indexing_service_spec.rb +3 -3
- data/spec/unit/rdf_resource_datastream_spec.rb +26 -7
- data/spec/unit/schema_indexing_strategy_spec.rb +68 -0
- data/spec/unit/solr_query_builder_spec.rb +1 -1
- data/spec/unit/solr_service_spec.rb +1 -1
- metadata +49 -8
@@ -0,0 +1,28 @@
|
|
1
|
+
module ActiveFedora::RDF
|
2
|
+
# Transient class that represents a field that we send to solr.
|
3
|
+
# It might be possible for two properties to share a single field map entry if they use the same solr key.
|
4
|
+
# @attribute [Symbol] type the data type hint for Solrizer
|
5
|
+
# @attribute [Array] behaviors the indexing hints such as :stored_searchable or :symbol
|
6
|
+
# @attribute [Array] values the actual values that get sent to solr
|
7
|
+
class FieldMapEntry
|
8
|
+
|
9
|
+
attr_accessor :type, :behaviors, :values
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@behaviors = []
|
13
|
+
@values = []
|
14
|
+
end
|
15
|
+
|
16
|
+
# Merges any existing values for solr fields with new, incoming values and ensures that resulting values are unique.
|
17
|
+
# @param [Symbol] type the data type for the field such as :string, :date, :integer
|
18
|
+
# @param [Array] behaviors Solrizer's behaviors for indexing such as :stored_searhable, :symbol
|
19
|
+
# @param [Array] values existing values for the solr field
|
20
|
+
def merge!(type, behaviors, values)
|
21
|
+
self.type ||= type
|
22
|
+
self.behaviors += behaviors
|
23
|
+
self.behaviors.uniq!
|
24
|
+
self.values += values
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -22,7 +22,7 @@ module ActiveFedora::RDF
|
|
22
22
|
def add_assertions(prefix_method, solr_doc = {})
|
23
23
|
fields.each do |field_key, field_info|
|
24
24
|
solr_field_key = solr_document_field_name(field_key, prefix_method)
|
25
|
-
|
25
|
+
field_info.values.each do |val|
|
26
26
|
append_to_solr_doc(solr_doc, solr_field_key, field_info, val)
|
27
27
|
end
|
28
28
|
end
|
@@ -38,7 +38,7 @@ module ActiveFedora::RDF
|
|
38
38
|
def append_to_solr_doc(solr_doc, solr_field_key, field_info, val)
|
39
39
|
self.class.create_and_insert_terms(solr_field_key,
|
40
40
|
solr_document_field_value(val),
|
41
|
-
field_info
|
41
|
+
field_info.behaviors, solr_doc)
|
42
42
|
end
|
43
43
|
|
44
44
|
def solr_document_field_name(field_key, prefix_method)
|
@@ -54,7 +54,7 @@ module ActiveFedora::RDF
|
|
54
54
|
when ::RDF::URI
|
55
55
|
val.to_s
|
56
56
|
when ActiveTriples::Resource
|
57
|
-
val.
|
57
|
+
val.node? ? val.rdf_label : val.rdf_subject.to_s
|
58
58
|
else
|
59
59
|
val
|
60
60
|
end
|
@@ -64,35 +64,21 @@ module ActiveFedora::RDF
|
|
64
64
|
object.resource
|
65
65
|
end
|
66
66
|
|
67
|
-
def properties
|
68
|
-
object.class.properties
|
69
|
-
end
|
70
|
-
|
71
67
|
def index_config
|
72
68
|
object.class.index_config
|
73
69
|
end
|
74
70
|
|
75
|
-
# returns
|
71
|
+
# returns the field map instance
|
76
72
|
def fields
|
77
|
-
field_map
|
78
|
-
|
79
|
-
index_config.each do |name, index_field_config|
|
80
|
-
type = index_field_config.data_type
|
81
|
-
behaviors = index_field_config.behaviors
|
82
|
-
next unless type and behaviors
|
83
|
-
next if kind_of_af_base?(name)
|
84
|
-
field_map[name] = { values: find_values(name), type: type, behaviors: behaviors}
|
73
|
+
field_map_class.new do |field_map|
|
74
|
+
index_config.each { |name, index_field_config| field_map.insert(name, index_field_config, object) }
|
85
75
|
end
|
86
|
-
field_map
|
87
76
|
end
|
88
77
|
|
89
|
-
|
90
|
-
|
91
|
-
|
78
|
+
# Override this method to use your own FieldMap class for custom indexing of objects and properties
|
79
|
+
def field_map_class
|
80
|
+
ActiveFedora::RDF::FieldMap
|
92
81
|
end
|
93
82
|
|
94
|
-
def find_values(name)
|
95
|
-
object.send(name) || []
|
96
|
-
end
|
97
83
|
end
|
98
84
|
end
|
@@ -23,8 +23,7 @@ module ActiveFedora
|
|
23
23
|
|
24
24
|
def add_attribute_indexing_config(name, &block)
|
25
25
|
Deprecation.warn(RDFDatastream, "Adding indexing to datastreams is deprecated")
|
26
|
-
|
27
|
-
index_config[name] ||= ActiveFedora::Indexing::Map::IndexObject.new &block
|
26
|
+
index_config[name] ||= ActiveFedora::Indexing::Map::IndexObject.new(name, &block)
|
28
27
|
end
|
29
28
|
|
30
29
|
# Trim the last segment off the URI to get the parents uri
|
@@ -10,7 +10,7 @@ module ActiveFedora
|
|
10
10
|
module ClassMethods
|
11
11
|
def create_reflection(macro, name, options, active_fedora)
|
12
12
|
klass = case macro
|
13
|
-
when :has_many, :belongs_to, :has_and_belongs_to_many, :contains
|
13
|
+
when :has_many, :belongs_to, :has_and_belongs_to_many, :contains, :directly_contains, :directly_contains_one, :indirectly_contains
|
14
14
|
AssociationReflection
|
15
15
|
when :rdf, :singular_rdf
|
16
16
|
RDFPropertyReflection
|
@@ -106,11 +106,10 @@ module ActiveFedora
|
|
106
106
|
|
107
107
|
# Returns a new, unsaved instance of the associated class. +options+ will
|
108
108
|
# be passed to the class's constructor.
|
109
|
-
def build_association(*options)
|
110
|
-
klass.new(*options)
|
109
|
+
def build_association(*options, &block)
|
110
|
+
klass.new(*options, &block)
|
111
111
|
end
|
112
112
|
|
113
|
-
|
114
113
|
# Returns the class name for the macro.
|
115
114
|
#
|
116
115
|
# <tt>has_many :clients</tt> returns <tt>'Client'</tt>
|
@@ -167,14 +166,7 @@ module ActiveFedora
|
|
167
166
|
|
168
167
|
def initialize(macro, name, options, active_fedora)
|
169
168
|
super
|
170
|
-
@collection = [:has_many, :has_and_belongs_to_many].include?(macro)
|
171
|
-
end
|
172
|
-
|
173
|
-
|
174
|
-
# Returns a new, unsaved instance of the associated class. +options+ will
|
175
|
-
# be passed to the class's constructor.
|
176
|
-
def build_association(*options)
|
177
|
-
klass.new(*options)
|
169
|
+
@collection = [:has_many, :has_and_belongs_to_many, :directly_contains, :indirectly_contains].include?(macro)
|
178
170
|
end
|
179
171
|
|
180
172
|
# Creates a new instance of the associated class, and immediately saves it
|
@@ -193,10 +185,13 @@ module ActiveFedora
|
|
193
185
|
options[:predicate]
|
194
186
|
end
|
195
187
|
|
188
|
+
def predicate_for_solr
|
189
|
+
predicate.fragment || predicate.to_s.rpartition(/\//).last
|
190
|
+
end
|
191
|
+
|
196
192
|
def solr_key
|
197
193
|
@solr_key ||= begin
|
198
|
-
|
199
|
-
ActiveFedora::SolrQueryBuilder.solr_name(predicate_string, :symbol)
|
194
|
+
ActiveFedora::SolrQueryBuilder.solr_name(predicate_for_solr, :symbol)
|
200
195
|
end
|
201
196
|
end
|
202
197
|
|
@@ -247,7 +242,7 @@ module ActiveFedora
|
|
247
242
|
def association_class
|
248
243
|
case macro
|
249
244
|
when :contains
|
250
|
-
Associations::
|
245
|
+
Associations::BasicContainsAssociation
|
251
246
|
when :belongs_to
|
252
247
|
Associations::BelongsToAssociation
|
253
248
|
when :has_and_belongs_to_many
|
@@ -258,6 +253,12 @@ module ActiveFedora
|
|
258
253
|
Associations::SingularRDF
|
259
254
|
when :rdf
|
260
255
|
Associations::RDF
|
256
|
+
when :directly_contains
|
257
|
+
Associations::DirectlyContainsAssociation
|
258
|
+
when :directly_contains_one
|
259
|
+
Associations::DirectlyContainsOneAssociation
|
260
|
+
when :indirectly_contains
|
261
|
+
Associations::IndirectlyContainsAssociation
|
261
262
|
end
|
262
263
|
end
|
263
264
|
|
@@ -6,14 +6,25 @@ module ActiveFedora
|
|
6
6
|
# subsequent calls to that method faster by avoiding method_missing. The delegations
|
7
7
|
# may vary depending on the klass of a relation, so we create a subclass of Relation
|
8
8
|
# for each different klass, and the delegations are compiled into that subclass only.
|
9
|
-
|
9
|
+
|
10
|
+
BLACKLISTED_ARRAY_METHODS = [
|
11
|
+
:compact!, :flatten!, :reject!, :reverse!, :rotate!, :map!,
|
12
|
+
:shuffle!, :slice!, :sort!, :sort_by!, :delete_if,
|
13
|
+
:keep_if, :pop, :shift, :delete_at, :select!
|
14
|
+
].to_set
|
15
|
+
|
10
16
|
delegate :length, :collect, :map, :each, :all?, :include?, :to_ary, :to => :to_a
|
11
17
|
|
18
|
+
protected
|
19
|
+
|
20
|
+
def array_delegable?(method)
|
21
|
+
Array.method_defined?(method) && BLACKLISTED_ARRAY_METHODS.exclude?(method)
|
22
|
+
end
|
12
23
|
|
13
24
|
def method_missing(method, *args, &block)
|
14
|
-
if
|
15
|
-
self.class.delegate method, :
|
16
|
-
to_a.
|
25
|
+
if array_delegable?(method)
|
26
|
+
self.class.delegate method, to: :to_a
|
27
|
+
to_a.public_send(method, *args, &block)
|
17
28
|
else
|
18
29
|
super
|
19
30
|
end
|
@@ -28,7 +28,7 @@ module ActiveFedora
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
# Returns an Array of objects of the Class that +find+ is being
|
31
|
+
# Returns an Array of objects of the Class that +find+ is being
|
32
32
|
# called on
|
33
33
|
#
|
34
34
|
# @param[String,Hash] args either an id or a hash of conditions
|
@@ -40,12 +40,12 @@ module ActiveFedora
|
|
40
40
|
options = options.dup
|
41
41
|
cast = if @klass == ActiveFedora::Base && !options.has_key?(:cast)
|
42
42
|
true
|
43
|
-
else
|
43
|
+
else
|
44
44
|
options.delete(:cast)
|
45
45
|
end
|
46
46
|
if options[:sort]
|
47
47
|
# Deprecate sort sometime?
|
48
|
-
sort = options.delete(:sort)
|
48
|
+
sort = options.delete(:sort)
|
49
49
|
options[:order] ||= sort if sort.present?
|
50
50
|
end
|
51
51
|
|
@@ -251,7 +251,7 @@ module ActiveFedora
|
|
251
251
|
ids.map{|id| find_one(id, cast)}
|
252
252
|
end
|
253
253
|
|
254
|
-
private
|
254
|
+
private
|
255
255
|
|
256
256
|
# Returns a solr query for the supplied conditions
|
257
257
|
# @param[Hash] conditions solr conditions to match
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module ActiveFedora
|
2
|
+
##
|
3
|
+
# Implement the .apply_schema method from ActiveTriples to allow for
|
4
|
+
# externally defined schemas to be put on an AF::Base object.
|
5
|
+
module Schema
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
module ClassMethods
|
9
|
+
# Applies a schema to an ActiveFedora::Base.
|
10
|
+
# @note The default application strategy adds no indexing hints. You may
|
11
|
+
# want to implement a different strategy if you want to set values on the
|
12
|
+
# property reflection.
|
13
|
+
# @param schema [ActiveTriples::Schema] The schema to apply.
|
14
|
+
# @param strategy [#apply] The strategy to use for applying the schema.
|
15
|
+
# @example Apply a schema and index everything as symbol.
|
16
|
+
# apply_schema MySchema, ActiveFedora::SchemaIndexingStrategy.new(
|
17
|
+
# ActiveFedora::GlobalIndexer.new(:symbol)
|
18
|
+
# )
|
19
|
+
def apply_schema(schema, strategy=ActiveFedora::SchemaIndexingStrategy.new)
|
20
|
+
schema.properties.each do |property|
|
21
|
+
strategy.apply(self, property)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module ActiveFedora
|
2
|
+
##
|
3
|
+
# An extension strategy to also apply solr indexes for each property.
|
4
|
+
# @note If how a field is indexed changes based on property, this would be a
|
5
|
+
# good place to define that.
|
6
|
+
class SchemaIndexingStrategy
|
7
|
+
# @param [#index] indexer The indexer to use
|
8
|
+
def initialize(indexer=Indexers::NullIndexer.instance)
|
9
|
+
@indexer = indexer
|
10
|
+
end
|
11
|
+
|
12
|
+
# @param [ActiveFedora::Base] object The object to apply the property to.
|
13
|
+
# @param [ActiveTriples::Property, #name, #to_h] property The property to define.
|
14
|
+
def apply(object, property)
|
15
|
+
object.property property.name, property.to_h do |index|
|
16
|
+
indexer.new(property).index(index)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
attr_reader :indexer
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -20,9 +20,9 @@ module ActiveFedora
|
|
20
20
|
|
21
21
|
#Constructor. this class will call self.field for each DCTERM. In short, all DCTERMS fields will already exist
|
22
22
|
#when this method returns. Each term is marked as a multivalue string.
|
23
|
-
def initialize(digital_object=nil, dsid=nil, options={})
|
24
|
-
super
|
23
|
+
def initialize(digital_object=nil, dsid=nil, options={}, &block)
|
25
24
|
self.fields={}
|
25
|
+
super
|
26
26
|
end
|
27
27
|
|
28
28
|
# This method generates the various accessor and mutator methods on self for the datastream metadata attributes.
|
@@ -5,8 +5,9 @@ module ActiveFedora
|
|
5
5
|
# If the id_array is empty, defaults to a query of "id:NEVER_USE_THIS_ID", which will return an empty solr response
|
6
6
|
# @param [Array] id_array the ids that you want included in the query
|
7
7
|
def self.construct_query_for_ids(id_array)
|
8
|
-
|
9
|
-
|
8
|
+
ids = id_array.reject { |x| x.blank? }
|
9
|
+
return "id:NEVER_USE_THIS_ID" if ids.empty?
|
10
|
+
"{!terms f=#{SOLR_DOCUMENT_ID}}#{ids.join(',')}"
|
10
11
|
end
|
11
12
|
|
12
13
|
# Create a raw query clause suitable for sending to solr as an fq element
|
@@ -9,7 +9,7 @@ module ActiveFedora
|
|
9
9
|
@metadata_node ||= self.class.metadata_schema.new(self)
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
12
|
+
def create_or_update(*)
|
13
13
|
if super && !new_record?
|
14
14
|
metadata_node.metadata_uri = described_by # TODO only necessary if the URI was < > before
|
15
15
|
metadata_node.save # TODO if changed?
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "rdf associations" do
|
4
|
+
context "when there is one relationship for the predicate" do
|
5
|
+
before do
|
6
|
+
class Foo < ActiveFedora::Base
|
7
|
+
end
|
8
|
+
class Library < ActiveFedora::Base
|
9
|
+
has_and_belongs_to_many :foos, predicate: ::RDF::URI('http://example.com')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
after do
|
13
|
+
Object.send(:remove_const, :Foo)
|
14
|
+
Object.send(:remove_const, :Library)
|
15
|
+
end
|
16
|
+
|
17
|
+
let(:library) { Library.new }
|
18
|
+
|
19
|
+
it "doesn't not bother to filter by class type" do
|
20
|
+
expect(library.association(:foo_ids)).not_to receive(:filter_by_class)
|
21
|
+
library.foos.to_a
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context "when two relationships have the same predicate" do
|
26
|
+
before do
|
27
|
+
class Foo < ActiveFedora::Base
|
28
|
+
end
|
29
|
+
class Bar < ActiveFedora::Base
|
30
|
+
end
|
31
|
+
class Library < ActiveFedora::Base
|
32
|
+
has_and_belongs_to_many :foos, predicate: ::RDF::URI('http://example.com')
|
33
|
+
has_and_belongs_to_many :bars, predicate: ::RDF::URI('http://example.com')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
after do
|
37
|
+
Object.send(:remove_const, :Foo)
|
38
|
+
Object.send(:remove_const, :Bar)
|
39
|
+
Object.send(:remove_const, :Library)
|
40
|
+
end
|
41
|
+
|
42
|
+
let(:library) { Library.new }
|
43
|
+
|
44
|
+
it "filters by class type" do
|
45
|
+
expect(library.association(:foo_ids)).to receive(:filter_by_class).and_call_original
|
46
|
+
library.foos.to_a
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -135,6 +135,25 @@ describe ActiveFedora::Base do
|
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
138
|
+
describe "#apply_schema" do
|
139
|
+
before do
|
140
|
+
class ExampleSchema < ActiveTriples::Schema
|
141
|
+
property :title, predicate: RDF::DC.title
|
142
|
+
end
|
143
|
+
class ExampleBase < ActiveFedora::Base
|
144
|
+
apply_schema ExampleSchema, ActiveFedora::SchemaIndexingStrategy.new(ActiveFedora::Indexers::GlobalIndexer.new(:symbol))
|
145
|
+
end
|
146
|
+
end
|
147
|
+
after do
|
148
|
+
Object.send(:remove_const, :ExampleSchema)
|
149
|
+
Object.send(:remove_const, :ExampleBase)
|
150
|
+
end
|
151
|
+
let(:obj) { ExampleBase.new }
|
152
|
+
it "should configure properties and solrize them" do
|
153
|
+
obj.title = ["Test"]
|
154
|
+
expect(obj.to_solr[ActiveFedora::SolrQueryBuilder.solr_name("title", :symbol)]).to eq ["Test"]
|
155
|
+
end
|
156
|
+
end
|
138
157
|
|
139
158
|
describe "#exists?" do
|
140
159
|
let(:obj) { ActiveFedora::Base.create }
|
@@ -106,13 +106,13 @@ describe ActiveFedora::Base do
|
|
106
106
|
end
|
107
107
|
|
108
108
|
class SimpleCollection < ActiveFedora::Base
|
109
|
-
has_many :objects, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf, class_name: 'SimpleObject'
|
110
|
-
has_many :complex_objects, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf, class_name: 'ZComplexObject'
|
109
|
+
has_many :objects, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf, class_name: 'SimpleObject'
|
110
|
+
has_many :complex_objects, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf, class_name: 'ZComplexObject'
|
111
111
|
end
|
112
112
|
|
113
113
|
class ComplexCollection < SimpleCollection
|
114
|
-
has_many :objects, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf, class_name: 'SimpleObject'
|
115
|
-
has_many :complex_objects, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf, class_name: 'ZComplexObject'
|
114
|
+
has_many :objects, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf, class_name: 'SimpleObject'
|
115
|
+
has_many :complex_objects, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf, class_name: 'ZComplexObject'
|
116
116
|
|
117
117
|
def assert_content_model
|
118
118
|
self.has_model = [self.class.to_s, self.class.superclass.to_s]
|
@@ -172,7 +172,7 @@ describe ActiveFedora::Base do
|
|
172
172
|
simple_collection.objects = [complex_object, simple_object]
|
173
173
|
simple_collection.save!
|
174
174
|
end
|
175
|
-
it "ignores objects
|
175
|
+
it "ignores objects whose classes aren't specified" do
|
176
176
|
expect(simple_collection.complex_objects.size).to eq 1
|
177
177
|
expect(simple_collection.complex_objects[0]).to be_instance_of ZComplexObject
|
178
178
|
expect(simple_collection.complex_objects[1]).to be_nil
|
@@ -223,7 +223,7 @@ describe ActiveFedora::Base do
|
|
223
223
|
end
|
224
224
|
|
225
225
|
class SuperclassCollection < ActiveFedora::Base
|
226
|
-
has_many :objects, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf, class_name: 'SuperclassObject'
|
226
|
+
has_many :objects, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf, class_name: 'SuperclassObject'
|
227
227
|
end
|
228
228
|
end
|
229
229
|
after :all do
|