serrano 0.5.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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