serrano 0.3.6 → 0.5.0

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
- SHA1:
3
- metadata.gz: 36aad2a16040c5453b6f8254a7b6d01fad661c43
4
- data.tar.gz: abdf146c4875f0ef7abbdf9b14dafb71c47bc7a9
2
+ SHA256:
3
+ metadata.gz: e329983c57815e197e683e64cf0a55300ede36bec3ada9a58612d4abd209f02a
4
+ data.tar.gz: 25dbce2ee336448219f50ea8e669da1bab787ccdd535f86d59c3aece3798fc71
5
5
  SHA512:
6
- metadata.gz: '008664dcd932464f6360bf16c6a6cb097e326809c57d4e76e38ceee321aef9fe21d42ce1972e9a1e4db21cb53f2326f2aa9b3e8323be1a984ea13277b9f33756'
7
- data.tar.gz: b5aeb13570f7907266f79879b4b141c1eea6576313d8758eb1c6cdf3f9b8467ea96cb3fa036ee73dd8b2a332dff4c04a2481e81795111e98010d2dfd388e55e8
6
+ metadata.gz: ffaf70de61b00919b7418125f73e23b34195445de5fcb23d9b32793e30d5d4971ba266e1d8421c76cef6f1e824b6ee87e6235f23a7fb3945f2c5447eea351f8d
7
+ data.tar.gz: ab93cece3c5e5661bedcf06812ff28276e192fc54a648b0e97902799cabc333ea5d14d51f67a60ef6b83555aabade56a19b5b664152ca1eef0bc2d4667ba217f
@@ -3,6 +3,6 @@ cache: bundler
3
3
  rvm:
4
4
  - 2.1.8
5
5
  - 2.2.4
6
- - 2.4.1
6
+ - 2.5.0
7
7
  script:
8
8
  bundle exec rake test TESTOPTS="-v"
