bolognese 1.2.3 → 1.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 168dbdf9c5d9941dc078dd58d9696fa8c725a6eda1b33ec0a683b7ecfc0ac00d
4
- data.tar.gz: d156284fc1a2c67d5bc401e571909ab1c192bba5963b06e266c4a1d19ba4bc7b
3
+ metadata.gz: b7dfdd5a4ed9f32ebdda67aaa28c592b045e9545d3b9fdcd42c9f0172171b95c
4
+ data.tar.gz: f60e08a85484127ffc5181669ed1c5fc60fd02200fb09b9064f1acca1801d434
5
5
  SHA512:
6
- metadata.gz: 1514f703356abef2dfc1dfb1be6131d2d1d5f861c89352780918aa57ee4878b61779ffa2f41221575abf09e15198f67e5491a923cfaad00b13d3ef233ddc8059
7
- data.tar.gz: 9c39ab0ded867281c7fbfc3edca254e5cef2f023339d56e8ed00fd7755a7361cbf6569a6cf1c42d577e0e534f755c83587ee68e33900b6372eb8599f488b5bc4
6
+ metadata.gz: 29612aa1baaae799e0d6a25d6a35efb9ad2ce271511e032ae48f29a392aa41597f668854fda596f61aa27bced9fbe6382949a70719e0b9dc7e145e7aa33bb8ce
7
+ data.tar.gz: a931e3c075cfe2f1e67c5b4fe2a8784e579c74b12fb53771d4326ff26da2e59cf45d7872cf929d5b184ee46335e6ca23a62821ab281541b36f5913ebeb445e4b
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bolognese (1.2.3)
4
+ bolognese (1.2.4)
5
5
  activesupport (>= 4.2.5, < 6)
6
6
  benchmark_methods (~> 0.7)
7
7
  bibtex-ruby (~> 4.1)
@@ -17,10 +17,17 @@ module Bolognese
17
17
 
18
18
  def initialize(input: nil, from: nil, **options)
19
19
  id = normalize_id(input, options)
20
+ ra = nil
20
21
 
21
22
  if id.present?
22
23
  @from = from || find_from_format(id: id)
23
24
 
25
+ # mEDRA DOIs are found in the Crossref index
26
+ if @from == "medra"
27
+ @from = "crossref"
28
+ ra = "mEDRA"
29
+ end
30
+
24
31
  # generate name for method to call dynamically
25
32
  hsh = @from.present? ? send("get_" + @from, id: id, sandbox: options[:sandbox]) : {}
26
33
  string = hsh.fetch("string", nil)
@@ -104,7 +111,7 @@ module Bolognese
104
111
  @regenerate = options[:regenerate] || read_options.present?
105
112
 
106
113
  # generate name for method to call dynamically
107
- @meta = @from.present? ? send("read_" + @from, { string: string, sandbox: options[:sandbox], doi: options[:doi], id: id }.merge(read_options)) : {}
114
+ @meta = @from.present? ? send("read_" + @from, { string: string, sandbox: options[:sandbox], doi: options[:doi], id: id, ra: ra }.merge(read_options)) : {}
108
115
  end
109
116
 
110
117
  def id
@@ -27,7 +27,7 @@ module Bolognese
27
27
  }
28
28
 
29
29
  def read_bibtex(string: nil, **options)
30
- read_options = ActiveSupport::HashWithIndifferentAccess.new(options.except(:doi, :id, :url, :sandbox, :validate))
30
+ read_options = ActiveSupport::HashWithIndifferentAccess.new(options.except(:doi, :id, :url, :sandbox, :validate, :ra))
31
31
 
32
32
  meta = string.present? ? BibTeX.parse(string).first : OpenStruct.new
33
33
 
@@ -31,7 +31,7 @@ module Bolognese
31
31
  return { "errors" => errors } if errors.present?
32
32
  end
33
33
 
34
- read_options = ActiveSupport::HashWithIndifferentAccess.new(options.except(:doi, :id, :url, :sandbox, :validate))
34
+ read_options = ActiveSupport::HashWithIndifferentAccess.new(options.except(:doi, :id, :url, :sandbox, :validate, :ra))
35
35
 
36
36
  meta = string.present? ? Maremma.from_json(string) : {}
37
37
 
@@ -18,7 +18,7 @@ module Bolognese
18
18
  return { "errors" => errors } if errors.present?
19
19
  end
20
20
 
