serrano 0.5.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Serrano
2
4
  # Custom error class for rescuing from all Serrano errors
3
5
  class Error < StandardError; end
@@ -1,5 +1,7 @@
1
- require 'faraday'
2
- require 'multi_json'
1
+ # frozen_string_literal: true
2
+
3
+ require "faraday"
4
+ require "multi_json"
3
5
 
4
6
  # @private
5
7
  module FaradayMiddleware
@@ -32,19 +34,19 @@ module FaradayMiddleware
32
34
  private
33
35
 
34
36
  def error_message_400(response)
35
- "\n #{response[:method].to_s.upcase} #{response[:url].to_s}\n Status #{response[:status]}#{error_body(response[:body])}"
37
+ "\n #{response[:method].to_s.upcase} #{response[:url]}\n Status #{response[:status]}#{error_body(response[:body])}"
36
38
  end
37
39
 
38
40
  def error_body(body)
39
- if not body.nil? and not body.empty? and body.kind_of?(String)
40
- if is_json?(body)
41
+ if !body.nil? && !body.empty? && body.is_a?(String)
42
+ if json?(body)
41
43
  body = ::MultiJson.load(body)
42
- if body['message'].nil?
44
+ if body["message"].nil?
43
45
  body = nil
44
- elseif body['message'].length == 1
45
- body = body['message']
46
+ elseif body["message"].length == 1
47
+ body = body["message"]
46
48
  else
47
- body = body['message'].collect { |x| x['message'] }.join('; ')
49
+ body = body["message"].collect { |x| x["message"] }.join("; ")
48
50
  end
49
51
  end
50
52
  end
@@ -56,16 +58,15 @@ module FaradayMiddleware
56
58
  end
57
59
  end
58
60
 
59
- def error_message_500(response, body=nil)
60
- "#{response[:method].to_s.upcase} #{response[:url].to_s}: #{[response[:status].to_s + ':', body].compact.join(' ')}"
61
+ def error_message_500(response, body = nil)
62
+ "#{response[:method].to_s.upcase} #{response[:url]}: #{[response[:status].to_s + ":", body].compact.join(" ")}"
61
63
  end
62
64
 
63
- def is_json?(string)
65
+ def json?(string)
64
66
  MultiJson.load(string)
65
- return true
67
+ true
66
68
  rescue MultiJson::ParseError
67
- return false
69
+ false
68
70
  end
69
-
70
71
  end
71
72
  end
@@ -1,33 +1,33 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # helper functions
2
4
  module Helpers
3
-
4
- $others = ['license_url','license_version','license_delay','full_text_version','full_text_type',
5
- 'award_number','award_funder']
6
-
7
5
  def filter_handler(x = nil)
6
+ others = %w[license_url license_version license_delay full_text_version full_text_type
7
+ award_number award_funder]
8
8
  if x.nil?
9
9
  nil
10
10
  else
11
11
  x = stringify(x)