@@ -1,3 +1,14 @@
1
+ ## 0.5.0 (2018-04-08)
2
+
3
+ * Updated dependency versions
4
+ * Change url used in content negotation from `http://dx.doi.org/` to `https://doi.org/` (#49)
5
+ * Fix `cursor_max` parameter type check to avoid Fixnum warning (#50)
6
+ * Add support for `mailto` email polite pool, and docs updated with info (#46) (#47)
7
+ * Add select parameter throughout methods (#43)
8
+ * Added additional filter options (#45) (#40)
9
+ * Added to docs info about additional `sort` parameter options (#41)
10
+ * Added to docs info about additional field query options (#42)
11
+
1
12
  ## 0.3.6 (2017-04-04)
2
13
 
3
14
  * Updated dependency versions
File without changes
@@ -1,47 +1,47 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- serrano (0.3.1)
5
- faraday (~> 0.12.0.1)
6
- faraday_middleware (~> 0.11.0.1)
7
- multi_json (~> 1.12, >= 1.12.1)
8
- thor (~> 0.19.4)
4
+ serrano (0.5.0)
5
+ faraday (~> 0.14.0)
6
+ faraday_middleware (~> 0.12.2)
7
+ multi_json (~> 1.13, >= 1.13.1)
8
+ thor (~> 0.20.0)
9
9
 
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- addressable (2.5.0)
14
- public_suffix (~> 2.0, >= 2.0.2)
13
+ addressable (2.5.2)
14
+ public_suffix (>= 2.0.2, < 4.0)
15
15
  codecov (0.1.10)
16
16
  json
17
17
  simplecov
18
18
  url
19
19
  crack (0.4.3)
20
20
  safe_yaml (~> 1.0.0)
21
- docile (1.1.5)
22
- faraday (0.12.0.1)
21
+ docile (1.3.0)
22
+ faraday (0.14.0)
23
23
  multipart-post (>= 1.2, < 3)
24
- faraday_middleware (0.11.0.1)
24
+ faraday_middleware (0.12.2)
25
25
  faraday (>= 0.7.4, < 1.0)
26
- hashdiff (0.3.2)
27
- json (2.0.3)
28
- multi_json (1.12.1)
26
+ hashdiff (0.3.7)
27
+ json (2.1.0)
28
+ multi_json (1.13.1)
29
29
  multipart-post (2.0.0)
30
- power_assert (0.3.1)
31
- public_suffix (2.0.5)
32
- rake (12.0.0)
30
+ power_assert (1.1.1)
31
+ public_suffix (3.0.2)
32
+ rake (12.3.1)
33
33
  safe_yaml (1.0.4)
34
- simplecov (0.14.1)
35
- docile (~> 1.1.0)
34
+ simplecov (0.16.1)
35
+ docile (~> 1.1)
36
36
  json (>= 1.8, < 3)
37
37
  simplecov-html (~> 0.10.0)
38
- simplecov-html (0.10.0)
39
- test-unit (3.2.1)
38
+ simplecov-html (0.10.2)
39
+ test-unit (3.2.7)
40
40
  power_assert
41
- thor (0.19.4)
41
+ thor (0.20.0)
42
42
  url (0.3.2)
43
- vcr (3.0.3)
44
- webmock (2.3.2)
43
+ vcr (4.0.0)
44
+ webmock (3.3.0)
45
45
  addressable (>= 2.3.6)
46
46
  crack (>= 0.3.2)
47
47
  hashdiff
@@ -50,15 +50,15 @@ PLATFORMS
50
50
  ruby
51
51
 
52
52
  DEPENDENCIES
53
- bundler (~> 1.14, >= 1.14.6)
53
+ bundler (~> 1.16, >= 1.16.1)
54
54
  codecov (~> 0.1.10)
55
- json (~> 2.0, >= 2.0.3)
56
- rake (~> 12.0, >= 12.0.0)
55
+ json (~> 2.1)
56
+ rake (~> 12.3, >= 12.3.1)
57
57
  serrano!
58
- simplecov (~> 0.14.1)
59
- test-unit (~> 3.2, >= 3.2.1)
60
- vcr (~> 3.0, >= 3.0.3)
61
- webmock (~> 2.3, >= 2.3.2)
58
+ simplecov (~> 0.16.1)
59
+ test-unit (~> 3.2, >= 3.2.7)
60
+ vcr (~> 4.0)
61
+ webmock (~> 3.3)
62
62
 
63
63
  BUNDLED WITH
64
- 1.14.6
64
+ 1.16.1
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (C) 2016 Scott Chamberlain
1
+ Copyright (C) 2018 Scott Chamberlain
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
4
 
data/README.md CHANGED
@@ -54,6 +54,11 @@ limit is 50 requests per second. Look for the headers `X-Rate-Limit-Limit`
54
54
  and `X-Rate-Limit-Interval` in requests to see what the current rate
55
55
  limits are.
56
56
 
57
+ The Polite Pool:
58
+
59
+ To get in the polite pool it's a good idea now to include a `mailto` email
60
+ address. See docs for more information. TLDR: set your email in an env var `CROSSREF_EMAIL`.
61
+
57
62
 
58
63
  ## Install
59
64
 
@@ -79,10 +84,20 @@ This will also be the way to set up other user options, as needed down the road.
79
84
 
80
85
  ```ruby
81
86
  Serrano.configuration do |config|
82
- config.base_url = "http://api.crossref.org"
87
+ config.base_url = "https://api.crossref.org"
83
88
  end
84
89
  ```
85
90
 
91
+ We recommend you set your `mailto` email here so you can get in the "polite pool" which gives you faster rate limits:
92
+
93
+ ```ruby
94
+ Serrano.configuration do |config|
95
+ config.mailto = "jane@doe.org"
96
+ end
97
+ ```
98
+
99
+ Or use an env var with name `CROSSREF_EMAIL`
100
+
86
101
  ## Examples
87
102
 
88
103
  ### Use in a Ruby repl
data/Rakefile CHANGED
@@ -5,6 +5,7 @@ Rake::TestTask.new do |t|
5
5
  t.libs << "test"
6
6
  t.test_files = FileList['test/test-*.rb']
7
7
  t.verbose = true
8
+ t.warning = false
8
9
  end
9
10
 
10
11
  desc "Run tests"
@@ -18,13 +18,21 @@ require 'rexml/xpath'
18
18
  # Max: 100.
19
19
  # @param sort [String] Field to sort on, one of score, relevance,
20
20
  # updated (date of most recent change to metadata - currently the same as deposited),
21
- # deposited (time of most recent deposit), indexed (time of most recent index), or
22
- # published (publication date). Note: If the API call includes a query, then the sort
21
+ # deposited (time of most recent deposit), indexed (time of most recent index),
22
+ # published (publication date), published-print (print publication date),
23
+ # published-online (online publication date), issued (issued date (earliest known publication date)),
24
+ # is-referenced-by-count (number of times this DOI is referenced by other Crossref DOIs), or
25
+ # references-count (number of references included in the references section of the document
26
+ # identified by this DOI). Note: If the API call includes a query, then the sort
23
27
  # order will be by the relevance score. If no query is included, then the sort order
24
28
  # will be by DOI update date.
25
29
  # @param order [String] Sort order, one of 'asc' or 'desc'
26
30
  # @param facet [Boolean/String] Include facet results OR a query (e.g., `license:*`) to facet by
27
31
  # license. Default: false
32
+ # @param select [String/Array(String)] Crossref metadata records can be
33
+ # quite large. Sometimes you just want a few elements from the schema. You can "select"
34
+ # a subset of elements to return. This can make your API calls much more efficient. Not
35
+ # clear yet which fields are allowed here.
28
36
  # @param verbose [Boolean] Print request headers to stdout. Default: false
29
37
 
30
38
  # @!macro cursor_params
@@ -52,10 +60,19 @@ require 'rexml/xpath'
52
60
  # - oauth [Hash] A hash with OAuth details
53
61
 
54
62
  # @!macro field_queries
55
- # @param [Hash<Object>] args Field queries, as named parameters.
56
- # See https://github.com/CrossRef/rest-api-doc/blob/master/rest_api.md#field-queries
63
+ # @param [Hash<Object>] args Field queries, as named parameters. See
64
+ # https://github.com/CrossRef/rest-api-doc/blob/master/rest_api.md#field-queries
57
65
  # Field query parameters mut be named, and must start with `query_`. Any dashes or
58
- # periods should be replaced with underscores.
66
+ # periods should be replaced with underscores. The options include:
67
+ # - query_title: Query title and subtitle
68
+ # - query_container_title: Query container-title aka. publication name
69
+ # - query_author: Query author given and family names
70
+ # - query_editor: Query editor given and family names
71
+ # - query_chair: Query chair given and family names
72
+ # - query_translator: Query translator given and family names
73
+ # - query_contributor: Query author, editor, chair and translator given and family names
74
+ # - query_bibliographic: Query bibliographic information, useful for citation look up. Includes titles, authors, ISSNs and publication years
75
+ # - query_affiliation: Query contributor affiliations
59
76
 
60
77
  ##
61
78
  # Serrano - The top level module for using methods
@@ -93,6 +110,28 @@ require 'rexml/xpath'
93
110
  # article titles, authors, etc. For some discussion on this, see
94
111
  # https://github.com/CrossRef/rest-api-doc/issues/101
95
112
  #
113
+ #
114
+ # The Polite Pool
115
+ # As of September 18th 2017 any API queries that use HTTPS and have
116
+ # appropriate contact information will be directed to a special pool
117
+ # of API machines that are reserved for polite users. If you connect
118
+ # to the Crossreef API using HTTPS and provide contact
119
+ # information, then they will send you to a separate pool of machines,
120
+ # with better control the performance of these machines because they can
121
+ # block abusive users.
122
+ #
123
+ # We have been using `https` in `serrano` for a while now, so that's good
124
+ # to go. To get into the Polite Pool, also set your `mailto` email address
125
+ # with `Serrano.configuration` (example below), or set as an environment
126
+ # variable with the name `CROSSREF_EMAIL` and your mailto will be set
127
+ # for each request automatically.
128
+ #
129
+ # require 'serrano'
130
+ # Serrano.configuration do |config|
131
+ # config.mailto = "foo@bar.com"
132
+ # end
133
+ #
134
+ #
96
135
  # Rate limiting
97
136
  # Crossref introduced rate limiting recently. The rate limits apparently vary,
98
137
  # so we can't give a predictable rate limit. As of this writing, the rate
@@ -105,6 +144,7 @@ module Serrano
105
144
 
106
145
  define_setting :access_token
107
146
  define_setting :access_secret
147
+ define_setting :mailto, ENV["CROSSREF_EMAIL"]
108
148
  define_setting :base_url, "https://api.crossref.org/"
109
149
 
110
150
  ##
@@ -153,9 +193,13 @@ module Serrano
153
193
  #
154
194
  # # sample
155
195
  # Serrano.works(sample: 2)
196
+ #
197
+ # # select - pass an array or a comma separated string
198
+ # Serrano.works(query: "ecology", select: "DOI,title", limit: 30)
199
+ # Serrano.works(query: "ecology", select: ["DOI","title"], limit: 30)
156
200
  #
157
201
  # # cursor for deep paging
158
- # Serrano.works(query: "widget", cursor: "*", limit: 100)
202
+ # Serrano.works(query: "widget", cursor: "*", limit: 100, cursor_max: 1000)
159
203
  # # another query, more results this time
160
204
  # res = Serrano.works(query: "science", cursor: "*", limit: 250, cursor_max: 1000);
161
205
  # res.collect { |x| x['message']['items'].length }.reduce(0, :+)
@@ -173,12 +217,16 @@ module Serrano
173
217
  # ## query.container-title
174
218
  # res = Serrano.works(query: "ecology", query_container_title: 'Ecology')
175
219
  # res['message']['items'].collect { |x| x['container-title'] }
220
+ #
221
+ # # select certain fields
222
+ # Serrano.works(select: ['DOI', 'title'], limit: 3)
176
223
  def self.works(ids: nil, query: nil, filter: nil, offset: nil,
177
224
  limit: nil, sample: nil, sort: nil, order: nil, facet: nil,
178
- options: nil, verbose: false, cursor: nil, cursor_max: 5000, **args)
225
+ select: nil, options: nil, verbose: false, cursor: nil,
226
+ cursor_max: 5000, **args)
179
227
 
180
228
  RequestCursor.new('works', ids, query, filter, offset,
181
- limit, sample, sort, order, facet, nil, nil, options,
229
+ limit, sample, sort, order, facet, select, nil, nil, options,
182
230
  verbose, cursor, cursor_max, args).perform
183
231
  end
184
232
 
@@ -225,14 +273,17 @@ module Serrano
225
273
  # ## query.title
226
274
  # res = Serrano.members(ids: 221, works: true, query_container_title: 'Advances')
227
275
  # res[0]['message']['items'].collect { |x| x['container-title'] }
276
+ #
277
+ # # select certain fields
278
+ # Serrano.members(ids: 340, works: true, select: ['DOI', 'title'], limit: 3)
228
279
  def self.members(ids: nil, query: nil, filter: nil, offset: nil,
229
280
  limit: nil, sample: nil, sort: nil, order: nil, facet: nil,
230
- works: false, options: nil, verbose: false,
281
+ select: nil, works: false, options: nil, verbose: false,
231
282
  cursor: nil, cursor_max: 5000, **args)
232
283
 
233
284
  RequestCursor.new('members', ids, query, filter, offset,
234
- limit, sample, sort, order, facet, works, nil, options,
235
- verbose, cursor, cursor_max, args).perform
285
+ limit, sample, sort, order, facet, select, works, nil,
286
+ options, verbose, cursor, cursor_max, args).perform
236
287
  end
237
288
 
238
289
  ##
@@ -269,14 +320,17 @@ module Serrano
269
320
  # ## query.title
270
321
  # res = Serrano.prefixes(ids: "10.1016", works: true, query_title: 'cell biology')
271
322
  # res[0]['message']['items'].collect { |x| x['title'] }
323
+ #
324
+ # # select certain fields
325
+ # Serrano.prefixes(ids: "10.1016", works: true, select: ['DOI', 'title'], limit: 3)
272
326
  def self.prefixes(ids:, filter: nil, offset: nil,
273
327
  limit: nil, sample: nil, sort: nil, order: nil, facet: nil,
274
- works: false, options: nil, verbose: false,
328
+ select: nil, works: false, options: nil, verbose: false,
275
329
  cursor: nil, cursor_max: 5000, **args)
276
330
 
277
331
  RequestCursor.new('prefixes', ids, nil, filter, offset,
278
- limit, sample, sort, order, facet, works, nil, options,
279
- verbose, cursor, cursor_max, args).perform
332
+ limit, sample, sort, order, facet, select, works, nil,
333
+ options, verbose, cursor, cursor_max, args).perform
280
334
  end
281
335
 
282
336
  ##
@@ -318,13 +372,16 @@ module Serrano
318
372
  # ## query.title
319
373
  # res = Serrano.funders(ids: "10.13039/100000001", works: true, query_author: 'Simon')
320
374
  # res[0]['message']['items'].collect { |x| x['author'][0]['family'] }
375
+ #
376
+ # # select certain fields
377
+ # Serrano.funders(ids: "10.13039/100000001", works: true, select: ['DOI', 'title'], limit: 3)
321
378
  def self.funders(ids: nil, query: nil, filter: nil, offset: nil,
322
379
  limit: nil, sample: nil, sort: nil, order: nil, facet: nil,
323
- works: false, options: nil, verbose: false,
380
+ select: nil, works: false, options: nil, verbose: false,
324
381
  cursor: nil, cursor_max: 5000, **args)
325
382
 
326
383
  RequestCursor.new('funders', ids, query, filter, offset,
327
- limit, sample, sort, order, facet, works, nil, options,
384
+ limit, sample, sort, order, facet, select, works, nil, options,
328
385
  verbose, cursor, cursor_max, args).perform
329
386
  end
330
387
 
@@ -367,13 +424,16 @@ module Serrano
367
424
  # ## query.title
368
425
  # res = Serrano.journals(ids: "2167-8359", works: true, query_container_title: 'Advances')
369
426
  # res[0]['message']['items'].collect { |x| x['container-title'] }
427
+ #
428
+ # # select certain fields
429
+ # Serrano.journals(ids: "2167-8359", works: true, select: ['DOI', 'title'], limit: 3)
370
430
  def self.journals(ids: nil, query: nil, filter: nil, offset: nil,
371
431
  limit: nil, sample: nil, sort: nil, order: nil, facet: nil,
372
- works: false, options: nil, verbose: false,
432
+ select: nil, works: false, options: nil, verbose: false,
373
433
  cursor: nil, cursor_max: 5000, **args)
374
434
 
375
435
  RequestCursor.new('journals', ids, query, filter, offset,
376
- limit, sample, sort, order, facet, works, nil, options,
436
+ limit, sample, sort, order, facet, select, works, nil, options,
377
437
  verbose, cursor, cursor_max, args).perform
378
438
  end
379
439
 
@@ -385,6 +445,10 @@ module Serrano
385
445
  # @!macro field_queries
386
446
  # @param ids [Array] DOIs (digital object identifier) or other identifiers
387
447
  # @param works [Boolean] If true, works returned as well. Default: false
448
+ # @param select [String/Array(String)] Crossref metadata records can be
449
+ # quite large. Sometimes you just want a few elements from the schema. You can "select"
450
+ # a subset of elements to return. This can make your API calls much more efficient. Not
451
+ # clear yet which fields are allowed here.
388
452
  # @return [Array] An array of hashes
389
453
  #
390
454
  # @example
@@ -404,11 +468,14 @@ module Serrano
404
468
  # ## query.title
405
469
  # res = Serrano.types(ids: "journal", works: true, query_container_title: 'Advances')
406
470
  # res[0]['message']['items'].collect { |x| x['container-title'] }
407
- def self.types(ids: nil, offset: nil, limit: nil, works: false,
471
+ #
472
+ # # select certain fields
473
+ # Serrano.types(ids: "journal", works: true, select: ['DOI', 'title'], limit: 3)
474
+ def self.types(ids: nil, offset: nil, limit: nil, select: nil, works: false,
408
475
  options: nil, verbose: false, cursor: nil, cursor_max: 5000, **args)
409
476
 
410
477
  RequestCursor.new('types', ids, nil, nil, offset,
411
- limit, nil, nil, nil, nil, works, nil, options,
478
+ limit, nil, nil, nil, nil, select, works, nil, options,
412
479
  verbose, cursor, cursor_max, args).perform
413
480
  end
414
481
 
@@ -430,7 +497,7 @@ module Serrano
430
497
  facet: nil, options: nil, verbose: false)
431
498
 
432
499
  Request.new('licenses', nil, query, nil, offset,
433
- limit, sample, sort, order, facet, nil, nil, options, verbose).perform
500
+ limit, sample, sort, order, facet, nil, nil, nil, options, verbose).perform
434
501
  end
435
502
 
436
503
  ##
@@ -470,7 +537,7 @@ module Serrano
470
537
  def self.random_dois(sample: 10, options: nil, verbose: false)
471
538
 
472
539
  tmp = Request.new('works', nil, nil, nil, nil,
473
- nil, sample, nil, nil, nil, false, nil, options, verbose).perform
540
+ nil, sample, nil, nil, nil, nil, false, nil, options, verbose).perform
474
541
  tmp['message']['items'].collect { |x| x['DOI'] }
475
542
  end
476
543
 
@@ -30,7 +30,7 @@ module Serrano
30
30
  raise "format not one of accepted types"
31
31
  end
32
32
 
33
- $conn = Faraday.new "http://dx.doi.org/" do |c|
33
+ $conn = Faraday.new "https://doi.org/" do |c|
34
34
  c.use FaradayMiddleware::FollowRedirects
35
35
  c.adapter :net_http
36
36
  end
@@ -4,6 +4,7 @@
4
4
  # Information on Crossref API filters
5
5
  #
6
6
  # @example
7
+ # require 'serrano'
7
8
  # # List filter names
8
9
  # Serrano::Filters.names
9
10
  # # List filter values and description
@@ -13,7 +14,7 @@
13
14
  module Serrano
14
15
  module Filters
15
16
  def self.names
16
- $filter_list
17
+ $filter_details.keys
17
18
  end
18
19
 
19
20
  def self.filters
@@ -22,22 +23,10 @@ module Serrano
22
23
  end
23
24
  end
24
25
 
25
- $filter_list = [
26
- 'has_funder','funder','prefix','member','from_index_date','until_index_date',
27
- 'from_deposit_date','until_deposit_date','from_update_date','until_update_date',
28
- 'from_first_deposit_date','until_first_deposit_date','from_pub_date','until_pub_date',
29
- 'has_license','license_url','license_version','license_delay','has_full_text',
30
- 'full_text_version','full_text_type','public_references','has_references','has_archive',
31
- 'archive','has_orcid','orcid','issn','type','directory','doi','updates','is_update',
32
- 'has_update_policy','container_title','publisher_name','category_name','type_name',
33
- 'from_created_date', 'until_created_date', 'affiliation', 'has_affiliation',
34
- 'assertion_group', 'assertion', 'article_number', 'alternative_id',
35
- 'has_clinical_trial_number', 'has_abstract'
36
- ]
37
-
38
26
  $filter_details = {
39
27
  "has_funder" => { "possible_values" => nil, "description" => "metadata which includes one or more funder entry" },
40
28
  "funder" => { "possible_values" => "{funder_id}", "description" => "metadata which include the {funder_id} in FundRef data" },
29
+ "location" => { "possible_values" => "{country_name}", "description" => "funder records where location = {country name}. Only works on /funders route" },
41
30
  "prefix" => { "possible_values" => "{owner_prefix}", "description" => "metadata belonging to a DOI owner prefix {owner_prefix} (e.g. '10.1016' )" },
42
31
  "member" => { "possible_values" => "{member_id}", "description" => "metadata belonging to a CrossRef member" },
43
32
  "from_index_date" => { "possible_values" => '{date}', "description" => "metadata indexed since (inclusive) {date}" },
@@ -50,6 +39,14 @@ $filter_details = {
50
39
  "until_created_date" => { "possible_values" => '{date}', "description" => "metadata first deposited before (inclusive) {date}" },
51
40
  "from_pub_date" => { "possible_values" => '{date}', "description" => "metadata where published date is since (inclusive) {date}" },
52
41
  "until_pub_date" => { "possible_values" => '{date}', "description" => "metadata where published date is before (inclusive) {date}" },
42
+ "from_online_pub_date" => { "possible_values" => '{date}', "description" => "metadata where online published date is since (inclusive) {date}" },
43
+ "until_online_pub_date" => { "possible_values" => '{date}', "description" => "metadata where online published date is before (inclusive) {date}" },
44
+ "from_print_pub_date" => { "possible_values" => '{date}', "description" => "metadata where print published date is since (inclusive) {date}" },
45
+ "until_print_pub_date" => { "possible_values" => '{date}', "description" => "metadata where print published date is before (inclusive) {date}" },
46
+ "from_posted_date" => { "possible_values" => '{date}', "description" => "metadata where posted date is since (inclusive) {date}" },
47
+ "until_posted_date" => { "possible_values" => '{date}', "description" => "metadata where posted date is before (inclusive) {date}" },
48
+ "from_accepted_date" => { "possible_values" => '{date}', "description" => "metadata where accepted date is since (inclusive) {date}" },
49
+ "until_accepted_date" => { "possible_values" => '{date}', "description" => "metadata where accepted date is before (inclusive) {date}" },
53
50
  "has_license" => { "possible_values" => nil, "description" => "metadata that includes any '<license_ref>' elements" },
54
51
  "license_url" => { "possible_values" => '{url}', "description" => "metadata where '<license_ref>' value equals {url}" },
55
52
  "license_version" => { "possible_values" => '{string}', "description" => "metadata where the '<license_ref>''s 'applies_to' attribute is '{string}'"},
@@ -57,31 +54,41 @@ $filter_details = {
57
54
  "has_full_text" => { "possible_values" => nil, "description" => "metadata that includes any full text '<resource>' elements_" },
58
55
  "full_text_version" => { "possible_values" => '{string}' , "description" => "metadata where '<resource>' element's 'content_version' attribute is '{string}'" },
59
56
  "full_text_type" => { "possible_values" => '{mime_type}' , "description" => "metadata where '<resource>' element's 'content_type' attribute is '{mime_type}' (e.g. 'application/pdf')" },
60
- "public_references" => { "possible_values" => nil, "description" => "metadata where publishers allow references to be distributed publically" },
57
+ "full_text_application" => { "possible_values" => '{string}' , "description" => "metadata where <resource> link has one of the following intended applications: text-mining, similarity-checking or unspecified" },
61
58
  "has_references" => { "possible_values" => nil , "description" => "metadata for works that have a list of references" },
62
59
  "has_archive" => { "possible_values" => nil , "description" => "metadata which include name of archive partner" },
63
60
  "archive" => { "possible_values" => '{string}', "description" => "metadata which where value of archive partner is '{string}'" },
64
61
  "has_orcid" => { "possible_values" => nil, "description" => "metadata which includes one or more ORCIDs" },
62
+ "has_authenticated_orcid" => { "possible_values" => nil , "description" => "metadata which includes one or more ORCIDs where the depositing publisher claims to have witness the ORCID owner authenticate with ORCID"},
65
63
  "orcid" => { "possible_values" => '{orcid}', "description" => "metadata where '<orcid>' element's value = '{orcid}'" },
66
64
  "issn" => { "possible_values" => '{issn}', "description" => "metadata where record has an ISSN = '{issn}' Format is 'xxxx_xxxx'." },
67
- "type" => { "possible_values" => '{type}', "description" => "metadata records whose type = '{type}' Type must be an ID value from the list of types returned by the '/types' resource" },
68
65
  "directory" => { "possible_values" => "{directory}", "description" => "metadata records whose article or serial are mentioned in the given '{directory}'. Currently the only supported value is 'doaj'" },
69
66
  "doi" => { "possible_values" => '{doi}', "description" => "metadata describing the DOI '{doi}'" },
70
67
  "updates" => { "possible_values" => '{doi}', "description" => "metadata for records that represent editorial updates to the DOI '{doi}'" },
71
68
  "is_update" => { "possible_values" => nil, "description" => "metadata for records that represent editorial updates" },
72
69
  "has_update_policy" => { "possible_values" => nil, "description" => "metadata for records that include a link to an editorial update policy" },
73
70
  "container_title" => { "possible_values" => nil, "description" => "metadata for records with a publication title exactly with an exact match" },
74
- "publisher_name" => { "possible_values" => nil, "description" => "metadata for records with an exact matching publisher name" },
75
71
  "category_name" => { "possible_values" => nil, "description" => "metadata for records with an exact matching category label" },
72
+ "type" => { "possible_values" => '{type}', "description" => "metadata records whose type = '{type}' Type must be an ID value from the list of types returned by the '/types' resource" },
76
73
  "type_name" => { "possible_values" => nil, "description" => "metadata for records with an exacty matching type label" },
77
74
  "award_number" => { "possible_values" => "{award_number}", "description" => "metadata for records with a matching award nunber_ Optionally combine with 'award_funder'" },
78
75
  "award_funder" => { "possible_values" => '{funder doi or id}', "description" => "metadata for records with an award with matching funder. Optionally combine with 'award_number'" },
76
+ "has_assertion" => { "possible_values" => nil, "description" => "metadata for records with any assertions" },
79
77
  "assertion_group" => { "possible_values" => nil, "description" => "metadata for records with an assertion in a particular group" },
80
78
  "assertion" => { "possible_values" => nil, "description" => "metadata for records with a particular named assertion" },
81
- "affiliation" => { "possible_values" => nil, "description" => "metadata for records with at least one contributor with the given affiliation" },
82
79
  "has_affiliation" => { "possible_values" => nil, "description" => "metadata for records that have any affiliation information" },
83
80
  "alternative_id" => { "possible_values" => nil, "description" => "metadata for records with the given alternative ID, which may be a publisher_specific ID, or any other identifier a publisher may have provided" },
84
81
  "article_number" => { "possible_values" => nil, "description" => "metadata for records with a given article number" },
82
+ "has_abstract" => { "possible_values" => nil, "description" => "metadata for records which include an abstract" },
85
83
  "has_clinical_trial_number" => { "possible_values" => nil, "description" => "metadata for records which include a clinical trial number" },
86
- "has_abstract" => { "possible_values" => nil, "description" => "metadata for records which include an abstract" }
84
+ "content_domain" => { "possible_values" => nil, "description" => "metadata where the publisher records a particular domain name as the location Crossmark content will appear" },
85
+ "has_content_domain" => { "possible_values" => nil, "description" => "metadata where the publisher records a domain name location for Crossmark content" },
86
+ "has_crossmark_restriction" => { "possible_values" => nil, "description" => "metadata where the publisher restricts Crossmark usage to content domains" },
87
+ "has_relation" => { "possible_values" => nil, "description" => "metadata for records that either assert or are the object of a relation" },
88
+ "relation_type" => { "possible_values" => nil, "description" => "One of the relation types from the Crossref relations schema (e.g. is-referenced-by, is-parent-of, is-preprint-of)" },
89
+ "relation_object" => { "possible_values" => nil, "description" => "Relations where the object identifier matches the identifier provided" },
90
+ "relation_object_type" => { "possible_values" => nil, "description" => "One of the identifier types from the Crossref relations schema (e.g. doi, issn)" },
91
+ "public_references" => { "possible_values" => nil, "description" => "metadata where publishers allow references to be distributed publically" },
92
+ "publisher_name" => { "possible_values" => nil, "description" => "metadata for records with an exact matching publisher name" },
93
+ "affiliation" => { "possible_values" => nil, "description" => "metadata for records with at least one contributor with the given affiliation" }
87
94
  }
@@ -22,14 +22,15 @@ module Serrano
22
22
  attr_accessor :sort
23
23
  attr_accessor :order
24
24
  attr_accessor :facet
25
+ attr_accessor :select
25
26
  attr_accessor :works
26
27
  attr_accessor :agency
27
28
  attr_accessor :options
28
29
  attr_accessor :verbose
29
30
 
30
31
  def initialize(endpt, id, query, filter, offset,
31
- limit, sample, sort, order, facet, works, agency,
32
- options, verbose)
32
+ limit, sample, sort, order, facet, select,
33
+ works, agency, options, verbose)
33
34
 
34
35
  self.endpt = endpt
35
36
  self.id = id
@@ -41,6 +42,7 @@ module Serrano
41
42
  self.sort = sort
42
43
  self.order = order
43
44
  self.facet = facet
45
+ self.select = select
44
46
  self.works = works
45
47
  self.agency = agency
46
48
  self.options = options
@@ -50,21 +52,24 @@ module Serrano
50
52
  def perform
51
53
  filt = filter_handler(self.filter)
52
54
 
55
+ self.select = self.select.join(",") if self.select && self.select.class == Array
56
+
53
57
  args = { query: self.query, filter: filt, offset: self.offset,
54
58
  rows: self.limit, sample: self.sample, sort: self.sort,
55
- order: self.order, facet: self.facet }
59
+ order: self.order, facet: self.facet,
60
+ select: self.select }
56
61
  opts = args.delete_if { |k, v| v.nil? }
57
62
 
58
63
  if verbose
59
64
  conn = Faraday.new(:url => Serrano.base_url, :request => options || []) do |f|
60
65
  f.response :logger
61
- f.adapter Faraday.default_adapter
62
66
  f.use FaradayMiddleware::RaiseHttpException
67
+ f.adapter Faraday.default_adapter
63
68
  end
64
69
  else
65
70
  conn = Faraday.new(:url => Serrano.base_url, :request => options || []) do |f|
66
- f.adapter Faraday.default_adapter
67
71
  f.use FaradayMiddleware::RaiseHttpException
72
+ f.adapter Faraday.default_adapter
68
73
  end
69
74
  end
70
75
 
@@ -26,6 +26,7 @@ module Serrano
26
26
  attr_accessor :sort
27
27
  attr_accessor :order
28
28
  attr_accessor :facet
29
+ attr_accessor :select
29
30
  attr_accessor :works
30
31
  attr_accessor :agency
31
32
  attr_accessor :options
@@ -35,8 +36,9 @@ module Serrano
35
36
  attr_accessor :args
36
37
 
37
38
  def initialize(endpt, id, query, filter, offset,
38
- limit, sample, sort, order, facet, works, agency,
39
- options, verbose, cursor, cursor_max, args)
39
+ limit, sample, sort, order, facet, select,
40
+ works, agency, options, verbose, cursor,
41
+ cursor_max, args)
40
42
 
41
43
  self.endpt = endpt
42
44
  self.id = id
@@ -48,6 +50,7 @@ module Serrano
48
50
  self.sort = sort
49
51
  self.order = order
50
52
  self.facet = facet
53
+ self.select = select
51
54
  self.works = works
52
55
  self.agency = agency
53
56
  self.options = options
@@ -60,29 +63,31 @@ module Serrano
60
63
  def perform
61
64
  filt = filter_handler(self.filter)
62
65
  fieldqueries = field_query_handler(self.args)
66
+ self.select = self.select.join(",") if self.select && self.select.class == Array
63
67
 
64
68
  if self.cursor_max.class != nil
65
- if self.cursor_max.class != Fixnum
69
+ if !self.cursor_max.kind_of?(Integer)
66
70
  raise "cursor_max must be of class int"
67
71
  end
68
72
  end
69
73
 
70
74
  arguments = { query: self.query, filter: filt, offset: self.offset,
71
75
  rows: self.limit, sample: self.sample, sort: self.sort,
72
- order: self.order, facet: self.facet, cursor: self.cursor }.tostrings
76
+ order: self.order, facet: self.facet, select: self.select,
77
+ cursor: self.cursor }.tostrings
73
78
  arguments = arguments.merge(fieldqueries)
