active-fedora 9.12.0 → 9.13.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/active-fedora.gemspec +1 -0
- data/lib/active_fedora.rb +1 -0
- data/lib/active_fedora/associations.rb +38 -3
- data/lib/active_fedora/associations/basic_contains_association.rb +12 -51
- data/lib/active_fedora/associations/builder/aggregation.rb +1 -1
- data/lib/active_fedora/associations/builder/basic_contains.rb +7 -0
- data/lib/active_fedora/associations/builder/{contains.rb → has_subresource.rb} +2 -2
- data/lib/active_fedora/associations/contains_association.rb +19 -1
- data/lib/active_fedora/associations/directly_contains_association.rb +1 -15
- data/lib/active_fedora/associations/has_subresource_association.rb +61 -0
- data/lib/active_fedora/attached_files.rb +6 -9
- data/lib/active_fedora/autosave_association.rb +1 -1
- data/lib/active_fedora/base.rb +0 -1
- data/lib/active_fedora/common.rb +1 -0
- data/lib/active_fedora/fedora.rb +14 -19
- data/lib/active_fedora/file.rb +1 -1
- data/lib/active_fedora/file/attributes.rb +4 -0
- data/lib/active_fedora/file_persistence.rb +9 -1
- data/lib/active_fedora/initializing_connection.rb +64 -0
- data/lib/active_fedora/ldp_cache.rb +1 -2
- data/lib/active_fedora/ldp_resource_service.rb +7 -1
- data/lib/active_fedora/persistence.rb +12 -1
- data/lib/active_fedora/reflection.rb +22 -6
- data/lib/active_fedora/simple_datastream.rb +2 -0
- data/lib/active_fedora/version.rb +1 -1
- data/lib/generators/active_fedora/config/fedora/fedora_generator.rb +1 -0
- data/lib/generators/active_fedora/config/fedora/templates/.fcrepo_wrapper +1 -0
- data/lib/generators/active_fedora/config/fedora/templates/fcrepo_wrapper_test.yml +4 -0
- data/lib/generators/active_fedora/config/solr/solr_generator.rb +1 -0
- data/lib/generators/active_fedora/config/solr/templates/.solr_wrapper +3 -0
- data/lib/generators/active_fedora/config/solr/templates/solr_wrapper_test.yml +8 -0
- data/spec/integration/attached_files_spec.rb +77 -18
- data/spec/integration/attributes_spec.rb +3 -4
- data/spec/integration/autosave_association_spec.rb +0 -1
- data/spec/integration/base_spec.rb +19 -66
- data/spec/integration/basic_contains_association_spec.rb +108 -0
- data/spec/integration/complex_rdf_datastream_spec.rb +1 -1
- data/spec/integration/field_to_solr_name_spec.rb +12 -11
- data/spec/integration/file_fixity_spec.rb +1 -1
- data/spec/integration/file_spec.rb +4 -1
- data/spec/integration/generators/fedora_generator_spec.rb +26 -0
- data/spec/integration/generators/solr_generator_spec.rb +26 -0
- data/spec/integration/has_and_belongs_to_many_associations_spec.rb +6 -16
- data/spec/integration/has_many_associations_spec.rb +6 -16
- data/spec/integration/{contains_association_spec.rb → has_subresource_spec.rb} +1 -1
- data/spec/integration/json_serialization_spec.rb +11 -5
- data/spec/integration/model_spec.rb +7 -13
- data/spec/integration/ntriples_datastream_spec.rb +2 -2
- data/spec/integration/om_datastream_spec.rb +1 -1
- data/spec/integration/persistence_spec.rb +0 -3
- data/spec/integration/query_result_builder_spec.rb +1 -1
- data/spec/integration/relation_delegation_spec.rb +3 -8
- data/spec/integration/scoped_query_spec.rb +5 -7
- data/spec/integration/solr_hit_spec.rb +10 -4
- data/spec/integration/solr_instance_loader_spec.rb +11 -4
- data/spec/integration/versionable_spec.rb +3 -3
- data/spec/spec_helper.rb +5 -1
- data/spec/unit/active_fedora_spec.rb +1 -1
- data/spec/unit/attached_files_spec.rb +32 -21
- data/spec/unit/attributes_spec.rb +21 -23
- data/spec/unit/base_active_model_spec.rb +13 -10
- data/spec/unit/base_spec.rb +2 -24
- data/spec/unit/callback_spec.rb +0 -8
- data/spec/unit/core_spec.rb +3 -5
- data/spec/unit/inheritance_spec.rb +15 -9
- data/spec/unit/ntriples_datastream_spec.rb +1 -1
- data/spec/unit/om_datastream_spec.rb +1 -1
- data/spec/unit/persistence_spec.rb +21 -0
- data/spec/unit/query_spec.rb +8 -0
- data/spec/unit/rdf_datastream_spec.rb +1 -1
- data/spec/unit/rdf_resource_datastream_spec.rb +1 -1
- data/spec/unit/simple_datastream_spec.rb +8 -2
- data/spec/unit/solr_config_options_spec.rb +1 -1
- data/spec/unit/validations_spec.rb +2 -8
- metadata +27 -6
- data/spec/integration/bug_spec.rb +0 -40
- data/spec/integration/full_featured_model_spec.rb +0 -160
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de64ddd51b632d51f1f4dc511ff09f362ef0f780
|
4
|
+
data.tar.gz: d92cd808d81b5f883bfe354ec500ddb0b876cf45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 74614aefd969cdbc977b7c793a8c2f09f434200ae28407d75af925112fcd85b3da3f14fc112fa3d704573762909c25d03111c509b172452574183ccc3836b749
|
7
|
+
data.tar.gz: 60a60f1c17d835d44423bb1a4fa24bcec477ff9854bfb0b33791220de4edfd2b273942a9fbce8b486aa6ba4f5fec397efc87b38687ff8e6058a46778f2938788
|
data/.rubocop.yml
CHANGED
@@ -12,7 +12,7 @@ Lint/HandleExceptions:
|
|
12
12
|
- 'spec/unit/**/*'
|
13
13
|
- 'spec/integration/**/*'
|
14
14
|
- 'lib/active_fedora/cleaner.rb'
|
15
|
-
- 'lib/active_fedora/associations/builder/
|
15
|
+
- 'lib/active_fedora/associations/builder/has_subresource.rb'
|
16
16
|
|
17
17
|
Lint/AssignmentInCondition:
|
18
18
|
Enabled: false
|
data/active-fedora.gemspec
CHANGED
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
|
|
26
26
|
s.add_dependency "deprecation"
|
27
27
|
s.add_dependency "ldp", '~> 0.5.0'
|
28
28
|
|
29
|
+
s.add_development_dependency "rails"
|
29
30
|
s.add_development_dependency "rdoc"
|
30
31
|
s.add_development_dependency "yard"
|
31
32
|
# Pin rake to 10.0 due to https://github.com/lsegal/yard/issues/947
|
data/lib/active_fedora.rb
CHANGED
@@ -25,6 +25,7 @@ module ActiveFedora
|
|
25
25
|
autoload :BelongsToAssociation
|
26
26
|
autoload :HasAndBelongsToManyAssociation
|
27
27
|
autoload :BasicContainsAssociation
|
28
|
+
autoload :HasSubresourceAssociation
|
28
29
|
autoload :DirectlyContainsAssociation
|
29
30
|
autoload :DirectlyContainsOneAssociation
|
30
31
|
autoload :IndirectlyContainsAssociation
|
@@ -45,7 +46,8 @@ module ActiveFedora
|
|
45
46
|
autoload :BelongsTo, 'active_fedora/associations/builder/belongs_to'
|
46
47
|
autoload :HasMany, 'active_fedora/associations/builder/has_many'
|
47
48
|
autoload :HasAndBelongsToMany, 'active_fedora/associations/builder/has_and_belongs_to_many'
|
48
|
-
autoload :
|
49
|
+
autoload :BasicContains, 'active_fedora/associations/builder/basic_contains'
|
50
|
+
autoload :HasSubresource, 'active_fedora/associations/builder/has_subresource'
|
49
51
|
autoload :DirectlyContains, 'active_fedora/associations/builder/directly_contains'
|
50
52
|
autoload :DirectlyContainsOne, 'active_fedora/associations/builder/directly_contains_one'
|
51
53
|
autoload :IndirectlyContains, 'active_fedora/associations/builder/indirectly_contains'
|
@@ -104,6 +106,23 @@ module ActiveFedora
|
|
104
106
|
end
|
105
107
|
|
106
108
|
module ClassMethods
|
109
|
+
# This method is used to declare this resource acts like an LDP BasicContainer
|
110
|
+
#
|
111
|
+
# @param [Hash] options
|
112
|
+
# @option options [String] :class_name ('ActiveFedora::File') The name of the
|
113
|
+
# class that will represent the contained resources
|
114
|
+
#
|
115
|
+
# example:
|
116
|
+
# class FooHistory < ActiveFedora::Base
|
117
|
+
# is_a_container class_name: 'Thing'
|
118
|
+
# end
|
119
|
+
#
|
120
|
+
def is_a_container(options = {})
|
121
|
+
defaults = { class_name: 'ActiveFedora::File',
|
122
|
+
predicate: ::RDF::Vocab::LDP.contains }
|
123
|
+
Builder::BasicContains.build(self, :contains, defaults.merge(options))
|
124
|
+
end
|
125
|
+
|
107
126
|
# This method is used to declare an ldp:DirectContainer on a resource
|
108
127
|
# you must specify an is_member_of_relation or a has_member_relation
|
109
128
|
#
|
@@ -176,9 +195,25 @@ module ActiveFedora
|
|
176
195
|
# @option options [Boolean] :autocreate Always create this resource on new objects
|
177
196
|
# @yield block executed by some types of child resources
|
178
197
|
def contains(name, options = {}, &block)
|
198
|
+
Deprecation.warn(Associations, "contains is deprecated. Use has_subresource instead. This will be removed in ActiveFedora 10")
|
199
|
+
has_subresource(name, options, &block)
|
200
|
+
end
|
201
|
+
|
202
|
+
# This method is used to specify the details of a contained resource.
|
203
|
+
# Pass the name as the first argument and a hash of options as the second argument
|
204
|
+
# Note that this method doesn't actually execute the block, but stores it, to be executed
|
205
|
+
# by any the implementation of the resource(specified as :class_name)
|
206
|
+
#
|
207
|
+
# @param [String] name the handle to refer to this child as
|
208
|
+
# @param [Hash] options
|
209
|
+
# @option options [Class] :class_name The class that will represent this child, should extend ``ActiveFedora::File'' or ``ActiveFedora::Base''
|
210
|
+
# @option options [String] :url
|
211
|
+
# @option options [Boolean] :autocreate Always create this resource on new objects
|
212
|
+
# @yield block executed by some types of child resources
|
213
|
+
def has_subresource(name, options = {}, &block)
|
179
214
|
options[:block] = block if block
|
180
|
-
raise ArgumentError, "You must provide a name (dsid) for the
|
181
|
-
Associations::Builder::
|
215
|
+
raise ArgumentError, "You must provide a path name (f.k.a. dsid) for the resource" unless name
|
216
|
+
Associations::Builder::HasSubresource.build(self, name.to_sym, options)
|
182
217
|
end
|
183
218
|
|
184
219
|
# Specifies a one-to-one association with another class. This method should only be used
|
@@ -1,61 +1,22 @@
|
|
1
1
|
module ActiveFedora
|
2
2
|
module Associations
|
3
|
-
class BasicContainsAssociation <
|
4
|
-
# Implements the reader method, e.g. foo.bar for Foo.has_one :bar
|
5
|
-
def reader(force_reload = false)
|
6
|
-
super || build
|
7
|
-
end
|
8
|
-
|
3
|
+
class BasicContainsAssociation < ContainsAssociation #:nodoc:
|
9
4
|
def find_target
|
10
|
-
|
11
|
-
|
12
|
-
end
|
13
|
-
end
|
5
|
+
uris = owner.resource.query(predicate: options[:predicate])
|
6
|
+
.map { |r| r.object.to_s }
|
14
7
|
|
15
|
-
|
16
|
-
"#{owner.id}/#{reflection.name}"
|
8
|
+
uris.map { |object_uri| klass.find(klass.uri_to_id(object_uri)) }
|
17
9
|
end
|
18
10
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
super
|
24
|
-
end
|
25
|
-
|
26
|
-
def find_or_initialize_target(&block)
|
27
|
-
if reflection.klass < ActiveFedora::File
|
28
|
-
reflection.build_association(target_uri, &block)
|
29
|
-
else
|
30
|
-
reflection.klass.find(target_uri)
|
31
|
-
end
|
32
|
-
rescue ActiveFedora::ObjectNotFoundError
|
33
|
-
reflection.build_association(target_uri, &block)
|
34
|
-
end
|
35
|
-
|
36
|
-
def replace(record)
|
37
|
-
if record
|
38
|
-
raise_on_type_mismatch!(record)
|
39
|
-
@updated = true
|
40
|
-
end
|
41
|
-
|
42
|
-
self.target = record
|
43
|
-
end
|
44
|
-
|
45
|
-
def new_record(method, attributes)
|
46
|
-
record = super
|
47
|
-
configure_datastream(record)
|
48
|
-
record
|
49
|
-
end
|
11
|
+
def insert_record(record, force = true, validate = true)
|
12
|
+
record.base_path_for_resource = owner.uri.to_s
|
13
|
+
super
|
14
|
+
end
|
50
15
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
56
|
-
return unless record.new_record? && reflection.options[:autocreate]
|
57
|
-
record.datastream_will_change!
|
58
|
-
end
|
16
|
+
def add_to_target(record, skip_callbacks = false)
|
17
|
+
record.base_path_for_resource = owner.uri.to_s
|
18
|
+
super
|
19
|
+
end
|
59
20
|
end
|
60
21
|
end
|
61
22
|
end
|
@@ -6,7 +6,7 @@ module ActiveFedora::Associations::Builder
|
|
6
6
|
|
7
7
|
def self.build(model, name, options)
|
8
8
|
model.indirectly_contains name, { has_member_relation: has_member_relation(options), through: proxy_class, foreign_key: proxy_foreign_key, inserted_content_relation: inserted_content_relation }.merge(indirect_options(options))
|
9
|
-
model.
|
9
|
+
model.has_subresource contains_key(options), class_name: list_source_class
|
10
10
|
model.orders name, through: contains_key(options)
|
11
11
|
end
|
12
12
|
|
@@ -1,7 +1,15 @@
|
|
1
|
-
# This is the parent class of DirectlyContainsAssociation and IndirectlyContainsAssociation
|
1
|
+
# This is the parent class of BasicContainsAssociation, DirectlyContainsAssociation and IndirectlyContainsAssociation
|
2
2
|
module ActiveFedora
|
3
3
|
module Associations
|
4
4
|
class ContainsAssociation < CollectionAssociation #:nodoc:
|
5
|
+
def insert_record(record, force = true, validate = true)
|
6
|
+
if force
|
7
|
+
record.save!
|
8
|
+
else
|
9
|
+
record.save(validate: validate)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
5
13
|
def reader
|
6
14
|
@records ||= ContainerProxy.new(self)
|
7
15
|
end
|
@@ -27,6 +35,16 @@ module ActiveFedora
|
|
27
35
|
raise "Can't get uri. Owner isn't saved" if @owner.new_record?
|
28
36
|
"#{@owner.uri}/#{@reflection.name}"
|
29
37
|
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def delete_records(records, method)
|
42
|
+
if method == :destroy
|
43
|
+
records.each(&:destroy)
|
44
|
+
else
|
45
|
+
records.each(&:delete)
|
46
|
+
end
|
47
|
+
end
|
30
48
|
end
|
31
49
|
end
|
32
50
|
end
|
@@ -3,11 +3,7 @@ module ActiveFedora
|
|
3
3
|
class DirectlyContainsAssociation < ContainsAssociation #:nodoc:
|
4
4
|
def insert_record(record, force = true, validate = true)
|
5
5
|
container.save!
|
6
|
-
|
7
|
-
record.save!
|
8
|
-
else
|
9
|
-
record.save(validate: validate)
|
10
|
-
end
|
6
|
+
super
|
11
7
|
end
|
12
8
|
|
13
9
|
def find_target
|
@@ -39,16 +35,6 @@ module ActiveFedora
|
|
39
35
|
record.uri = ActiveFedora::Base.id_to_uri(container.mint_id)
|
40
36
|
set_inverse_instance(record)
|
41
37
|
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
|
-
def delete_records(records, method)
|
46
|
-
if method == :destroy
|
47
|
-
records.each(&:destroy)
|
48
|
-
else
|
49
|
-
records.each(&:delete)
|
50
|
-
end
|
51
|
-
end
|
52
38
|
end
|
53
39
|
end
|
54
40
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module ActiveFedora
|
2
|
+
module Associations
|
3
|
+
class HasSubresourceAssociation < SingularAssociation #:nodoc:
|
4
|
+
# Implements the reader method, e.g. foo.bar for Foo.has_one :bar
|
5
|
+
def reader(force_reload = false)
|
6
|
+
super || build
|
7
|
+
end
|
8
|
+
|
9
|
+
def find_target
|
10
|
+
find_or_initialize_target do |record|
|
11
|
+
configure_datastream(record) if reflection.options[:block]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def target_uri
|
16
|
+
"#{owner.id}/#{reflection.name}"
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def raise_on_type_mismatch!(record)
|
22
|
+
return if record.is_a? LoadableFromJson::SolrBackedMetadataFile
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
26
|
+
def find_or_initialize_target(&block)
|
27
|
+
if reflection.klass < ActiveFedora::File
|
28
|
+
reflection.build_association(target_uri, &block)
|
29
|
+
else
|
30
|
+
reflection.klass.find(target_uri)
|
31
|
+
end
|
32
|
+
rescue ActiveFedora::ObjectNotFoundError
|
33
|
+
reflection.build_association(target_uri, &block)
|
34
|
+
end
|
35
|
+
|
36
|
+
def replace(record)
|
37
|
+
if record
|
38
|
+
raise_on_type_mismatch!(record)
|
39
|
+
@updated = true
|
40
|
+
end
|
41
|
+
|
42
|
+
self.target = record
|
43
|
+
end
|
44
|
+
|
45
|
+
def new_record(method, attributes)
|
46
|
+
record = super
|
47
|
+
configure_datastream(record)
|
48
|
+
record
|
49
|
+
end
|
50
|
+
|
51
|
+
def configure_datastream(record)
|
52
|
+
# If you called has_metadata with a block, pass the block into the File class
|
53
|
+
if reflection.options[:block].class == Proc
|
54
|
+
reflection.options[:block].call(record)
|
55
|
+
end
|
56
|
+
return unless record.new_record? && reflection.options[:autocreate]
|
57
|
+
record.datastream_will_change!
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -132,7 +132,7 @@ module ActiveFedora
|
|
132
132
|
def create_singleton_association(file_path)
|
133
133
|
undeclared_files << file_path.to_sym
|
134
134
|
|
135
|
-
association = Associations::
|
135
|
+
association = Associations::HasSubresourceAssociation.new(self, Reflection::HasSubresourceReflection.new(file_path, nil, { class_name: 'ActiveFedora::File' }, self.class))
|
136
136
|
@association_cache[file_path.to_sym] = association
|
137
137
|
|
138
138
|
singleton_class.send :define_method, accessor_name(file_path) do
|
@@ -156,13 +156,10 @@ module ActiveFedora
|
|
156
156
|
end
|
157
157
|
|
158
158
|
module ClassMethods
|
159
|
-
extend Deprecation
|
160
|
-
self.deprecation_horizon = 'active-fedora version 10.0'
|
161
|
-
|
162
159
|
def ds_specs
|
160
|
+
Deprecation.warn(self, "ds_specs is deprecated and will be removed in ActiveFedora 10.0")
|
163
161
|
child_resource_reflections
|
164
162
|
end
|
165
|
-
deprecation_deprecate :ds_specs
|
166
163
|
|
167
164
|
# This method is used to specify the details of a datastream.
|
168
165
|
# You can pass the name as the first argument and a hash of options as the second argument
|
@@ -177,6 +174,7 @@ module ActiveFedora
|
|
177
174
|
# @option args [Boolean] :autocreate Always create this datastream on new objects
|
178
175
|
# @yield block executed by some kinds of datastreams
|
179
176
|
def has_metadata(*args, &block)
|
177
|
+
Deprecation.warn(self, "has_metadata is deprecated and will be removed in ActiveFedora 10.0. Use has_subresource instead.")
|
180
178
|
if args.first.is_a? String
|
181
179
|
name = args.first
|
182
180
|
args = args[1] || {}
|
@@ -187,9 +185,8 @@ module ActiveFedora
|
|
187
185
|
name = args.delete(:name)
|
188
186
|
raise ArgumentError, "You must provide a :type property for the datastream '#{name}'" unless args[:type]
|
189
187
|
args[:class_name] = args.delete(:type).to_s
|
190
|
-
|
188
|
+
has_subresource(name, args, &block)
|
191
189
|
end
|
192
|
-
deprecation_deprecate :has_metadata
|
193
190
|
|
194
191
|
# @overload has_file_datastream(name, args)
|
195
192
|
# Declares a file datastream exists for objects of this type
|
@@ -204,6 +201,7 @@ module ActiveFedora
|
|
204
201
|
# @option args :type (ActiveFedora::File) The class the datastream should have
|
205
202
|
# @option args [Boolean] :autocreate Always create this datastream on new objects
|
206
203
|
def has_file_datastream(*args)
|
204
|
+
Deprecation.warn(self, "has_file_datastream is deprecated and will be removed in ActiveFedora 10.0. Use has_subresource instead.")
|
207
205
|
if args.first.is_a? String
|
208
206
|
name = args.first
|
209
207
|
args = args[1] || {}
|
@@ -213,9 +211,8 @@ module ActiveFedora
|
|
213
211
|
end
|
214
212
|
name = args.delete(:name)
|
215
213
|
args[:class_name] = args.delete(:type).to_s
|
216
|
-
|
214
|
+
has_subresource(name, args)
|
217
215
|
end
|
218
|
-
deprecation_deprecate :has_file_datastream
|
219
216
|
end
|
220
217
|
end
|
221
218
|
end
|
@@ -75,7 +75,7 @@ module ActiveFedora
|
|
75
75
|
module AutosaveAssociation
|
76
76
|
extend ActiveSupport::Concern
|
77
77
|
|
78
|
-
ASSOCIATION_TYPES = [:has_many, :belongs_to, :has_and_belongs_to_many, :directly_contains, :indirectly_contains].freeze
|
78
|
+
ASSOCIATION_TYPES = [:has_many, :belongs_to, :has_and_belongs_to_many, :directly_contains, :indirectly_contains, :is_a_container].freeze
|
79
79
|
|
80
80
|
module AssociationBuilderExtension #:nodoc:
|
81
81
|
def self.valid_options
|
data/lib/active_fedora/base.rb
CHANGED
data/lib/active_fedora/common.rb
CHANGED
data/lib/active_fedora/fedora.rb
CHANGED
@@ -18,6 +18,8 @@ module ActiveFedora
|
|
18
18
|
|
19
19
|
def initialize(config)
|
20
20
|
@config = config
|
21
|
+
|
22
|
+
validate_options
|
21
23
|
end
|
22
24
|
|
23
25
|
def host
|
@@ -42,7 +44,6 @@ module ActiveFedora
|
|
42
44
|
|
43
45
|
def connection
|
44
46
|
@connection ||= begin
|
45
|
-
init_base_path
|
46
47
|
build_connection
|
47
48
|
end
|
48
49
|
end
|
@@ -51,6 +52,10 @@ module ActiveFedora
|
|
51
52
|
@clean_connection ||= CleanConnection.new(connection)
|
52
53
|
end
|
53
54
|
|
55
|
+
def caching_connection(options = {})
|
56
|
+
CachingConnection.new(authorized_connection, options)
|
57
|
+
end
|
58
|
+
|
54
59
|
def ldp_resource_service
|
55
60
|
@service ||= LdpResourceService.new(connection)
|
56
61
|
end
|
@@ -58,22 +63,6 @@ module ActiveFedora
|
|
58
63
|
SLASH = '/'.freeze
|
59
64
|
BLANK = ''.freeze
|
60
65
|
|
61
|
-
# Call this to create a Container Resource to act as the base path for this connection
|
62
|
-
def init_base_path
|
63
|
-
return if @initialized
|
64
|
-
connection = build_connection
|
65
|
-
|
66
|
-
connection.head(root_resource_path)
|
67
|
-
ActiveFedora::Base.logger.info "Attempted to init base path `#{root_resource_path}`, but it already exists" if ActiveFedora::Base.logger
|
68
|
-
@initialized = true
|
69
|
-
false
|
70
|
-
rescue Ldp::NotFound
|
71
|
-
unless host.downcase.end_with?("/rest")
|
72
|
-
ActiveFedora::Base.logger.warn "Fedora URL (#{host}) does not end with /rest. This could be a problem. Check your fedora.yml config"
|
73
|
-
end
|
74
|
-
@initialized = connection.put(root_resource_path, BLANK).success?
|
75
|
-
end
|
76
|
-
|
77
66
|
# Remove a leading slash from the base_path
|
78
67
|
def root_resource_path
|
79
68
|
@root_resource_path ||= base_path.sub(SLASH, BLANK)
|
@@ -83,8 +72,8 @@ module ActiveFedora
|
|
83
72
|
# The InboundRelationConnection does provide more data, useful for
|
84
73
|
# things like ldp:IndirectContainers, but it's imposes a significant
|
85
74
|
# performance penalty on every request
|
86
|
-
# @connection ||= InboundRelationConnection.new(
|
87
|
-
|
75
|
+
# @connection ||= InboundRelationConnection.new(caching_connection(omit_ldpr_interaction_model: true))
|
76
|
+
InitializingConnection.new(caching_connection(omit_ldpr_interaction_model: true), root_resource_path)
|
88
77
|
end
|
89
78
|
|
90
79
|
def authorized_connection
|
@@ -94,5 +83,11 @@ module ActiveFedora
|
|
94
83
|
connection.basic_auth(user, password)
|
95
84
|
connection
|
96
85
|
end
|
86
|
+
|
87
|
+
def validate_options
|
88
|
+
unless host.downcase.end_with?("/rest")
|
89
|
+
ActiveFedora::Base.logger.warn "Fedora URL (#{host}) does not end with /rest. This could be a problem. Check your fedora.yml config"
|
90
|
+
end
|
91
|
+
end
|
97
92
|
end
|
98
93
|
end
|