Class: PubliSci::SADI_request
- Inherits:
-
Object
- Object
- PubliSci::SADI_request
- Defined in:
- lib/publisci/post_processor.rb
Class Method Summary collapse
- .fetch_async(service, turtle) ⇒ Object
- .poll(url) ⇒ Object
- .send_request(service, turtle) ⇒ Object
- .try_fetch(poll_url) ⇒ Object
Class Method Details
.fetch_async(service, turtle) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/publisci/post_processor.rb', line 9 def self.fetch_async(service,turtle) gr = send_request(service,turtle) rdfs = RDF::Vocabulary.new("http://www.w3.org/2000/01/rdf-schema#") polls = RDF::Query.execute(gr) do pattern [:obj, rdfs.isDefinedBy, :def] end poll_time = {} polls.map(&:def).select{|res| res.to_s["?poll="]}.each{|poll_url| poll_time[poll_url.to_s] = Time.now } results = [] until results.size == poll_time.keys.size poll_url = poll_time.sort_by{|k,v| v}.first.first t = Time.now if poll_time[poll_url] > t puts "no poll urls ready, sleeping #{poll_time[poll_url] - t}" sleep poll_time[poll_url] - t end result = poll(poll_url) if result.is_a? Fixnum puts "#{poll_url} Response not ready, waiting #{result}" poll_time[poll_url] = Time.now + result else results << result end end results end |
.poll(url) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/publisci/post_processor.rb', line 44 def self.poll(url) resp = RestClient.get(url, accept: 'text/rdf+n3'){ |response, request, result, &block| if [301, 302, 307].include? response.code wait = response.headers[:retry_after] if wait return wait.to_i else response.follow_redirection(request, result, &block) end else response.return!(request, result, &block) end } resp.body end |
.send_request(service, turtle) ⇒ Object
4 5 6 7 |
# File 'lib/publisci/post_processor.rb', line 4 def self.send_request(service, turtle) response = RestClient.post(service, turtle, content_type: 'text/rdf+n3', accept: 'text/rdf+n3') RDF::Repository.new << RDF::Turtle::Reader.new(response) end |
.try_fetch(poll_url) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/publisci/post_processor.rb', line 60 def self.try_fetch(poll_url) puts "polling #{poll_url}" loop do result = poll(poll_url) if result.is_a? Fixnum return result else return RDF::Repository.new << RDF::Turtle::Reader.new(result) end end end |