74
79
  opts = arguments.delete_if { |k, v| v.nil? }
75
80
 
76
81
  if verbose
77
82
  $conn = Faraday.new(:url => Serrano.base_url, :request => options || []) do |f|
78
83
  f.response :logger
79
- f.adapter Faraday.default_adapter
80
84
  f.use FaradayMiddleware::RaiseHttpException
85
+ f.adapter Faraday.default_adapter
81
86
  end
82
87
  else
83
88
  $conn = Faraday.new(:url => Serrano.base_url, :request => options || []) do |f|
84
- f.adapter Faraday.default_adapter
85
89
  f.use FaradayMiddleware::RaiseHttpException
90
+ f.adapter Faraday.default_adapter
86
91
  end
87
92
  end
88
93
 
@@ -90,6 +95,7 @@ module Serrano
90
95
  $conn.headers["X-USER-AGENT"] = make_ua
91
96
 
92
97
  if self.id.nil?
98
+ $endpt2 = self.endpt
93
99
  js = self._req(self.endpt, opts)
94
100
  cu = js['message']['next-cursor']
95
101
  max_avail = js['message']['total-results']
@@ -1,7 +1,11 @@
1
1
  def make_ua
2
- requa = 'Faraday/v' + Faraday::VERSION
2
+ requa = 'Faraday/v' + Faraday::VERSION
3
3
  habua = 'Serrano/v' + Serrano::VERSION
