youtrack_on_rails 0.0.1
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.
- checksums.yaml +15 -0
- data/lib/youtrack_on_rails.rb +15 -0
- data/lib/youtrack_on_rails/Requests/base.rb +57 -0
- data/lib/youtrack_on_rails/Requests/get.rb +9 -0
- data/lib/youtrack_on_rails/Requests/list_projects.rb +9 -0
- data/lib/youtrack_on_rails/Requests/post.rb +9 -0
- data/lib/youtrack_on_rails/Requests/sign_in.rb +9 -0
- data/lib/youtrack_on_rails/connection.rb +44 -0
- data/lib/youtrack_on_rails/requests.rb +11 -0
- data/lib/youtrack_on_rails/responses.rb +11 -0
- data/lib/youtrack_on_rails/responses/base.rb +29 -0
- data/lib/youtrack_on_rails/responses/collection_response.rb +27 -0
- data/lib/youtrack_on_rails/responses/list_projects.rb +11 -0
- data/lib/youtrack_on_rails/responses/sign_in.rb +6 -0
- data/lib/youtrack_on_rails/responses/simple_response.rb +8 -0
- data/lib/youtrack_on_rails/version.rb +3 -0
- metadata +59 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
OGYzNWQzNDZhOTAyZDc1OWVjYmRhZjA5MDM1ODI0NDYxMWVhMTFlMg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YTE0YWU0MWUyZjg3YjQ3YTk3MDA5ZGI0ZGM2OTU4NjlmZGM1YTU0MA==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZmJhMzg0OTllMDY1OTM5ZDVmMGRmODlmNThlYzE4MjY0YmI1ZDUzMzMzOGMw
|
10
|
+
YjFjNzliNjVhMWRjN2U4NzNiMzU3MTI0ZWI0MDJiYTFmMDBmODU3MTVkNjlk
|
11
|
+
YzI3YWQzNTE5ZDI5YzQ0NWFmZWEyOTA1YjFjZGZlYjUzN2MyMTc=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MzI3YzI0NDI2MWZlODY1NTAwYTMyN2ZiZmU0MDllZmRiZmNhNDhhOTY4YmNl
|
14
|
+
YWE1M2U2M2U2ZTFmZjk4NGFiMzNkODhlODQxOTM2NjAwNWQ3MDYyZTIwNjk5
|
15
|
+
NzQyYzgyMGJlMDlhYWM1YjcwNDJlMmRkNWQ5MDk1YjliOWY4OGE=
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#http://confluence.jetbrains.com/display/YTD5/YouTrack+REST+API+Reference
|
2
|
+
|
3
|
+
module YoutrackOnRails
|
4
|
+
extend ActiveSupport::Autoload
|
5
|
+
|
6
|
+
autoload :Connection
|
7
|
+
autoload :Requests
|
8
|
+
autoload :Responses
|
9
|
+
|
10
|
+
mattr_accessor :login, :password, :url
|
11
|
+
|
12
|
+
def self.setup
|
13
|
+
yield self
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module YoutrackOnRails
|
2
|
+
module Requests
|
3
|
+
class Base
|
4
|
+
attr_reader :connection, :raw_body, :content_type, :params
|
5
|
+
delegate :cookie, to: :connection
|
6
|
+
delegate :uri, to: :connection, prefix: true
|
7
|
+
|
8
|
+
def initialize(connection, params={})
|
9
|
+
@connection = connection
|
10
|
+
@params = params
|
11
|
+
@content_type = @params.delete(:content_type)
|
12
|
+
@raw_body = @params.delete(:raw_body)
|
13
|
+
end
|
14
|
+
|
15
|
+
def perform
|
16
|
+
response.process
|
17
|
+
end
|
18
|
+
|
19
|
+
def response
|
20
|
+
response_class.new(http_response)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def response_class
|
26
|
+
"YoutrackOnRails::Responses::#{self.class.name.demodulize}".constantize
|
27
|
+
end
|
28
|
+
|
29
|
+
def processed_url
|
30
|
+
url.gsub(/\/(:\w+)/) { |match| match.gsub($1, params.delete($1[1..-1].to_sym).to_s) }
|
31
|
+
end
|
32
|
+
|
33
|
+
def http_request
|
34
|
+
http_class.new(endpoint_uri).tap do |request|
|
35
|
+
request.body = raw_body.to_s
|
36
|
+
request.add_field("Cookie", cookie) if cookie
|
37
|
+
request.set_content_type(content_type) if content_type
|
38
|
+
request.set_form_data(params) if params.present?
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def endpoint_uri
|
43
|
+
(connection_uri.path + processed_url).tap do |_endpoint_uri|
|
44
|
+
_endpoint_uri += "?#{URI.encode_www_form(params)}" if http_method == 'get'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def http_response
|
49
|
+
connection.request(http_request)
|
50
|
+
end
|
51
|
+
|
52
|
+
def http_class
|
53
|
+
"Net::HTTP::#{http_method.camelize}".constantize
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'net/http'
|
3
|
+
|
4
|
+
module YoutrackOnRails
|
5
|
+
class Connection
|
6
|
+
attr_reader :http, :uri, :cookie
|
7
|
+
delegate :request, to: :http
|
8
|
+
private :http
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@uri = URI.parse(YoutrackOnRails.url)
|
12
|
+
@http = Net::HTTP.new(@uri.host, @uri.port)
|
13
|
+
|
14
|
+
if @uri.is_a? URI::HTTPS
|
15
|
+
@http.use_ssl = true
|
16
|
+
@http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
17
|
+
end
|
18
|
+
|
19
|
+
response = YoutrackOnRails::Requests::SignIn.new(self,
|
20
|
+
login: YoutrackOnRails.login,
|
21
|
+
password: YoutrackOnRails.password).response
|
22
|
+
|
23
|
+
@cookie = response.cookie
|
24
|
+
end
|
25
|
+
|
26
|
+
def method_missing(method_name, *args, &block)
|
27
|
+
if (request_class = request_class_for_method(method_name))
|
28
|
+
params = args.extract_options!
|
29
|
+
return request_class.new(self, params).perform
|
30
|
+
end
|
31
|
+
super
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def request_class_for_method(method_name)
|
37
|
+
begin
|
38
|
+
"YoutrackOnRails::Requests::#{method_name.to_s.camelize}".constantize
|
39
|
+
rescue NameError
|
40
|
+
nil
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module YoutrackOnRails
|
2
|
+
module Requests
|
3
|
+
autoload :Base, 'youtrack_on_rails/requests/base'
|
4
|
+
|
5
|
+
autoload :Get, 'youtrack_on_rails/requests/get'
|
6
|
+
autoload :Post, 'youtrack_on_rails/requests/post'
|
7
|
+
|
8
|
+
autoload :ListProjects, 'youtrack_on_rails/requests/list_projects'
|
9
|
+
autoload :SignIn, 'youtrack_on_rails/requests/sign_in'
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module YoutrackOnRails
|
2
|
+
module Responses
|
3
|
+
autoload :Base, 'youtrack_on_rails/responses/base'
|
4
|
+
|
5
|
+
autoload :SimpleResponse, 'youtrack_on_rails/responses/simple_response'
|
6
|
+
autoload :CollectionResponse, 'youtrack_on_rails/responses/collection_response'
|
7
|
+
|
8
|
+
autoload :ListProjects, 'youtrack_on_rails/responses/list_projects'
|
9
|
+
autoload :SignIn, 'youtrack_on_rails/responses/sign_in'
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module YoutrackOnRails::Responses
|
2
|
+
class Base
|
3
|
+
SUCCESSFUL_RESPONSE_CODES = %w(200 201 202)
|
4
|
+
|
5
|
+
attr_reader :code, :xml, :http_response
|
6
|
+
|
7
|
+
def initialize(http_response)
|
8
|
+
@http_response = http_response
|
9
|
+
@code = http_response.code
|
10
|
+
@xml = Nokogiri::XML(http_response.body)
|
11
|
+
end
|
12
|
+
|
13
|
+
def process
|
14
|
+
raise NotImplementedError
|
15
|
+
end
|
16
|
+
|
17
|
+
def cookie
|
18
|
+
http_response['set-cookie']
|
19
|
+
end
|
20
|
+
|
21
|
+
def success?
|
22
|
+
SUCCESSFUL_RESPONSE_CODES.include?(code)
|
23
|
+
end
|
24
|
+
|
25
|
+
def errors
|
26
|
+
xml.css('error').map(&:content).join(' ')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module YoutrackOnRails
|
2
|
+
module Responses
|
3
|
+
class CollectionResponse < Base
|
4
|
+
def process
|
5
|
+
xml.xpath('//projects/project').map do |project_node|
|
6
|
+
@attributes ||= project_node.attributes.keys
|
7
|
+
|
8
|
+
hash = @attributes.each_with_object({}) do |attribute_key, hash|
|
9
|
+
hash[attribute_key.underscore] = project_node[attribute_key]
|
10
|
+
end
|
11
|
+
|
12
|
+
Dish(hash)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def resource_name
|
19
|
+
'project'
|
20
|
+
end
|
21
|
+
|
22
|
+
def xpath
|
23
|
+
"//#{resource_name.pluralize}/#{resource_name}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: youtrack_on_rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- stevo
|
8
|
+
- tbprojects
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-02-12 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: Youtrack API wrapper for ruby
|
15
|
+
email:
|
16
|
+
- b.kosmowski@selleo.com
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- lib/youtrack_on_rails.rb
|
22
|
+
- lib/youtrack_on_rails/Requests/base.rb
|
23
|
+
- lib/youtrack_on_rails/Requests/get.rb
|
24
|
+
- lib/youtrack_on_rails/Requests/list_projects.rb
|
25
|
+
- lib/youtrack_on_rails/Requests/post.rb
|
26
|
+
- lib/youtrack_on_rails/Requests/sign_in.rb
|
27
|
+
- lib/youtrack_on_rails/connection.rb
|
28
|
+
- lib/youtrack_on_rails/requests.rb
|
29
|
+
- lib/youtrack_on_rails/responses.rb
|
30
|
+
- lib/youtrack_on_rails/responses/base.rb
|
31
|
+
- lib/youtrack_on_rails/responses/collection_response.rb
|
32
|
+
- lib/youtrack_on_rails/responses/list_projects.rb
|
33
|
+
- lib/youtrack_on_rails/responses/sign_in.rb
|
34
|
+
- lib/youtrack_on_rails/responses/simple_response.rb
|
35
|
+
- lib/youtrack_on_rails/version.rb
|
36
|
+
homepage: https://github.com//youtrack_on_rails
|
37
|
+
licenses: []
|
38
|
+
metadata: {}
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
requirements: []
|
54
|
+
rubyforge_project: ! '[none]'
|
55
|
+
rubygems_version: 2.1.10
|
56
|
+
signing_key:
|
57
|
+
specification_version: 4
|
58
|
+
summary: Youtrack API wrapper for ruby
|
59
|
+
test_files: []
|