relaton-cli 0.5.0 → 0.6.0

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.
@@ -1,8 +1,6 @@
1
1
  require "fileutils"
2
2
  require "relaton/bibdata"
3
- require "relaton/bibdatanew"
4
3
  require "relaton/bibcollection"
5
- require "relaton/bibcollectionnew"
6
4
  require "relaton/cli/xml_to_html_renderer"
7
5
 
8
6
  module Relaton
@@ -47,10 +45,6 @@ module Relaton
47
45
 
48
46
  attr_reader :file, :outdir, :options, :writable, :overwrite
49
47
 
50
- def default_ext
51
- raise "Override this method"
52
- end
53
-
54
48
  def convert_to_html
55
49
  Relaton::Cli::XmlToHtmlRenderer.render(
56
50
  xml_content(file),
@@ -59,9 +53,9 @@ module Relaton
59
53
  )
60
54
  end
61
55
 
62
- def xml_content(file)
63
- File.read(file, encoding: "utf-8")
64
- end
56
+ # def xml_content(file)
57
+ # File.read(file, encoding: "utf-8")
58
+ # end
65
59
 
66
60
  def install_dependencies(dependencies)
67
61
  dependencies.each { |dependency| require(dependency) }
@@ -84,19 +78,21 @@ module Relaton
84
78
  outfile ||= Pathname.new(file).sub_ext(extension).to_s
85
79
 
86
80
  if !File.exists?(outfile) || overwrite
87
- File.open(outfile, "w:utf-8") { |file| file.write(content) }
81
+ File.open(outfile, "w:utf-8") do |file|
82
+ file.write(content)
83
+ end
88
84
  end
89
85
  end
90
86
 
91
87
  def write_to_file_collection(content, format)
88
+ # if outdir && (content.is_a?(Relaton::Bibcollection))
89
+ # FileUtils.mkdir_p(outdir)
90
+ # content.items_flattened.each do |item|
91
+ # collection = collection_filename(item.docidentifier_code)
92
+ # write_to_a_file(item_output(item, format), collection)
93
+ # end
94
+ # end
92
95
  if outdir && (content.is_a?(Relaton::Bibcollection))
93
- FileUtils.mkdir_p(outdir)
94
- content.items_flattened.each do |item|
95
- collection = collection_filename(item.docidentifier_code)
96
- write_to_a_file(item_output(item, format), collection)
97
- end
98
- end
99
- if outdir && (content.is_a?(Relaton::BibcollectionNew))
100
96
  FileUtils.mkdir_p(outdir)
101
97
  content.items_flattened.each do |item|
102
98
  collection = collection_filename(extract_docid(item))
@@ -1,8 +1,6 @@
1
1
  require "relaton/cli/relaton_file"
2
2
  require "relaton/cli/xml_convertor"
3
- require "relaton/cli/xml_convertor_new"
4
3
  require "relaton/cli/yaml_convertor"
5
- require "relaton/cli/yaml_convertor_new"
6
4
  require "fcntl"
7
5
 
8
6
  module Relaton
@@ -13,7 +11,7 @@ module Relaton
13
11
  option :year, aliases: :y, type: :numeric, desc: "Year the standard was published"
14
12
 
15
13
  def fetch(code)
16
- Relaton::Cli.relaton
14
+ Relaton.db
17
15
  io = IO.new(STDOUT.fcntl(::Fcntl::F_DUPFD), mode: 'w:UTF-8')
18
16
  io.puts(fetch_document(code, options) || supported_type_message)
19
17
  end
@@ -54,18 +52,7 @@ module Relaton
54
52
  Relaton::Cli::YAMLConvertor.to_xml(filename, options)
55
53
  end
56
54
 
57
- desc "yaml2xmlnew YAML", "Convert Relaton YAML into Relaton Collection XML or separate files"
58
- option :extension, aliases: :x, default: "rxl", desc: "File extension of Relaton XML files, defaults to 'rxl'"
59
- option :prefix, aliases: :p, desc: "Filename prefix of individual Relaton XML files, defaults to empty"
60
- option :outdir, aliases: :o, desc: "Output to the specified directory with individual Relaton Bibdata XML files"
61
- option :require, aliases: :r, type: :array, desc: "Require LIBRARY prior to execution"
62
- option :overwrite, aliases: :f, type: :boolean, default: false, desc: "Overwrite the existing file"
63
-
64
- def yaml2xmlnew(filename)
65
- Relaton::Cli::YAMLConvertorNew.to_xml(filename, options)
66
- end
67
-
68
- desc "xml2yaml XML", "Convert Relaton XML into Relaton Bibdata / Bibcollection YAML (and separate files)"
55
+ desc "xml2yamlnew XML", "Convert Relaton XML into Relaton Bibdata / Bibcollection YAML (and separate files)"
69
56
  option :extension, aliases: :x, default: "yaml", desc: "File extension of Relaton YAML files, defaults to 'yaml'"