12
- nn = x.keys.collect{ |z| z.to_s }
13
- if nn.collect{ |w| $others.include? w }.any?
14
- nn = nn.collect{ |b|
15
- if $others.include? b
12
+ nn = x.keys.collect(&:to_s)
13
+ if nn.collect { |w| others.include? w }.any?
14
+ nn = nn.collect { |b|
15
+ if others.include? b
16
16
  case b
17
- when 'license_url'
18
- 'license.url'
19
- when 'license_version'
20
- 'license.version'
21
- when 'license_delay'
22
- 'license.delay'
23
- when 'full_text_version'
24
- 'full-text.version'
25
- when 'full_text_type'
26
- 'full-text.type'
27
- when 'award_number'
28
- 'award.number'
29
- when 'award_funder'
30
- 'award.funder'
17
+ when "license_url"
18
+ "license.url"
19
+ when "license_version"
20
+ "license.version"
21
+ when "license_delay"
22
+ "license.delay"
23
+ when "full_text_version"
24
+ "full-text.version"
25
+ when "full_text_type"
26
+ "full-text.type"
27
+ when "award_number"
28
+ "award.number"
29
+ when "award_funder"
30
+ "award.funder"
31
31
  end
32
32
  else
33
33
  b
@@ -35,21 +35,20 @@ module Helpers
35
35
  }
36
36
  end
37
37
 
38
- newnn = nn.collect{ |m| m.gsub("_", "-") }
38
+ newnn = nn.collect { |m| m.tr("_", "-") }
39
39
  x = rename_keys(x, newnn)
40
- x = x.collect{ |k,v| [k, v].join(":") }.join(',')
41
- return x
40
+ x.collect { |k, v| [k, v].join(":") }.join(",")
41
+
42
42
  end
43
43
  end
44
44
 
45
45
  def stringify(x)
46
- (x.keys.map{ |k,v| k.to_s }.zip x.values).to_h
46
+ (x.keys.map { |k, _v| k.to_s }.zip x.values).to_h
47
47
  end
48
48
 
49
49
  def rename_keys(x, y)
50
50
  (y.zip x.values).to_h
51
51
  end
52
-
53
52
  end
54
53
 
55
54
  module Serrano
@@ -61,4 +60,3 @@ module Serrano
61
60
  include Helpers
62
61
  end
63
62
  end
64
-
@@ -1,94 +1,100 @@
1
- ##
2
- # Serrano::Filters
3
- #
4
- # Information on Crossref API filters
5
- #
6
- # @example
7
- # require 'serrano'
8
- # # List filter names
9
- # Serrano::Filters.names
10
- # # List filter values and description
11
- # Serrano::Filters.filters
12
- # Serrano::Filters.filters['has_funder']
13
- # Serrano::Filters.filters['has_funder']['description']
1
+ # frozen_string_literal: true
2
+
14
3
  module Serrano
4
+ def self.filters
5
+ Filters
6
+ end
7
+
8
+ ##
9
+ # Serrano::Filters
10
+ #
11
+ # Information on Crossref API filters
12
+ #
13
+ # @example
14
+ # require 'serrano'
15
+ # # List filter names
16
+ # Serrano::Filters.names
17
+ # # List filter values and description
18
+ # Serrano::Filters.filters
19
+ # Serrano::Filters.filters['has_funder']
20
+ # Serrano::Filters.filters['has_funder']['description']
15
21
  module Filters
16
22
  def self.names
17
- $filter_details.keys
23
+ FILTER_DETAILS.keys
18
24
  end
19
25
 
20
26
  def self.filters
21
- $filter_details
27
+ FILTER_DETAILS
22
28
  end
29
+
30
+ FILTER_DETAILS = {
31
+ "has_funder" => {"possible_values" => nil, "description" => "metadata which includes one or more funder entry"},
32
+ "funder" => {"possible_values" => "{funder_id}", "description" => "metadata which include the {funder_id} in FundRef data"},
33
+ "location" => {"possible_values" => "{country_name}", "description" => "funder records where location = {country name}. Only works on /funders route"},
34
+ "prefix" => {"possible_values" => "{owner_prefix}", "description" => "metadata belonging to a DOI owner prefix {owner_prefix} (e.g. '10.1016' )"},
35
+ "member" => {"possible_values" => "{member_id}", "description" => "metadata belonging to a CrossRef member"},
36
+ "from_index_date" => {"possible_values" => "{date}", "description" => "metadata indexed since (inclusive) {date}"},
37
+ "until_index_date" => {"possible_values" => "{date}", "description" => "metadata indexed before (inclusive) {date}"},
38
+ "from_deposit_date" => {"possible_values" => "{date}", "description" => "metadata last (re)deposited since (inclusive) {date}"},
39
+ "until_deposit_date" => {"possible_values" => "{date}", "description" => "metadata last (re)deposited before (inclusive) {date}"},
40
+ "from_update_date" => {"possible_values" => "{date}", "description" => "Metadata updated since (inclusive) {date} Currently the same as 'from_deposit_date'"},
41
+ "until_update_date" => {"possible_values" => "{date}", "description" => "Metadata updated before (inclusive) {date} Currently the same as 'until_deposit_date'"},
42
+ "from_created_date" => {"possible_values" => "{date}", "description" => "metadata first deposited since (inclusive) {date}"},
43
+ "until_created_date" => {"possible_values" => "{date}", "description" => "metadata first deposited before (inclusive) {date}"},
44
+ "from_pub_date" => {"possible_values" => "{date}", "description" => "metadata where published date is since (inclusive) {date}"},
45
+ "until_pub_date" => {"possible_values" => "{date}", "description" => "metadata where published date is before (inclusive) {date}"},
46
+ "from_online_pub_date" => {"possible_values" => "{date}", "description" => "metadata where online published date is since (inclusive) {date}"},
47
+ "until_online_pub_date" => {"possible_values" => "{date}", "description" => "metadata where online published date is before (inclusive) {date}"},
48
+ "from_print_pub_date" => {"possible_values" => "{date}", "description" => "metadata where print published date is since (inclusive) {date}"},
49
+ "until_print_pub_date" => {"possible_values" => "{date}", "description" => "metadata where print published date is before (inclusive) {date}"},
50
+ "from_posted_date" => {"possible_values" => "{date}", "description" => "metadata where posted date is since (inclusive) {date}"},
51
+ "until_posted_date" => {"possible_values" => "{date}", "description" => "metadata where posted date is before (inclusive) {date}"},
52
+ "from_accepted_date" => {"possible_values" => "{date}", "description" => "metadata where accepted date is since (inclusive) {date}"},
53
+ "until_accepted_date" => {"possible_values" => "{date}", "description" => "metadata where accepted date is before (inclusive) {date}"},
54
+ "has_license" => {"possible_values" => nil, "description" => "metadata that includes any '<license_ref>' elements"},
55
+ "license_url" => {"possible_values" => "{url}", "description" => "metadata where '<license_ref>' value equals {url}"},
56
+ "license_version" => {"possible_values" => "{string}", "description" => "metadata where the '<license_ref>''s 'applies_to' attribute is '{string}'"},
57
+ "license_delay" => {"possible_values" => "{integer}", "description" => "metadata where difference between publication date and the '<license_ref>''s 'start_date' attribute is <= '{integer}' (in days"},
58
+ "has_full_text" => {"possible_values" => nil, "description" => "metadata that includes any full text '<resource>' elements_"},
59
+ "full_text_version" => {"possible_values" => "{string}", "description" => "metadata where '<resource>' element's 'content_version' attribute is '{string}'"},
60
+ "full_text_type" => {"possible_values" => "{mime_type}", "description" => "metadata where '<resource>' element's 'content_type' attribute is '{mime_type}' (e.g. 'application/pdf')"},
61
+ "full_text_application" => {"possible_values" => "{string}", "description" => "metadata where <resource> link has one of the following intended applications: text-mining, similarity-checking or unspecified"},
62
+ "has_references" => {"possible_values" => nil, "description" => "metadata for works that have a list of references"},
63
+ "has_archive" => {"possible_values" => nil, "description" => "metadata which include name of archive partner"},
64
+ "archive" => {"possible_values" => "{string}", "description" => "metadata which where value of archive partner is '{string}'"},
65
+ "has_orcid" => {"possible_values" => nil, "description" => "metadata which includes one or more ORCIDs"},
66
+ "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"},
67
+ "orcid" => {"possible_values" => "{orcid}", "description" => "metadata where '<orcid>' element's value = '{orcid}'"},
68
+ "issn" => {"possible_values" => "{issn}", "description" => "metadata where record has an ISSN = '{issn}' Format is 'xxxx_xxxx'."},
69
+ "directory" => {"possible_values" => "{directory}", "description" => "metadata records whose article or serial are mentioned in the given '{directory}'. Currently the only supported value is 'doaj'"},
70
+ "doi" => {"possible_values" => "{doi}", "description" => "metadata describing the DOI '{doi}'"},
71
+ "updates" => {"possible_values" => "{doi}", "description" => "metadata for records that represent editorial updates to the DOI '{doi}'"},
72
+ "is_update" => {"possible_values" => nil, "description" => "metadata for records that represent editorial updates"},
73
+ "has_update_policy" => {"possible_values" => nil, "description" => "metadata for records that include a link to an editorial update policy"},
74
+ "container_title" => {"possible_values" => nil, "description" => "metadata for records with a publication title exactly with an exact match"},
75
+ "category_name" => {"possible_values" => nil, "description" => "metadata for records with an exact matching category label"},
76
+ "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"},
77
+ "type_name" => {"possible_values" => nil, "description" => "metadata for records with an exacty matching type label"},
78
+ "award_number" => {"possible_values" => "{award_number}", "description" => "metadata for records with a matching award nunber_ Optionally combine with 'award_funder'"},
79
+ "award_funder" => {"possible_values" => "{funder doi or id}", "description" => "metadata for records with an award with matching funder. Optionally combine with 'award_number'"},
80
+ "has_assertion" => {"possible_values" => nil, "description" => "metadata for records with any assertions"},
81
+ "assertion_group" => {"possible_values" => nil, "description" => "metadata for records with an assertion in a particular group"},
82
+ "assertion" => {"possible_values" => nil, "description" => "metadata for records with a particular named assertion"},
83
+ "has_affiliation" => {"possible_values" => nil, "description" => "metadata for records that have any affiliation information"},
84
+ "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"},
85
+ "article_number" => {"possible_values" => nil, "description" => "metadata for records with a given article number"},
86
+ "has_abstract" => {"possible_values" => nil, "description" => "metadata for records which include an abstract"},
87
+ "has_clinical_trial_number" => {"possible_values" => nil, "description" => "metadata for records which include a clinical trial number"},
88
+ "content_domain" => {"possible_values" => nil, "description" => "metadata where the publisher records a particular domain name as the location Crossmark content will appear"},
89
+ "has_content_domain" => {"possible_values" => nil, "description" => "metadata where the publisher records a domain name location for Crossmark content"},
90
+ "has_crossmark_restriction" => {"possible_values" => nil, "description" => "metadata where the publisher restricts Crossmark usage to content domains"},
91
+ "has_relation" => {"possible_values" => nil, "description" => "metadata for records that either assert or are the object of a relation"},
92
+ "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)"},
93
+ "relation_object" => {"possible_values" => nil, "description" => "Relations where the object identifier matches the identifier provided"},
94
+ "relation_object_type" => {"possible_values" => nil, "description" => "One of the identifier types from the Crossref relations schema (e.g. doi, issn)"},
95
+ "public_references" => {"possible_values" => nil, "description" => "metadata where publishers allow references to be distributed publically"},
96
+ "publisher_name" => {"possible_values" => nil, "description" => "metadata for records with an exact matching publisher name"},
97
+ "affiliation" => {"possible_values" => nil, "description" => "metadata for records with at least one contributor with the given affiliation"}
98
+ }.freeze
23
99
  end