21
- read_options = ActiveSupport::HashWithIndifferentAccess.new(options.except(:doi, :id, :url, :sandbox, :validate))
21
+ read_options = ActiveSupport::HashWithIndifferentAccess.new(options.except(:doi, :id, :url, :sandbox, :validate, :ra))
22
22
 
23
23
  meta = string.present? ? Maremma.from_json(string) : {}
24
24
 
@@ -17,7 +17,7 @@ module Bolognese
17
17
  end
18
18
 
19
19
  def read_crossref(string: nil, **options)
20
- read_options = ActiveSupport::HashWithIndifferentAccess.new(options.except(:doi, :id, :url, :sandbox, :validate))
20
+ read_options = ActiveSupport::HashWithIndifferentAccess.new(options.except(:doi, :id, :url, :sandbox, :validate, :ra))
21
21
 
22
22
  if string.present?
23
23
  m = Maremma.from_xml(string).dig("crossref_result", "query_result", "body", "query", "doi_record") || {}
@@ -125,7 +125,7 @@ module Bolognese
125
125
  "funding_references" => crossref_funding_reference(program_metadata),
126
126
  "publisher" => publisher,
127
127
  "container" => container,
128
- "agency" => "Crossref",
128
+ "agency" => agency = options[:ra] || "Crossref",
129
129
  "related_identifiers" => related_identifiers,
130
130
  "dates" => dates,
131
131
  "publication_year" => publication_year,
@@ -47,7 +47,7 @@ module Bolognese
47
47
  end
48
48
 
49
49
  def read_datacite(string: nil, **options)
50
- read_options = ActiveSupport::HashWithIndifferentAccess.new(options.except(:doi, :id, :url, :sandbox, :validate))
50
+ read_options = ActiveSupport::HashWithIndifferentAccess.new(options.except(:doi, :id, :url, :sandbox, :validate, :ra))
51
51
 
52
52
  doc = Nokogiri::XML(string, nil, 'UTF-8', &:noblanks)
53
53
  if read_options.present?
@@ -34,7 +34,7 @@ module Bolognese
34
34
  }
35
35
 
36
36
  def read_ris(string: nil, **options)
37
- read_options = ActiveSupport::HashWithIndifferentAccess.new(options.except(:doi, :id, :url, :sandbox, :validate))
37
+ read_options = ActiveSupport::HashWithIndifferentAccess.new(options.except(:doi, :id, :url, :sandbox, :validate, :ra))
38
38
 
39
39
  meta = ris_meta(string: string)
40
40
 
@@ -44,7 +44,7 @@ module Bolognese
44
44
  return { "errors" => errors } if errors.present?
45
45
  end
46
46
 
47
- read_options = ActiveSupport::HashWithIndifferentAccess.new(options.except(:doi, :id, :url, :sandbox, :validate))
47
+ read_options = ActiveSupport::HashWithIndifferentAccess.new(options.except(:doi, :id, :url, :sandbox, :validate, :ra))
48
48
 
49
49
  meta = string.present? ? Maremma.from_json(string) : {}
50
50
 
@@ -339,7 +339,7 @@ module Bolognese
339
339
 
340
340
  if /\A(?:(http|https):\/(\/)?(dx\.)?(doi.org|handle.test.datacite.org)\/)?(doi:)?(10\.\d{4,5}\/.+)\z/.match(id)
341
341
  ra = get_doi_ra(id)
342
- %w(DataCite Crossref).include?(ra) ? ra.downcase : nil
342
+ %w(DataCite Crossref mEDRA).include?(ra) ? ra.downcase : nil
343
343
  elsif /\A(?:(http|https):\/(\/)?orcid\.org\/)?(\d{4}-\d{4}-\d{4}-\d{3}[0-9X]+)\z/.match(id)
344
344
  "orcid"
345
345
  elsif /\A(http|https):\/(\/)?github\.com\/(.+)\z/.match(id)
@@ -1,3 +1,3 @@
1
1
  module Bolognese
2
- VERSION = "1.2.3"
2
+ VERSION = "1.2.4"
3
3
  end