70
57
  option :prefix, aliases: :p, desc: "Filename prefix of Relaton XML files, defaults to empty"
71
58
  option :outdir, aliases: :o, desc: "Output to the specified directory with individual Relaton Bibdata YAML files"
@@ -76,17 +63,6 @@ module Relaton
76
63
  Relaton::Cli::XMLConvertor.to_yaml(filename, options)
77
64
  end
78
65
 
79
- desc "xml2yamlnew XML", "Convert Relaton XML into Relaton Bibdata / Bibcollection YAML (and separate files)"
80
- option :extension, aliases: :x, default: "yaml", desc: "File extension of Relaton YAML files, defaults to 'yaml'"
81
- option :prefix, aliases: :p, desc: "Filename prefix of Relaton XML files, defaults to empty"
82
- option :outdir, aliases: :o, desc: "Output to the specified directory with individual Relaton Bibdata YAML files"
83
- option :require, aliases: :r, type: :array, desc: "Require LIBRARY prior to execution"
84
- option :overwrite, aliases: :f, type: :boolean, default: false, desc: "Overwrite the existing file"
85
-
86
- def xml2yamlnew(filename)
87
- Relaton::Cli::XMLConvertorNew.to_yaml(filename, options)
88
- end
89
-
90
66
  desc "xml2html RELATON-INDEX-XML", "Convert Relaton Collection XML into HTML"
91
67
  option :stylesheet, aliases: :s, desc: "Stylesheet file path for rendering HTML index"
92
68
  option :templatedir, aliases: :t, desc: "Liquid template directory for rendering Relaton items and collection"
@@ -96,22 +72,22 @@ module Relaton
96
72
  Relaton::Cli::XMLConvertor.to_html(file, style, template)
97
73
  end
98
74
 
99
- desc "yaml2html RELATON-INDEX-YAML", "Concatenate Relaton Collection YAML into HTML"
100
- option :stylesheet, aliases: :s, desc: "Stylesheet file path for rendering HTML index"
101
- option :templatedir, aliases: :t, desc: "Liquid template directory for rendering Relaton items and collection"
102
- option :overwrite, aliases: :f, type: :boolean, default: false, desc: "Overwrite the existing file"
75
+ # desc "yaml2html RELATON-INDEX-YAML", "Concatenate Relaton Collection YAML into HTML"
76
+ # option :stylesheet, aliases: :s, desc: "Stylesheet file path for rendering HTML index"
77
+ # option :templatedir, aliases: :t, desc: "Liquid template directory for rendering Relaton items and collection"
78
+ # option :overwrite, aliases: :f, type: :boolean, default: false, desc: "Overwrite the existing file"
103
79
 
104
- def yaml2html(file, style = nil, template = nil)
105
- Relaton::Cli::YAMLConvertor.to_html(file, style, template)
106
- end
80
+ # def yaml2html(file, style = nil, template = nil)
81
+ # Relaton::Cli::YAMLConvertor.to_html(file, style, template)
82
+ # end
107
83
 
108
84
  desc "yaml2htmlnew RELATON-INDEX-YAML", "Concatenate Relaton Collection YAML into HTML"
109
85
  option :stylesheet, aliases: :s, desc: "Stylesheet file path for rendering HTML index"
110
86
  option :templatedir, aliases: :t, desc: "Liquid template directory for rendering Relaton items and collection"
111
87
  option :overwrite, aliases: :f, type: :boolean, default: false, desc: "Overwrite the existing file"
112
88
 
113
- def yaml2htmlnew(file, style = nil, template = nil)
114
- Relaton::Cli::YAMLConvertorNew.to_html(file, style, template)
89
+ def yaml2html(file, style = nil, template = nil)
90
+ Relaton::Cli::YAMLConvertor.to_html(file, style, template)
115
91
  end
116
92
 
117
93
  private
@@ -81,7 +81,7 @@ module Relaton
81
81
  attr_reader :source, :options, :outdir, :outfile
82
82
 
83
83
  def bibcollection
