serrano 0.0.7 → 0.1.1

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
  SHA1:
3
- metadata.gz: 00aa3283924fc74b4a2634759602caa5516b26e3
4
- data.tar.gz: bd653f31833befbb3dd5be3a4fff893e22e13756
3
+ metadata.gz: 7fa7f1bc525d14c6f53869ed4288b8579158ce73
4
+ data.tar.gz: ab896db087318532f052e43a930ba1e1be3f3943
5
5
  SHA512:
6
- metadata.gz: 874a4e19e0ac4439c75be43782d7da74adf00a082d4352e6d13458fdaac442d5048fda4faf7db5f747c76220821a4b5a1270477bf931d5202842604358f2bfe7
7
- data.tar.gz: ffb5ebb232ef610865833c6b147be959a7313a8b3904bdd429aa2cac17548879693df195d91cb31a40009ce8d3a59bec46e16dfad0c5a16895d04bd3fcb8ae87
6
+ metadata.gz: 934c68640bfabef4df7e91898406a0948a395c1ef3f0cf1c5d04aa8e32108836a909e90427d2e93ff0a75767fcade878f4119c1f6ee8d15012473664a6aa85bb
7
+ data.tar.gz: 45437444480642e2b48cb6b11a33b9dbc60277f62eb50cfc48aab90a5847aa21dc1fdb4e71a8fac870ca4fc9b541d0a118406fb30a3d033d784537dd63af9a92
data/.gitignore CHANGED
@@ -33,4 +33,6 @@ build/
33
33
  # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
34
34
  .rvmrc
35
35
 
36
- cache/
36
+ cache/
37
+
38
+ lib/serrano/response.rb
data/CHANGELOG.md ADDED
@@ -0,0 +1,12 @@
1
+ ## 0.1.0 (2015-11-17)
2
+
3
+ * Improved documentation
4
+ * `licenses()` loses `ids` param as it doesn't accept IDs
5
+ * `agency()` method changed to `registration_agency()`
6
+ * `cn()` method changed to `content_negotiation()`
7
+ * `random_dois()` gains default value of `sample = 10`
8
+ * New method `get_styles()` to get CSL styles
9
+
10
+ ## 0.0.7 (2015-11-04)
11
+
12
+ * First version to Rubygems
data/CONDUCT.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Contributor Code of Conduct
2
2
 
3
- As contributors and maintainers of this project, we pledge to respect all people who
3
+ As contributors and maintainers of this project, we pledge to respect all people who
4
4
  contribute through reporting issues, posting feature requests, updating documentation,
5
5
  submitting pull requests or patches, and other activities.
6
6
 
@@ -13,13 +13,13 @@ imagery, derogatory comments or personal attacks, trolling, public or private ha
13
13
  insults, or other unprofessional conduct.
14
14
 
15
15
  Project maintainers have the right and responsibility to remove, edit, or reject comments,
16
- commits, code, wiki edits, issues, and other contributions that are not aligned to this
17
- Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed
16
+ commits, code, wiki edits, issues, and other contributions that are not aligned to this
17
+ Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed
18
18
  from the project team.
19
19
 
20
- Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by
20
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by
21
21
  opening an issue or contacting one or more of the project maintainers.
22
22
 
23
- This Code of Conduct is adapted from the Contributor Covenant
24
- (http:contributor-covenant.org), version 1.0.0, available at
23
+ This Code of Conduct is adapted from the Contributor Covenant
24
+ (http:contributor-covenant.org), version 1.0.0, available at
25
25
  http://contributor-covenant.org/version/1/0/0/
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- serrano (0.0.7)
4
+ serrano (0.1.1)
5
5
  faraday (~> 0.9.1)
6
6
  faraday_middleware (~> 0.10.0)
7
7
  multi_json (~> 1.0)
data/README.md CHANGED
@@ -1,12 +1,13 @@
1
1
  serrano
2
2
  =========
3
3
 