24
100
  end
25
-
26
- $filter_details = {
27
- "has_funder" => { "possible_values" => nil, "description" => "metadata which includes one or more funder entry" },
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" },
30
- "prefix" => { "possible_values" => "{owner_prefix}", "description" => "metadata belonging to a DOI owner prefix {owner_prefix} (e.g. '10.1016' )" },
31
- "member" => { "possible_values" => "{member_id}", "description" => "metadata belonging to a CrossRef member" },
32
- "from_index_date" => { "possible_values" => '{date}', "description" => "metadata indexed since (inclusive) {date}" },
33
- "until_index_date" => { "possible_values" => '{date}', "description" => "metadata indexed before (inclusive) {date}" },
34
- "from_deposit_date" => { "possible_values" => '{date}', "description" => "metadata last (re)deposited since (inclusive) {date}" },
35
- "until_deposit_date" => { "possible_values" => '{date}', "description" => "metadata last (re)deposited before (inclusive) {date}" },
36
- "from_update_date" => { "possible_values" => '{date}', "description" => "Metadata updated since (inclusive) {date} Currently the same as 'from_deposit_date'" },
37
- "until_update_date" => { "possible_values" => '{date}', "description" => "Metadata updated before (inclusive) {date} Currently the same as 'until_deposit_date'" },
38
- "from_created_date" => { "possible_values" => '{date}', "description" => "metadata first deposited since (inclusive) {date}" },
39
- "until_created_date" => { "possible_values" => '{date}', "description" => "metadata first deposited before (inclusive) {date}" },
40
- "from_pub_date" => { "possible_values" => '{date}', "description" => "metadata where published date is since (inclusive) {date}" },
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}" },
50
- "has_license" => { "possible_values" => nil, "description" => "metadata that includes any '<license_ref>' elements" },
51
- "license_url" => { "possible_values" => '{url}', "description" => "metadata where '<license_ref>' value equals {url}" },
52
- "license_version" => { "possible_values" => '{string}', "description" => "metadata where the '<license_ref>''s 'applies_to' attribute is '{string}'"},
53
- "license_delay" => { "possible_values" => "{integer}", "description" => "metadata where difference between publication date and the '<license_ref>''s 'start_date' attribute is <= '{integer}' (in days"},
54
- "has_full_text" => { "possible_values" => nil, "description" => "metadata that includes any full text '<resource>' elements_" },
55
- "full_text_version" => { "possible_values" => '{string}' , "description" => "metadata where '<resource>' element's 'content_version' attribute is '{string}'" },
56
- "full_text_type" => { "possible_values" => '{mime_type}' , "description" => "metadata where '<resource>' element's 'content_type' attribute is '{mime_type}' (e.g. 'application/pdf')" },
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" },
58
- "has_references" => { "possible_values" => nil , "description" => "metadata for works that have a list of references" },
59
- "has_archive" => { "possible_values" => nil , "description" => "metadata which include name of archive partner" },
60
- "archive" => { "possible_values" => '{string}', "description" => "metadata which where value of archive partner is '{string}'" },
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"},
63
- "orcid" => { "possible_values" => '{orcid}', "description" => "metadata where '<orcid>' element's value = '{orcid}'" },
64
- "issn" => { "possible_values" => '{issn}', "description" => "metadata where record has an ISSN = '{issn}' Format is 'xxxx_xxxx'." },
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'" },
66
- "doi" => { "possible_values" => '{doi}', "description" => "metadata describing the DOI '{doi}'" },
67
- "updates" => { "possible_values" => '{doi}', "description" => "metadata for records that represent editorial updates to the DOI '{doi}'" },
68
- "is_update" => { "possible_values" => nil, "description" => "metadata for records that represent editorial updates" },
69
- "has_update_policy" => { "possible_values" => nil, "description" => "metadata for records that include a link to an editorial update policy" },
70
- "container_title" => { "possible_values" => nil, "description" => "metadata for records with a publication title exactly with an exact match" },
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" },
73
- "type_name" => { "possible_values" => nil, "description" => "metadata for records with an exacty matching type label" },
74
- "award_number" => { "possible_values" => "{award_number}", "description" => "metadata for records with a matching award nunber_ Optionally combine with 'award_funder'" },
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" },
77
- "assertion_group" => { "possible_values" => nil, "description" => "metadata for records with an assertion in a particular group" },
78
- "assertion" => { "possible_values" => nil, "description" => "metadata for records with a particular named assertion" },
79
- "has_affiliation" => { "possible_values" => nil, "description" => "metadata for records that have any affiliation information" },
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" },
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" },
83
- "has_clinical_trial_number" => { "possible_values" => nil, "description" => "metadata for records which include a clinical trial number" },
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" }
94
- }
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # taken from: https://viget.com/extend/easy-gem-configuration-variables-with-defaults
2
4
  module Configuration
