redminer 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/redminer.rb +3 -3
- data/lib/redminer/base.rb +10 -34
- data/lib/redminer/issue.rb +25 -33
- data/lib/redminer/server.rb +70 -0
- data/lib/redminer/user.rb +19 -0
- data/redminer.gemspec +4 -2
- metadata +6 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/lib/redminer.rb
CHANGED
@@ -2,6 +2,6 @@ require 'net/http'
|
|
2
2
|
require 'uri'
|
3
3
|
require 'json'
|
4
4
|
require 'yaml'
|
5
|
-
require 'redminer/base'
|
6
|
-
require 'redminer/issue'
|
7
|
-
|
5
|
+
require File.dirname(__FILE__) + '/redminer/base'
|
6
|
+
require File.dirname(__FILE__) + '/redminer/issue'
|
7
|
+
require File.dirname(__FILE__) + '/redminer/server'
|
data/lib/redminer/base.rb
CHANGED
@@ -1,46 +1,22 @@
|
|
1
1
|
module Redminer
|
2
2
|
class Base
|
3
|
-
attr_accessor :server
|
3
|
+
attr_accessor :server
|
4
4
|
|
5
5
|
def initialize(host, access_key, options = {})
|
6
|
-
|
7
|
-
@server = Net::HTTP.new(host, options[:port])
|
8
|
-
@access_key = access_key
|
6
|
+
@server = Server.new(host, access_key, options)
|
9
7
|
end
|
10
8
|
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
begin
|
16
|
-
if block_given?
|
17
|
-
yield server.request(req)
|
18
|
-
else
|
19
|
-
server.request(req).body
|
9
|
+
def all=(hash)
|
10
|
+
hash.each_pair { |k, v|
|
11
|
+
if respond_to?("#{k}=")
|
12
|
+
send("#{k}=", v)
|
20
13
|
end
|
21
|
-
|
22
|
-
|
23
|
-
end
|
14
|
+
}
|
15
|
+
self
|
24
16
|
end
|
25
17
|
|
26
|
-
def
|
27
|
-
|
28
|
-
value = case hash[key]
|
29
|
-
when Hash then hash[key].to_json
|
30
|
-
else hash[key].to_s
|
31
|
-
end
|
32
|
-
query_string << '&' unless key == hash.keys.first
|
33
|
-
query_string << "#{URI.encode(key.to_s)}=#{URI.encode(value)}"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def get(path, params = nil, &block); request(path, params, &block) end
|
38
|
-
def put(path, params = nil, &block); request(path, params, Net::HTTP::Put, &block) end
|
39
|
-
def post(path, params = nil, &block); request(path, params, Net::HTTP::Post, &block) end
|
40
|
-
def delete(path, params = nil, &block); request(path, params, Net::HTTP::Delete, &block) end
|
41
|
-
|
42
|
-
def issue(issue_key = nil)
|
43
|
-
Redminer::Issue.new(self, issue_key)
|
18
|
+
def method_missing(m, *args, &blk)
|
19
|
+
@server.send(m, *args, &blk)
|
44
20
|
end
|
45
21
|
end
|
46
22
|
end
|
data/lib/redminer/issue.rb
CHANGED
@@ -1,56 +1,48 @@
|
|
1
1
|
module Redminer
|
2
2
|
class Issue < Redminer::Base
|
3
|
-
attr_reader :
|
4
|
-
attr_accessor :author, :project
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
attr_reader :id
|
4
|
+
attr_accessor :author, :project,
|
5
|
+
:tracker, :status, :priority, :category,
|
6
|
+
:subject, :description,
|
7
|
+
:start_date, :due_date,
|
8
|
+
:created_on, :updated_on
|
9
9
|
|
10
|
-
def initialize(
|
11
|
-
@
|
10
|
+
def initialize(server, id = nil)
|
11
|
+
@server = server
|
12
12
|
unless id.nil?
|
13
13
|
@id = id
|
14
|
-
retrieve
|
14
|
+
self.retrieve
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
18
|
def retrieve
|
19
|
-
response =
|
19
|
+
response = server.get("/issues/#{id}.json")
|
20
20
|
raise "#{id} issue does not exists" if response.nil?
|
21
|
-
origin =
|
22
|
-
|
23
|
-
if respond_to?("#{k}=")
|
24
|
-
send("#{k}=", v)
|
25
|
-
end
|
26
|
-
}
|
21
|
+
origin = response["issue"]
|
22
|
+
self.all = origin
|
27
23
|
self
|
28
24
|
end
|
29
25
|
|
30
|
-
def self.exists?(id)
|
31
|
-
(self.new(id) and true) rescue false
|
32
|
-
end
|
33
|
-
|
34
26
|
def sync
|
35
27
|
(@id.nil? ? create : update)
|
36
28
|
end
|
37
29
|
|
38
30
|
def craete
|
39
|
-
|
40
|
-
:subject => @subject,
|
41
|
-
:description => @description,
|
42
|
-
:project => @project
|
43
|
-
}
|
44
|
-
base.post("/issues.json", params)
|
31
|
+
server.post("/issues.json", to_hash)
|
45
32
|
end
|
33
|
+
|
46
34
|
def update(note = nil)
|
47
|
-
params =
|
48
|
-
|
49
|
-
:description => @description,
|
50
|
-
:project => @project
|
51
|
-
}
|
52
|
-
params.merge!(:notes => note) unless note.nil?
|
53
|
-
base.put("/issues/#{id}.json", params)
|
35
|
+
params = to_hash.merge(:notes => note) unless note.nil?
|
36
|
+
server.put("/issues/#{id}.json", params)
|
54
37
|
end
|
38
|
+
|
39
|
+
private
|
40
|
+
def to_hash
|
41
|
+
{
|
42
|
+
:subject => @subject,
|
43
|
+
:description => @description,
|
44
|
+
:project => @project
|
45
|
+
}
|
46
|
+
end
|
55
47
|
end
|
56
48
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Redminer
|
2
|
+
class Server
|
3
|
+
attr_accessor :http, :access_key
|
4
|
+
attr_accessor :verbose, :reqtrace
|
5
|
+
|
6
|
+
def initialize(host, access_key, options = {})
|
7
|
+
options = {:port => 80}.merge(options)
|
8
|
+
@http = Net::HTTP.new(host, options[:port])
|
9
|
+
@access_key = access_key
|
10
|
+
@verbose = options[:verbose]
|
11
|
+
@reqtrace = options[:reqtrace]
|
12
|
+
end
|
13
|
+
|
14
|
+
def request(path, params = nil, obj = Net::HTTP::Get)
|
15
|
+
puts "requesting... #{http.address}:#{http.port}#{path} by #{obj}" if verbose
|
16
|
+
puts caller.join("\n ") if reqtrace
|
17
|
+
req = obj.new(path)
|
18
|
+
req.add_field('X-Redmine-API-Key', access_key)
|
19
|
+
req.body = hash_to_querystring(params) if not params.nil? and not params.empty?
|
20
|
+
begin
|
21
|
+
if block_given?
|
22
|
+
yield http.request(req)
|
23
|
+
else
|
24
|
+
response = http.request(req)
|
25
|
+
if response.code != "200"
|
26
|
+
raise "fail to request #{response.code}:#{response.message}"
|
27
|
+
end
|
28
|
+
return {} if response.body.nil? or response.body.strip.empty?
|
29
|
+
JSON.parse(response.body)
|
30
|
+
end
|
31
|
+
rescue Timeout::Error => e
|
32
|
+
raise e, "#{host}:#{port} timeout error", e.backtrace
|
33
|
+
rescue JSON::ParserError => e
|
34
|
+
raise e, "response json parsing error", e.backtrace
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def hash_to_querystring(hash)
|
39
|
+
hash.keys.inject('') do |query_string, key|
|
40
|
+
value = case hash[key]
|
41
|
+
when Hash then hash[key].to_json
|
42
|
+
else hash[key].to_s
|
43
|
+
end
|
44
|
+
query_string << '&' unless key == hash.keys.first
|
45
|
+
query_string << "#{URI.encode(key.to_s)}=#{URI.encode(value)}"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def get(path, params = nil, &block); request(path, params, &block) end
|
50
|
+
def put(path, params = nil, &block); request(path, params, Net::HTTP::Put, &block) end
|
51
|
+
def post(path, params = nil, &block); request(path, params, Net::HTTP::Post, &block) end
|
52
|
+
def delete(path, params = nil, &block); request(path, params, Net::HTTP::Delete, &block) end
|
53
|
+
|
54
|
+
def current_user
|
55
|
+
Redminer::User.current(self)
|
56
|
+
end
|
57
|
+
|
58
|
+
def working?
|
59
|
+
begin
|
60
|
+
current_user and true
|
61
|
+
rescue
|
62
|
+
false
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def issue(issue_key = nil)
|
67
|
+
Redminer::Issue.new(self, issue_key)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Redminer
|
2
|
+
class User
|
3
|
+
attr_reader :id
|
4
|
+
attr_accessor :login, :firstname, :lastname, :mail
|
5
|
+
|
6
|
+
def initialize(server, id = nil)
|
7
|
+
@id = id
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.current(server)
|
11
|
+
response = server.get('/users/current.json')
|
12
|
+
origin = response["user"]
|
13
|
+
c_user = self.new(server)
|
14
|
+
c_user.all = origin
|
15
|
+
c_user.instance_variable_get(:@id, origin["id"])
|
16
|
+
c_user
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/redminer.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "redminer"
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["insoul"]
|
12
|
-
s.date = "2012-04-
|
12
|
+
s.date = "2012-04-10"
|
13
13
|
s.description = "Redmine rest api client"
|
14
14
|
s.email = "insoul@thinkreals.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -26,6 +26,8 @@ Gem::Specification.new do |s|
|
|
26
26
|
"lib/redminer.rb",
|
27
27
|
"lib/redminer/base.rb",
|
28
28
|
"lib/redminer/issue.rb",
|
29
|
+
"lib/redminer/server.rb",
|
30
|
+
"lib/redminer/user.rb",
|
29
31
|
"redminer.gemspec",
|
30
32
|
"test/helper.rb",
|
31
33
|
"test/test_redminer.rb"
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redminer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 2
|
10
|
+
version: 0.1.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- insoul
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-04-
|
18
|
+
date: 2012-04-10 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
@@ -125,6 +125,8 @@ files:
|
|
125
125
|
- lib/redminer.rb
|
126
126
|
- lib/redminer/base.rb
|
127
127
|
- lib/redminer/issue.rb
|
128
|
+
- lib/redminer/server.rb
|
129
|
+
- lib/redminer/user.rb
|
128
130
|
- redminer.gemspec
|
129
131
|
- test/helper.rb
|
130
132
|
- test/test_redminer.rb
|