valkyrie 0.0.0 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -3
- data/.rubocop.yml +28 -0
- data/Gemfile +6 -1
- data/README.md +145 -10
- data/Rakefile +59 -1
- data/bin/console +1 -1
- data/config/valkyrie.yml +8 -0
- data/db/config.yml +17 -0
- data/db/migrate/20160111215816_enable_uuid_extension.rb +6 -0
- data/db/migrate/20161007101725_create_orm_resources.rb +10 -0
- data/db/migrate/20170124135846_add_model_type_to_orm_resources.rb +6 -0
- data/db/migrate/20170531004548_change_model_type_to_internal_model.rb +6 -0
- data/db/schema.rb +65 -0
- data/db/seeds.rb +8 -0
- data/lib/config/database_connection.rb +15 -0
- data/lib/generators/valkyrie/resource_generator.rb +27 -0
- data/lib/generators/valkyrie/templates/resource.rb.erb +9 -0
- data/lib/generators/valkyrie/templates/resource_spec.rb.erb +13 -0
- data/lib/valkyrie.rb +76 -1
- data/lib/valkyrie/adapter_container.rb +12 -0
- data/lib/valkyrie/change_set.rb +84 -0
- data/lib/valkyrie/decorators/decorator_list.rb +15 -0
- data/lib/valkyrie/decorators/decorator_with_arguments.rb +14 -0
- data/lib/valkyrie/derivative_service.rb +42 -0
- data/lib/valkyrie/engine.rb +10 -0
- data/lib/valkyrie/file_characterization_service.rb +42 -0
- data/lib/valkyrie/id.rb +32 -0
- data/lib/valkyrie/indexers/access_controls_indexer.rb +19 -0
- data/lib/valkyrie/local_file_service.rb +11 -0
- data/lib/valkyrie/metadata_adapter.rb +22 -0
- data/lib/valkyrie/persist_derivatives.rb +29 -0
- data/lib/valkyrie/persistence.rb +14 -0
- data/lib/valkyrie/persistence/buffered_persister.rb +28 -0
- data/lib/valkyrie/persistence/composite_persister.rb +29 -0
- data/lib/valkyrie/persistence/delete_tracking_buffer.rb +21 -0
- data/lib/valkyrie/persistence/fedora.rb +11 -0
- data/lib/valkyrie/persistence/fedora/list_node.rb +88 -0
- data/lib/valkyrie/persistence/fedora/metadata_adapter.rb +45 -0
- data/lib/valkyrie/persistence/fedora/ordered_list.rb +146 -0
- data/lib/valkyrie/persistence/fedora/ordered_reader.rb +28 -0
- data/lib/valkyrie/persistence/fedora/persister.rb +47 -0
- data/lib/valkyrie/persistence/fedora/persister/model_converter.rb +199 -0
- data/lib/valkyrie/persistence/fedora/persister/orm_converter.rb +338 -0
- data/lib/valkyrie/persistence/fedora/persister/resource_factory.rb +21 -0
- data/lib/valkyrie/persistence/fedora/query_service.rb +80 -0
- data/lib/valkyrie/persistence/memory.rb +8 -0
- data/lib/valkyrie/persistence/memory/metadata_adapter.rb +22 -0
- data/lib/valkyrie/persistence/memory/persister.rb +58 -0
- data/lib/valkyrie/persistence/memory/query_service.rb +86 -0
- data/lib/valkyrie/persistence/postgres.rb +6 -0
- data/lib/valkyrie/persistence/postgres/metadata_adapter.rb +20 -0
- data/lib/valkyrie/persistence/postgres/orm.rb +9 -0
- data/lib/valkyrie/persistence/postgres/orm/resource.rb +7 -0
- data/lib/valkyrie/persistence/postgres/orm_converter.rb +118 -0
- data/lib/valkyrie/persistence/postgres/persister.rb +33 -0
- data/lib/valkyrie/persistence/postgres/queries.rb +8 -0
- data/lib/valkyrie/persistence/postgres/queries/find_inverse_references_query.rb +31 -0
- data/lib/valkyrie/persistence/postgres/queries/find_members_query.rb +33 -0
- data/lib/valkyrie/persistence/postgres/queries/find_references_query.rb +33 -0
- data/lib/valkyrie/persistence/postgres/query_service.rb +53 -0
- data/lib/valkyrie/persistence/postgres/resource_converter.rb +18 -0
- data/lib/valkyrie/persistence/postgres/resource_factory.rb +30 -0
- data/lib/valkyrie/persistence/solr.rb +6 -0
- data/lib/valkyrie/persistence/solr/metadata_adapter.rb +42 -0
- data/lib/valkyrie/persistence/solr/model_converter.rb +270 -0
- data/lib/valkyrie/persistence/solr/orm_converter.rb +252 -0
- data/lib/valkyrie/persistence/solr/persister.rb +32 -0
- data/lib/valkyrie/persistence/solr/queries.rb +11 -0
- data/lib/valkyrie/persistence/solr/queries/default_paginator.rb +16 -0
- data/lib/valkyrie/persistence/solr/queries/find_all_query.rb +33 -0
- data/lib/valkyrie/persistence/solr/queries/find_by_id_query.rb +24 -0
- data/lib/valkyrie/persistence/solr/queries/find_inverse_references_query.rb +30 -0
- data/lib/valkyrie/persistence/solr/queries/find_members_query.rb +43 -0
- data/lib/valkyrie/persistence/solr/queries/find_references_query.rb +34 -0
- data/lib/valkyrie/persistence/solr/query_service.rb +48 -0
- data/lib/valkyrie/persistence/solr/repository.rb +36 -0
- data/lib/valkyrie/persistence/solr/resource_factory.rb +24 -0
- data/lib/valkyrie/rdf_patches.rb +17 -0
- data/lib/valkyrie/resource.rb +106 -0
- data/lib/valkyrie/resource/access_controls.rb +13 -0
- data/lib/valkyrie/specs/shared_specs.rb +10 -0
- data/lib/valkyrie/specs/shared_specs/change_set_persister.rb +60 -0
- data/lib/valkyrie/specs/shared_specs/derivative_service.rb +30 -0
- data/lib/valkyrie/specs/shared_specs/file.rb +12 -0
- data/lib/valkyrie/specs/shared_specs/file_characterization_service.rb +33 -0
- data/lib/valkyrie/specs/shared_specs/metadata_adapter.rb +10 -0
- data/lib/valkyrie/specs/shared_specs/persister.rb +154 -0
- data/lib/valkyrie/specs/shared_specs/queries.rb +128 -0
- data/lib/valkyrie/specs/shared_specs/resource.rb +71 -0
- data/lib/valkyrie/specs/shared_specs/storage_adapter.rb +44 -0
- data/lib/valkyrie/storage.rb +8 -0
- data/lib/valkyrie/storage/disk.rb +55 -0
- data/lib/valkyrie/storage/fedora.rb +71 -0
- data/lib/valkyrie/storage/memory.rb +31 -0
- data/lib/valkyrie/storage_adapter.rb +100 -0
- data/lib/valkyrie/types.rb +34 -0
- data/lib/valkyrie/value_mapper.rb +67 -0
- data/lib/valkyrie/version.rb +2 -1
- data/lib/valkyrie/vocab/pcdm_use.rb +73 -0
- data/valkyrie.gemspec +33 -7
- metadata +462 -7
- data/.travis.yml +0 -5
data/db/seeds.rb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# This file should contain all the record creation needed to seed the database with its default values.
|
3
|
+
# The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup).
|
4
|
+
#
|
5
|
+
# Examples:
|
6
|
+
#
|
7
|
+
# movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }])
|
8
|
+
# Character.create(name: 'Luke', movie: movies.first)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'active_record'
|
3
|
+
require 'erb'
|
4
|
+
|
5
|
+
module DatabaseConnection
|
6
|
+
def self.connect!(env)
|
7
|
+
# Ref https://github.com/puma/puma#clustered-mode
|
8
|
+
ActiveSupport.on_load(:active_record) do
|
9
|
+
::ActiveRecord::Base.connection_pool.disconnect! if ::ActiveRecord::Base.connected?
|
10
|
+
::ActiveRecord::Base.configurations = YAML.safe_load(ERB.new(File.read("db/config.yml")).result) || {}
|
11
|
+
config = ::ActiveRecord::Base.configurations[env.to_s]
|
12
|
+
::ActiveRecord::Base.establish_connection(config)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'rails/generators'
|
3
|
+
require 'rails/generators/model_helpers'
|
4
|
+
|
5
|
+
class Valkyrie::ResourceGenerator < Rails::Generators::NamedBase
|
6
|
+
# Include ModelHelpers to warn about pluralization when generating new models or scaffolds
|
7
|
+
include Rails::Generators::ModelHelpers
|
8
|
+
|
9
|
+
source_root File.expand_path('../templates', __FILE__)
|
10
|
+
|
11
|
+
argument :attributes, type: :array, default: [], banner: 'field:type field:type'
|
12
|
+
|
13
|
+
def create_model
|
14
|
+
template('resource.rb.erb', File.join('app/models', class_path, "#{file_name}.rb"))
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_model_spec
|
18
|
+
return unless rspec_installed?
|
19
|
+
template('resource_spec.rb.erb', File.join('spec/models', class_path, "#{file_name}_spec.rb"))
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def rspec_installed?
|
25
|
+
defined?(RSpec) && defined?(RSpec::Rails)
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Generated with `rails generate valkyrie:model <%= class_name %>`
|
3
|
+
class <%= class_name %> < Valkyrie::Resource
|
4
|
+
include Valkyrie::Resource::AccessControls
|
5
|
+
attribute :id, Valkyrie::Types::ID.optional
|
6
|
+
<%- attributes.each do |att| -%>
|
7
|
+
attribute :<%= att.name %>, Valkyrie::Types::<%= (att.type == :array) ? 'Array' : 'Set' %>
|
8
|
+
<%- end -%>
|
9
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Generated with `rails generate valkyrie:model <%= class_name %>`
|
3
|
+
require 'rails_helper'
|
4
|
+
require 'valkyrie/specs/shared_specs'
|
5
|
+
|
6
|
+
RSpec.describe <%= class_name %> do
|
7
|
+
let(:model_klass) { described_class }
|
8
|
+
it_behaves_like "a Valkyrie::Resource"
|
9
|
+
|
10
|
+
it "has tests" do
|
11
|
+
skip "Add your tests here"
|
12
|
+
end
|
13
|
+
end
|
data/lib/valkyrie.rb
CHANGED
@@ -1,5 +1,80 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require "valkyrie/version"
|
3
|
+
require "ostruct"
|
4
|
+
require 'active_support'
|
5
|
+
require 'active_support/core_ext'
|
6
|
+
require 'dry-types'
|
7
|
+
require 'dry-struct'
|
8
|
+
require 'draper'
|
9
|
+
require 'active_record'
|
10
|
+
require 'reform'
|
11
|
+
require 'reform/active_record'
|
12
|
+
require 'rdf'
|
13
|
+
require 'valkyrie/rdf_patches'
|
14
|
+
require 'json/ld'
|
15
|
+
require 'logger'
|
16
|
+
require 'active_triples'
|
17
|
+
require 'rdf/vocab'
|
18
|
+
require 'active_fedora'
|
19
|
+
require 'hydra-access-controls'
|
20
|
+
require 'ruby_tika_app'
|
2
21
|
|
22
|
+
# frozen_string_literal: true
|
3
23
|
module Valkyrie
|
4
|
-
|
24
|
+
require 'valkyrie/id'
|
25
|
+
require 'valkyrie/change_set'
|
26
|
+
require 'valkyrie/value_mapper'
|
27
|
+
require 'valkyrie/persistence'
|
28
|
+
require 'valkyrie/types'
|
29
|
+
require 'valkyrie/resource'
|
30
|
+
require 'valkyrie/derivative_service'
|
31
|
+
require 'valkyrie/storage_adapter'
|
32
|
+
require 'valkyrie/metadata_adapter'
|
33
|
+
require 'valkyrie/adapter_container'
|
34
|
+
require 'valkyrie/file_characterization_service'
|
35
|
+
require 'valkyrie/decorators/decorator_list'
|
36
|
+
require 'valkyrie/decorators/decorator_with_arguments'
|
37
|
+
require 'valkyrie/resource/access_controls'
|
38
|
+
require 'valkyrie/indexers/access_controls_indexer'
|
39
|
+
require 'valkyrie/storage'
|
40
|
+
require 'valkyrie/vocab/pcdm_use'
|
41
|
+
require 'generators/valkyrie/resource_generator'
|
42
|
+
require 'valkyrie/engine' if defined?(Rails)
|
43
|
+
def config
|
44
|
+
@config ||= Config.new(
|
45
|
+
YAML.safe_load(ERB.new(File.read(config_root_path.join("config", "valkyrie.yml"))).result)[environment]
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
def environment
|
50
|
+
Rails.env
|
51
|
+
end
|
52
|
+
|
53
|
+
def config_root_path
|
54
|
+
if const_defined?(:Rails) && Rails.root
|
55
|
+
Rails.root
|
56
|
+
else
|
57
|
+
Pathname.new(Dir.pwd)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def logger
|
62
|
+
@logger ||= Logger.new(STDOUT)
|
63
|
+
end
|
64
|
+
|
65
|
+
def logger=(logger)
|
66
|
+
@logger = logger
|
67
|
+
end
|
68
|
+
|
69
|
+
class Config < OpenStruct
|
70
|
+
def metadata_adapter
|
71
|
+
Valkyrie::MetadataAdapter.find(super.to_sym)
|
72
|
+
end
|
73
|
+
|
74
|
+
def storage_adapter
|
75
|
+
Valkyrie::StorageAdapter.find(super.to_sym)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
module_function :config, :logger, :logger=, :config_root_path, :environment
|
5
80
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Valkyrie
|
3
|
+
class AdapterContainer
|
4
|
+
# Wraps up an individual persister and query service to conform to the
|
5
|
+
# adapter interface. Useful for decorated persisters.
|
6
|
+
attr_reader :persister, :query_service
|
7
|
+
def initialize(persister:, query_service:)
|
8
|
+
@persister = persister
|
9
|
+
@query_service = query_service
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'reform/form/coercion'
|
3
|
+
require 'reform/form/active_model/validations'
|
4
|
+
module Valkyrie
|
5
|
+
##
|
6
|
+
# Standard change set object for Valkyrie.
|
7
|
+
# ChangeSets are a way to group together properties that should be applied to
|
8
|
+
# an underlying resource. They are often used for powering HTML Forms or
|
9
|
+
# storing virtual attributes for special synchronization with a resource.
|
10
|
+
# @example Define a change set
|
11
|
+
# class BookChangeSet < Valkyrie::ChangeSet
|
12
|
+
# self.fields = [:title, :author]
|
13
|
+
# validates :title, presence: true
|
14
|
+
# property :title, multiple: false, required: true
|
15
|
+
# end
|
16
|
+
class ChangeSet < Reform::Form
|
17
|
+
include Reform::Form::ActiveModel::Validations
|
18
|
+
feature Coercion
|
19
|
+
class_attribute :fields
|
20
|
+
self.fields = []
|
21
|
+
|
22
|
+
property :append_id, virtual: true
|
23
|
+
|
24
|
+
# Set ID of record this one should be appended to.
|
25
|
+
# @param append_id [Valkyrie::ID]
|
26
|
+
def append_id=(append_id)
|
27
|
+
super(Valkyrie::ID.new(append_id))
|
28
|
+
end
|
29
|
+
|
30
|
+
# Returns whether or not a given field has multiple values.
|
31
|
+
# @param field [Symbol]
|
32
|
+
# @return [Boolean]
|
33
|
+
def multiple?(field)
|
34
|
+
self.class.definitions[field.to_s][:multiple] != false
|
35
|
+
end
|
36
|
+
|
37
|
+
# Returns whether or not a given field is required.
|
38
|
+
# @param field [Symbol]
|
39
|
+
# @return [Boolean]
|
40
|
+
def required?(field)
|
41
|
+
self.class.definitions[field.to_s][:required]
|
42
|
+
end
|
43
|
+
|
44
|
+
# Quick setter for fields that should be in a changeset. Defaults to multiple,
|
45
|
+
# not required, with an empty array default.
|
46
|
+
# @param fields [Array<Symbol>]
|
47
|
+
def self.fields=(fields)
|
48
|
+
singleton_class.class_eval do
|
49
|
+
remove_possible_method(:fields)
|
50
|
+
define_method(:fields) { fields }
|
51
|
+
end
|
52
|
+
|
53
|
+
fields.each do |field|
|
54
|
+
property field, default: []
|
55
|
+
end
|
56
|
+
fields
|
57
|
+
end
|
58
|
+
|
59
|
+
# Returns value for a given property.
|
60
|
+
# @param key [Symbol]
|
61
|
+
def [](key)
|
62
|
+
send(key) if respond_to?(key)
|
63
|
+
end
|
64
|
+
|
65
|
+
delegate :attributes, to: :resource
|
66
|
+
|
67
|
+
delegate :internal_resource, :created_at, :updated_at, :model_name, to: :resource
|
68
|
+
|
69
|
+
# Prepopulates all fields with defaults defined in the changeset. This is an
|
70
|
+
# override of Reform::Form's method to allow for single-valued fields to
|
71
|
+
# prepopulate appropriately.
|
72
|
+
def prepopulate!(_options = {})
|
73
|
+
self.class.definitions.select { |_field, definition| definition[:multiple] == false }.each do |field, _definition|
|
74
|
+
value = Array.wrap(send(field.to_s)).first
|
75
|
+
send("#{field}=", value)
|
76
|
+
end
|
77
|
+
self
|
78
|
+
end
|
79
|
+
|
80
|
+
def resource
|
81
|
+
model
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Valkyrie::Decorators
|
3
|
+
class DecoratorList
|
4
|
+
attr_reader :decorators
|
5
|
+
def initialize(*decorators)
|
6
|
+
@decorators = decorators
|
7
|
+
end
|
8
|
+
|
9
|
+
def new(undecorated_object)
|
10
|
+
decorators.inject(undecorated_object) do |obj, decorator|
|
11
|
+
decorator.new(obj)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Valkyrie::Decorators
|
3
|
+
class DecoratorWithArguments
|
4
|
+
attr_reader :decorator, :args
|
5
|
+
def initialize(decorator, *args)
|
6
|
+
@decorator = decorator
|
7
|
+
@args = args
|
8
|
+
end
|
9
|
+
|
10
|
+
def new(item)
|
11
|
+
decorator.new(item, *args)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'hydra/derivatives'
|
3
|
+
module Valkyrie
|
4
|
+
##
|
5
|
+
# Container for registering DerivativeServices.
|
6
|
+
#
|
7
|
+
# To add a new service:
|
8
|
+
# DerivativeService.services << MyDerivativeService
|
9
|
+
class DerivativeService
|
10
|
+
require 'valkyrie/local_file_service'
|
11
|
+
require 'valkyrie/persist_derivatives'
|
12
|
+
Hydra::Derivatives.source_file_service = Valkyrie::LocalFileService
|
13
|
+
Hydra::Derivatives.output_file_service = Valkyrie::PersistDerivatives
|
14
|
+
class_attribute :services
|
15
|
+
self.services = []
|
16
|
+
# Returns a derivative service for a change_set.
|
17
|
+
# @param resource [Valkyrie::ChangeSet]
|
18
|
+
# @return [Valkyrie::DerivativeService]
|
19
|
+
def self.for(change_set)
|
20
|
+
services.map { |service| service.new(change_set) }.find(&:valid?) ||
|
21
|
+
new(change_set)
|
22
|
+
end
|
23
|
+
attr_reader :change_set
|
24
|
+
delegate :mime_type, :uri, to: :change_set
|
25
|
+
# @param resource [Valkyrie::Resource]
|
26
|
+
def initialize(change_set)
|
27
|
+
@change_set = change_set
|
28
|
+
end
|
29
|
+
|
30
|
+
# Deletes any derivatives generated.
|
31
|
+
def cleanup_derivatives; end
|
32
|
+
|
33
|
+
# Creates derivatives.
|
34
|
+
def create_derivatives; end
|
35
|
+
|
36
|
+
# Returns true if the given resource is valid for this derivative service.
|
37
|
+
# @return [Boolean]
|
38
|
+
def valid?
|
39
|
+
true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
##
|
3
|
+
# This engine exists for the sole purpose of enabling the
|
4
|
+
# `valkyrie_engine:install:migrations` rake task from an including Rails
|
5
|
+
# application. It technically enables a whole host of other functionality -
|
6
|
+
# don't use it, please.
|
7
|
+
module Valkyrie
|
8
|
+
class Engine < Rails::Engine
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'ruby_tika_app'
|
3
|
+
|
4
|
+
module Valkyrie
|
5
|
+
# Abstract base class for file characterization
|
6
|
+
# registers file characterization service a ValkyrieFileCharacterization service
|
7
|
+
# initializes the interface for file characterization
|
8
|
+
# @since 0.1.0
|
9
|
+
class FileCharacterizationService
|
10
|
+
class_attribute :services
|
11
|
+
self.services = []
|
12
|
+
# initializes the file characterization service
|
13
|
+
# @param file_node [FileNode] the FileNode to be characterized
|
14
|
+
# @param persister [AppendingPersister] the Persister used to save the FileNode
|
15
|
+
# @return [TikaFileCharacterizationService] the file characterization service, currently only TikaFileCharacterizationService is implemented
|
16
|
+
def self.for(file_node:, persister:)
|
17
|
+
services.map { |service| service.new(file_node: file_node, persister: persister) }.find(&:valid?) ||
|
18
|
+
new(file_node: file_node, persister: persister)
|
19
|
+
end
|
20
|
+
attr_reader :file_node, :persister
|
21
|
+
delegate :mime_type, :height, :width, :checksum, to: :file_node
|
22
|
+
def initialize(file_node:, persister:)
|
23
|
+
@file_node = file_node
|
24
|
+
@persister = persister
|
25
|
+
end
|
26
|
+
|
27
|
+
# characterizes the file_node passed into this service
|
28
|
+
# Default options are:
|
29
|
+
# save: true
|
30
|
+
# @param save [Boolean] should the persister save the file_node after Characterization
|
31
|
+
# @return [FileNode]
|
32
|
+
def characterize(save: true)
|
33
|
+
persister.save(resource: @file_node) if save
|
34
|
+
@file_node
|
35
|
+
end
|
36
|
+
|
37
|
+
# Stub function that sets this service as valid for all FileNode types
|
38
|
+
def valid?
|
39
|
+
true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/valkyrie/id.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Valkyrie
|
3
|
+
class ID
|
4
|
+
attr_reader :id
|
5
|
+
delegate :empty?, to: :id
|
6
|
+
def initialize(id)
|
7
|
+
@id = id.to_s
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
id
|
12
|
+
end
|
13
|
+
|
14
|
+
delegate :hash, to: :state
|
15
|
+
|
16
|
+
def eql?(other)
|
17
|
+
other.class == self.class && other.state == state
|
18
|
+
end
|
19
|
+
alias == eql?
|
20
|
+
|
21
|
+
def to_uri
|
22
|
+
return RDF::Literal.new(id.to_s, datatype: RDF::URI("http://example.com/valkyrie_id")) if id.to_s.include?("://")
|
23
|
+
::RDF::URI(ActiveFedora::Base.id_to_uri(id))
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
def state
|
29
|
+
[@id]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Valkyrie::Indexers
|
3
|
+
class AccessControlsIndexer
|
4
|
+
attr_reader :resource
|
5
|
+
def initialize(resource:)
|
6
|
+
@resource = resource
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_solr
|
10
|
+
return {} unless resource.respond_to?(:read_users)
|
11
|
+
{
|
12
|
+
Hydra.config[:permissions][:read].group => resource.read_groups,
|
13
|
+
Hydra.config[:permissions][:read].individual => resource.read_users,
|
14
|
+
Hydra.config[:permissions][:edit].individual => resource.edit_users,
|
15
|
+
Hydra.config[:permissions][:edit].group => resource.edit_groups
|
16
|
+
}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|