4
+ [![gem version](https://img.shields.io/gem/v/serrano.svg)](https://rubygems.org/gems/serrano)
4
5
  [![Build Status](https://api.travis-ci.org/sckott/serrano.png)](https://travis-ci.org/sckott/serrano)
5
6
  [![codecov.io](http://codecov.io/github/sckott/serrano/coverage.svg?branch=master)](http://codecov.io/github/sckott/serrano?branch=master)
6
7
 
7
8
  `serrano` is a low level client for Crossref APIs
8
9
 
9
- Docs: http://recology.info/serrano/
10
+ Docs: http://www.rubydoc.info/gems/serrano
10
11
 
11
12
  Other Crossref API clients:
12
13
 
@@ -15,7 +16,7 @@ Other Crossref API clients:
15
16
 
16
17
  ## Changes
17
18
 
18
- For changes see the [NEWS file](NEWS.md).
19
+ For changes see the [Changelog](CHANGELOG.md)
19
20
 
20
21
  ## API
21
22
 
@@ -31,13 +32,15 @@ Methods in relation to [Crossref search API][crapi] routes
31
32
 
32
33
  Additional methods built on top of the Crossref search API:
33
34
 
34
- * DOI minting agency - `Serrano.agency()`
35
+ * DOI minting agency - `Serrano.registration_agency()`
35
36
  * Get random DOIs - `Serrano.random_dois()`
36
37
 
37
38
  Other methods:
38
39
 
39
- * [Conent negotiation][cn] - `Serrano.cn()`
40
+ * [Conent negotiation][cn] - `Serrano.content_negotiation()`
40
41
  * [Text and data mining][tdm] - `Serrano.text()`
42
+ * [Citation count][ccount] - `Serrano.citation_count()`
43
+ * [get CSL styles][csl] - `Serrano.csl_styles()`
41
44
 
42
45
  ## Install
43
46
 
@@ -97,7 +100,7 @@ Serrano.funders(ids: ['10.13039/100000001','10.13039/100000015'])
97
100
  Get agency for a set of DOIs
98
101
 
99
102
  ```ruby
100
- Serrano.agency(ids: ['10.1007/12080.1874-1746','10.1007/10452.1573-5125'])
103
+ Serrano.registration_agency(ids: ['10.1007/12080.1874-1746','10.1007/10452.1573-5125'])
101
104
  ```
102
105
 
103
106
  Get random set of DOIs
@@ -126,3 +129,5 @@ res = Serrano.text(url: 'http://...');
126
129
  [crapi]: https://github.com/CrossRef/rest-api-doc/blob/master/rest_api.md
127
130
  [cn]: http://www.crosscite.org/cn/
128
131
  [tdm]: http://www.crossref.org/tdm/
132
+ [ccount]: http://labs.crossref.org/openurl/
133
+ [csl]: https://github.com/citation-style-language/styles
data/Rakefile CHANGED
@@ -20,7 +20,7 @@ task :b do
20
20
  system "bundle install"
21
21
  end
22
22
 
23
- desc "bundle install"
23
+ desc "clean out builds"
24
24
  task :clean do
25
25
  system "ls | grep [0-9].gem | xargs rm"
26
26
  end
data/bin/serrano ADDED
@@ -0,0 +1,444 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "thor"
4
+ require "serrano"
5
+ require "multi_json"
6
+
7
+ class Sr < Thor
8
+ include Thor::Actions
9
+ # class_option :json, :type => :boolean, :default => false
10
+
11
+ desc "works [DOIs]", "Get works by DOIs"
12
+ long_desc <<-LONGDESC
13
+ `serrano works` accepts one or more DOIs to search for works
14
+
15
+ Toggle `json` to get simplified (summary) or complete output (JSON)
16
+
17
+ # A single DOI
18
+ \x5$ serrano works 10.1371/journal.pone.0033693
19
+
20
+ DOI: 10.1371/journal.pone.0033693
21
+ \x5type: journal-article
22
+ \x5title: Methylphenidate Exposure Induces Dopamine Neuron Loss and Activation of Microglia in the Basal Ganglia of Mice
23
+
24
+ # Many DOIs
25
+ \x5$ serrano works "10.1007/12080.1874-1746,10.1007/10452.1573-5125"
26
+
27
+ DOI: 10.1007/12080.1874-1746
28
+ \x5type: journal
29
+ \x5title: Theoretical Ecology
30
+
31
+ DOI: 10.1007/10452.1573-5125
32
+ \x5type: journal
33
+ \x5title: Aquatic Ecology
34
+
35
+ # Verbose output gives JSON, pipe onwards, e.g., parse with jq
36
+ \x5$ serrano works "10.1371/journal.pone.0033693,10.1007/12080.1874-1746,10.1007/10452.1573-5125" --json=true | jq .[].message.member
37
+
38
+ "http://id.crossref.org/member/340"
39
+ \x5"http://id.crossref.org/member/297"
40
+ \x5"http://id.crossref.org/member/297"
41
+ LONGDESC
42
+ option :json, :type => :boolean, :default => false
43
+ def works(*dois)
44
+ out = Serrano.works(ids: dois)
45
+ if !options[:json]
46
+ out = out.collect { |x| x['message'].select { |k,v| k[/DOI|type|title/] } }
47
+ out.each do |x|
48
+ puts 'DOI: ' + x['DOI'].to_s
49
+ puts 'type: ' + x['type']
50
+ puts 'title: ' + x['title'][0]
51
+ puts
52
+ end
53
+ else
54
+ puts MultiJson.encode(out)
55
+ end
56
+ end
57
+
58
+ desc "members [member IDs]", "Get members by id"
59
+ long_desc <<-LONGDESC
60
+ `serrano members` accepts one or more Crossref member IDs
61
+
62
+ Toggle `json` to get simplified (summary) or complete output (JSON)
63
+
64
+ $ serrano members 98
65
+
66
+ id: 98
67
+ \x5title: Hindawi Publishing Corporation
68
+
69
+ $ serrano members "98,340"
70
+
71
+ id: 98
72
+ \x5title: Hindawi Publishing Corporation
73
+
74
+ id: 340
75
+ \x5title: Public Library of Science (PLoS)
76
+
77
+ $ serrano members "98,340,45,311,78" --json=true | jq .[].message.coverage.\"resource-links-current\"
78
+
79
+ 1 0 0 0.8311812281608582 0.985091507434845
80
+
81
+ $ serrano members 98 --works=true --json=true | jq .[].message.items[].\"reference-count\"
82
+
83
+ 24 7 45 31 22 67 72 17 53 75 0 68 12 16 50 79 40 18 40 195
84
+ LONGDESC
85
+ option :json, :type => :boolean, :default => false
86
+ option :query, :type => :string, :default => nil
87
+ option :limit, :type => :numeric, :default => nil
88
+ option :works, :type => :boolean, :default => false
89
+ def members(ids=nil)
90
+ if ids.nil?
91
+ out = Serrano.members(query: options[:query], limit: options[:limit],
92
+ works: options[:works])
93
+ else
94
+ out = Serrano.members(ids: ids.split(","), query: options[:query], limit: options[:limit],
95
+ works: options[:works])
96
+ end
97
+
98
+ if !options[:json]
99
+ if !options[:works]
100
+ if out.class == Hash
101
+ out = out['message']['items']
102
+ else
103
+ out = out.collect { |x| x['message'] }
104
+ end
105
+
106
+ # out = out.collect { |x| x['message'].select { |k,v| k[/id|primary-name/] } }
107
+ out.each do |x|
108
+ puts 'id: ' + x['id'].to_s
109
+ puts 'title: ' + x['primary-name']
110
+ puts
111
+ end
112
+ else
113
+ print_works(out)
114
+ end
115
+ else
116
+ puts MultiJson.encode(out)
117
+ end
118
+ end
119
+
120
+
121
+ desc "prefixes [DOI prefixes]", "Search for prefixes by DOI prefix"
122
+ long_desc <<-LONGDESC
123
+ `serrano prefixes` accepts one or more Crossref member IDs
124
+
125
+ Toggle `json` to get simplified (summary) or complete output (JSON)
126
+
127
+ $ serrano prefixes 10.1016
128
+
129
+ member: http://id.crossref.org/member/78
130
+ \x5name: Elsevier BV
131
+ \x5prefix: http://id.crossref.org/prefix/10.1016
132
+
133
+ $ serrano prefixes "10.1016,10.1371"
134
+
135
+ member: http://id.crossref.org/member/78
136
+ \x5name: Elsevier BV
137
+ \x5prefix: http://id.crossref.org/prefix/10.1016
138
+
139
+ member: http://id.crossref.org/member/340
140
+ \x5name: Public Library of Science (PLoS)
141
+ \x5prefix: http://id.crossref.org/prefix/10.1371
142
+
143
+ $ serrano prefixes "10.1016,10.1371,10.1023,10.4176,10.1093" --json=true | jq .[].message.name
144
+
145
+ "Elsevier BV"
146
+ \x5"Public Library of Science (PLoS)"
147
+ \x5"Springer Science + Business Media"
148
+ \x5"Co-Action Publishing"
149
+ \x5"Oxford University Press (OUP)"
150
+ LONGDESC
151
+ option :json, :type => :boolean, :default => false
152
+ option :limit, :type => :numeric, :default => nil
153
+ option :works, :type => :boolean, :default => false
154
+ def prefixes(ids=nil)
155
+ if ids.nil?
156
+ out = Serrano.prefixes(limit: options[:limit], works: options[:works])
157
+ else
158
+ out = Serrano.prefixes(ids: ids.split(","), limit: options[:limit],
159
+ works: options[:works])
160
+ end
161
+
162
+ if !options[:json]
163
+ if !options[:works]
164
+ if out.class == Hash
165
+ out = out['message']['items']
166
+ else
167
+ out = out.collect { |x| x['message'] }
168
+ end
169
+
170
+ out.each do |x|
171
+ puts 'member: ' + x['member']
172
+ puts 'name: ' + x['name']
173
+ puts 'prefix: ' + x['prefix']
174
+ puts
175
+ end
176
+ else
177
+ print_works(out)
178
+ end
179
+ else
180
+ puts MultiJson.encode(out)
181
+ end
182
+ end
183
+
184
+ desc "funders [funder IDs]", "Search for funders by DOI prefix"
185
+ long_desc <<-LONGDESC
186
+ `serrano funders` accepts one or more Crossref funder IDs
187
+
188
+ Toggle `json` to get simplified (summary) or complete output (JSON)
189
+
190
+ $ serrano funders 100004410
191
+
192
+ id: 100004410
193
+ \x5name: European Molecular Biology Organization
194
+ \x5location: Germany
195
+
196
+ $ serrano funders "10.13039/100000001,10.13039/100000015"
197
+
198
+ id: 100000001
199
+ \x5name: National Science Foundation
200
+ \x5location: United States
201
+
202
+ id: 100000015
203
+ \x5name: U.S. Department of Energy
204
+ \x5location: United States
205
+
206
+ $ serrano funders "10.13039/100000001,10.13039/100000015" --json=true | jq .[].message.name
207
+
208
+ "National Science Foundation"
209
+ \x5"U.S. Department of Energy"
210
+
211
+ $ serrano funders --query=NSF --limit=2
212
+
213
+ $ serrano funders 10.13039/100000001 --works=true --limit=2
214
+ LONGDESC
215
+ option :json, :type => :boolean, :default => false
216
+ option :query, :type => :string, :default => nil
217
+ option :limit, :type => :numeric, :default => nil
218
+ option :works, :type => :boolean, :default => false
219
+ def funders(ids=nil)
220
+ if ids.nil?
221
+ out = Serrano.funders(query: options[:query], limit: options[:limit],
222
+ works: options[:works])
223
+ else
224
+ out = Serrano.funders(ids: ids.split(","), query: options[:query], limit: options[:limit],
225
+ works: options[:works])
226
+ end
227
+
228
+ if !options[:json]
229
+ if !options[:works]
230
+ if out.class == Hash
231
+ out = out['message']['items']
232
+ else
233
+ out = out.collect { |x| x['message'] }
234
+ end
235
+
236
+ out.each do |x|
237
+ puts 'id: ' + x['id']
238
+ puts 'name: ' + x['name']
239
+ puts 'location: ' + x['location']
240
+ puts
241
+ end
242
+ else
243
+ print_works(out)
244
+ end
245
+ else
246
+ puts MultiJson.encode(out)
247
+ end
248
+ end
249
+
250
+
251
+ desc "journals [journal ISSNs]", "Search for journals by ISSNs"
252
+ long_desc <<-LONGDESC
253
+ `serrano journals` accepts one or more journal ISSNs
254
+
255
+ Toggle `json` to get simplified (summary) or complete output (JSON)
256
+
257
+ $ serrano journals 2167-8359
258
+
259
+ id: 100004410
260
+ \x5name: European Molecular Biology Organization
261
+ \x5location: Germany
262
+
263
+ $ serrano journals "1803-2427,2326-4225"
264
+
265
+ id: 100000001
266
+ \x5name: National Science Foundation
267
+ \x5location: United States
268
+
269
+ id: 100000015
270
+ \x5name: U.S. Department of Energy
271
+ \x5location: United States
272
+
273
+ $ serrano journals "1803-2427,2326-4225" --json=true | jq .[].message.title
274
+
275
+ "National Science Foundation"
276
+ \x5"U.S. Department of Energy"
277
+
278
+ $ serrano journals --query=ecology --limit=2
279
+
280
+ $ serrano journals 2167-8359 --query=ecology --works=true --limit=2
281
+ LONGDESC
282
+ option :json, :type => :boolean, :default => false
283
+ option :query, :type => :string, :default => nil
284
+ option :limit, :type => :numeric, :default => nil
285
+ option :works, :type => :boolean, :default => false
286
+ def journals(ids=nil)
287
+ if ids.nil?
288
+ out = Serrano.journals(query: options[:query], limit: options[:limit],
289
+ works: options[:works])
290
+ else
291
+ out = Serrano.journals(ids: ids.split(","), query: options[:query], limit: options[:limit],
292
+ works: options[:works])
293
+ end
294
+
295
+ if !options[:json]
296
+ if !options[:works]
297
+ if out.class == Hash
298
+ out = out['message']['items']
299
+ else
300
+ out = out.collect { |x| x['message'] }
301
+ end
302
+
303
+ out.each do |x|
304
+ puts 'ISSN: ' + x['ISSN'][0]
305
+ puts 'title: ' + x['title']
306
+ puts 'publisher: ' + x['publisher']
307
+ puts
308
+ end
309
+ else
310
+ print_works(out)
311
+ end
312
+ else
313
+ puts MultiJson.encode(out)
314
+ end
315
+ end
316
+
317
+ desc "types [type name]", "Search for types by name"
318
+ long_desc <<-LONGDESC
319
+ `serrano types` accepts one or more type names
320
+
321
+ Toggle `json` to get simplified (summary) or complete output (JSON)
322
+
323
+ $ serrano types journal
324
+
325
+ id: 100004410
326
+ \x5name: European Molecular Biology Organization
327
+ \x5location: Germany
328
+
329
+ $ serrano types journal dissertation
330
+
331
+ id: 100000001
332
+ \x5name: National Science Foundation
333
+ \x5location: United States
334
+
335
+ id: 100000015
336
+ \x5name: U.S. Department of Energy
337
+ \x5location: United States
338
+
339
+ $ serrano types journal dissertation --json=true | jq .[].message
340
+
341
+ "National Science Foundation"
342
+ \x5"U.S. Department of Energy"
343
+
344
+ $ serrano types dissertation --works
345
+
346
+ $ serrano types dissertation --works --limit=2
347
+ LONGDESC
348
+ option :json, :type => :boolean, :default => false
349
+ option :works, :type => :boolean, :default => false
350
+ option :limit, :type => :numeric, :default => nil
351
+ def types(*ids)
352
+ out = Serrano.types(ids: ids, limit: options[:limit],
353
+ works: options[:works])
354
+
355
+ if !options[:json]
356
+ if !options[:works]
357
+ if out.class == Hash
358
+ out = out['message']['items']
359
+ else
360
+ out = out.collect { |x| x['message'] }
361
+ end
362
+
363
+ out.each do |x|
364
+ puts 'id: ' + x['id']
365
+ puts 'label: ' + x['label']
366
+ puts
367
+ end
368
+ else
369
+ print_works(out)
370
+ end
371
+ else
372
+ puts MultiJson.encode(out)
373
+ end
374
+ end
375
+
376
+ desc "licenses", "Search for licenses by name"
377
+ long_desc <<-LONGDESC
378
+ `serrano licenses` accepts one or more type names
379
+
380
+ Toggle `json` to get simplified (summary) or complete output (JSON)
381
+
382
+ $ serrano licenses
383
+
384
+ url: http://avs.org
385
+ \x5work-count: 1
386
+
387
+ url: http://creativecommons.org/LICENSEs/by/3.0/
388
+ \x5work-count: 14
389
+
390
+ $ serrano licenses --query=creative
391
+
392
+ id: 100000001
393
+ \x5name: National Science Foundation
394
+ \x5location: United States
395
+
396
+ id: 100000015
397
+ \x5name: U.S. Department of Energy
398
+ \x5location: United States
399
+
400
+ $ serrano licenses --json=true | jq .[].message.items.work-count
401
+
402
+ "National Science Foundation"
403
+ \x5"U.S. Department of Energy"
404
+ LONGDESC
405
+ option :json, :type => :boolean, :default => false
406
+ option :query, :type => :string, :default => nil
407
+ def licenses
408
+ out = Serrano.licenses(query: options[:query])
409
+ if !options[:json]
410
+ out = out['message']['items']
411
+ out.each do |x|
412
+ puts 'url: ' + x['URL']
413
+ puts 'work-count: ' + x['work-count'].to_s
414
+ puts
415
+ end
416
+ else
417
+ puts MultiJson.encode(out)
418
+ end
419
+ end
420
+
421
+ desc "version", "Get serrano version"
422
+ def version
423
+ puts Serrano::VERSION
424
+ end
425
+
426
+ private
427
+
428
+ def print_works(data)
429
+ if data.is_a? Array
430
+ data = data[0]['message']['items']
431
+ else
432
+ data = data.collect { |x| x['message'].select { |k,v| k[/DOI|type|title/] } }
433
+ end
434
+ data.each do |x|
435
+ puts 'DOI: ' + x['DOI']
436
+ puts 'type: ' + x['type']
437
+ puts 'title: ' + x['title'][0]
438
+ puts
439
+ end
440
+ end
441
+
442
+ end
443
+
444
+ Sr.start(ARGV)
data/lib/serrano.rb CHANGED
@@ -9,7 +9,6 @@ require 'rexml/document'
9
9
  require 'rexml/xpath'
10
10
 
11
11
  # @!macro serrano_params
12
- # @param ids [Array] DOIs (digital object identifier) or other identifiers
13
12
  # @param offset [Fixnum] Number of record to start at, from 1 to infinity.
14
13
  # @param limit [Fixnum] Number of results to return. Not relavant when searching with specific dois. Default: 20. Max: 1000
15
14
  # @param sample [Fixnum] Number of random results to return. when you use the sample parameter,
@@ -22,6 +21,9 @@ require 'rexml/xpath'
22
21
  # will be by DOI update date.
23
22
  # @param order [String] Sort order, one of 'asc' or 'desc'
24
23
  # @param facet [Boolean] Include facet results. Default: false
24
+ # @param verbose [Boolean] Print request headers to stdout. Default: false
25
+
26
+ # @!macro serrano_options
25
27
  # @param options [Hash] Hash of options for configuring the request, passed on to Faraday.new
26
28
  # :timeout - [Fixnum] open/read timeout Integer in seconds
27
29
  # :open_timeout - [Fixnum] read timeout Integer in seconds
@@ -33,23 +35,26 @@ require 'rexml/xpath'
33
35
  # :bind - [Hash] A hash with host and port values
34
36
  # :boundary - [String] of the boundary value
35
37
  # :oauth - [Hash] A hash with OAuth details
36
- # @param verbose [Boolean] Print request headers to stdout. Default: false
37
38
 
38
39
  ##
39
40
  # Serrano - The top level module for using methods
40
41
  # to access Serrano APIs
41
42
  #
42
43
  # The following methods, matching the main Crossref API routes, are available:
43
- # * works - Use the /works endpoint
44
- # * members - Use the /members endpoint
45
- # * prefixes - Use the /prefixes endpoint
46
- # * funders - Use the /funders endpoint
47
- # * journals - Use the /journals endpoint
48
- # * types - Use the /types endpoint
49
- # * licenses - Use the /licenses endpoint
44
+ # * `Serrano.works` - Use the /works endpoint
45
+ # * `Serrano.members` - Use the /members endpoint
46
+ # * `Serrano.prefixes` - Use the /prefixes endpoint
47
+ # * `Serrano.funders` - Use the /funders endpoint
48
+ # * `Serrano.journals` - Use the /journals endpoint
49
+ # * `Serrano.types` - Use the /types endpoint
50
+ # * `Serrano.licenses` - Use the /licenses endpoint
50
51
  #
51
52
  # Additional methods
52
- # * agency - test the registration agency for a DOI
53
+ # * `Serrano.agency` - test the registration agency for a DOI
54
+ # * `Serrano.content_negotiation` - Conent negotiation
55
+ # * `Serrano.text` - Text and data mining
56
+ # * `Serrano.citation_count` - Citation count
57
+ # * `Serrano.csl_styles` - get CSL styles
53
58
  #
54
59
  # All routes return an array of hashes
55
60
  # For example, if you want to inspect headers returned from the HTTP request,
@@ -69,6 +74,8 @@ module Serrano
69
74
  # Search the works route
70
75
  #
71
76
  # @!macro serrano_params
77
+ # @!macro serrano_options
78
+ # @param ids [Array] DOIs (digital object identifier) or other identifiers
72
79
  # @param query [String] A query string
73
80
  # @param filter [Hash] Filter options. See ...
74
81
  # @return [Array] An array of hashes
@@ -106,6 +113,8 @@ module Serrano
106
113
  # Search the members route
107
114
  #
108
115
  # @!macro serrano_params
116
+ # @!macro serrano_options
117
+ # @param ids [Array] DOIs (digital object identifier) or other identifiers
109
118
  # @param query [String] A query string
110
119
  # @param filter [Hash] Filter options. See ...
111
120
  # @param works [Boolean] If true, works returned as well. Default: false
@@ -136,6 +145,8 @@ module Serrano
136
145
  # Search the prefixes route
137
146
  #
138
147
  # @!macro serrano_params
148
+ # @!macro serrano_options
149
+ # @param ids [Array] DOIs (digital object identifier) or other identifiers
139
150
  # @param filter [Hash] Filter options. See ...
140
151
  # @param works [Boolean] If true, works returned as well. Default: false
141
152
  # @return [Array] An array of hashes
@@ -163,6 +174,8 @@ module Serrano
163
174
  # Search the funders route
164
175
  #
165
176
  # @!macro serrano_params
177
+ # @!macro serrano_options
178
+ # @param ids [Array] DOIs (digital object identifier) or other identifiers
166
179
  # @param query [String] A query string
167
180
  # @param filter [Hash] Filter options. See ...
168
181
  # @param works [Boolean] If true, works returned as well. Default: false
@@ -171,7 +184,7 @@ module Serrano
171
184
  # @example
172
185
  # require 'serrano'
173
186
  # # Search by DOI, one or more
174
- # Serrano.funders(ids: '10.13039/100000001')
187
+ # Serrano.funders(ids: 100004410)
175
188
  # Serrano.funders(ids: ['10.13039/100000001','10.13039/100000015'])
176
189
  # # query
177
190
  # Serrano.funders(query: "NSF")
@@ -193,6 +206,8 @@ module Serrano
193
206
  # Search the journals route
194
207
  #
195
208
  # @!macro serrano_params
209
+ # @!macro serrano_options
210
+ # @param ids [Array] DOIs (digital object identifier) or other identifiers
196
211
  # @param query [String] A query string
197
212
  # @param filter [Hash] Filter options. See ...
198
213
  # @param works [Boolean] If true, works returned as well. Default: false
@@ -224,6 +239,7 @@ module Serrano
224
239
  ##
225
240
  # Search the types route
226
241
  #
242
+ # @!macro serrano_options
227
243
  # @param ids [Array] DOIs (digital object identifier) or other identifiers
228
244
  # @param works [Boolean] If true, works returned as well. Default: false
229
245
  # @return [Array] An array of hashes
@@ -234,16 +250,18 @@ module Serrano
234
250
  # Serrano.types(ids: "journal")
235
251
  # Serrano.types(ids: ["journal", "dissertation"])
236
252
  # Serrano.types(ids: "journal", works: true)
237
- def self.types(ids: nil, works: false, options: nil, verbose: false)
253
+ def self.types(ids: nil, offset: nil,
254
+ limit: nil, works: false, options: nil, verbose: false)
238
255
 
239
- Request.new('types', ids, nil, nil, nil,
240
- nil, nil, nil, nil, nil, works, nil, options, verbose).perform
256
+ Request.new('types', ids, nil, nil, offset,
257
+ limit, nil, nil, nil, nil, works, nil, options, verbose).perform
241
258
  end
242
259
 
243
260
  ##
244
261
  # Search the licenses route
245
262
  #
246
263
  # @!macro serrano_params
264
+ # @!macro serrano_options
247
265
  # @param query [String] A query string
248
266
  # @return [Array] An array of hashes
249
267
  #
@@ -252,25 +270,26 @@ module Serrano
252
270
  # Serrano.licenses(query: "creative")
253
271
  # Serrano.licenses()
254
272
  # Serrano.licenses(limit: 3)
255
- def self.licenses(ids: nil, query: nil, offset: nil,
273
+ def self.licenses(query: nil, offset: nil,
256
274
  limit: nil, sample: nil, sort: nil, order: nil,
257
275
  facet: nil, options: nil, verbose: false)
258
276
 
259
- Request.new('licenses', ids, query, nil, offset,
277
+ Request.new('licenses', nil, query, nil, offset,
260
278
  limit, sample, sort, order, facet, nil, nil, options, verbose).perform
261
279
  end
262
280
 
263
281
  ##
264
282
  # Determine registration agency for DOIs
265
283
  #
284
+ # @!macro serrano_options
266
285
  # @param ids [Array] DOIs (digital object identifier) or other identifiers
267
286
  # @return [Array] An array of hashes
268
287
  #
269
288
  # @example
270
289
  # require 'serrano'
271
- # Serrano.agency(ids: '10.1371/journal.pone.0033693')
272
- # Serrano.agency(ids: ['10.1007/12080.1874-1746','10.1007/10452.1573-5125', '10.1111/(issn)1442-9993'])
273
- def self.agency(ids:, options: nil, verbose: false)
290
+ # Serrano.registration_agency(ids: '10.1371/journal.pone.0033693')
291
+ # Serrano.registration_agency(ids: ['10.1007/12080.1874-1746','10.1007/10452.1573-5125', '10.1111/(issn)1442-9993'])
292
+ def self.registration_agency(ids:, options: nil, verbose: false)
274
293
 
275
294
  Request.new('works', ids, nil, nil, nil,
276
295
  nil, nil, nil, nil, nil, false, true, options, verbose).perform
@@ -279,17 +298,21 @@ module Serrano
279
298
  ##
280
299
  # Get a random set of DOI's
281
300
  #
301
+ # @!macro serrano_options
282
302
  # @param sample [Fixnum] Number of random DOIs to return
303
+ # @param verbose [Boolean] Print request headers to stdout. Default: false
283
304
  # @return [Array] A list of strings, each a DOI
284
305
  # @note This method uses {Serrano.works} internally, but doesn't allow you to pass on
285
306
  # arguments to that method.
286
307
  #
287
308
  # @example
288
309
  # require 'serrano'
310
+ # # by default, gives 10
311
+ # Serrano.random_dois()
289
312
  # Serrano.random_dois(sample: 1)
290
313
  # Serrano.random_dois(sample: 10)
291
314
  # Serrano.random_dois(sample: 100)
292
- def self.random_dois(sample:, options: nil, verbose: false)
315
+ def self.random_dois(sample: 10, options: nil, verbose: false)
293
316
 
294
317
  tmp = Request.new('works', nil, nil, nil, nil,
295
318
  nil, sample, nil, nil, nil, false, nil, options, verbose).perform
@@ -308,52 +331,54 @@ module Serrano
308
331
  # @example
309
332
  # require 'serrano'
310
333
  # # By default, you get bibtex, apa format, in en-US locale
311
- # Serrano.cn(ids: '10.1126/science.169.3946.635')
334
+ # Serrano.content_negotiation(ids: '10.1126/science.169.3946.635')
312
335
  #
313
336
  # # get citeproc-json
314
- # Serrano.cn(ids: '10.1126/science.169.3946.635', format: "citeproc-json")
315
- # Serrano.cn(ids: "10.1126/science.169.3946.635", format: "citeproc-json")
316
- # Serrano.cn(ids: "10.1126/science.169.3946.635", format: "rdf-xml")
317
- # Serrano.cn(ids: "10.1126/science.169.3946.635", format: "crossref-xml")
318
- # Serrano.cn(ids: "10.1126/science.169.3946.635", format: "text")
337
+ # Serrano.content_negotiation(ids: '10.1126/science.169.3946.635', format: "citeproc-json")
338
+ # Serrano.content_negotiation(ids: "10.1126/science.169.3946.635", format: "citeproc-json")
339
+ #
340
+ # # some other formats
341
+ # Serrano.content_negotiation(ids: "10.1126/science.169.3946.635", format: "rdf-xml")
342
+ # Serrano.content_negotiation(ids: "10.1126/science.169.3946.635", format: "crossref-xml")
343
+ # Serrano.content_negotiation(ids: "10.1126/science.169.3946.635", format: "text")
319
344
  #
320
345
  # # return an R bibentry type
321
- # Serrano.cn(ids: "10.1126/science.169.3946.635", format: "bibentry")
322
- # Serrano.cn(ids: "10.6084/m9.figshare.97218", format: "bibentry")
346
+ # Serrano.content_negotiation(ids: "10.1126/science.169.3946.635", format: "bibentry")
347
+ # Serrano.content_negotiation(ids: "10.6084/m9.figshare.97218", format: "bibentry")
323
348
  #
324
349
  # # return an apa style citation
325
- # Serrano.cn(ids: "10.1126/science.169.3946.635", format: "text", style: "apa")
326
- # Serrano.cn(ids: "10.1126/science.169.3946.635", format: "text", style: "harvard3")
327
- # Serrano.cn(ids: "10.1126/science.169.3946.635", format: "text", style: "elsevier-harvard")
328
- # Serrano.cn(ids: "10.1126/science.169.3946.635", format: "text", style: "ecoscience")
329
- # Serrano.cn(ids: "10.1126/science.169.3946.635", format: "text", style: "heredity")
330
- # Serrano.cn(ids: "10.1126/science.169.3946.635", format: "text", style: "oikos")
350
+ # Serrano.content_negotiation(ids: "10.1126/science.169.3946.635", format: "text", style: "apa")
351
+ # Serrano.content_negotiation(ids: "10.1126/science.169.3946.635", format: "text", style: "harvard3")
352
+ # Serrano.content_negotiation(ids: "10.1126/science.169.3946.635", format: "text", style: "elsevier-harvard")
353
+ # Serrano.content_negotiation(ids: "10.1126/science.169.3946.635", format: "text", style: "ecoscience")
354
+ # Serrano.content_negotiation(ids: "10.1126/science.169.3946.635", format: "text", style: "heredity")
355
+ # Serrano.content_negotiation(ids: "10.1126/science.169.3946.635", format: "text", style: "oikos")
331
356
  #
332
357
  # # example with many DOIs
333
- # dois <- cr_r(2)
334
- # Serrano.cn(dois, format: "text", style: "apa")
358
+ # dois = cr_r(2)
359
+ # Serrano.content_negotiation(dois, format: "text", style: "apa")
335
360
  #
336
361
  # # Using DataCite DOIs
337
362
  # ## some formats don't work
338
- # # Serrano.cn(ids: "10.5284/1011335", format: "text")
339
- # # Serrano.cn(ids: "10.5284/1011335", format: "crossref-xml")
340
- # # Serrano.cn(ids: "10.5284/1011335", format: "crossref-tdm")
363
+ # # Serrano.content_negotiation(ids: "10.5284/1011335", format: "text")
364
+ # # Serrano.content_negotiation(ids: "10.5284/1011335", format: "crossref-xml")
365
+ # # Serrano.content_negotiation(ids: "10.5284/1011335", format: "crossref-tdm")
341
366
  #
342
367
  # ## But most do work
343
- # Serrano.cn(ids: "10.5284/1011335", format: "datacite-xml")
344
- # Serrano.cn(ids: "10.5284/1011335", format: "rdf-xml")
345
- # Serrano.cn(ids: "10.5284/1011335", format: "turtle")
346
- # Serrano.cn(ids: "10.5284/1011335", format: "citeproc-json")
347
- # Serrano.cn(ids: "10.5284/1011335", format: "ris")
348
- # Serrano.cn(ids: "10.5284/1011335", format: "bibtex")
349
- # Serrano.cn(ids: "10.5284/1011335", format: "bibentry")
350
- # Serrano.cn(ids: "10.5284/1011335", format: "bibtex")
368
+ # Serrano.content_negotiation(ids: "10.5284/1011335", format: "datacite-xml")
369
+ # Serrano.content_negotiation(ids: "10.5284/1011335", format: "rdf-xml")
370
+ # Serrano.content_negotiation(ids: "10.5284/1011335", format: "turtle")
371
+ # Serrano.content_negotiation(ids: "10.5284/1011335", format: "citeproc-json")
372
+ # Serrano.content_negotiation(ids: "10.5284/1011335", format: "ris")
373
+ # Serrano.content_negotiation(ids: "10.5284/1011335", format: "bibtex")
374
+ # Serrano.content_negotiation(ids: "10.5284/1011335", format: "bibentry")
375
+ # Serrano.content_negotiation(ids: "10.5284/1011335", format: "bibtex")
351
376
  #
352
377
  # # many DOIs
353
378
  # dois = ['10.5167/UZH-30455','10.5167/UZH-49216','10.5167/UZH-503', '10.5167/UZH-38402','10.5167/UZH-41217']
354
- # x = Serrano.cn(ids: dois)
379
+ # x = Serrano.content_negotiation(ids: dois)
355
380
  # puts x
356
- def self.cn(ids:, format: "bibtex", style: 'apa', locale: "en-US")
381
+ def self.content_negotiation(ids:, format: "bibtex", style: 'apa', locale: "en-US")
357
382
  CNRequest.new(ids, format, style, locale).perform
358
383
  end
359
384
 
@@ -410,8 +435,9 @@ module Serrano
410
435
  Miner.new(url, type).perform
411
436
  end
412
437
 
413
- # Lookup article info via CrossRef with DOI and get a citation count
438
+ # Get a citation count with a DOI
414
439
  #
440
+ # @!macro serrano_options
415
441
  # @param doi [String] DOI, digital object identifier
416
442
  # @param url [String] the API url for the function (should be left to default)
417
443
  # @param key [String] your API key
@@ -437,4 +463,14 @@ module Serrano
437
463
  return value
438
464
  end
439
465
 
466
+ # Get csl styles
467
+ #
468
+ # @see https://github.com/citation-style-language/styles
469
+ #
470
+ # @example
471
+ # Serrano.csl_styles
472
+ def self.csl_styles
473
+ get_styles()
474
+ end
475
+
440
476
  end
@@ -1,3 +1,3 @@
1
1
  module Serrano
2
- VERSION = "0.0.7"
2
+ VERSION = "0.1.1"
3
3
  end
data/serrano.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.version = Serrano::VERSION
9
9
  s.platform = Gem::Platform::RUBY
10
10
  s.required_ruby_version = '>= 2.0'
11
- s.date = '2015-11-04'
11
+ s.date = '2015-11-17'
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"
@@ -19,6 +19,9 @@ Gem::Specification.new do |s|
19
19
  s.files = `git ls-files -z`.split("\x0").reject {|f| f.match(%r{^(test|spec|features)/}) }
20
20
  s.require_paths = ["lib"]
21
21
 
22
+ s.bindir = 'bin'
23
+ s.executables = ['serrano']
24
+
22
25
  s.add_development_dependency "bundler", '~> 1.6'
23
26
  s.add_development_dependency "rake", '~> 10.4'
24
27
  s.add_development_dependency "test-unit", '~> 3.1'
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.0.7
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Chamberlain
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-04 00:00:00.000000000 Z
11
+ date: 2015-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -198,19 +198,21 @@ dependencies:
198
198
  version: 2.1.5
199
199
  description: Low Level Ruby Client for the Crossref Search API
200
200
  email: myrmecocystus@gmail.com
201
- executables: []
201
+ executables:
202
+ - serrano
202
203
  extensions: []
203
204
  extra_rdoc_files: []
204
205
  files:
205
206
  - ".gitignore"
206
207
  - ".travis.yml"
208
+ - CHANGELOG.md
207
209
  - CONDUCT.md
208
210
  - Gemfile
209
211
  - Gemfile.lock
210
212
  - LICENSE
211
- - NEWS.md
212
213
  - README.md
213
214
  - Rakefile
215
+ - bin/serrano
214
216
  - lib/serrano.rb
215
217
  - lib/serrano/cn.rb
216
218
  - lib/serrano/cnrequest.rb
data/NEWS.md DELETED
@@ -1,3 +0,0 @@
1
- ## 0.0.1 (xxxx-xx-xx)
2
-
3
- * First version to Rubygems