4
- return requa + ' ' + habua
4
+ ua = requa + ' ' + habua
5
+ if Serrano.mailto
6
+ ua = ua + " (mailto:%s)" % Serrano.mailto
7
+ end
8
+ return ua
5
9
  end
6
10
 
7
11
  def field_query_handler(x)
@@ -1,3 +1,3 @@
1
1
  module Serrano
2
- VERSION = "0.3.6"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -7,8 +7,8 @@ Gem::Specification.new do |s|
7
7
  s.name = 'serrano'
8
8
  s.version = Serrano::VERSION
9
9
  s.platform = Gem::Platform::RUBY
10
- s.required_ruby_version = '>= 2.0'
11
- s.date = '2017-04-04'
10
+ s.required_ruby_version = '>= 2.1'
11
+ s.date = '2018-04-08'
12
12
  s.summary = "Crossref Client"
13
13
  s.description = "Low Level Ruby Client for the Crossref Search API"
14
14
  s.authors = "Scott Chamberlain"
@@ -22,17 +22,17 @@ Gem::Specification.new do |s|
22
22
  s.bindir = 'bin'
23
23
  s.executables = ['serrano']
24
24
 
25
- s.add_development_dependency 'bundler', '~> 1.14', '>= 1.14.6'
26
- s.add_development_dependency 'rake', '~> 12.0', '>= 12.0.0'
27
- s.add_development_dependency 'test-unit', '~> 3.2', '>= 3.2.1'
28
- s.add_development_dependency 'simplecov', '~> 0.14.1'
25
+ s.add_development_dependency 'bundler', '~> 1.16', '>= 1.16.1'
26
+ s.add_development_dependency 'rake', '~> 12.3', '>= 12.3.1'
27
+ s.add_development_dependency 'test-unit', '~> 3.2', '>= 3.2.7'
28
+ s.add_development_dependency 'simplecov', '~> 0.16.1'
29
29
  s.add_development_dependency 'codecov', '~> 0.1.10'
