you_track 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/Rakefile +7 -0
- data/lib/you_track/client/mock.rb +25 -0
- data/lib/you_track/client/{comment.rb → models/comment.rb} +0 -0
- data/lib/you_track/client/{comments.rb → models/comments.rb} +0 -0
- data/lib/you_track/client/{issue.rb → models/issue.rb} +12 -8
- data/lib/you_track/client/{issues.rb → models/issues.rb} +0 -0
- data/lib/you_track/client/models/project.rb +33 -0
- data/lib/you_track/client/models/projects.rb +11 -0
- data/lib/you_track/client/models/user.rb +13 -0
- data/lib/you_track/client/models/users.rb +7 -0
- data/lib/you_track/client/real.rb +5 -1
- data/lib/you_track/client/requests/add_project_fix_version.rb +20 -0
- data/lib/you_track/client/{apply_issue_command.rb → requests/apply_issue_command.rb} +0 -0
- data/lib/you_track/client/{create_issue.rb → requests/create_issue.rb} +0 -2
- data/lib/you_track/client/requests/get_admin_user.rb +14 -0
- data/lib/you_track/client/requests/get_current_user.rb +14 -0
- data/lib/you_track/client/{get_issue.rb → requests/get_issue.rb} +0 -0
- data/lib/you_track/client/{get_issue_comments.rb → requests/get_issue_comments.rb} +0 -0
- data/lib/you_track/client/{get_issues.rb → requests/get_issues.rb} +1 -1
- data/lib/you_track/client/requests/get_project_custom_fields.rb +12 -0
- data/lib/you_track/client/requests/get_projects.rb +15 -0
- data/lib/you_track/client/requests/remove_project_fix_version.rb +20 -0
- data/lib/you_track/client/{update_issue.rb → requests/update_issue.rb} +0 -0
- data/lib/you_track/client.rb +29 -12
- data/lib/you_track/parser/comments_parser.rb +1 -0
- data/lib/you_track/parser/issues_parser.rb +1 -0
- data/lib/you_track/parser/project_custom_fields_parser.rb +6 -0
- data/lib/you_track/parser/projects_parser.rb +32 -0
- data/lib/you_track/parser/user_parser.rb +5 -0
- data/lib/you_track/parser.rb +13 -3
- data/lib/you_track/version.rb +1 -1
- data/lib/you_track.rb +2 -0
- metadata +25 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 955e0cbeff48652b234859b7f9dcd451ace204bb
|
4
|
+
data.tar.gz: 3f06505e3d48a2f81810fc57e3dd2f598d7fe374
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d0f07989847a8b6fce2b885e2434d23df4835f247ddae23bbf37d3551e978d15e77b809732de59be01f00b7ec9c8da43ea86f8d69bb4e13c2248f7e9f9042f7f
|
7
|
+
data.tar.gz: 05cba23274ba3d4f655ae550b2d039ed2fc20d014458655fef93420bad47aca7407d129f141e954c320e77c8f1d1a8f9209549bce6ac04899e61b10910257208
|
data/.travis.yml
CHANGED
data/Rakefile
CHANGED
@@ -6,6 +6,22 @@ class YouTrack::Client::Mock
|
|
6
6
|
h[k] = {
|
7
7
|
:issues => {},
|
8
8
|
:comments => {},
|
9
|
+
:users => {},
|
10
|
+
:projects => {
|
11
|
+
"YTD" => {
|
12
|
+
"name" => "You Track Dev",
|
13
|
+
"shortName" => "YTD",
|
14
|
+
"versions" => [],
|
15
|
+
"assignees" => {},
|
16
|
+
"isImporting" => "false",
|
17
|
+
"description" => "Fake project for YouTrack development",
|
18
|
+
}
|
19
|
+
},
|
20
|
+
:custom_fields => {
|
21
|
+
"YTD" => [
|
22
|
+
{"name" => "Fix versions", "url" => "https://foo.bar/rest/admin/project/YTD/customfield/Fix%20versions"}
|
23
|
+
]
|
24
|
+
}
|
9
25
|
}
|
10
26
|
}
|
11
27
|
end
|
@@ -33,6 +49,11 @@ class YouTrack::Client::Mock
|
|
33
49
|
def initialize(options={})
|
34
50
|
@url = URI.parse(options[:url])
|
35
51
|
@username = options[:username]
|
52
|
+
self.data[:users][@username] = {
|
53
|
+
:email => @username,
|
54
|
+
:full_name => Faker::Name.name,
|
55
|
+
:last_created_project => SecureRandom.hex(2),
|
56
|
+
}
|
36
57
|
end
|
37
58
|
|
38
59
|
def response(options={})
|
@@ -70,4 +91,8 @@ class YouTrack::Client::Mock
|
|
70
91
|
Faraday::Response::RaiseError.new.on_complete(env) ||
|
71
92
|
Faraday::Response.new(env)
|
72
93
|
end
|
94
|
+
|
95
|
+
def current_user
|
96
|
+
@current_user ||= users.current
|
97
|
+
end
|
73
98
|
end
|
File without changes
|
File without changes
|
@@ -41,19 +41,23 @@ class YouTrack::Client::Issue < YouTrack::Client::Model
|
|
41
41
|
self.reload
|
42
42
|
end
|
43
43
|
|
44
|
+
def project
|
45
|
+
service.projects.get(self.attributes[:project])
|
46
|
+
end
|
47
|
+
|
44
48
|
def save
|
45
49
|
if new_record?
|
46
50
|
requires :project, :summary
|
47
51
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
"permittedGroups" => self.permitted_group,
|
55
|
-
).body
|
52
|
+
service.create_issue(
|
53
|
+
"project" => self.attributes[:project],
|
54
|
+
"summary" => self.summary,
|
55
|
+
"description" => self.description,
|
56
|
+
"attachments" => self.attachments,
|
57
|
+
"permittedGroups" => self.permitted_group,
|
56
58
|
)
|
59
|
+
|
60
|
+
merge_attributes(project.issues.detect { |s| s.summary == summary }.attributes) # hacky, but the create request returns nothing
|
57
61
|
else
|
58
62
|
requires :identity
|
59
63
|
service.update_issue(
|
File without changes
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class YouTrack::Client::Project < YouTrack::Client::Model
|
2
|
+
identity :id, aliases: ["shortName"]
|
3
|
+
|
4
|
+
attribute :versions, type: :array
|
5
|
+
attribute :name
|
6
|
+
attribute :description
|
7
|
+
attribute :is_importing, type: :boolean, aliases: ["isImporting"]
|
8
|
+
attribute :assignees
|
9
|
+
|
10
|
+
def issues
|
11
|
+
service.issues.all(self.id)
|
12
|
+
end
|
13
|
+
|
14
|
+
def custom_fields
|
15
|
+
service.get_project_custom_fields(self.id).body
|
16
|
+
end
|
17
|
+
|
18
|
+
def add_version(version)
|
19
|
+
raise YouTrack::NotAnAdminError unless service.current_user.admin?
|
20
|
+
|
21
|
+
unless versions.include?(version)
|
22
|
+
service.add_project_fix_version('project' => self.id, 'version' => version)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def remove_version(version)
|
27
|
+
raise YouTrack::NotAnAdminError unless service.current_user.admin?
|
28
|
+
|
29
|
+
if versions.include?(version)
|
30
|
+
service.remove_project_fix_version('project' => self.id, 'version' => version)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class YouTrack::Client::User < YouTrack::Client::Model
|
2
|
+
identity :id, aliases: ["fullName", "email"]
|
3
|
+
|
4
|
+
attribute :last_created_project, aliases: ["lastCreatedProject"]
|
5
|
+
attribute :email, aliases: ["email"]
|
6
|
+
|
7
|
+
def admin? # just try to make a request to the admin api and see what happens
|
8
|
+
return @admin if defined?(@admin) # i love how ||= doesn't work when a variable is false
|
9
|
+
@admin = !!service.get_admin_user(self.id).body
|
10
|
+
rescue Faraday::ResourceNotFound
|
11
|
+
@admin = false
|
12
|
+
end
|
13
|
+
end
|
@@ -69,7 +69,7 @@ class YouTrack::Client::Real
|
|
69
69
|
method = options[:method] || :get
|
70
70
|
query = options[:query]
|
71
71
|
url = URI.parse(options[:url] || File.join(self.url.to_s, "/rest", options.fetch(:path)))
|
72
|
-
url.query = query.map { |k,v| "#{k}=#{URI.escape(v)}" }.join('&') if query
|
72
|
+
url.query = query.map { |k,v| "#{URI.escape(k)}=#{URI.escape(v.to_s)}" }.join('&') if query
|
73
73
|
params = options[:params] || {}
|
74
74
|
body = options[:body]
|
75
75
|
headers = options[:headers] || {}
|
@@ -94,4 +94,8 @@ class YouTrack::Client::Real
|
|
94
94
|
|
95
95
|
response
|
96
96
|
end
|
97
|
+
|
98
|
+
def current_user
|
99
|
+
@current_user ||= users.current
|
100
|
+
end
|
97
101
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class YouTrack::Client::AddProjectFixVersion < YouTrack::Client::Request
|
2
|
+
def real(params={})
|
3
|
+
project = params.delete("project")
|
4
|
+
version = params.delete("version")
|
5
|
+
|
6
|
+
service.request(
|
7
|
+
:path => "/admin/project/#{project}/version/#{version}",
|
8
|
+
:method => :put,
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
def mock(params={})
|
13
|
+
project = find(:projects, params.delete("project"))
|
14
|
+
version = params.delete("version")
|
15
|
+
|
16
|
+
project["versions"] << version
|
17
|
+
|
18
|
+
service.response
|
19
|
+
end
|
20
|
+
end
|
File without changes
|
@@ -4,7 +4,6 @@ class YouTrack::Client::CreateIssue < YouTrack::Client::Request
|
|
4
4
|
:path => "/issue",
|
5
5
|
:method => :put,
|
6
6
|
:params => params,
|
7
|
-
:parser => YouTrack::Parser::IssueParser,
|
8
7
|
)
|
9
8
|
end
|
10
9
|
|
@@ -41,7 +40,6 @@ class YouTrack::Client::CreateIssue < YouTrack::Client::Request
|
|
41
40
|
service.data[:issues][identity] = issue
|
42
41
|
|
43
42
|
service.response(
|
44
|
-
:body => issue,
|
45
43
|
:status => 201,
|
46
44
|
)
|
47
45
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class YouTrack::Client::GetAdminUser < YouTrack::Client::Request
|
2
|
+
def real(id)
|
3
|
+
service.request(
|
4
|
+
:path => "/admin/user/#{id}",
|
5
|
+
:parser => YouTrack::Parser::UserParser,
|
6
|
+
)
|
7
|
+
end
|
8
|
+
|
9
|
+
def mock(id)
|
10
|
+
service.response(
|
11
|
+
:body => find(:users, id)
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class YouTrack::Client::GetCurrentUser < YouTrack::Client::Request
|
2
|
+
def real
|
3
|
+
service.request(
|
4
|
+
:path => "/user/current",
|
5
|
+
:parser => YouTrack::Parser::UserParser,
|
6
|
+
)
|
7
|
+
end
|
8
|
+
|
9
|
+
def mock
|
10
|
+
service.response(
|
11
|
+
:body => find(:users, service.username)
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
File without changes
|
File without changes
|
@@ -8,7 +8,7 @@ class YouTrack::Client::GetIssues < YouTrack::Client::Request
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def mock(project, filters={})
|
11
|
-
issues = service.data[:issues].values
|
11
|
+
issues = service.data[:issues].values.select { |i| i["projectShortName"] == project }
|
12
12
|
|
13
13
|
# delete first n elements from the array
|
14
14
|
if filters["after"]
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class YouTrack::Client::GetProjectCustomFields < YouTrack::Client::Request
|
2
|
+
def real(id)
|
3
|
+
service.request(
|
4
|
+
:path => "/admin/project/#{id}/customfield",
|
5
|
+
:parser => YouTrack::Parser::ProjectCustomFieldsParser,
|
6
|
+
)
|
7
|
+
end
|
8
|
+
|
9
|
+
def mock(id)
|
10
|
+
service.response(body: find(:custom_fields, id))
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class YouTrack::Client::GetProjects < YouTrack::Client::Request
|
2
|
+
def real
|
3
|
+
service.request(
|
4
|
+
:path => "/project/all",
|
5
|
+
:parser => YouTrack::Parser::ProjectsParser,
|
6
|
+
:query => {"verbose" => true},
|
7
|
+
)
|
8
|
+
end
|
9
|
+
|
10
|
+
def mock
|
11
|
+
service.response(
|
12
|
+
:body => service.data[:projects].values
|
13
|
+
)
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class YouTrack::Client::RemoveProjectFixVersion < YouTrack::Client::Request
|
2
|
+
def real(params={})
|
3
|
+
project = params.delete("project")
|
4
|
+
version = params.delete("version")
|
5
|
+
|
6
|
+
service.request(
|
7
|
+
:path => "/admin/project/#{project}/version/#{version}",
|
8
|
+
:method => :delete,
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
def mock(params={})
|
13
|
+
project = find(:projects, params.delete("project"))
|
14
|
+
version = params.delete("version")
|
15
|
+
|
16
|
+
project["versions"].delete(version)
|
17
|
+
|
18
|
+
service.response
|
19
|
+
end
|
20
|
+
end
|
File without changes
|
data/lib/you_track/client.rb
CHANGED
@@ -4,20 +4,37 @@ end
|
|
4
4
|
|
5
5
|
require_relative "client/real"
|
6
6
|
require_relative "client/mock"
|
7
|
-
|
8
7
|
require_relative "client/model"
|
9
8
|
require_relative "client/request"
|
10
|
-
|
11
9
|
require_relative "client/login"
|
12
|
-
require_relative "client/get_issue"
|
13
|
-
require_relative "client/get_issues"
|
14
|
-
require_relative "client/create_issue"
|
15
|
-
require_relative "client/update_issue"
|
16
|
-
require_relative "client/apply_issue_command"
|
17
10
|
|
18
|
-
|
11
|
+
models = %w(
|
12
|
+
comment
|
13
|
+
issue
|
14
|
+
project
|
15
|
+
user
|
16
|
+
)
|
17
|
+
|
18
|
+
requests = %w(
|
19
|
+
add_project_fix_version
|
20
|
+
apply_issue_command
|
21
|
+
create_issue
|
22
|
+
get_admin_user
|
23
|
+
get_current_user
|
24
|
+
get_issue
|
25
|
+
get_issue_comments
|
26
|
+
get_issues
|
27
|
+
get_project_custom_fields
|
28
|
+
get_projects
|
29
|
+
remove_project_fix_version
|
30
|
+
update_issue
|
31
|
+
)
|
19
32
|
|
20
|
-
|
21
|
-
require_relative "client/
|
22
|
-
require_relative "client/
|
23
|
-
|
33
|
+
models.each do |model|
|
34
|
+
require_relative "client/models/#{model}"
|
35
|
+
require_relative "client/models/#{model}s"
|
36
|
+
end
|
37
|
+
|
38
|
+
requests.each do |request|
|
39
|
+
require_relative "client/requests/#{request}"
|
40
|
+
end
|
@@ -2,6 +2,7 @@ class YouTrack::Parser::IssuesParser < YouTrack::Parser::IssueParser
|
|
2
2
|
def parse
|
3
3
|
return [] if raw["issues"].nil? # i hate xml
|
4
4
|
results = raw["issues"]["issue"].dup # i really hate xml
|
5
|
+
results = [results] if results.is_a?(Hash)
|
5
6
|
|
6
7
|
results.each do |result|
|
7
8
|
fields = result.delete("field")
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class YouTrack::Parser::ProjectsParser < YouTrack::Parser::Base
|
2
|
+
def parse_assignees(login, full_name)
|
3
|
+
return {} unless login && full_name
|
4
|
+
login["sub"] = [login["sub"]] if login["sub"].is_a?(Hash)
|
5
|
+
full_name["sub"] = [full_name["sub"]] if full_name["sub"].is_a?(Hash)
|
6
|
+
login["sub"].each_with_index.inject({}) do |hash, (user,i)|
|
7
|
+
hash[user["value"]] = full_name["sub"][i]["value"]
|
8
|
+
hash
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def parse_versions(versions)
|
13
|
+
return [] unless versions
|
14
|
+
Array(versions.gsub(/(^\[|\]$)/, '').split(', '))
|
15
|
+
end
|
16
|
+
|
17
|
+
def parse
|
18
|
+
return [] if raw["projects"].nil?
|
19
|
+
results = raw["projects"]["project"].dup
|
20
|
+
results = [results] if results.is_a?(Hash)
|
21
|
+
results.each do |result|
|
22
|
+
login = result.delete("assigneesLogin")
|
23
|
+
full_name = result.delete("assigneesFullName")
|
24
|
+
versions = result.delete("versions")
|
25
|
+
|
26
|
+
result["assignees"] = parse_assignees(login, full_name)
|
27
|
+
result["versions"] = parse_versions(versions)
|
28
|
+
end
|
29
|
+
|
30
|
+
results
|
31
|
+
end
|
32
|
+
end
|
data/lib/you_track/parser.rb
CHANGED
@@ -2,6 +2,16 @@ module YouTrack::Parser
|
|
2
2
|
end
|
3
3
|
|
4
4
|
require_relative "parser/base"
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
|
6
|
+
parsers = %w(
|
7
|
+
comments
|
8
|
+
issue
|
9
|
+
issues
|
10
|
+
projects
|
11
|
+
user
|
12
|
+
project_custom_fields
|
13
|
+
)
|
14
|
+
|
15
|
+
parsers.each do |parser|
|
16
|
+
require_relative "parser/#{parser}_parser"
|
17
|
+
end
|
data/lib/you_track/version.rb
CHANGED
data/lib/you_track.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: you_track
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Lane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cistern
|
@@ -130,26 +130,39 @@ files:
|
|
130
130
|
- bin/setup
|
131
131
|
- lib/you_track.rb
|
132
132
|
- lib/you_track/client.rb
|
133
|
-
- lib/you_track/client/apply_issue_command.rb
|
134
|
-
- lib/you_track/client/comment.rb
|
135
|
-
- lib/you_track/client/comments.rb
|
136
|
-
- lib/you_track/client/create_issue.rb
|
137
|
-
- lib/you_track/client/get_issue.rb
|
138
|
-
- lib/you_track/client/get_issue_comments.rb
|
139
|
-
- lib/you_track/client/get_issues.rb
|
140
|
-
- lib/you_track/client/issue.rb
|
141
|
-
- lib/you_track/client/issues.rb
|
142
133
|
- lib/you_track/client/login.rb
|
143
134
|
- lib/you_track/client/mock.rb
|
144
135
|
- lib/you_track/client/model.rb
|
136
|
+
- lib/you_track/client/models/comment.rb
|
137
|
+
- lib/you_track/client/models/comments.rb
|
138
|
+
- lib/you_track/client/models/issue.rb
|
139
|
+
- lib/you_track/client/models/issues.rb
|
140
|
+
- lib/you_track/client/models/project.rb
|
141
|
+
- lib/you_track/client/models/projects.rb
|
142
|
+
- lib/you_track/client/models/user.rb
|
143
|
+
- lib/you_track/client/models/users.rb
|
145
144
|
- lib/you_track/client/real.rb
|
146
145
|
- lib/you_track/client/request.rb
|
147
|
-
- lib/you_track/client/
|
146
|
+
- lib/you_track/client/requests/add_project_fix_version.rb
|
147
|
+
- lib/you_track/client/requests/apply_issue_command.rb
|
148
|
+
- lib/you_track/client/requests/create_issue.rb
|
149
|
+
- lib/you_track/client/requests/get_admin_user.rb
|
150
|
+
- lib/you_track/client/requests/get_current_user.rb
|
151
|
+
- lib/you_track/client/requests/get_issue.rb
|
152
|
+
- lib/you_track/client/requests/get_issue_comments.rb
|
153
|
+
- lib/you_track/client/requests/get_issues.rb
|
154
|
+
- lib/you_track/client/requests/get_project_custom_fields.rb
|
155
|
+
- lib/you_track/client/requests/get_projects.rb
|
156
|
+
- lib/you_track/client/requests/remove_project_fix_version.rb
|
157
|
+
- lib/you_track/client/requests/update_issue.rb
|
148
158
|
- lib/you_track/parser.rb
|
149
159
|
- lib/you_track/parser/base.rb
|
150
160
|
- lib/you_track/parser/comments_parser.rb
|
151
161
|
- lib/you_track/parser/issue_parser.rb
|
152
162
|
- lib/you_track/parser/issues_parser.rb
|
163
|
+
- lib/you_track/parser/project_custom_fields_parser.rb
|
164
|
+
- lib/you_track/parser/projects_parser.rb
|
165
|
+
- lib/you_track/parser/user_parser.rb
|
153
166
|
- lib/you_track/version.rb
|
154
167
|
- you_track.gemspec
|
155
168
|
homepage: https://github.com/lanej/you_track.git
|