Class: MODSSerializer
- Inherits:
-
ASpaceExport::Serializer
show all
- Includes:
- JSONModel
- Defined in:
- backend/app/exporters/serializers/mods.rb
Instance Method Summary
(collapse)
Methods included from JSONModel
JSONModel, #JSONModel, add_error_handler, all, allow_unmapped_enum_value, backend_url, client_mode?, custom_validations, destroy_model, enum_default_value, enum_values, handle_error, init, load_schema, #models, models, parse_jsonmodel_ref, parse_reference, repository, repository_for, schema_src, set_repository, strict_mode, strict_mode?, with_repository
inherited, serializer_for, serializer_for?, with_namespace
Instance Method Details
- (Object) serialize(mods, opts = {})
6
7
8
9
10
11
12
13
|
# File 'backend/app/exporters/serializers/mods.rb', line 6
def serialize(mods, opts = {})
builder = Nokogiri::XML::Builder.new(:encoding => "UTF-8") do |xml|
serialize_mods(mods, xml)
end
builder.to_xml
end
|
- (Object) serialize_mods(mods, xml)
15
16
17
18
19
20
21
22
23
|
# File 'backend/app/exporters/serializers/mods.rb', line 15
def serialize_mods(mods, xml)
root_args = {'version' => '3.4'}
root_args['xmlns'] = 'http://www.loc.gov/mods/v3'
xml.mods(root_args){
serialize_mods_inner(mods, xml)
}
end
|
- (Object) serialize_mods_inner(mods, xml)
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# File 'backend/app/exporters/serializers/mods.rb', line 26
def serialize_mods_inner(mods, xml)
xml.titleInfo {
xml.title mods.title
}
xml.typeOfResource mods.type_of_resource
xml.language {
xml.languageTerm(:type => 'code') {
xml.text mods.language_term
}
}
xml.physicalDescription{
mods.extents.each do |extent|
xml.extent extent
end
}
mods.notes.each do |note|
if note.wrapping_tag
xml.send(note.wrapping_tag) {
serialize_note(note, xml)
}
else
serialize_note(note, xml)
end
end
if (repo_note = mods.repository_note)
xml.note(:displayLabel => repo_note.label) {
xml.text repo_note.content
}
end
mods.subjects.each do |subject|
xml.subject(:authority => subject['source']) {
subject['terms'].each do |term|
xml.topic term
end
}
end
mods.names.each do |name|
case name['role']
when 'subject'
xml.subject {
serialize_name(name, xml)
}
else
serialize_name(name, xml)
end
end
mods.parts.each do |part|
xml.part(:ID => part['id']) {
xml.detail {
xml.title part['title']
}
}
end
mods.each_related_item do |item|
xml.relatedItem(:type => 'constituent') {
serialize_mods_inner(item, xml)
}
end
end
|
- (Object) serialize_name(name, xml)
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
# File 'backend/app/exporters/serializers/mods.rb', line 101
def serialize_name(name, xml)
atts = {:type => name['type']}
atts[:authority] = name['source'] if name['source']
xml.name(atts) {
name['parts'].each do |part|
if part['type']
xml.namePart(:type => part['type']) {
xml.text part['content']
}
else
xml.namePart part['content']
end
end
xml.role {
xml.roleTerm(:type => 'text', :authority => 'marcrelator') {
xml.text name['role']
}
}
}
end
|
- (Object) serialize_note(note, xml)
123
124
125
126
127
128
129
130
131
|
# File 'backend/app/exporters/serializers/mods.rb', line 123
def serialize_note(note, xml)
atts = {}
atts[:type] = note.type if note.type
atts[:displayLabel] = note.label if note.label
xml.send(note.tag, atts) {
xml.text note.content
}
end
|