30
- s.add_development_dependency 'json', '~> 2.0', '>= 2.0.3'
31
- s.add_development_dependency 'vcr', '~> 3.0', '>= 3.0.3'
32
- s.add_development_dependency 'webmock', '~> 2.3', '>= 2.3.2'
30
+ s.add_development_dependency 'json', '~> 2.1'
31
+ s.add_development_dependency 'vcr', '~> 4.0'
32
+ s.add_development_dependency 'webmock', '~> 3.3'
33
33
 
34
- s.add_runtime_dependency 'faraday', '~> 0.12.0.1'
35
- s.add_runtime_dependency 'faraday_middleware', '~> 0.11.0.1'
36
- s.add_runtime_dependency 'thor', '~> 0.19.4'
37
- s.add_runtime_dependency 'multi_json', '~> 1.12', '>= 1.12.1'
34
+ s.add_runtime_dependency 'faraday', '~> 0.14.0'
35
+ s.add_runtime_dependency 'faraday_middleware', '~> 0.12.2'
36
+ s.add_runtime_dependency 'thor', '~> 0.20.0'
37
+ s.add_runtime_dependency 'multi_json', '~> 1.13', '>= 1.13.1'
38
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serrano
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Chamberlain
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-04 00:00:00.000000000 Z
11
+ date: 2018-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,40 +16,40 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.14'
19
+ version: '1.16'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 1.14.6
22
+ version: 1.16.1
23
23
  type: :development
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '1.14'
29
+ version: '1.16'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 1.14.6
32
+ version: 1.16.1
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rake
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '12.0'
39
+ version: '12.3'
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: 12.0.0
42
+ version: 12.3.1
43
43
  type: :development
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: '12.0'
49
+ version: '12.3'
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
- version: 12.0.0
52
+ version: 12.3.1
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: test-unit
55
55
  requirement: !ruby/object:Gem::Requirement
