Class: Relaton::Render::General
- Inherits:
-
Object
- Object
- Relaton::Render::General
show all
- Defined in:
- lib/relaton/render/general/render.rb,
lib/relaton/render/general/render_classes.rb
Direct Known Subclasses
Archival, Audiovisual, Book, Booklet, Conversation, Electronic_resource, Graphic_work, Hosted, Internal, Journal, Manual, Map, Misc, Music, Patent, Presentation, Proceedings, Standard, Techreport, Thesis, Unpublished
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(opt = {}) ⇒ General
Returns a new instance of General.
19
20
21
22
23
24
25
26
|
# File 'lib/relaton/render/general/render.rb', line 19
def initialize(opt = {})
options = read_config.merge(Utils::string_keys(opt))
@type = self.class.name.downcase.split("::").last
klass_initialize(options)
root_initalize(options)
render_initialize(options)
@parse ||= options["parse"]
end
|
Instance Attribute Details
#authorcitetemplate ⇒ Object
Returns the value of attribute authorcitetemplate.
14
15
16
|
# File 'lib/relaton/render/general/render.rb', line 14
def authorcitetemplate
@authorcitetemplate
end
|
#date ⇒ Object
Returns the value of attribute date.
14
15
16
|
# File 'lib/relaton/render/general/render.rb', line 14
def date
@date
end
|
#edition ⇒ Object
Returns the value of attribute edition.
14
15
16
|
# File 'lib/relaton/render/general/render.rb', line 14
def edition
@edition
end
|
#edition_ordinal ⇒ Object
Returns the value of attribute edition_ordinal.
14
15
16
|
# File 'lib/relaton/render/general/render.rb', line 14
def edition_ordinal
@edition_ordinal
end
|
#extenttemplate ⇒ Object
Returns the value of attribute extenttemplate.
14
15
16
|
# File 'lib/relaton/render/general/render.rb', line 14
def extenttemplate
@extenttemplate
end
|
#i18n ⇒ Object
Returns the value of attribute i18n.
14
15
16
|
# File 'lib/relaton/render/general/render.rb', line 14
def i18n
@i18n
end
|
#journaltemplate ⇒ Object
Returns the value of attribute journaltemplate.
14
15
16
|
# File 'lib/relaton/render/general/render.rb', line 14
def journaltemplate
@journaltemplate
end
|
#lang ⇒ Object
Returns the value of attribute lang.
14
15
16
|
# File 'lib/relaton/render/general/render.rb', line 14
def lang
@lang
end
|
#nametemplate ⇒ Object
Returns the value of attribute nametemplate.
14
15
16
|
# File 'lib/relaton/render/general/render.rb', line 14
def nametemplate
@nametemplate
end
|
#script ⇒ Object
Returns the value of attribute script.
14
15
16
|
# File 'lib/relaton/render/general/render.rb', line 14
def script
@script
end
|
#seriestemplate ⇒ Object
Returns the value of attribute seriestemplate.
14
15
16
|
# File 'lib/relaton/render/general/render.rb', line 14
def seriestemplate
@seriestemplate
end
|
#sizetemplate ⇒ Object
Returns the value of attribute sizetemplate.
14
15
16
|
# File 'lib/relaton/render/general/render.rb', line 14
def sizetemplate
@sizetemplate
end
|
#template ⇒ Object
Returns the value of attribute template.
14
15
16
|
# File 'lib/relaton/render/general/render.rb', line 14
def template
@template
end
|
Class Method Details
.inherited(subclass) ⇒ Object
rubocop:disable Lint/MissingSuper
14
15
16
17
|
# File 'lib/relaton/render/general/render_classes.rb', line 14
def self.inherited(subclass)
type = subclass.name.downcase.sub(/relaton::render::/, "")
General.descendants[type] = subclass
end
|
.subclass(type) ⇒ Object
19
20
21
|
# File 'lib/relaton/render/general/render_classes.rb', line 19
def self.subclass(type)
@descendants[type]
end
|
Instance Method Details
#add_date_accessed(data, template) ⇒ Object
195
196
197
198
199
200
201
202
203
204
|
# File 'lib/relaton/render/general/render.rb', line 195
def add_date_accessed(data, template)
(/\{\{\s*date_accessed\s*\}\}/.match?(template) &&
/\{\{\s*uri\s*\}\}/.match?(template) &&
data[:uri_raw] && !data[:date_accessed]) or return
if url_exist?(data[:uri_raw])
data[:date_accessed] = { on: ::Date.today.to_s }
else
warn "BIBLIOGRAPHY WARNING: cannot access #{data[:uri_raw]}"
end
end
|
#citations1(bib) ⇒ Object
180
181
182
183
184
185
186
187
|
# File 'lib/relaton/render/general/render.rb', line 180
def citations1(bib)
bib.each_with_object([]).with_index do |(b, m), i|
data_liquid = @fieldsklass.new(renderer: self)
.compound_fields_format(@parse.(b))
m << { author: data_liquid[:authorcite], date: data_liquid[:date],
ord: i, id: b.id, data_liquid: data_liquid, type: b.type }
end
end
|
#default_template ⇒ Object
101
102
103
|
# File 'lib/relaton/render/general/render.rb', line 101
def default_template
"{{creatornames}}. {{title}}. {{date}}."
end
|
#enhance_data(data, template) ⇒ Object
add to liquid data based on template
190
191
192
193
|
# File 'lib/relaton/render/general/render.rb', line 190
def enhance_data(data, template)
template.is_a?(String) or return
add_date_accessed(data, template)
end
|
#extentrenderers(opt) ⇒ Object
91
92
93
94
|
# File 'lib/relaton/render/general/render.rb', line 91
def extentrenderers(opt)
@extenttemplateklass
.new(template: template_hash_fill(opt["extenttemplate"]), i18n: @i18n)
end
|
#fmtref(doc) ⇒ Object
117
118
119
|
# File 'lib/relaton/render/general/render.rb', line 117
def fmtref(doc)
"<formattedref>#{doc}</formattedref>"
end
|
#i18n_initialize(opt) ⇒ Object
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/relaton/render/general/render.rb', line 58
def i18n_initialize(opt)
@lang = opt["language"]
@script = opt["script"]
@locale = opt["locale"]
@i18n = opt["i18n"] ||
i18n_klass(language: @lang, script: @script, locale: @locale,
i18nhash: opt["i18nhash"])
@edition_ordinal = opt["edition_ordinal"] || @i18n.edition_ordinal
@edition = opt["edition"] || @i18n.edition
@date = opt["date"] || @i18n.get["date_formats"] ||
{ "month_year" => "yMMMM", "day_month_year" => "to_long_s",
"date_time" => "to_long_s" }
end
|
#i18n_klass(language: "en", script: "Latn", locale: nil, i18nhash: nil) ⇒ Object
105
106
107
108
|
# File 'lib/relaton/render/general/render.rb', line 105
def i18n_klass(language: "en", script: "Latn", locale: nil, i18nhash: nil)
::IsoDoc::RelatonRenderI18n.new(language, script, locale: locale,
i18nhash: i18nhash)
end
|
#klass_initialize(_options) ⇒ Object
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/relaton/render/general/render.rb', line 32
def klass_initialize(_options)
@nametemplateklass = Relaton::Render::Template::Name
@authorcitetemplateklass = Relaton::Render::Template::AuthorCite
@seriestemplateklass = Relaton::Render::Template::Series
@extenttemplateklass = Relaton::Render::Template::Extent
@sizetemplateklass = Relaton::Render::Template::Size
@generaltemplateklass = Relaton::Render::Template::General
@fieldsklass = Relaton::Render::Fields
@parseklass = Relaton::Render::Parse
end
|
#parse(doc, embedded: false) ⇒ Object
121
122
123
124
125
126
127
|
# File 'lib/relaton/render/general/render.rb', line 121
def parse(doc, embedded: false)
f = doc.formattedref and
return embedded ? f.content : fmtref(f.content)
ret = parse1(doc) or return nil
embedded and return ret
fmtref(ret)
end
|
#parse1(doc) ⇒ Object
138
139
140
141
142
143
|
# File 'lib/relaton/render/general/render.rb', line 138
def parse1(doc)
r = doc.relation.select { |x| x.type == "hasRepresentation" }
.map { |x| @i18n.also_pub_as + parse_single_bibitem(x.bibitem) }
out = [parse_single_bibitem(doc)] + r
@i18n.l10n(out.join(". ").gsub(".. ", ". "))
end
|
#parse_single_bibitem(doc) ⇒ Object
145
146
147
148
149
150
151
152
|
# File 'lib/relaton/render/general/render.rb', line 145
def parse_single_bibitem(doc)
r = renderer(doc.type || "misc")
data = @parse.(doc)
enhance_data(data, r.template_raw)
data_liquid = @fieldsklass.new(renderer: self)
.compound_fields_format(data)
valid_parse(@i18n.l10n(r.render(data_liquid)))
end
|
#read_config ⇒ Object
28
29
30
|
# File 'lib/relaton/render/general/render.rb', line 28
def read_config
YAML.load_file(File.join(File.dirname(__FILE__), "config.yml"))
end
|
#render(bib, embedded: false) ⇒ Object
110
111
112
113
114
115
|
# File 'lib/relaton/render/general/render.rb', line 110
def render(bib, embedded: false)
if bib.is_a?(String) && Nokogiri::XML(bib).errors.empty?
bib = RelatonBib::XMLParser.from_xml bib
end
parse(bib, embedded: embedded)
end
|
#render_all(bib, type: "author-date") ⇒ Object
expect array of Relaton objects, in sorted order
160
161
162
163
164
|
# File 'lib/relaton/render/general/render.rb', line 160
def render_all(bib, type: "author-date")
bib = sanitise_citations_input(bib) or return
Citations.new(type: type, renderer: self, i18n: @i18n)
.render(citations1(bib))
end
|
#render_initialize(opt) ⇒ Object
72
73
74
75
76
77
78
79
80
|
# File 'lib/relaton/render/general/render.rb', line 72
def render_initialize(opt)
case opt["template"]
when String
@template = @generaltemplateklass
.new(template: opt["template"], i18n: @i18n)
when Hash
@render = renderers(opt)
end
end
|
#renderer(type) ⇒ Object
129
130
131
132
133
134
135
136
|
# File 'lib/relaton/render/general/render.rb', line 129
def renderer(type)
ret = @template || @render[type]&.template or
raise "No renderer defined for #{type}"
@type == "general" || @type == type or
raise "No renderer defined for #{type}"
ret
end
|
#renderers(opt) ⇒ Object
82
83
84
85
86
87
88
89
|
# File 'lib/relaton/render/general/render.rb', line 82
def renderers(opt)
template_hash_fill(opt["template"]).each_with_object({}) do |(k, v), m|
@type == "general" || @type == k or next
m[k] = General.subclass(k)
.new(template: v, parse: @parse, i18n: @i18n,
language: @lang, script: @script)
end
end
|
#root_initalize(opt) ⇒ Object
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/relaton/render/general/render.rb', line 43
def root_initalize(opt)
i18n_initialize(opt)
@parse = @parseklass.new(lang: @lang, script: @script, i18n: @i18n)
@nametemplate = @nametemplateklass
.new(template: opt["nametemplate"], i18n: @i18n)
@authorcitetemplate = @authorcitetemplateklass
&.new(template: opt["authorcitetemplate"], i18n: @i18n)
@seriestemplate = @seriestemplateklass
.new(template: opt["seriestemplate"], i18n: @i18n)
@journaltemplate = @seriestemplateklass
.new(template: opt["journaltemplate"], i18n: @i18n)
@extenttemplate = extentrenderers(opt)
@sizetemplate = sizerenderers(opt)
end
|
166
167
168
169
|
# File 'lib/relaton/render/general/render.rb', line 166
def sanitise_citations_input(bib)
bib.is_a?(Array) and return bib
bib.is_a?(String) and return sanitise_citations_input_string(bib)
end
|
171
172
173
174
175
176
177
178
|
# File 'lib/relaton/render/general/render.rb', line 171
def sanitise_citations_input_string(bib)
p = Nokogiri::XML(bib) or return
(p.errors.empty? && p.root.at("./bibitem")) or return nil
p.root.xpath("./bibitem").each_with_object([]) do |b, m|
m << RelatonBib::XMLParser.from_xml(b.to_xml)
end
end
|
#sizerenderers(opt) ⇒ Object
96
97
98
99
|
# File 'lib/relaton/render/general/render.rb', line 96
def sizerenderers(opt)
@sizetemplateklass
.new(template: template_hash_fill(opt["sizetemplate"]), i18n: @i18n)
end
|
#valid_parse(ret) ⇒ Object
154
155
156
157
|
# File 'lib/relaton/render/general/render.rb', line 154
def valid_parse(ret)
@i18n.get["no_date"] == ret and return nil
ret
end
|