3
-
4
5
  def configuration
5
6
  yield self
6
7
  end
@@ -22,5 +23,4 @@ module Configuration
22
23
  define_method name, &block
23
24
  end
24
25
  end
25
-
26
26
  end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "erb"
1
4
  require "faraday"
2
5
  require "multi_json"
3
6
  require "serrano/error"
4
- require "serrano/constants"
5
- require 'serrano/utils'
6
- require 'serrano/helpers/configuration'
7
+ require "serrano/utils"
8
+ require "serrano/helpers/configuration"
7
9
 
8
10
  ##
9
11
  # Serrano::Request
@@ -11,7 +13,6 @@ require 'serrano/helpers/configuration'
11
13
  # Class to perform HTTP requests to the Crossref API
12
14
  module Serrano
13
15
  class Request #:nodoc:
14
-
15
16
  attr_accessor :endpt
16
17
  attr_accessor :id
17
18
  attr_accessor :query
@@ -29,7 +30,7 @@ module Serrano
29
30
  attr_accessor :verbose
30
31
 
31
32
  def initialize(endpt, id, query, filter, offset,
32
- limit, sample, sort, order, facet, select,
33
+ limit, sample, sort, order, facet, select,
33
34
  works, agency, options, verbose)
34
35
 
35
36
  self.endpt = endpt