@@ -59,7 +59,7 @@ dependencies:
59
59
  version: '3.2'
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: 3.2.1
62
+ version: 3.2.7
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
@@ -69,21 +69,21 @@ dependencies:
69
69
  version: '3.2'
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- version: 3.2.1
72
+ version: 3.2.7
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: simplecov
75
75
  requirement: !ruby/object:Gem::Requirement
76
76
  requirements:
77
77
  - - "~>"
78
78
  - !ruby/object:Gem::Version
79
- version: 0.14.1
79
+ version: 0.16.1
80
80
  type: :development
81
81
  prerelease: false
82
82
  version_requirements: !ruby/object:Gem::Requirement
83
83
  requirements:
84
84
  - - "~>"
85
85
  - !ruby/object:Gem::Version
86
- version: 0.14.1
86
+ version: 0.16.1
87
87
  - !ruby/object:Gem::Dependency
88
88
  name: codecov
89
89
  requirement: !ruby/object:Gem::Requirement
@@ -104,122 +104,104 @@ dependencies:
104
104
  requirements:
105
105
  - - "~>"
106
106
  - !ruby/object:Gem::Version
107
- version: '2.0'
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: 2.0.3
107
+ version: '2.1'
111
108
  type: :development
112
109
  prerelease: false
113
110
  version_requirements: !ruby/object:Gem::Requirement
