Class: Serrano::RequestCursor
- Inherits:
-
Object
- Object
- Serrano::RequestCursor
- Includes:
- Helpers
- Defined in:
- lib/serrano/filterhandler.rb,
lib/serrano/request_cursor.rb
Overview
:nodoc:
Instance Attribute Summary collapse
-
#agency ⇒ Object
Returns the value of attribute agency.
-
#args ⇒ Object
Returns the value of attribute args.
-
#cursor ⇒ Object
Returns the value of attribute cursor.
-
#cursor_max ⇒ Object
Returns the value of attribute cursor_max.
-
#endpt ⇒ Object
Returns the value of attribute endpt.
-
#facet ⇒ Object
Returns the value of attribute facet.
-
#filter ⇒ Object
Returns the value of attribute filter.
-
#id ⇒ Object
Returns the value of attribute id.
-
#limit ⇒ Object
Returns the value of attribute limit.
-
#offset ⇒ Object
Returns the value of attribute offset.
-
#options ⇒ Object
Returns the value of attribute options.
-
#order ⇒ Object
Returns the value of attribute order.
-
#query ⇒ Object
Returns the value of attribute query.
-
#sample ⇒ Object
Returns the value of attribute sample.
-
#select ⇒ Object
Returns the value of attribute select.
-
#sort ⇒ Object
Returns the value of attribute sort.
-
#verbose ⇒ Object
Returns the value of attribute verbose.
-
#works ⇒ Object
Returns the value of attribute works.
Instance Method Summary collapse
- #_redo_req(conn, js, opts, cu, max_avail, endpt2) ⇒ Object
- #_req(conn, path, opts) ⇒ Object
-
#initialize(endpt, id, query, filter, offset, limit, sample, sort, order, facet, select, works, agency, options, verbose, cursor, cursor_max, args) ⇒ RequestCursor
constructor
A new instance of RequestCursor.
- #perform ⇒ Object
Methods included from Helpers
#filter_handler, #rename_keys, #stringify
Constructor Details
#initialize(endpt, id, query, filter, offset, limit, sample, sort, order, facet, select, works, agency, options, verbose, cursor, cursor_max, args) ⇒ RequestCursor
Returns a new instance of RequestCursor.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/serrano/request_cursor.rb', line 38 def initialize(endpt, id, query, filter, offset, limit, sample, sort, order, facet, select, works, agency, , verbose, cursor, cursor_max, args) self.endpt = endpt self.id = id self.query = query self.filter = filter self.offset = offset self.limit = limit self.sample = sample self.sort = sort self.order = order self.facet = facet self.select = select self.works = works self.agency = agency self. = self.verbose = verbose self.cursor = cursor self.cursor_max = cursor_max self.args = args end |
Instance Attribute Details
#agency ⇒ Object
Returns the value of attribute agency.
31 32 33 |
# File 'lib/serrano/request_cursor.rb', line 31 def agency @agency end |
#args ⇒ Object
Returns the value of attribute args.
36 37 38 |
# File 'lib/serrano/request_cursor.rb', line 36 def args @args end |
#cursor ⇒ Object
Returns the value of attribute cursor.
34 35 36 |
# File 'lib/serrano/request_cursor.rb', line 34 def cursor @cursor end |
#cursor_max ⇒ Object
Returns the value of attribute cursor_max.
35 36 37 |
# File 'lib/serrano/request_cursor.rb', line 35 def cursor_max @cursor_max end |
#endpt ⇒ Object
Returns the value of attribute endpt.
19 20 21 |
# File 'lib/serrano/request_cursor.rb', line 19 def endpt @endpt end |
#facet ⇒ Object
Returns the value of attribute facet.
28 29 30 |
# File 'lib/serrano/request_cursor.rb', line 28 def facet @facet end |
#filter ⇒ Object
Returns the value of attribute filter.
22 23 24 |
# File 'lib/serrano/request_cursor.rb', line 22 def filter @filter end |
#id ⇒ Object
Returns the value of attribute id.
20 21 22 |
# File 'lib/serrano/request_cursor.rb', line 20 def id @id end |
#limit ⇒ Object
Returns the value of attribute limit.
24 25 26 |
# File 'lib/serrano/request_cursor.rb', line 24 def limit @limit end |
#offset ⇒ Object
Returns the value of attribute offset.
23 24 25 |
# File 'lib/serrano/request_cursor.rb', line 23 def offset @offset end |
#options ⇒ Object
Returns the value of attribute options.
32 33 34 |
# File 'lib/serrano/request_cursor.rb', line 32 def @options end |
#order ⇒ Object
Returns the value of attribute order.
27 28 29 |
# File 'lib/serrano/request_cursor.rb', line 27 def order @order end |
#query ⇒ Object
Returns the value of attribute query.
21 22 23 |
# File 'lib/serrano/request_cursor.rb', line 21 def query @query end |
#sample ⇒ Object
Returns the value of attribute sample.
25 26 27 |
# File 'lib/serrano/request_cursor.rb', line 25 def sample @sample end |
#select ⇒ Object
Returns the value of attribute select.
29 30 31 |
# File 'lib/serrano/request_cursor.rb', line 29 def select @select end |
#sort ⇒ Object
Returns the value of attribute sort.
26 27 28 |
# File 'lib/serrano/request_cursor.rb', line 26 def sort @sort end |
#verbose ⇒ Object
Returns the value of attribute verbose.
33 34 35 |
# File 'lib/serrano/request_cursor.rb', line 33 def verbose @verbose end |
#works ⇒ Object
Returns the value of attribute works.
30 31 32 |
# File 'lib/serrano/request_cursor.rb', line 30 def works @works end |
Instance Method Details
#_redo_req(conn, js, opts, cu, max_avail, endpt2) ⇒ Object
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/serrano/request_cursor.rb', line 126 def _redo_req(conn, js, opts, cu, max_avail, endpt2) if !cu.nil? && (cursor_max > js["message"]["items"].length) res = [js] total = js["message"]["items"].length while !cu.nil? && (cursor_max > total) && (total < max_avail) opts[:cursor] = cu out = _req(conn, endpt2, opts) cu = out["message"]["next-cursor"] res << out total = res.collect { |x| x["message"]["items"].length }.sum end res else js end end |
#_req(conn, path, opts) ⇒ Object
143 144 145 146 |
# File 'lib/serrano/request_cursor.rb', line 143 def _req(conn, path, opts) res = conn.get path, opts MultiJson.load(res.body) end |
#perform ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/serrano/request_cursor.rb', line 62 def perform filt = filter_handler(filter) fieldqueries = field_query_handler(args) self.select = select&.instance_of?(Array) ? select.join(",") : select unless cursor_max.class.nil? raise "cursor_max must be of class int" unless cursor_max.is_a?(Integer) end arguments = {query: query, filter: filt, offset: offset, rows: limit, sample: sample, sort: sort, order: order, facet: facet, select: select, cursor: cursor}.tostrings arguments = arguments.merge(fieldqueries) opts = arguments.delete_if { |_k, v| v.nil? } conn = if verbose Faraday.new(url: Serrano.base_url, request: || {}) do |f| f.response :logger f.use Faraday::FollowRedirects::Middleware f.use Faraday::SerranoErrors::Middleware end else Faraday.new(url: Serrano.base_url, request: || {}) do |f| f.use Faraday::FollowRedirects::Middleware f.use Faraday::SerranoErrors::Middleware end end conn.headers[:user_agent] = make_ua conn.headers["X-USER-AGENT"] = make_ua if id.nil? endpt2 = endpt js = _req(conn, endpt, opts) cu = js["message"]["next-cursor"] max_avail = js["message"]["total-results"] _redo_req(conn, js, opts, cu, max_avail, endpt2) else self.id = Array(id) # url encoding self.id = id.map { |x| ERB::Util.url_encode(x) } coll = [] id.each do |x| endpt2 = if works endpt + "/" + x.to_s + "/works" else endpt2 = if agency endpt + "/" + x.to_s + "/agency" else endpt + "/" + x.to_s end end js = _req(conn, endpt2, opts) cu = js["message"]["next-cursor"] max_avail = js["message"]["total-results"] coll << _redo_req(conn, js, opts, cu, max_avail, endpt2) end coll end end |