@@ -50,52 +51,53 @@ module Serrano
50
51
  end
51
52
 
52
53
  def perform
53
- filt = filter_handler(self.filter)
54
+ filt = filter_handler(filter)
54
55
 
55
- self.select = self.select.join(",") if self.select && self.select.class == Array
56
+ self.select = select.join(",") if select && select.class == Array
56
57
 
57
- args = { query: self.query, filter: filt, offset: self.offset,
58
- rows: self.limit, sample: self.sample, sort: self.sort,
59
- order: self.order, facet: self.facet,
60
- select: self.select }
61
- opts = args.delete_if { |k, v| v.nil? }
58
+ args = {query: query, filter: filt, offset: offset,
59
+ rows: limit, sample: sample, sort: sort,
60
+ order: order, facet: facet,
61
+ select: select}
62
+ opts = args.delete_if { |_k, v| v.nil? }
62
63
 
63
- if verbose
64
- conn = Faraday.new(:url => Serrano.base_url, :request => options || []) do |f|
64
+ conn = if verbose
65
+ Faraday.new(url: Serrano.base_url, request: options || []) do |f|
65
66
  f.response :logger
66
67
  f.use FaradayMiddleware::RaiseHttpException
67
- f.adapter Faraday.default_adapter
68
+ f.adapter Faraday.default_adapter
68
69
  end