84
- bib_klass.new(
84
+ Bibcollection.new(
85
85
  title: options[:title],
86
86
  items: concatenate_files,
87
87
  doctype: options[:doctype],
@@ -103,7 +103,7 @@ module Relaton
103
103
  end
104
104
 
105
105
  def relaton_collection
106
- @relaton_collection ||= bib_klass.from_xml(nokogiri_document(nil, source))
106
+ @relaton_collection ||= Bibcollection.from_xml(nokogiri_document(nil, source))
107
107
  end
108
108
 
109
109
  def extract_and_write_to_files
@@ -125,7 +125,7 @@ module Relaton
125
125
  bib.remove_namespaces!
126
126
  bib.root.add_namespace(nil, "xmlns")
127
127
 
128
- bibdata = Relaton::BibdataNew.from_xml(bib.root)
128
+ bibdata = Relaton::Bibdata.from_xml(bib.root)
129
129
  build_bibdata_relaton(bibdata, file)
130
130
 
131
131
  write_to_file(bibdata.send(output_type), outdir, build_filename(file))
@@ -175,33 +175,19 @@ module Relaton
175
175
  when "yml", "yaml"
176
176
  :to_yaml
177
177
  else
178
- puts "The given extension of '#{ext}' is not supported."
178
+ puts "[relaton-cli] the given extension of '#{ext}' is not supported."
179
179
  :to_xml
180
180
  end
181
181
  end
182
182
 
183
183
  def bibdata_instance(document, file)
184
184
  document = clean_nokogiri_document(document)
185
- bibdata = if options[:new]
186
- Relaton::BibdataNew.from_xml document.root
187
- else
188
- Relaton::Bibdata.from_xml(document.root)
189
- end
185
+ bibdata = Relaton::Bibdata.from_xml document.root
190
186
  build_bibdata_relaton(bibdata, file)
191
187
 
192
188
  bibdata
193
189
  end
194
190
 
195
- # @param content [Nokogiri::XML::Document]
196
- # @return [Hash]
197
- def parse_doc(doc)
198
- if (processor = Relaton::Registry.instance.by_type(doctype(doc)))
199
- processor.from_xml(doc.to_s).to_hash
200
- else
201
- RelatonBib::XMLParser.from_xml(doc.to_s).to_hash
202
- end
203
- end
204
-
205
191
  def build_bibdata_relaton(bibdata, file)
206
192
  ["xml", "pdf", "doc", "html", "rxl", "txt"].each do |type|
207
193
  file = Pathname.new(file).sub_ext(".#{type}")
@@ -227,9 +213,8 @@ module Relaton
227
213
  end
228
214
 
229
215
  def convert_yamls_to_xml
230
- klass = options[:new] ? YAMLConvertorNew : YAMLConvertor
231
216
  select_files_with("yaml").map do |file|
232
- { file: file, content: klass.to_xml(file, write: false) }
217
+ { file: file, content: YAMLConvertor.to_xml(file, write: false) }
233
218
  end
234
219
  end
235
220
 
@@ -271,10 +256,6 @@ module Relaton
271
256
  bad_chars = ["/", "\\", "?", "%", "*", ":", "|", '"', "<", ">", ".", " "]
272
257
  bad_chars.inject(string.downcase) { |res, char| res.gsub(char, "-") }
273
258
  end
274
-
275
- def bib_klass
276
- @bib_klass ||= options[:new] ? Relaton::BibcollectionNew : Relaton::Bibcollection
277
- end
278
259
  end
279
260
  end
280
261
  end
@@ -1,5 +1,5 @@
1
1
  module Relaton
2
2
  module Cli
3
- VERSION = "0.5.0".freeze
3
+ VERSION = "0.6.0".freeze
4
4
  end
5
5
  end
@@ -29,11 +29,23 @@ module Relaton
29
29
  "yaml"
30
30
  end
31
31
 
32
+ # @param content [Nokogiri::XML::Document]
33
+ # @return [Hash]
32
34
  def convert_content(content)
33
35
  if content.root.name == "bibdata"
34
- Bibdata.from_xml(content.to_s)
36
+ Bibdata.from_xml(content)
37
+ # Relaton::Cli.parse_xml(content).to_hash
35
38
  else
36
39
  Bibcollection.from_xml(content)
40
+ # title = content.at("relaton-collection/title").text
41
+ # author = content.at("relaton-collection/contributor/organization/name").text
42
+ # collection = { "root" => { "title" => title, "author" => author } }
43
+
44
+ # collection["root"]["items"] = content.xpath("//bibdata").map do |bib|
45
+ # Relaton::Cli.parse_xml(bib).to_hash
46
+ # end
47
+
48
+ # collection
37
49
  end
38
50
  end
39
51
 
@@ -13,7 +13,7 @@ module Relaton::Cli
13
13
  def render(index_xml)
14
14
  Liquid::Template.
15
15
  parse(template).
16
- render(build_liquid_document(index_xml))
16
+ render(build_liquid_document(index_xml), { strict_variables: true })
17
17
  end
18
18
 
19
19
  def uri_for_extension(uri, extension)
@@ -1,5 +1,6 @@
1
1
  require "yaml"
2
2
  require "relaton/cli/base_convertor"
3
+ require "relaton_bib"
3
4
 
4
5
  module Relaton
5
6
  module Cli
@@ -8,7 +9,7 @@ module Relaton
8
9
  if writable
9
10
  convert_and_write(file_content, :to_xml)
10
11
  else
11
- convert_content(file_content).to_xml
12
+ convert_content(file_content).to_xml(date_format: :full, bibdata: true)
12
13
  end
13
14
  end
14
15
 
@@ -34,21 +35,46 @@ module Relaton
34
35
  end
35
36
 
36
37
  def file_content
37
- YAML.load_file(file)
38
+ date_to_string(YAML.load_file(file))
39
+ end
40
+
41
+ def date_to_string(obj)
42
+ obj.is_a? Hash and
43
+ return obj.inject({}){|memo,(k,v)| memo[k] = date_to_string(v); memo}
44
+ obj.is_a? Array and
45
+ return obj.inject([]){|memo,v | memo << date_to_string(v); memo}
46
+ return obj.is_a?(Date) ? obj.to_s : obj
38
47
  end
39
48
 
40
49
  def convert_single_file(content)
41
- Relaton::Bibdata.new(content)
50
+ if (processor = Relaton::Registry.instance.by_type(doctype(content["docid"])))
51
+ processor.hash_to_bib content
52
+ else
53
+ RelatonBib::BibliographicItem.new(RelatonBib::HashConverter::hash_to_bib(content))
54
+ end
55
+ end
56
+
57
+ # @param content [Hash]
58
+ # @return [String]
59
+ def doctype(docid)
60
+ did = docid.is_a?(Array) ? docid.fetch(0) : docid
61
+ return did["type"] if did && did["type"]
62
+
63
+ did&.fetch("id")&.match(/^\w+/)&.to_s
42
64
  end
43
65
 
44
66
  def convert_collection(content)
45
67
  if content.has_key?("root")
68
+ content["root"]["items"] = content["root"]["items"].map do |i|
69
+ # RelatonBib::HashConverter::hash_to_bib(i)
70
+ convert_single_file(i)
71
+ end
46
72
  Relaton::Bibcollection.new(content["root"])
47
73
  end
48
74
  end
49
75
 
50
76
  def xml_content(_raw_file)
51
- convert_content(file_content).to_xml
77
+ convert_content(file_content).to_xml(date_format: :full, bibdata: true)
52
78
  end
53
79
 
54
80
  def convert_content(content)
data/lib/relaton/cli.rb CHANGED
@@ -1,10 +1,21 @@
1
1
  require "thor"
2
2
  require "relaton"
3
- require "relaton/xml_document"
4
3
  require_relative "cli/command"
5
4
 
6
5
  module Relaton
6
+ def self.db
7
+ Cli.relaton
8
+ end
9
+
7
10
  module Cli
11
+ class RelatonDb
12
+ include Singleton
13
+
14
+ def db
15
+ @db ||= Relaton::Db.new("#{Dir.home}/.relaton/cache", nil)
16
+ end
17
+ end
18
+
8
19
  def self.start(arguments)
9
20
  Relaton::Cli::Command.start(arguments)
10
21
  end
@@ -17,7 +28,7 @@ module Relaton
17
28
  # whenever necessary.
18
29
  #
19
30
  def self.relaton
20
- @relaton ||= Relaton::Db.new("#{Dir.home}/.relaton/cache", nil)
31
+ RelatonDb.instance.db
21
32
  end
22
33
 
23
34
  # @param content [Nokogiri::XML::Document]
data/lib/relaton-cli.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require_relative "relaton/bibcollection"
2
- require_relative "relaton/bibcollectionnew"
3
2
  require_relative "relaton/bibdata"
4
3
  require_relative "relaton/element_finder"
5
4
  require_relative "relaton/xml_document"
data/relaton-cli.gemspec CHANGED
@@ -34,7 +34,7 @@ Gem::Specification.new do |spec|
34
34
  spec.add_development_dependency "debase"
35
35
  spec.add_development_dependency "simplecov"
36
36
 
37
- spec.add_runtime_dependency "relaton", "~> 0.7.0"
37
+ spec.add_runtime_dependency "relaton", "~> 0.8.0"
38
38
  spec.add_runtime_dependency "thor"
39
39
  spec.add_runtime_dependency "liquid"
40
40
  # spec.add_runtime_dependency 'byebug'
@@ -8,9 +8,9 @@
8
8
  <div class="doc-identifier">
9
9
  <h{{ depth }}>
10
10
  {% if document.html == "" %}
11
- {{ document.docidentifier }}
11
+ {{ document.docid.id }}
12
12
  {% else %}
13
- <a href="{{ document.html }}">{{ document.docidentifier }}</a>
13
+ <a href="{{ document.html }}">{{ document.docid.id }}</a>
14
14
  {% endif %}
15
15
  </h{{ depth }}>
16
16
  </div>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-11 00:00:00.000000000 Z
11
+ date: 2020-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -156,14 +156,14 @@ dependencies:
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: 0.7.0
159
+ version: 0.8.0
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: 0.7.0
166
+ version: 0.8.0
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: thor
169
169
  requirement: !ruby/object:Gem::Requirement
@@ -207,6 +207,7 @@ files:
207
207
  - ".github/workflows/windows.yml"
208
208
  - ".gitignore"
209
209
  - ".hound.yml"
210
+ - ".rspec"
210
211
  - ".rubocop.yml"
211
212
  - CHANGELOG.md
212
213
  - Gemfile
@@ -220,9 +221,7 @@ files:
220
221
  - i18n.yaml
221
222
  - lib/relaton-cli.rb
222
223
  - lib/relaton/bibcollection.rb
223
- - lib/relaton/bibcollectionnew.rb
224
224
  - lib/relaton/bibdata.rb
225
- - lib/relaton/bibdatanew.rb
226
225
  - lib/relaton/cli.rb
227
226
  - lib/relaton/cli/_document.liquid
228
227
  - lib/relaton/cli/_index.liquid
@@ -231,12 +230,9 @@ files:
231
230
  - lib/relaton/cli/relaton_file.rb
232
231
  - lib/relaton/cli/version.rb
233
232
  - lib/relaton/cli/xml_convertor.rb
234
- - lib/relaton/cli/xml_convertor_new.rb
235
233
  - lib/relaton/cli/xml_to_html_renderer.rb
236
234
  - lib/relaton/cli/yaml_convertor.rb
237
- - lib/relaton/cli/yaml_convertor_new.rb
238
235
  - lib/relaton/element_finder.rb
239
- - lib/relaton/xml_document.rb
240
236
  - relaton-cli.gemspec
241
237
  - templates/_document.liquid
242
238
  - templates/_index.liquid
@@ -1,116 +0,0 @@
1
- require "relaton/element_finder"
2
-
3
- module Relaton
4
- class BibcollectionNew
5
- extend Relaton::ElementFinder
6
-
7
- ATTRIBS = %i[
8
- title
9
- items
10
- doctype
11
- author
12
- ].freeze
13
-
14
- attr_accessor *ATTRIBS
15
-
16
- def initialize(options)
17
- self.items = []
18
- ATTRIBS.each do |k|
19
- value = options[k] || options[k.to_s]
20
- send("#{k}=", value)
21
- end
22
- self.items = (items || []).reduce([]) do |acc, item|
23
- acc << if item.is_a?(::Relaton::BibcollectionNew) || item.is_a?(::Relaton::BibdataNew)
24
- item
25
- else new_bib_item_class(item)
26
- end
27
- end
28
- end
29
-
30
- # arbitrary number, must sort after all bib items
31
- def doc_number
32
- 9999999
33
- end
34
-
35
- def self.from_xml(source)
36
- title = find_text("./relaton-collection/title", source)
37
- author = find_text("./relaton-collection/contributor[role/@type = 'author']/organization/name", source)
38
-
39
- items = find_xpath("./relaton-collection/relation", source)&.map do |item|
40
- bibdata = find("./bibdata", item)
41
- klass = bibdata ? BibdataNew : BibcollectionNew
42
- klass.from_xml(bibdata || item)
43
- end
44
-
45
- new(title: title, author: author, items: items)
46
- end
47
-
48
- def new_bib_item_class(options)
49
- if options.is_a?(Hash) && options["items"]
50
- ::Relaton::BibcollectionNew.new(options)
51
- else
52
- ::Relaton::BibdataNew.new(options)
53
- end
54
- end
55
-
56
- def items_flattened
57
- items.sort_by! do |b|
58
- b.docnumber
59
- end
60
-
61
- items.inject([]) do |acc,item|
62
- if item.is_a? ::Relaton::BibcollectionNew
63
- acc << item.items_flattened
64
- else
65
- acc << item
66
- end
67
- end
68
- end
69
-
70
- def to_xml(opts)
71
- items.sort_by! do |b|
72
- b.docnumber
73
- end
74
-
75
- collection_type = if doctype
76
- "type=\"#{doctype}\""
77
- else
78
- 'xmlns="https://open.ribose.com/relaton-xml"'
79
- end
80
-
81
- ret = "<relaton-collection #{collection_type}>"
82
- ret += "<title>#{title}</title>" if title
83
- if author
84
- ret += "<contributor><role type='author'/><organization><name>#{author}</name></organization></contributor>"
85
- end
86
- unless items.empty?
87
- items.each do |item|
88
- ret += "<relation type='partOf'>"
89
- ret += item.to_xml(opts)
90
- ret += "</relation>\n"
91
- end
92
- end
93
- ret += "</relaton-collection>\n"
94
- end
95
-
96
- def to_yaml
97
- to_h.to_yaml
98
- end
99
-
100
- def to_h
101
- items.sort_by! do |b|
102
- b.doc_number
103
- end
104
-
105
- a = ATTRIBS.inject({}) do |acc, k|
106
- acc[k.to_s] = send(k)
107
- acc
108
- end
109
-
110
- a["items"] = a["items"].map(&:to_h)
111
-
112
- { "root" => a }
113
- end
114
-
115
- end
116
- end
@@ -1,62 +0,0 @@
1
- require "date"
2
-
3
- module Relaton
4
- class BibdataNew
5
- def initialize(bibitem)
6
- @bibitem = bibitem
7
- end
8
-
9
- def method_missing(method, *args)
10
- %r{(?<m>\w+)=$} =~ method
11
- return unless m && %w[xml pdf doc html rxl txt].include?(m)
12
-
13
- uri = @bibitem.link.detect { |u| u.type == m }
14
- if uri
15
- uri.content = args[0]
16
- else
17
- @bibitem.link << RelatonBib::TypedUri.new(type: m, content: args[0])
18
- end
19
- end
20
-
21
- def docidentifier
22
- @bibitem.docidentifier.first&.id
23
- end
24
-
25
- # From http://gavinmiller.io/2016/creating-a-secure-sanitization-function/
26
- # FILENAME_BAD_CHARS = [ '/', '\\', '?', '%', '*', ':', '|', '"', '<', '>', '.', ' ' ]
27
-
28
- # def docidentifier_code
29
- # return "" if docidentifier.nil?
30
- # a = FILENAME_BAD_CHARS.inject(docidentifier.downcase) do |result, bad_char|
31
- # result.gsub(bad_char, '-')
32
- # end
33
- # end
34
-
35
- # DOC_NUMBER_REGEX = /([\w\/]+)\s+(\d+):?(\d*)/
36
- # def doc_number
37
- # docidentifier&.match(DOC_NUMBER_REGEX) ? $2.to_i : 999999
38
- # end
39
-
40
- def self.from_xml(source)
41
- new(Relaton::Cli.parse_xml(source))
42
- end
43
-
44
- def to_xml(opts = {})
45
- options = { bibdata: true, date_format: :full }.merge opts.select { |k,v| k.is_a? Symbol }
46
- @bibitem.to_xml nil, **options
47
-
48
- # #datetype = stage&.casecmp("published") == 0 ? "published" : "circulated"
49
-
50
- # ret = ref ? "<bibitem id= '#{ref}' type='#{doctype}'>\n" : "<bibdata type='#{doctype}'>\n"
51
- # ret += "<fetched>#{Date.today.to_s}</fetched>\n"
52
- end
53
-
54
- def to_h
55
- @bibitem.to_hash
56
- end
57
-
58
- def to_yaml
59
- to_h.to_yaml
60
- end
61
- end
62
- end