@@ -0,0 +1,125 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://doi.org/ra/10.3280
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Mozilla/5.0 (compatible; Maremma/4.2.3; mailto:info@datacite.org)
12
+ Accept:
13
+ - text/html,application/json,application/xml;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5
14
+ response:
15
+ status:
16
+ code: 200
17
+ message: ''
18
+ headers:
19
+ Date:
20
+ - Fri, 05 Jul 2019 05:04:20 GMT
21
+ Content-Type:
22
+ - application/json;charset=UTF-8
23
+ Content-Length:
24
+ - '51'
25
+ Connection:
26
+ - keep-alive
27
+ Set-Cookie:
28
+ - __cfduid=dbad314cd019b12966bb82d714cc7ff471562303060; expires=Sat, 04-Jul-20
29
+ 05:04:20 GMT; path=/; domain=.doi.org; HttpOnly
30
+ Expect-Ct:
31
+ - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
32
+ Server:
33
+ - cloudflare
34
+ Cf-Ray:
35
+ - 4f16cc2e48b4a867-CDG
36
+ body:
37
+ encoding: ASCII-8BIT
38
+ string: |-
39
+ [
40
+ {
41
+ "DOI": "10.3280",
42
+ "RA": "mEDRA"
43
+ }
44
+ ]
45
+ http_version:
46
+ recorded_at: Fri, 05 Jul 2019 05:04:20 GMT
47
+ - request:
48
+ method: get
49
+ uri: https://api.crossref.org/works/10.3280/ecag2018-001005/transform/application/vnd.crossref.unixsd+xml
50
+ body:
51
+ encoding: US-ASCII
52
+ string: ''
53
+ headers:
54
+ User-Agent:
55
+ - Mozilla/5.0 (compatible; Maremma/4.2.3; mailto:info@datacite.org)
56
+ Accept:
57
+ - text/xml
58
+ response:
59
+ status:
60
+ code: 200
61
+ message: OK
62
+ headers:
63
+ Link:
64
+ - <http://dx.doi.org/10.3280/ecag2018-001005>; rel="canonical"
65
+ Access-Control-Allow-Origin:
66
+ - "*"
67
+ Access-Control-Allow-Headers:
68
+ - X-Requested-With
69
+ Content-Length:
70
+ - '3506'
71
+ Server:
72
+ - http-kit
73
+ Date:
74
+ - Fri, 05 Jul 2019 05:04:20 GMT
75
+ X-Rate-Limit-Limit:
76
+ - '50'
77
+ X-Rate-Limit-Interval:
78
+ - 1s
79
+ Connection:
80
+ - close
81
+ body:
82
+ encoding: ASCII-8BIT
83
+ string: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<crossref_result xmlns=\"http://www.crossref.org/qrschema/3.0\"
84
+ version=\"3.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.crossref.org/qrschema/3.0
85
+ http://www.crossref.org/schemas/crossref_query_output3.0.xsd\">\r\n <query_result>\r\n
86
+ \ <head>\r\n <doi_batch_id>none</doi_batch_id>\r\n </head>\r\n <body>\r\n
87
+ \ <query status=\"resolved\">\r\n <doi type=\"journal_article\">10.3280/ECAG2018-001005</doi>\r\n
88
+ \ <crm-item name=\"publisher-name\" type=\"string\">Franco Angeli</crm-item>\r\n
89
+ \ <crm-item name=\"prefix-name\" type=\"string\">Franco Angeli</crm-item>\r\n
90
+ \ <crm-item name=\"member-id\" type=\"number\">4169</crm-item>\r\n <crm-item
91
+ name=\"citation-id\" type=\"number\">98889375</crm-item>\r\n <crm-item
92
+ name=\"journal-id\" type=\"number\">215305</crm-item>\r\n <crm-item
93
+ name=\"deposit-timestamp\" type=\"number\">20180712142055000</crm-item>\r\n
94
+ \ <crm-item name=\"owner-prefix\" type=\"string\">10.3280</crm-item>\r\n
95
+ \ <crm-item name=\"last-update\" type=\"date\">2018-10-18T14:30:29Z</crm-item>\r\n
96
+ \ <crm-item name=\"created\" type=\"date\">2018-06-07T09:40:49Z</crm-item>\r\n
97
+ \ <crm-item name=\"citedby-count\" type=\"number\">1</crm-item>\r\n
98
+ \ <doi_record>\r\n <crossref xmlns=\"http://www.crossref.org/xschema/1.1\"
99
+ xsi:schemaLocation=\"http://www.crossref.org/xschema/1.1 http://doi.crossref.org/schemas/unixref1.1.xsd\">\r\n
100
+ \ <journal>\r\n <journal_metadata>\r\n <full_title>ECONOMIA
101
+ AGRO-ALIMENTARE</full_title>\r\n <issn media_type=\"print\">1126-1668</issn>\r\n
102
+ \ <issn media_type=\"electronic\">1972-4802</issn>\r\n </journal_metadata>\r\n
103
+ \ <journal_issue>\r\n <publication_date>\r\n <month>05</month>\r\n
104
+ \ <year>2018</year>\r\n </publication_date>\r\n
105
+ \ <issue>1</issue>\r\n </journal_issue>\r\n <journal_article
106
+ language=\"en\">\r\n <titles>\r\n <title>Substitutability
107
+ between organic and conventional poultry products and organic price premiums</title>\r\n
108
+ \ </titles>\r\n <contributors>\r\n <person_name
109
+ contributor_role=\"author\" sequence=\"first\">\r\n <given_name>Sohae
110
+ Eve</given_name>\r\n <surname>Oh</surname>\r\n </person_name>\r\n
111
+ \ <person_name contributor_role=\"author\" sequence=\"additional\">\r\n
112
+ \ <given_name>Tomislav</given_name>\r\n <surname>Vukina</surname>\r\n
113
+ \ </person_name>\r\n </contributors>\r\n <publication_date>\r\n
114
+ \ <month>05</month>\r\n <year>2018</year>\r\n
115
+ \ </publication_date>\r\n <pages>\r\n <first_page>75</first_page>\r\n
116
+ \ <last_page>92</last_page>\r\n </pages>\r\n
117
+ \ <publisher_item>\r\n <item_number item_number_type=\"article_number\">5</item_number>\r\n
118
+ \ </publisher_item>\r\n <doi_data>\r\n <doi>10.3280/ECAG2018-001005</doi>\r\n
119
+ \ <resource>http://www.francoangeli.it/riviste/Scheda_Riviste.asp?IDArticolo=61645</resource>\r\n
120
+ \ </doi_data>\r\n </journal_article>\r\n </journal>\r\n
121
+ \ </crossref>\r\n </doi_record>\r\n </query>\r\n </body>\r\n
122
+ \ </query_result>\r\n</crossref_result>"
123
+ http_version:
124
+ recorded_at: Fri, 05 Jul 2019 05:04:21 GMT
125
+ recorded_with: VCR 3.0.3
@@ -225,6 +225,22 @@ describe Bolognese::Metadata, vcr: true do
225
225
  expect(subject.agency).to eq("Crossref")