69
70
  else
70
- conn = Faraday.new(:url => Serrano.base_url, :request => options || []) do |f|
71
+ Faraday.new(url: Serrano.base_url, request: options || []) do |f|
71
72
  f.use FaradayMiddleware::RaiseHttpException
72
- f.adapter Faraday.default_adapter
73
+ f.adapter Faraday.default_adapter
73
74
  end
74
75
  end
75
76
 
76
77
  conn.headers[:user_agent] = make_ua
77
78
  conn.headers["X-USER-AGENT"] = make_ua
78
79
 
79
- if self.id.nil?
80
- res = conn.get self.endpt, opts
81
- return MultiJson.load(res.body)
80
+ if id.nil?
81
+ res = conn.get endpt, opts
82
+ MultiJson.load(res.body)
82
83
  else
84
+ self.id = Array(id)
85
+ # url encoding
86
+ self.id = id.map { |x| ERB::Util.url_encode(x) }
83
87
  coll = []
84
- Array(self.id).each do |x|
85
- if self.works
86
- endpt = self.endpt + '/' + x.to_s + "/works"
88
+ id.each do |x|
89
+ endpt = if works
90
+ self.endpt + "/" + x.to_s + "/works"
91
+ elsif agency
92
+ self.endpt + "/" + x.to_s + "/agency"
87
93
  else
88
- if self.agency
89
- endpt = self.endpt + '/' + x.to_s + "/agency"
90
- else
91
- endpt = self.endpt + '/' + x.to_s
92
- end
94
+ self.endpt + "/" + x.to_s
93
95
  end
94
96
 
95
97
  res = conn.get endpt, opts
96
98
  coll << MultiJson.load(res.body)
97
99
  end
98
- return coll
100
+ coll
99
101
  end
100
102
  end
101
103
  end