class ArcServer::REST::GPServer

Attributes

url[R]

The REST url of a map service

Public Class Methods

new(url) click to toggle source

@param [String] url the REST url of a map service @example

ArcServer::GPServer.new("http://sampleserver2.arcgisonline.com/ArcGIS/rest/services/PublicSafety/EMModels/GPServer/ERGByChemical")
# File lib/arcserver/rest/gp_server.rb, line 17
def initialize(url)
  @url = url
end

Public Instance Methods

build_params(results, esri_job_id) click to toggle source
# File lib/arcserver/rest/gp_server.rb, line 30
def build_params(results, esri_job_id)

  all_params = {}
  results['results'].each do |r|
    result_param = self.class.get("#{url}/jobs/#{esri_job_id}/#{r[1]['paramUrl']}", query: { f: 'json' }).with_indifferent_access
    case result_param['dataType']
      when 'GPFeatureRecordSetLayer'
        all_params[result_param['paramName']] = Graphics::FeatureSet.new(result_param['value'])
      else
        all_params[result_param['paramName']] = result_param['value']
    end
  end
  all_params.with_indifferent_access
end
checkJobStatus() click to toggle source
# File lib/arcserver/rest/gp_server.rb, line 26
def checkJobStatus
  @status
end
execute(params) click to toggle source
# File lib/arcserver/rest/gp_server.rb, line 21
def execute(params)
  defaults = { f: 'json' }.merge(params)
  self.class.get("#{url}/execute", query: defaults)['results']
end
submitJob(params) { |build_params(results, esri_job_id)| ... } click to toggle source
# File lib/arcserver/rest/gp_server.rb, line 45
def submitJob(params)

  defaults = { f: 'json' }.merge(params)
  esri_job_id = self.class.get("#{url}/submitJob", query: defaults)['jobId']

  s = Rufus::Scheduler.new
  s.every '2s' do |job|

    results = self.class.get("#{url}/jobs/#{esri_job_id}", query: { f: 'json' })
    @status = results['jobStatus']

    case @status
      when 'esriJobSucceeded'
        yield build_params(results, esri_job_id)
        s.shutdown
      when 'esriJobWaiting'
        nil
      when 'esriJobSubmitted'
        nil
      when 'esriJobExecuting'
        nil
      when 'esriJobCancelled'
        nil
      when 'esriJobFailed'
        nil
      when 'esriJobCancelling'
        nil
    end
  end
  s.join

end