226
226
  end
227
227
 
228
+ it "mEDRA" do
229
+ input = "https://doi.org/10.3280/ecag2018-001005"
230
+ subject = Bolognese::Metadata.new(input: input)
231
+ expect(subject.valid?).to be true
232
+ expect(subject.identifiers).to eq([{"identifier"=>"https://doi.org/10.3280/ecag2018-001005", "identifierType"=>"DOI"}, {"identifier"=>"5", "identifierType"=>"Publisher ID"}])
233
+ expect(subject.url).to eq("http://www.francoangeli.it/riviste/Scheda_Riviste.asp?IDArticolo=61645")
234
+ expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"Text", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
235
+ expect(subject.creators.length).to eq(2)
236
+ expect(subject.creators.first).to eq("familyName"=>"Oh", "givenName"=>"Sohae Eve", "name"=>"Oh, Sohae Eve", "nameType"=>"Personal")
237
+ expect(subject.titles).to eq([{"title"=>"Substitutability between organic and conventional poultry products and organic price premiums"}])
238
+ expect(subject.dates).to eq([{"date"=>"2018-05", "dateType"=>"Issued"}, {"date"=>"2018-10-18T14:30:29Z", "dateType"=>"Updated"}])
239
+ expect(subject.publication_year).to eq("2018")
240
+ expect(subject.publisher).to eq("Franco Angeli")
241
+ expect(subject.agency).to eq("mEDRA")
242
+ end
243
+
228
244
  it "multiple titles" do
229
245
  input = "https://doi.org/10.4000/dms.865"
230
246
  subject = Bolognese::Metadata.new(input: input)
@@ -181,7 +181,7 @@ describe Bolognese::Metadata, vcr: true do
181
181
  input = fixture_path + 'schema_org_tdl_iodp_invalid_authors.json'
182
182
  subject = Bolognese::Metadata.new(input: input)
183
183
  expect(subject.valid?).to be false
184
- end
184
+ end
185
185
 
186
186
  it "geolocation" do
187
187
  input = fixture_path + 'schema_org_geolocation.json'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bolognese
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 1.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Fenner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-04 00:00:00.000000000 Z
11
+ date: 2019-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: maremma
@@ -825,6 +825,7 @@ files:
825
825
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/date_in_future.yml
826
826
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article.yml
827
827
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article_with.yml
828
+ - spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/mEDRA.yml
828
829
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/missing_creator.yml
829
830
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/multiple_t.yml
830
831
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/multiple_titles.yml