zizia 4.5.4.alpha.01 → 4.6.0.alpha.01
Sign up to get free protection for your applications and to get access to all the features.
- 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?
|