Sha256: d7d1233d929b33312cd0c0d25c26412c697a183caea92ac12c94a892c363948e

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

require 'json'
require 'net/http'

require "extreme_feedback_device/job"

module ExtremeFeedbackDevice
  class Jenkins < ::Struct.new(:user, :token, :base_url)
    def full_url
      ::File.join(base_url, 'api', 'json?tree=jobs[name,color,healthReport[score]]')
    end

    def full_uri
      URI(full_url)
    end

    def jobs
      json = get_json
      jobs_from_json(json) if json.is_a?(String)
    end

  private

    def jobs_from_json(json)
      json_objects = []
      begin
        json_objects = ::JSON.parse(json)
      rescue ::JSON::JSONError
      end

      json_objects["jobs"].map { |json_object| ExtremeFeedbackDevice::Job.from_json_object(json_object) }
    end

    def get_json
      request = ::Net::HTTP::Get.new(full_uri)
      request.basic_auth(user, token)

      response = nil
      begin
        response = ::Net::HTTP.start(full_uri.hostname, full_uri.port) do |http|
          http.request(request)
        end
      rescue SocketError => e
        response = e
      end

      if response.is_a?(::Net::HTTPSuccess)
        return response.body
      else
        return nil
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
extreme_feedback_device-0.0.3 lib/extreme_feedback_device/jenkins.rb