114
111
  requirements:
115
112
  - - "~>"
116
113
  - !ruby/object:Gem::Version
117
- version: '2.0'
118
- - - ">="
119
- - !ruby/object:Gem::Version
120
- version: 2.0.3
114
+ version: '2.1'
121
115
  - !ruby/object:Gem::Dependency
122
116
  name: vcr
123
117
  requirement: !ruby/object:Gem::Requirement
124
118
  requirements:
125
119
  - - "~>"
126
120
  - !ruby/object:Gem::Version
127
- version: '3.0'
128
- - - ">="
129
- - !ruby/object:Gem::Version
130
- version: 3.0.3
121
+ version: '4.0'
131
122
  type: :development
132
123
  prerelease: false
133
124
  version_requirements: !ruby/object:Gem::Requirement
134
125
  requirements:
135
126
  - - "~>"
136
127
  - !ruby/object:Gem::Version
137
- version: '3.0'
138
- - - ">="
139
- - !ruby/object:Gem::Version
140
- version: 3.0.3
128
+ version: '4.0'
141
129
  - !ruby/object:Gem::Dependency
142
130
  name: webmock
143
131
  requirement: !ruby/object:Gem::Requirement
144
132
  requirements:
145
133
  - - "~>"
146
134
  - !ruby/object:Gem::Version
