zizia 4.5.4.alpha.01 → 4.6.0.alpha.01
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/README.md +1 -9
- data/app/assets/stylesheets/zizia/_field_guide.scss +10 -0
- data/app/assets/stylesheets/zizia/zizia.scss +1 -0
- data/app/config/zizia/usage.yml +39 -0
- data/app/controllers/zizia/csv_import_details_controller.rb +3 -0
- data/app/controllers/zizia/metadata_details_controller.rb +3 -0
- data/app/helpers/zizia/metadata_details_helper.rb +22 -0
- data/app/lib/zizia/metadata_details.rb +45 -13
- data/app/lib/zizia/metadata_usage.rb +3 -3
- data/app/views/zizia/metadata_details/show.html.erb +21 -10
- data/lib/zizia/version.rb +1 -1
- data/spec/controllers/metadata_details_spec.rb +18 -2
- data/spec/dummy/app/assets/stylesheets/application.css +1 -0
- data/spec/dummy/app/models/ability.rb +2 -0
- data/spec/dummy/public/assets/.sprockets-manifest-6a791b26afc0064d45ad6c9c7834c971.json +1 -1
- data/spec/dummy/public/assets/application-2ccde71ce94afc831e097399d88f233e622dcde6c13b1e55328492cbd74652e1.css +20020 -0
- data/spec/dummy/public/assets/application-2ccde71ce94afc831e097399d88f233e622dcde6c13b1e55328492cbd74652e1.css.gz +0 -0
- data/spec/dummy/public/assets/application-c2d24435e1dfeb4513665fe5fcf77c4d82a771af39242801a0de2c9d11420110.css +20026 -0
- data/spec/dummy/public/assets/application-c2d24435e1dfeb4513665fe5fcf77c4d82a771af39242801a0de2c9d11420110.css.gz +0 -0
- data/spec/dummy/public/assets/application-cd56066ec179de033c8cb72c47bce15d0bb303f8ae84e40b1f9bb458c69f1984.js +91589 -0
- data/spec/dummy/public/assets/application-cd56066ec179de033c8cb72c47bce15d0bb303f8ae84e40b1f9bb458c69f1984.js.gz +0 -0
- data/spec/dummy/public/assets/browse_everything-9a6b1be24c1637c3d3f401209ba92f08bdfb31283b7535e3fc00767f7fd33f30.css +12766 -0
- data/spec/dummy/public/assets/browse_everything-9a6b1be24c1637c3d3f401209ba92f08bdfb31283b7535e3fc00767f7fd33f30.css.gz +0 -0
- data/spec/dummy/public/assets/zizia/application-1a6b5ed6492ec1d1f55182cb261f6a41ca34efc8f0718afdb8c69691de071e87.css +60 -0
- data/spec/dummy/public/assets/zizia/application-1a6b5ed6492ec1d1f55182cb261f6a41ca34efc8f0718afdb8c69691de071e87.css.gz +0 -0
- data/spec/dummy/public/assets/zizia/application-a0041cb295da9e33e213c36cdb7974af70df2bdf636cdca13f10122ac35a78ec.css +54 -0
- data/spec/dummy/public/assets/zizia/application-a0041cb295da9e33e213c36cdb7974af70df2bdf636cdca13f10122ac35a78ec.css.gz +0 -0
- data/spec/dummy/spec/system/csv_import_details_page_spec.rb +18 -1
- data/spec/dummy/spec/system/import_from_csv_spec.rb +1 -2
- data/spec/dummy/spec/system/metadata_details_page_spec.rb +16 -2
- metadata +17 -4
- data/app/config/usage.yml +0 -31
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e474d50c1f6b1d4e15cc79ef9546a5f747c61e03cd6d85426ce6580c8c019f22
|
|
4
|
+
data.tar.gz: f9da12668c3657384042f5e202814094720ec63b22608d1165fa08c306d633e5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9d602fbc263f0bc0dd8d231c93c6897e275ee195c2e19f00287c7d83af05810aac2f46551de43b21cc20f6f9918cfa826bafafce3fe175f371296284940d7fc9
|
|
7
|
+
data.tar.gz: 5b3ff29ac96a0cc5c1f820fa4c6cb184dc4c78f07f11fc078309e2b01258a197ae84d77b75cd07ca5a1a4b6febae356b312971c532a2d486cd6da71c84ab9602
|
data/README.md
CHANGED
|
@@ -78,15 +78,7 @@ helper Zizia::Engine.helpers
|
|
|
78
78
|
can :manage, Zizia::CsvImport if current_user.admin?
|
|
79
79
|
```
|
|
80
80
|
|
|
81
|
-
4. Add
|
|
82
|
-
|
|
83
|
-
`app/assets/csv/import_manifest.csv`
|
|
84
|
-
|
|
85
|
-
and
|
|
86
|
-
|
|
87
|
-
`app/assets/markdown/importer_guide.md`
|
|
88
|
-
|
|
89
|
-
5. Add links to `/csv_imports/new` and `/importer_documentation/csv` in the Hyrax dashboard
|
|
81
|
+
4. Add links to `/csv_imports/new` and `/importer_documentation/csv` in the Hyrax dashboard
|
|
90
82
|
|
|
91
83
|
The `spec/dummy` folder in this application is a complete Hyrax application with Zizia installed.
|
|
92
84
|
You can use that as an example for adding this to your current Hyrax application or copy that
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
# Metadata usage hints
|
|
3
|
+
# attribute: usage
|
|
4
|
+
|
|
5
|
+
arkivo_checksum: "-- system field - not directly editable --"
|
|
6
|
+
based_near: "A place name related to the work, such as its site of publication, or the city, state, or country the work contents are about. This field is a URI. The URIs should be GeoNames identifiers. You can look these up at GeoNames (http://www.geonames.org/). Example: http://www.geonames.org/4500546/"
|
|
7
|
+
bibliographic_citation: "Used to store the preferred bibliographic citation."
|
|
8
|
+
contributor: "A person or group you want to recognize for playing a role in the creation of the work, but not the primary role. Example: Smith, Mary"
|
|
9
|
+
create_date: "-- system field - not directly editable --"
|
|
10
|
+
creator: "The person or group responsible for the work. Usually this is the author, artist, or other person or people responsible for creating the content. Example: Leffler, Warren K., photographer."
|
|
11
|
+
date_created: "The date the work was created. Typically entered using ISO 8601 format; however, and local convention can be supported. Example: 1964-08-21 (also '1964', 'Aug. 22 '64', '19th C.' or '8/22/1964') NOTE: the system treats this field as a string and does not attempt to interpret the value entered."
|
|
12
|
+
date_modified: "-- system field - not directly editable --"
|
|
13
|
+
date_uploaded: "-- system field - not directly editable --"
|
|
14
|
+
depositor: "-- system field - not directly editable --"
|
|
15
|
+
description: "Free-text notes about the work, such as abstracts of a paper or citation information for a journal article. Example: Photograph shows half-length portrait of Hamer seated at a table."
|
|
16
|
+
has_model: "-- system field - not directly editable --"
|
|
17
|
+
head: "-- system field - not directly editable --"
|
|
18
|
+
identifier: "A unique handle identifying the work. An example would be a DOI for a journal article, or an ISBN or OCLC number for a book. Example: LC-U9-12470B-17"
|
|
19
|
+
import_url: "-- system field - not directly editable --"
|
|
20
|
+
keywords: "Words or phrases you select to describe what the work is about. Example: New Orleans or Music "
|
|
21
|
+
label: "-- system field - not directly editable --"
|
|
22
|
+
language: "The language of the source content being described. Example: English"
|
|
23
|
+
license: "Licensing and distribution information governing access to the work. This field is a URI. You can choose rights statements from this vocabulary (https://github.com/curationexperts/tenejo/blob/master/config/authorities/licenses.yml). Example: http://creativecommons.org/licenses/by/3.0/us/"
|
|
24
|
+
modified_date: "-- system field - not directly editable --"
|
|
25
|
+
on_behalf_of: "-- system field - not directly editable --"
|
|
26
|
+
owner: "-- system field - not directly editable --"
|
|
27
|
+
proxy_depositor: "-- system field - not directly editable --"
|
|
28
|
+
publisher: "The person or group making the work available. Generally this is the institution. Example: Library of Congress"
|
|
29
|
+
related_url: "A link to a website or other specific content (audio, video, PDF document) related to the work such as the URL of a research project from which the work was derived. Example: https://www.loc.gov/free-to-use/african-american-women-changemakers/"
|
|
30
|
+
relative_path: "-- system field - not directly editable --"
|
|
31
|
+
resource_type: "Pre-defined categories to describe the type of content. You must choose from one of the types listed here (https://github.com/curationexperts/tenejo/blob/master/config/authorities/resource_types.yml) Examples: Image, Article, or Dataset"
|
|
32
|
+
rights_statement: "This field is a URI. You can choose rights statements from this vocabulary (https://github.com/curationexperts/tenejo/blob/master/config/authorities/rights_statements.yml). Example: http://rightsstatements.org/vocab/UND/1.0/"
|
|
33
|
+
source: "A related resource from which the described resource is derived. Example: Library of Congress Online Catalog (976,247)"
|
|
34
|
+
state: "-- system field - not directly editable --"
|
|
35
|
+
subject: "Headings or index terms describing what the work is about. These should conform to an existing vocabulary, like LCSH. Example: Hamer, Fannie Lou--Public appearances--New Jersey--Atlantic City."
|
|
36
|
+
tail: "-- system field - not directly editable --"
|
|
37
|
+
title: "A name to aid in identifying a work. Example: [Fannie Lou Hamer, Mississippi Freedom Democratic Party delegate, at the Democratic National Convention, Atlantic City, New Jersey, August 1964] / [WKL]."
|
|
38
|
+
visibility: "The desired visiblity setting for the work and it's files. You can use 'open', 'registered', or 'restricted'. Example: 'open'"
|
|
39
|
+
files: "The file(s) you want to attach to your work. Must match the filenames you have uploaded to the server. Example: 01267_150px.jpg. You can attach multiple files to a work by providing multiple filenames separated by the separator configured for your application."
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
module Zizia
|
|
3
3
|
class CsvImportDetailsController < ApplicationController
|
|
4
|
+
load_and_authorize_resource
|
|
5
|
+
with_themed_layout 'dashboard'
|
|
6
|
+
|
|
4
7
|
def index
|
|
5
8
|
@csv_import_details = Zizia::CsvImportDetail.order(:id).page csv_import_detail_params[:page]
|
|
6
9
|
end
|
|
@@ -4,6 +4,9 @@ module Zizia
|
|
|
4
4
|
def show
|
|
5
5
|
@details = MetadataDetails.instance.details(work_attributes:
|
|
6
6
|
WorkAttributes.instance)
|
|
7
|
+
|
|
8
|
+
@delimiter = Zizia::HyraxBasicMetadataMapper.new.delimiter
|
|
9
|
+
|
|
7
10
|
respond_to do |format|
|
|
8
11
|
format.html
|
|
9
12
|
format.json { render json: @details.to_json }
|
|
@@ -5,5 +5,27 @@ module Zizia
|
|
|
5
5
|
return 'missing' if value == 'not configured'
|
|
6
6
|
return 'missing' if value.match?(/translation missing/)
|
|
7
7
|
end
|
|
8
|
+
|
|
9
|
+
def system_field(detail)
|
|
10
|
+
return "" if detail.nil?
|
|
11
|
+
return "non-system-field" unless detail[:usage]
|
|
12
|
+
return "system-field" if detail[:usage].match?("system field")
|
|
13
|
+
"non-system-field"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def hide_system_field(detail)
|
|
17
|
+
return "" if detail.nil?
|
|
18
|
+
return "" unless detail[:usage]
|
|
19
|
+
# rubocop: disable Rails/OutputSafety
|
|
20
|
+
return "style='display: none'".html_safe if detail[:usage].match?("system field")
|
|
21
|
+
# rubocop: enable Rails/OutputSafety
|
|
22
|
+
""
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def true_false_to_yes_no(value)
|
|
26
|
+
return "" if value.nil?
|
|
27
|
+
return "yes" if value == "true"
|
|
28
|
+
"no"
|
|
29
|
+
end
|
|
8
30
|
end
|
|
9
31
|
end
|
|
@@ -7,19 +7,9 @@ module Zizia
|
|
|
7
7
|
|
|
8
8
|
def details(work_attributes:)
|
|
9
9
|
validators = work_attributes.validators
|
|
10
|
-
work_attributes.properties.sort.map
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
predicate: p[1].predicate.to_s,
|
|
14
|
-
multiple: p[1].try(:multiple?).to_s,
|
|
15
|
-
type: type_to_s(p[1].type),
|
|
16
|
-
validator: validator_to_string(validator: validators[p[0].to_sym][0]),
|
|
17
|
-
label: I18n.t("simple_form.labels.defaults.#{p[0]}"),
|
|
18
|
-
csv_header: csv_header(p[0]),
|
|
19
|
-
required_on_form: required_on_form_to_s(p[0]),
|
|
20
|
-
usage: MetadataUsage.instance.usage[p[0]]
|
|
21
|
-
]
|
|
22
|
-
end
|
|
10
|
+
detail_list = work_attributes.properties.sort.map { |p| definition_hash_for(p, validators) }
|
|
11
|
+
detail_list << visibility_definition
|
|
12
|
+
detail_list << file_definition
|
|
23
13
|
end
|
|
24
14
|
|
|
25
15
|
def to_csv(work_attributes:)
|
|
@@ -64,5 +54,47 @@ module Zizia
|
|
|
64
54
|
'No validation present in the model.'
|
|
65
55
|
end
|
|
66
56
|
end
|
|
57
|
+
|
|
58
|
+
def definition_hash_for(field_properties, validators)
|
|
59
|
+
Hash[
|
|
60
|
+
attribute: field_properties[0],
|
|
61
|
+
predicate: field_properties[1].predicate.to_s,
|
|
62
|
+
multiple: field_properties[1].try(:multiple?).to_s,
|
|
63
|
+
type: type_to_s(field_properties[1].type),
|
|
64
|
+
validator: validator_to_string(validator: validators[field_properties[0].to_sym][0]),
|
|
65
|
+
label: I18n.t("simple_form.labels.defaults.#{field_properties[0]}"),
|
|
66
|
+
csv_header: csv_header(field_properties[0]),
|
|
67
|
+
required_on_form: required_on_form_to_s(field_properties[0]),
|
|
68
|
+
usage: MetadataUsage.instance.usage[field_properties[0]]
|
|
69
|
+
]
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def file_definition
|
|
73
|
+
{
|
|
74
|
+
attribute: 'files',
|
|
75
|
+
predicate: 'n/a',
|
|
76
|
+
multiple: 'true',
|
|
77
|
+
type: 'String',
|
|
78
|
+
validator: 'Required, must name a file on the server',
|
|
79
|
+
label: 'Items (listed at bottom of page)',
|
|
80
|
+
csv_header: 'files',
|
|
81
|
+
required_on_form: 'true',
|
|
82
|
+
usage: MetadataUsage.instance.usage['files']
|
|
83
|
+
}
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def visibility_definition
|
|
87
|
+
{
|
|
88
|
+
attribute: 'visibility',
|
|
89
|
+
predicate: 'n/a',
|
|
90
|
+
multiple: 'false',
|
|
91
|
+
type: 'String',
|
|
92
|
+
validator: 'Required, must exist in the application\'s controlled vocabulary for visiblity levels.',
|
|
93
|
+
label: 'Visibility',
|
|
94
|
+
csv_header: 'visibility',
|
|
95
|
+
required_on_form: 'true',
|
|
96
|
+
usage: MetadataUsage.instance.usage['visibility']
|
|
97
|
+
}
|
|
98
|
+
end
|
|
67
99
|
end
|
|
68
100
|
end
|
|
@@ -11,12 +11,12 @@ module Zizia
|
|
|
11
11
|
private
|
|
12
12
|
|
|
13
13
|
def default_location
|
|
14
|
-
File.join(File.dirname(__FILE__), '../../config/usage.yml')
|
|
14
|
+
File.join(File.dirname(__FILE__), '../../config/zizia/usage.yml')
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def config
|
|
18
|
-
return default_location unless File.exist?(Rails.root.join("config", "usage.yml"))
|
|
19
|
-
Rails.root.join("config", "usage.yml")
|
|
18
|
+
return default_location unless File.exist?(Rails.root.join("config", "zizia", "usage.yml"))
|
|
19
|
+
Rails.root.join("config", "zizia", "usage.yml")
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
end
|
|
@@ -1,14 +1,25 @@
|
|
|
1
|
+
<h2>Metadata Field Guide</h2>
|
|
2
|
+
<div class="field-guide-intro">
|
|
3
|
+
<p>
|
|
4
|
+
This is a dynamically generated guide to the metadata used in this application.
|
|
5
|
+
Many fields are multi-valued. To include multiple values in a single CSV cell,
|
|
6
|
+
separate them with the delimiter that has been configured for this application:
|
|
7
|
+
<span class="delimiter"><%= @delimiter %></span>
|
|
8
|
+
</p>
|
|
9
|
+
<p>
|
|
10
|
+
Example: <span class="delimiter">Value 1<%= @delimiter %>Value 2</span>
|
|
11
|
+
</p>
|
|
12
|
+
</div>
|
|
13
|
+
|
|
1
14
|
<% content_for :title, 'Importer Field Guide' %>
|
|
2
15
|
<div class="guide-container">
|
|
3
16
|
<a class="btn btn-primary" href="/importer_documentation/profile">Download as CSV</a>
|
|
4
|
-
<
|
|
17
|
+
<div class="metadata-field-guide">
|
|
5
18
|
<% @details.each do |detail| %>
|
|
6
|
-
<
|
|
7
|
-
<
|
|
19
|
+
<div class="metadata-field <%= system_field(detail) %>" <%= hide_system_field(detail) %>>
|
|
20
|
+
<h2 class="field-label">
|
|
8
21
|
<%= detail[:attribute] %>
|
|
9
|
-
</
|
|
10
|
-
</h2>
|
|
11
|
-
<dd>
|
|
22
|
+
</h2>
|
|
12
23
|
<div>
|
|
13
24
|
<b>Predicate:</b>
|
|
14
25
|
<a href="<%= detail[:predicate] %>"><%= detail[:predicate] %></a>
|
|
@@ -22,8 +33,8 @@
|
|
|
22
33
|
<%= detail[:validator] %>
|
|
23
34
|
</div>
|
|
24
35
|
<div>
|
|
25
|
-
<b>Multiple:</b>
|
|
26
|
-
<%= detail[:multiple] %>
|
|
36
|
+
<b>Multiple values accepted:</b>
|
|
37
|
+
<%= true_false_to_yes_no(detail[:multiple]) %>
|
|
27
38
|
</div>
|
|
28
39
|
<div>
|
|
29
40
|
<b>Edit Form Label:</b>
|
|
@@ -43,7 +54,7 @@
|
|
|
43
54
|
<b>Usage:</b>
|
|
44
55
|
<%= detail[:usage] %>
|
|
45
56
|
</div>
|
|
46
|
-
</
|
|
57
|
+
</div>
|
|
47
58
|
<% end %>
|
|
48
|
-
</
|
|
59
|
+
</div>
|
|
49
60
|
</div>
|
data/lib/zizia/version.rb
CHANGED
|
@@ -54,11 +54,27 @@ RSpec.describe Zizia::MetadataDetailsController, type: :controller do
|
|
|
54
54
|
expect(first_row).to include('required_on_form')
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
-
it 'includes usage' do
|
|
57
|
+
it 'includes `usage`' do
|
|
58
58
|
get :profile
|
|
59
59
|
profile_table = CSV.parse(response.body, headers: :first_row)
|
|
60
60
|
title_definition = profile_table.find { |r| r.field('attribute') == 'title' }
|
|
61
|
-
expect(title_definition.field('usage')).to include 'name
|
|
61
|
+
expect(title_definition.field('usage')).to include 'name to aid in identifying a work' # match text extracted from ./config/emory/usage.yml
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'includes `files`' do
|
|
65
|
+
get :profile
|
|
66
|
+
profile_table = CSV.parse(response.body, headers: :first_row)
|
|
67
|
+
files_definition = profile_table.find { |r| r.field('attribute') == 'files' }
|
|
68
|
+
expect(files_definition.field('csv_header')).to eq('files')
|
|
69
|
+
expect(files_definition.field('validator')).to match(/Required/)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it 'includes `visibility`' do
|
|
73
|
+
get :profile
|
|
74
|
+
profile_table = CSV.parse(response.body, headers: :first_row)
|
|
75
|
+
visibility_definition = profile_table.find { |r| r.field('attribute') == 'visibility' }
|
|
76
|
+
expect(visibility_definition.field('csv_header')).to eq('visibility')
|
|
77
|
+
expect(visibility_definition.field('validator')).to match(/Required/)
|
|
62
78
|
end
|
|
63
79
|
|
|
64
80
|
it 'includes a date in the filename' do
|
|
@@ -8,6 +8,8 @@ class Ability
|
|
|
8
8
|
# Define any customized permissions here.
|
|
9
9
|
def custom_permissions
|
|
10
10
|
can :manage, Zizia::CsvImport if current_user.admin?
|
|
11
|
+
can :manage, Zizia::CsvImportDetail if current_user.admin?
|
|
12
|
+
|
|
11
13
|
# Limits deleting objects to a the admin user
|
|
12
14
|
#
|
|
13
15
|
# if current_user.admin?
|