diff --git a/lib/bolognese/metadata.rb b/lib/bolognese/metadata.rb index e5426d92..5e8a3d0e 100644 --- a/lib/bolognese/metadata.rb +++ b/lib/bolognese/metadata.rb @@ -217,10 +217,10 @@ def dates end def publisher - @publisher ||= - if meta.fetch("publisher", nil).is_a?(Hash) + @publisher ||= + if meta.fetch("publisher", nil).respond_to?(:to_hash) meta.fetch("publisher", nil) - elsif meta.fetch("publisher", nil).is_a?(String) + elsif meta.fetch("publisher", nil).respond_to?(:to_str) { "name" => meta.fetch("publisher", nil) }.compact end end diff --git a/lib/bolognese/readers/bibtex_reader.rb b/lib/bolognese/readers/bibtex_reader.rb index ce04ca50..0e75f8a0 100644 --- a/lib/bolognese/readers/bibtex_reader.rb +++ b/lib/bolognese/readers/bibtex_reader.rb @@ -86,7 +86,7 @@ def read_bibtex(string: nil, **options) "titles" => meta.try(:title).present? ? [{ "title" => meta.try(:title).to_s }] : [], "creators" => creators, "container" => container, - "publisher" => meta.try(:publisher).present? ? { "name" => meta.try(:publisher).to_s }.compact : nil, + "publisher" => meta.try(:publisher).present? ? { "name" => meta.publisher.to_s } : nil, "related_identifiers" => related_identifiers, "dates" => dates, "publication_year" => publication_year, diff --git a/lib/bolognese/readers/crosscite_reader.rb b/lib/bolognese/readers/crosscite_reader.rb index 5546c544..06e1f4d2 100644 --- a/lib/bolognese/readers/crosscite_reader.rb +++ b/lib/bolognese/readers/crosscite_reader.rb @@ -7,7 +7,10 @@ def read_crosscite(string: nil, **options) errors = jsonlint(string) return { "errors" => errors } if errors.present? - string.present? ? Maremma.from_json(string) : {} + crosscite = string.present? ? Maremma.from_json(string) : {} + crosscite["publisher"] = normalize_publisher(crosscite.fetch("publisher", nil)) if crosscite.fetch("publisher", nil).present? + + crosscite end end end diff --git a/lib/bolognese/readers/datacite_json_reader.rb b/lib/bolognese/readers/datacite_json_reader.rb index d2c9cf09..c1be32ec 100644 --- a/lib/bolognese/readers/datacite_json_reader.rb +++ b/lib/bolognese/readers/datacite_json_reader.rb @@ -7,7 +7,10 @@ def read_datacite_json(string: nil, **options) errors = jsonlint(string) return { "errors" => errors } if errors.present? - string.present? ? Maremma.from_json(string).transform_keys! { |key| key.underscore } : {} + datacite_json = string.present? ? Maremma.from_json(string).transform_keys! { |key| key.underscore } : {} + datacite_json["publisher"] = normalize_publisher(datacite_json.fetch("publisher", nil)) if datacite_json.fetch("publisher", nil).present? + + datacite_json end end end diff --git a/lib/bolognese/utils.rb b/lib/bolognese/utils.rb index 63584eea..c2358214 100644 --- a/lib/bolognese/utils.rb +++ b/lib/bolognese/utils.rb @@ -773,6 +773,14 @@ def normalize_licenses(licenses) nil end + def normalize_publisher(publisher) + if publisher.respond_to?(:to_hash) + publisher + elsif publisher.respond_to?(:to_str) + { "name" => publisher } + end + end + def to_datacite_json(element, options={}) a = Array.wrap(element).map do |e| e.inject({}) {|h, (k,v)| h[k.dasherize] = v; h }