relaton-cli 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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