Sha256: 7aaf73222a11ae422b04b87c23c2c35252ad9ffb0f561f0ca03c74c2972b000e

Contents?: true

Size: 1.77 KB

Versions: 3

Compression:

Stored size: 1.77 KB

Contents

require 'net/http'
require 'uri'
require 'cgi'
require 'json'
require "hashie"

class Climine::Redmine
  attr_reader :config

  def initialize config
    @config = config
  end

  def issue id, query={}
    get(build_url("/issues/#{id}.json", query))
  end
  def issues query={}
    get(build_url("/issues.json", query))
  end
  def create_issue issue
    post(build_url("/issues.json"), {issue: issue})
  end
  def user id, query={}
    get(build_url("/users/#{id}.json", query))
  end
  def users query={}
    get(build_url("/users.json", query))
  end
  def project id, query={}
    get(build_url("/projects/#{id}.json", query))
  end
  def projects query={}
    get(build_url("/projects.json", query))
  end
  def trackers
    get(build_url("/trackers.json"))
  end
  def statuses
    get(build_url("/issue_statuses.json"))
  end
  def members id
    get(build_url("/projects/#{id}/memberships.json"))
  end

  private
  def get url
    res = Net::HTTP.get_response(URI.parse(url))
    json = case res.code.to_i
           when 200
             JSON.parse(res.body)
           else
             { error: true }
           end
    Hashie::Mash.new json
  end
  def post url, content
    uri = URI(url)

    req = Net::HTTP::Post.new uri, initheader = {'Content-Type' =>'application/json'}
    req.body = content.to_json

    res = Net::HTTP.start(uri.host, uri.port, use_ssl: (uri.scheme == "https")) do |http|
      http.request req
    end

    json = case res.code.to_i
           when 201
             JSON.parse(res.body)
           else
             { error: true }
           end
    Hashie::Mash.new json
  end

  def build_url path, query={}
    query[:key] = config.apikey
    params = query.map{|(key, value)| "#{key}=#{CGI.escape(value.to_s)}"}.join("&")
    "#{config.url}#{path}?#{params}"
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
climine-0.0.4 lib/climine/redmine.rb
climine-0.0.3 lib/climine/redmine.rb
climine-0.0.2 lib/climine/redmine.rb