active-fedora 10.0.0.beta1 → 10.0.0.beta2
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/lib/active_fedora/rake_support.rb +13 -9
- data/lib/active_fedora/version.rb +1 -1
- data/lib/active_fedora/with_metadata.rb +11 -10
- data/lib/active_fedora/with_metadata/default_metadata_class_factory.rb +31 -0
- data/lib/active_fedora/with_metadata/default_schema.rb +16 -0
- data/lib/active_fedora/with_metadata/default_strategy.rb +12 -0
- data/lib/active_fedora/with_metadata/sweet_jpl_terms.rb +10 -0
- data/spec/integration/with_metadata_spec.rb +25 -0
- data/spec/unit/with_metadata/default_metadata_class_factory_spec.rb +19 -0
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07a8d037c8e741276cd1c890062704b44b83bb7f
|
4
|
+
data.tar.gz: cd0aeb9d41cc43935197ab09ad3799092efeee75
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87513e6d099c60a8337df0583cc7b2cd00f35624bd11d5c953700752860c7f7e822814cfe0eff28398fde92c63a9ba3b22e14a2b5ef4bb269cd02774c709418a
|
7
|
+
data.tar.gz: 0cff0bacb41cb397745b83638e4d4bc42038a706cf45e3c0f26d014249f22b24d72aef3bfe7fb35beb9030b9e5f8df9f30bfd4924e0e98eefdedcc9e98a3df08
|
@@ -4,17 +4,13 @@ def with_test_server(&block)
|
|
4
4
|
with_server('test', &block)
|
5
5
|
end
|
6
6
|
|
7
|
-
def with_server(environment
|
7
|
+
def with_server(environment)
|
8
8
|
return yield if ENV["#{environment}_SERVER_STARTED"]
|
9
9
|
|
10
10
|
ENV["#{environment}_SERVER_STARTED"] = 'true'
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
fcrepo_params = { port: fcrepo_port, verbose: true, managed: true,
|
15
|
-
enable_jms: false, fcrepo_home_dir: "fcrepo4-#{environment}-data" }
|
16
|
-
SolrWrapper.wrap(solr_params) do |solr|
|
17
|
-
ENV["SOLR_#{environment.upcase}_PORT"] = solr.port
|
12
|
+
SolrWrapper.wrap(load_config(:solr, environment)) do |solr|
|
13
|
+
ENV["SOLR_#{environment.upcase}_PORT"] = solr.port.to_s
|
18
14
|
solr_config_path = File.join('solr', 'config')
|
19
15
|
# Check to see if configs exist in a path relative to the working directory
|
20
16
|
unless Dir.exist?(solr_config_path)
|
@@ -23,11 +19,19 @@ def with_server(environment, fcrepo_port: nil, solr_port: nil)
|
|
23
19
|
solr_config_path = File.join(File.expand_path("../..", File.dirname(__FILE__)), "solr", "config")
|
24
20
|
end
|
25
21
|
solr.with_collection(name: "hydra-#{environment}", dir: solr_config_path) do
|
26
|
-
FcrepoWrapper.wrap(
|
27
|
-
ENV["FCREPO_#{environment.upcase}_PORT"] = fcrepo.port
|
22
|
+
FcrepoWrapper.wrap(load_config(:fcrepo, environment)) do |fcrepo|
|
23
|
+
ENV["FCREPO_#{environment.upcase}_PORT"] = fcrepo.port.to_s
|
28
24
|
yield
|
29
25
|
end
|
30
26
|
end
|
31
27
|
end
|
32
28
|
ENV["#{environment}_SERVER_STARTED"] = 'false'
|
33
29
|
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def load_config(service, environment)
|
34
|
+
config_file = environment == 'test' ? "config/#{service}_wrapper_test.yml" : ".#{service}_wrapper"
|
35
|
+
return { config: config_file } if File.exist?(config_file)
|
36
|
+
{}
|
37
|
+
end
|
@@ -4,6 +4,15 @@ module ActiveFedora
|
|
4
4
|
extend ActiveSupport::Autoload
|
5
5
|
|
6
6
|
autoload :MetadataNode
|
7
|
+
autoload :SweetJPLTerms
|
8
|
+
autoload :DefaultStrategy
|
9
|
+
autoload :DefaultSchema
|
10
|
+
autoload :DefaultMetadataClassFactory
|
11
|
+
|
12
|
+
included do
|
13
|
+
class_attribute :metadata_class_factory
|
14
|
+
self.metadata_class_factory = DefaultMetadataClassFactory
|
15
|
+
end
|
7
16
|
|
8
17
|
def metadata_node
|
9
18
|
@metadata_node ||= self.class.metadata_schema.new(self)
|
@@ -17,19 +26,11 @@ module ActiveFedora
|
|
17
26
|
|
18
27
|
module ClassMethods
|
19
28
|
def metadata(&block)
|
20
|
-
metadata_schema.
|
29
|
+
@metadata_schema = metadata_class_factory.build(self, &block)
|
21
30
|
end
|
22
31
|
|
23
32
|
def metadata_schema
|
24
|
-
@metadata_schema ||=
|
25
|
-
end
|
26
|
-
|
27
|
-
# Make a subclass of MetadataNode named GeneratedMetadataSchema and set its
|
28
|
-
# parent_class attribute to have the value of the current class.
|
29
|
-
def MetadataNode(parent_klass)
|
30
|
-
klass = const_set(:GeneratedMetadataSchema, Class.new(MetadataNode))
|
31
|
-
klass.parent_class = parent_klass
|
32
|
-
klass
|
33
|
+
@metadata_schema ||= metadata_class_factory.build(self)
|
33
34
|
end
|
34
35
|
end
|
35
36
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# This builds classes for metadata nodes (nodes that describe a binary)
|
2
|
+
module ActiveFedora::WithMetadata
|
3
|
+
class DefaultMetadataClassFactory
|
4
|
+
class_attribute :metadata_base_class, :file_metadata_schemas, :file_metadata_strategy
|
5
|
+
self.metadata_base_class = MetadataNode
|
6
|
+
self.file_metadata_schemas = [DefaultSchema]
|
7
|
+
self.file_metadata_strategy = DefaultStrategy
|
8
|
+
|
9
|
+
class << self
|
10
|
+
def build(parent, &block)
|
11
|
+
create_class(parent).tap do |resource_class|
|
12
|
+
file_metadata_schemas.each do |schema|
|
13
|
+
resource_class.apply_schema(schema, file_metadata_strategy)
|
14
|
+
end
|
15
|
+
resource_class.exec_block(&block) if block_given?
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
# Make a subclass of MetadataNode named GeneratedMetadataSchema and set its
|
22
|
+
# parent_class attribute to have the value of the current class.
|
23
|
+
def create_class(parent_klass)
|
24
|
+
Class.new(metadata_base_class).tap do |klass|
|
25
|
+
parent_klass.const_set(:GeneratedMetadataSchema, klass)
|
26
|
+
klass.parent_class = parent_klass
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# These are the default properties defined on a resource that has WithMetadata
|
2
|
+
# added to it. This is most commonly used with ActiveFedora::File, when we want
|
3
|
+
# to add rdf triples to a non-rdf resource and have them persisted.
|
4
|
+
module ActiveFedora::WithMetadata
|
5
|
+
class DefaultSchema < ActiveTriples::Schema
|
6
|
+
property :label, predicate: ::RDF::RDFS.label
|
7
|
+
property :file_name, predicate: ::RDF::Vocab::EBUCore.filename
|
8
|
+
property :file_size, predicate: ::RDF::Vocab::EBUCore.fileSize
|
9
|
+
property :date_created, predicate: ::RDF::Vocab::EBUCore.dateCreated
|
10
|
+
property :has_mime_type, predicate: ::RDF::Vocab::EBUCore.hasMimeType
|
11
|
+
property :date_modified, predicate: ::RDF::Vocab::EBUCore.dateModified
|
12
|
+
property :byte_order, predicate: SweetJPLTerms.byteOrder
|
13
|
+
# This is a server-managed predicate which means Fedora does not let us change it.
|
14
|
+
property :file_hash, predicate: ::RDF::Vocab::PREMIS.hasMessageDigest
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module ActiveFedora::WithMetadata
|
2
|
+
class DefaultStrategy < ActiveTriples::ExtensionStrategy
|
3
|
+
# override apply method to check if property already exists or reciever already has predicate defined.
|
4
|
+
# Do not add property if the rdf_resource already responds to the property name
|
5
|
+
# Do not add property if the rdf_resource already has a property with the same predicate.
|
6
|
+
def self.apply(resource, property)
|
7
|
+
return if resource.respond_to?(property.name)
|
8
|
+
return if resource.properties.any? { |p| p[1].predicate == property.predicate }
|
9
|
+
resource.property property.name, property.to_h
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'rdf'
|
2
|
+
module ActiveFedora::WithMetadata
|
3
|
+
class SweetJPLTerms < RDF::StrictVocabulary('http://sweet.jpl.nasa.gov/2.2/reprDataFormat.owl#')
|
4
|
+
# Property definitions
|
5
|
+
property :byteOrder,
|
6
|
+
comment: ['Byte Order.'.freeze],
|
7
|
+
range: 'xsd:string'.freeze,
|
8
|
+
label: 'Byte Order'.freeze
|
9
|
+
end
|
10
|
+
end
|
@@ -2,6 +2,12 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe ActiveFedora::WithMetadata do
|
4
4
|
before do
|
5
|
+
class AdditionalSchema < ActiveTriples::Schema
|
6
|
+
property :new_property, predicate: ::RDF::URI("http://my.new.property/")
|
7
|
+
end
|
8
|
+
|
9
|
+
ActiveFedora::WithMetadata::DefaultMetadataClassFactory.file_metadata_schemas << AdditionalSchema
|
10
|
+
|
5
11
|
class SampleFile < ActiveFedora::File
|
6
12
|
include ActiveFedora::WithMetadata
|
7
13
|
|
@@ -13,6 +19,8 @@ describe ActiveFedora::WithMetadata do
|
|
13
19
|
|
14
20
|
after do
|
15
21
|
Object.send(:remove_const, :SampleFile)
|
22
|
+
Object.send(:remove_const, :AdditionalSchema)
|
23
|
+
ActiveFedora::WithMetadata::DefaultMetadataClassFactory.file_metadata_schemas = [ActiveFedora::WithMetadata::DefaultSchema]
|
16
24
|
end
|
17
25
|
|
18
26
|
let(:file) { SampleFile.new }
|
@@ -28,6 +36,18 @@ describe ActiveFedora::WithMetadata do
|
|
28
36
|
it "tracks changes" do
|
29
37
|
expect(file.title_changed?).to be true
|
30
38
|
end
|
39
|
+
|
40
|
+
context "with defaults" do
|
41
|
+
subject { file }
|
42
|
+
it { is_expected.to respond_to(:label) }
|
43
|
+
it { is_expected.to respond_to(:file_name) }
|
44
|
+
it { is_expected.to respond_to(:file_size) }
|
45
|
+
it { is_expected.to respond_to(:date_created) }
|
46
|
+
it { is_expected.to respond_to(:has_mime_type) }
|
47
|
+
it { is_expected.to respond_to(:date_modified) }
|
48
|
+
it { is_expected.to respond_to(:byte_order) }
|
49
|
+
it { is_expected.to respond_to(:file_hash) }
|
50
|
+
end
|
31
51
|
end
|
32
52
|
|
33
53
|
describe "#save" do
|
@@ -83,4 +103,9 @@ describe ActiveFedora::WithMetadata do
|
|
83
103
|
expect(reloaded_file.metadata_node.query(predicate: ::RDF.type).map(&:object)).to include book
|
84
104
|
end
|
85
105
|
end
|
106
|
+
|
107
|
+
context "when using additional schema" do
|
108
|
+
subject { SampleFile.new }
|
109
|
+
it { is_expected.to respond_to(:new_property) }
|
110
|
+
end
|
86
111
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ActiveFedora::WithMetadata::DefaultMetadataClassFactory do
|
4
|
+
let(:parent) { double("Parent") }
|
5
|
+
|
6
|
+
describe "default class attributes" do
|
7
|
+
its(:metadata_base_class) { is_expected.to eq(ActiveFedora::WithMetadata::MetadataNode) }
|
8
|
+
its(:file_metadata_schemas) { is_expected.to eq([ActiveFedora::WithMetadata::DefaultSchema]) }
|
9
|
+
its(:file_metadata_strategy) { is_expected.to eq(ActiveFedora::WithMetadata::DefaultStrategy) }
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "::build" do
|
13
|
+
it "sets MetadataNode to the default schema using the default strategy" do
|
14
|
+
expect(parent).to receive(:const_set)
|
15
|
+
expect(parent).to receive(:delegate).at_least(8).times
|
16
|
+
subject.class.build(parent)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active-fedora
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 10.0.0.
|
4
|
+
version: 10.0.0.beta2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Zumwalt
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-05-
|
13
|
+
date: 2016-05-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rsolr
|
@@ -553,7 +553,11 @@ files:
|
|
553
553
|
- lib/active_fedora/versionable.rb
|
554
554
|
- lib/active_fedora/versions_graph.rb
|
555
555
|
- lib/active_fedora/with_metadata.rb
|
556
|
+
- lib/active_fedora/with_metadata/default_metadata_class_factory.rb
|
557
|
+
- lib/active_fedora/with_metadata/default_schema.rb
|
558
|
+
- lib/active_fedora/with_metadata/default_strategy.rb
|
556
559
|
- lib/active_fedora/with_metadata/metadata_node.rb
|
560
|
+
- lib/active_fedora/with_metadata/sweet_jpl_terms.rb
|
557
561
|
- lib/generators/active_fedora/config/USAGE
|
558
562
|
- lib/generators/active_fedora/config/config_generator.rb
|
559
563
|
- lib/generators/active_fedora/config/fedora/fedora_generator.rb
|
@@ -751,6 +755,7 @@ files:
|
|
751
755
|
- spec/unit/solr_service_spec.rb
|
752
756
|
- spec/unit/sparql_insert_spec.rb
|
753
757
|
- spec/unit/validations_spec.rb
|
758
|
+
- spec/unit/with_metadata/default_metadata_class_factory_spec.rb
|
754
759
|
- spec/unit/with_metadata/metadata_node_spec.rb
|
755
760
|
homepage: https://github.com/projecthydra/active_fedora
|
756
761
|
licenses:
|
@@ -772,7 +777,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
772
777
|
version: 1.3.1
|
773
778
|
requirements: []
|
774
779
|
rubyforge_project:
|
775
|
-
rubygems_version: 2.
|
780
|
+
rubygems_version: 2.6.4
|
776
781
|
signing_key:
|
777
782
|
specification_version: 4
|
778
783
|
summary: A convenience libary for manipulating documents in the Fedora Repository.
|