147
- version: '2.3'
148
- - - ">="
149
- - !ruby/object:Gem::Version
150
- version: 2.3.2
135
+ version: '3.3'
151
136
  type: :development
152
137
  prerelease: false
153
138
  version_requirements: !ruby/object:Gem::Requirement
154
139
  requirements:
155
140
  - - "~>"
156
141
  - !ruby/object:Gem::Version
157
- version: '2.3'
158
- - - ">="
159
- - !ruby/object:Gem::Version
160
- version: 2.3.2
142
+ version: '3.3'
161
143
  - !ruby/object:Gem::Dependency
162
144
  name: faraday
163
145
  requirement: !ruby/object:Gem::Requirement
164
146
  requirements:
165
147
  - - "~>"
166
148
  - !ruby/object:Gem::Version
167
- version: 0.12.0.1
149
+ version: 0.14.0
168
150
  type: :runtime
169
151
  prerelease: false
170
152
  version_requirements: !ruby/object:Gem::Requirement
171
153
  requirements:
172
154
  - - "~>"
173
155
  - !ruby/object:Gem::Version
174
- version: 0.12.0.1
156
+ version: 0.14.0
175
157
  - !ruby/object:Gem::Dependency
176
158
  name: faraday_middleware
177
159
  requirement: !ruby/object:Gem::Requirement
178
160
  requirements:
179
161
  - - "~>"
180
162
  - !ruby/object:Gem::Version
181
- version: 0.11.0.1
163
+ version: 0.12.2
182
164
  type: :runtime
183
165
  prerelease: false
184
166
  version_requirements: !ruby/object:Gem::Requirement
185
167
  requirements:
186
168
  - - "~>"
187
169
  - !ruby/object:Gem::Version
188
- version: 0.11.0.1
170
+ version: 0.12.2
189
171
  - !ruby/object:Gem::Dependency
190
172
  name: thor
191
173
  requirement: !ruby/object:Gem::Requirement
192
174
  requirements:
193
175
  - - "~>"
194
176
  - !ruby/object:Gem::Version
195
- version: 0.19.4
177
+ version: 0.20.0
196
178
  type: :runtime
197
179
  prerelease: false
198
180
  version_requirements: !ruby/object:Gem::Requirement
199
181
  requirements:
200
182
  - - "~>"
201
183
  - !ruby/object:Gem::Version
202
- version: 0.19.4
184
+ version: 0.20.0
203
185
  - !ruby/object:Gem::Dependency
204
186
  name: multi_json
205
187
  requirement: !ruby/object:Gem::Requirement
206
188
  requirements:
207
189
  - - "~>"
208
190
  - !ruby/object:Gem::Version
209
- version: '1.12'
191
+ version: '1.13'
210
192
  - - ">="
211
193
  - !ruby/object:Gem::Version
212
- version: 1.12.1
194
+ version: 1.13.1
213
195
  type: :runtime
214
196
  prerelease: false
215
197
  version_requirements: !ruby/object:Gem::Requirement
216
198
  requirements:
217
199
  - - "~>"
218
200
  - !ruby/object:Gem::Version
219
- version: '1.12'
201
+ version: '1.13'
220
202
  - - ">="
221
203
  - !ruby/object:Gem::Version
222
- version: 1.12.1
204
+ version: 1.13.1
223
205
  description: Low Level Ruby Client for the Crossref Search API
224
206
  email: myrmecocystus@gmail.com
225
207
  executables:
@@ -230,7 +212,7 @@ files:
230
212
  - ".gitignore"
231
213
  - ".travis.yml"
232
214
  - CHANGELOG.md
233
- - CONDUCT.md
215
+ - CODE_OF_CONDUCT.md
234
216
  - Gemfile
235
217
  - Gemfile.lock
236
218
  - LICENSE
@@ -265,7 +247,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
265
247
  requirements:
266
248
  - - ">="
267
249
  - !ruby/object:Gem::Version
268
- version: '2.0'
250
+ version: '2.1'
269
251
  required_rubygems_version: !ruby/object:Gem::Requirement
270
252
  requirements:
271
253
  - - ">="
@@ -273,7 +255,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
273
255
  version: '0'
274
256
  requirements: []
275
257
  rubyforge_project:
276
- rubygems_version: 2.6.8
258
+ rubygems_version: 2.7.3
277
259
  signing_key:
278
260
  specification_version: 4
279
261
  summary: Crossref Client