Class: Serrano::RequestCursor

Inherits:
Object
  • Object
show all
Includes:
Helpers
Defined in:
lib/serrano/filterhandler.rb,
lib/serrano/request_cursor.rb

Overview

:nodoc:

Instance Attribute Summary collapse

Instance Method Summary collapse

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
61
# File 'lib/serrano/request_cursor.rb', line 38

def initialize(endpt, id, query, filter, offset,
  limit, sample, sort, order, facet, select, 
  works, agency, options, 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.options = options
  self.verbose = verbose
  self.cursor = cursor
  self.cursor_max = cursor_max
  self.args = args
end

Instance Attribute Details

#agencyObject

Returns the value of attribute agency.



31
32
33
# File 'lib/serrano/request_cursor.rb', line 31

def agency
  @agency
end

#argsObject

Returns the value of attribute args.



36
37
38
# File 'lib/serrano/request_cursor.rb', line 36

def args
  @args
end

#cursorObject

Returns the value of attribute cursor.



34
35
36
# File 'lib/serrano/request_cursor.rb', line 34

def cursor
  @cursor
end

#cursor_maxObject

Returns the value of attribute cursor_max.



35
36
37
# File 'lib/serrano/request_cursor.rb', line 35

def cursor_max
  @cursor_max
end

#endptObject

Returns the value of attribute endpt.



19
20
21
# File 'lib/serrano/request_cursor.rb', line 19

def endpt
  @endpt
end

#facetObject

Returns the value of attribute facet.



28
29
30
# File 'lib/serrano/request_cursor.rb', line 28

def facet
  @facet
end

#filterObject

Returns the value of attribute filter.



22
23
24
# File 'lib/serrano/request_cursor.rb', line 22

def filter
  @filter
end

#idObject

Returns the value of attribute id.



20
21
22
# File 'lib/serrano/request_cursor.rb', line 20

def id
  @id
end

#limitObject

Returns the value of attribute limit.



24
25
26
# File 'lib/serrano/request_cursor.rb', line 24

def limit
  @limit
end

#offsetObject

Returns the value of attribute offset.



23
24
25
# File 'lib/serrano/request_cursor.rb', line 23

def offset
  @offset
end

#optionsObject

Returns the value of attribute options.



32
33
34
# File 'lib/serrano/request_cursor.rb', line 32

def options
  @options
end

#orderObject

Returns the value of attribute order.



27
28
29
# File 'lib/serrano/request_cursor.rb', line 27

def order
  @order
end

#queryObject

Returns the value of attribute query.



21
22
23
# File 'lib/serrano/request_cursor.rb', line 21

def query
  @query
end

#sampleObject

Returns the value of attribute sample.



25
26
27
# File 'lib/serrano/request_cursor.rb', line 25

def sample
  @sample
end

#selectObject

Returns the value of attribute select.



29
30
31
# File 'lib/serrano/request_cursor.rb', line 29

def select
  @select
end

#sortObject

Returns the value of attribute sort.



26
27
28
# File 'lib/serrano/request_cursor.rb', line 26

def sort
  @sort
end

#verboseObject

Returns the value of attribute verbose.



33
34
35
# File 'lib/serrano/request_cursor.rb', line 33

def verbose
  @verbose
end

#worksObject

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(js, opts, cu, max_avail) ⇒ 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(js, opts, cu, max_avail)
  if !cu.nil? and self.cursor_max > js['message']['items'].length
    res = [js]
    total = js['message']['items'].length
    while !cu.nil? and self.cursor_max > total and total < max_avail do
      opts[:cursor] = cu
      out = self._req($endpt2, opts)
      cu = out['message']['next-cursor']
      res << out
      total = res.collect {|x| x['message']['items'].length}.reduce(0, :+)
    end
    return res
  else
    return js
  end
end

#_req(path, opts) ⇒ Object



143
144
145
146
# File 'lib/serrano/request_cursor.rb', line 143

def _req(path, opts)
  res = $conn.get path, opts
  return MultiJson.load(res.body)
end

#performObject



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 63

def perform
  filt = filter_handler(self.filter)
  fieldqueries = field_query_handler(self.args)
  self.select = self.select.join(",") if self.select && self.select.class == Array

  if self.cursor_max.class != nil
    if !self.cursor_max.kind_of?(Integer)
      raise "cursor_max must be of class int"
    end
  end

  arguments = { query: self.query, filter: filt, offset: self.offset,
          rows: self.limit, sample: self.sample, sort: self.sort,
          order: self.order, facet: self.facet, select: self.select, 
          cursor: self.cursor }.tostrings
  arguments = arguments.merge(fieldqueries)
  opts = arguments.delete_if { |k, v| v.nil? }

  if verbose
    $conn = Faraday.new(:url => Serrano.base_url, :request => options || []) do |f|
      f.response :logger
      f.use FaradayMiddleware::RaiseHttpException
      f.adapter Faraday.default_adapter
    end
  else
    $conn = Faraday.new(:url => Serrano.base_url, :request => options || []) do |f|
      f.use FaradayMiddleware::RaiseHttpException
      f.adapter Faraday.default_adapter
    end
  end

  $conn.headers[:user_agent] = make_ua
  $conn.headers["X-USER-AGENT"] = make_ua

  if self.id.nil?
    $endpt2 = self.endpt
    js = self._req(self.endpt, opts)
    cu = js['message']['next-cursor']
    max_avail = js['message']['total-results']
    res = self._redo_req(js, opts, cu, max_avail)
    return res
  else
    coll = []
    Array(self.id).each do |x|
      if self.works
        $endpt2 = self.endpt + '/' + x.to_s + "/works"
      else
        if self.agency
          $endpt2 = self.endpt + '/' + x.to_s + "/agency"
        else
          $endpt2 = self.endpt + '/' + x.to_s
        end
      end

      js = self._req($endpt2, opts)
      cu = js['message']['next-cursor']
      max_avail = js['message']['total-results']
      coll << self._redo_req(js, opts, cu, max_avail)
    end
    return coll
  end
end