ki_youtrack 0.0.3 → 0.0.4

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/ki_youtrack.gemspec CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |gem|
21
21
  gem.add_dependency('multi_xml', '~> 0.4.1')
22
22
  gem.add_dependency('multi_json', '~> 1.3.6')
23
23
  gem.add_dependency('highline', '~> 1.6.8')
24
+ gem.add_dependency('patron', '~> 0.4.18')
24
25
 
25
26
  gem.add_development_dependency('debugger', '~> 1.2.0')
26
27
  gem.add_development_dependency('rake', '~> 0.9.2')
data/lib/ki_youtrack.rb CHANGED
@@ -5,6 +5,7 @@ require 'multi_xml'
5
5
  require 'multi_json'
6
6
  require 'yaml/store'
7
7
  require 'highline'
8
+ require 'patron'
8
9
 
9
10
  autoload :Kiseru, 'ki_youtrack/kiseru'
10
11
 
@@ -12,7 +13,6 @@ module KiYoutrack
12
13
 
13
14
  autoload :Initializer, 'ki_youtrack/initializer'
14
15
  autoload :Api, 'ki_youtrack/api'
15
- autoload :Creds, 'ki_youtrack/creds'
16
16
  autoload :Session, 'ki_youtrack/session'
17
17
  autoload :IssueFilter, 'ki_youtrack/issue_filter'
18
18
 
@@ -15,12 +15,15 @@ module KiYoutrack
15
15
  password = @config.read('password')
16
16
  subdomain = @config.read('subdomain')
17
17
  ssl = @config.read('ssl')
18
+ cookies = @config.read('cached_auth_cookies')
18
19
 
19
- session = Session.new(login, password, subdomain, :ssl => ssl)
20
+ session = Session.new(login, password, subdomain, :ssl => ssl, :cookies => cookies)
20
21
  response = session.init
21
22
 
22
23
  issue = session.issue(id)
23
24
 
25
+ @config.write('cached_auth_cookies', session.session_cookies.encode("UTF-8"))
26
+
24
27
  filtered_data = IssueFilter.filter(issue)
25
28
  MultiJson.dump(filtered_data, :pretty => opts[:pretty])
26
29
  end
@@ -19,9 +19,11 @@ module KiYoutrack
19
19
  @login = login
20
20
  @password = password
21
21
  @api_url = Session.url(subdomain, ssl)
22
+ @session_cookies = opts[:cookies]
22
23
  end
23
24
 
24
25
  def init
26
+ return if @session_cookies
25
27
  response = connection.post("/youtrack/rest/user/login",
26
28
  :login => @login,
27
29
  :password => @password)
@@ -44,24 +46,53 @@ module KiYoutrack
44
46
  end
45
47
  end
46
48
 
47
- def issue(id)
48
- response = connection.get do |req|
49
- req.url "/youtrack/rest/issue/#{id}"
50
- req.headers['Cookie'] = session_cookies
49
+ def user
50
+ try_with_provided_session do
51
+ response = connection.get do |req|
52
+ req.url "/youtrack/rest/admin/user/root"
53
+ req.headers['Cookie'] = session_cookies
54
+ req.options[:timeout] = 5
55
+ req.options[:open_timeout] = 2
56
+ end
57
+ case response.status
58
+ when 200
59
+ response.body
60
+ else
61
+ raise SessionError, "Unhandled status code #{response.status}"
62
+ end
51
63
  end
64
+ end
52
65
 
53
- case response.status
54
- when 200
55
- response.body['issue']
56
- when 404
57
- raise SessionError, "Can't find issue #{id}"
58
- else
59
- raise SessionError, "Unhandled status code #{response.status}"
66
+ def issue(id)
67
+ try_with_provided_session do
68
+ response = connection.get do |req|
69
+ req.url "/youtrack/rest/issue/#{id}"
70
+ req.headers['Cookie'] = session_cookies
71
+ req.options[:timeout] = 5
72
+ req.options[:open_timeout] = 2
73
+ end
74
+
75
+ case response.status
76
+ when 200
77
+ response.body['issue']
78
+ when 404
79
+ raise SessionError, "Can't find issue #{id}"
80
+ else
81
+ raise SessionError, "Unhandled status code #{response.status}"
82
+ end
60
83
  end
61
84
  end
62
85
 
63
86
  private
64
87
 
88
+ def try_with_provided_session
89
+ yield
90
+ rescue SessionError
91
+ @session_cookies = nil
92
+ init
93
+ yield
94
+ end
95
+
65
96
  def connection
66
97
  @connection ||= Faraday.new(:url => @api_url) do |faraday|
67
98
  faraday.request :url_encoded # form-encode POST params
@@ -69,7 +100,8 @@ module KiYoutrack
69
100
  faraday.response :logger # log requests to STDOUT
70
101
  end
71
102
  faraday.response :xml, :content_type => /\bxml$/
72
- faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
103
+ faraday.adapter :patron
104
+ #faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
73
105
  end
74
106
  end
75
107
 
@@ -1,3 +1,3 @@
1
1
  module KiYoutrack
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -37,4 +37,25 @@ describe KiYoutrack::Session do
37
37
  issue['id'].should == "KI-1"
38
38
  end
39
39
 
40
+ it "uses provided authentication cookies" do
41
+ session = Session.new(@login, @password, @subdomain, :ssl => false)
42
+ session.init
43
+ cookies = session.session_cookies
44
+
45
+ new_session = Session.new(@login, @password, @subdomain,
46
+ :ssl => false, :cookies => cookies)
47
+ session.init
48
+ permissions = session.user
49
+ session.session_cookies.should == cookies
50
+ end
51
+
52
+ it "gets new authentication cookies if provided ones don't work" do
53
+ expired_cookies = "JSESSIONID=zzzzzzzzzzzz;Path=/youtrack, jetbrains.charisma.main.security.PRINCIPAL=zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;Path=/youtrack;Expires=Tue, 20-Aug-2013 20:28:31 GMT"
54
+ session = Session.new(@login, @password, @subdomain,
55
+ :ssl => false, :cookies => expired_cookies)
56
+ session.init
57
+ permissions = session.user
58
+ session.session_cookies.should_not == expired_cookies
59
+ end
60
+
40
61
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ki_youtrack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-08-17 00:00:00.000000000Z
13
+ date: 2012-08-20 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: gli
17
- requirement: &70167975435080 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: 1.6.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70167975435080
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: 1.6.0
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: faraday
28
- requirement: &70167975434580 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ~>
@@ -33,10 +38,15 @@ dependencies:
33
38
  version: 0.8.2
34
39
  type: :runtime
35
40
  prerelease: false
36
- version_requirements: *70167975434580
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 0.8.2
37
47
  - !ruby/object:Gem::Dependency
38
48
  name: faraday_middleware
39
- requirement: &70167975434120 !ruby/object:Gem::Requirement
49
+ requirement: !ruby/object:Gem::Requirement
40
50
  none: false
41
51
  requirements:
42
52
  - - ~>
@@ -44,10 +54,15 @@ dependencies:
44
54
  version: 0.8.8
45
55
  type: :runtime
46
56
  prerelease: false
47
- version_requirements: *70167975434120
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: 0.8.8
48
63
  - !ruby/object:Gem::Dependency
49
64
  name: multi_xml
50
- requirement: &70167975433660 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
51
66
  none: false
52
67
  requirements:
53
68
  - - ~>
@@ -55,10 +70,15 @@ dependencies:
55
70
  version: 0.4.1
56
71
  type: :runtime
57
72
  prerelease: false
58
- version_requirements: *70167975433660
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ version: 0.4.1
59
79
  - !ruby/object:Gem::Dependency
60
80
  name: multi_json
61
- requirement: &70167975433200 !ruby/object:Gem::Requirement
81
+ requirement: !ruby/object:Gem::Requirement
62
82
  none: false
63
83
  requirements:
64
84
  - - ~>
@@ -66,10 +86,15 @@ dependencies:
66
86
  version: 1.3.6
67
87
  type: :runtime
68
88
  prerelease: false
69
- version_requirements: *70167975433200
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ~>
93
+ - !ruby/object:Gem::Version
94
+ version: 1.3.6
70
95
  - !ruby/object:Gem::Dependency
71
96
  name: highline
72
- requirement: &70167975432740 !ruby/object:Gem::Requirement
97
+ requirement: !ruby/object:Gem::Requirement
73
98
  none: false
74
99
  requirements:
75
100
  - - ~>
@@ -77,10 +102,31 @@ dependencies:
77
102
  version: 1.6.8
78
103
  type: :runtime
79
104
  prerelease: false
80
- version_requirements: *70167975432740
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 1.6.8
111
+ - !ruby/object:Gem::Dependency
112
+ name: patron
113
+ requirement: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ~>
117
+ - !ruby/object:Gem::Version
118
+ version: 0.4.18
119
+ type: :runtime
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ~>
125
+ - !ruby/object:Gem::Version
126
+ version: 0.4.18
81
127
  - !ruby/object:Gem::Dependency
82
128
  name: debugger
83
- requirement: &70167975432280 !ruby/object:Gem::Requirement
129
+ requirement: !ruby/object:Gem::Requirement
84
130
  none: false
85
131
  requirements:
86
132
  - - ~>
@@ -88,10 +134,15 @@ dependencies:
88
134
  version: 1.2.0
89
135
  type: :development
90
136
  prerelease: false
91
- version_requirements: *70167975432280
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ~>
141
+ - !ruby/object:Gem::Version
142
+ version: 1.2.0
92
143
  - !ruby/object:Gem::Dependency
93
144
  name: rake
94
- requirement: &70167975431820 !ruby/object:Gem::Requirement
145
+ requirement: !ruby/object:Gem::Requirement
95
146
  none: false
96
147
  requirements:
97
148
  - - ~>
@@ -99,10 +150,15 @@ dependencies:
99
150
  version: 0.9.2
100
151
  type: :development
101
152
  prerelease: false
102
- version_requirements: *70167975431820
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ~>
157
+ - !ruby/object:Gem::Version
158
+ version: 0.9.2
103
159
  - !ruby/object:Gem::Dependency
104
160
  name: rspec
105
- requirement: &70167975431360 !ruby/object:Gem::Requirement
161
+ requirement: !ruby/object:Gem::Requirement
106
162
  none: false
107
163
  requirements:
108
164
  - - ~>
@@ -110,10 +166,15 @@ dependencies:
110
166
  version: 2.11.0
111
167
  type: :development
112
168
  prerelease: false
113
- version_requirements: *70167975431360
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ~>
173
+ - !ruby/object:Gem::Version
174
+ version: 2.11.0
114
175
  - !ruby/object:Gem::Dependency
115
176
  name: simplecov
116
- requirement: &70167975430900 !ruby/object:Gem::Requirement
177
+ requirement: !ruby/object:Gem::Requirement
117
178
  none: false
118
179
  requirements:
119
180
  - - ~>
@@ -121,10 +182,15 @@ dependencies:
121
182
  version: 0.6.4
122
183
  type: :development
123
184
  prerelease: false
124
- version_requirements: *70167975430900
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ~>
189
+ - !ruby/object:Gem::Version
190
+ version: 0.6.4
125
191
  - !ruby/object:Gem::Dependency
126
192
  name: test-construct
127
- requirement: &70167975430440 !ruby/object:Gem::Requirement
193
+ requirement: !ruby/object:Gem::Requirement
128
194
  none: false
129
195
  requirements:
130
196
  - - ~>
@@ -132,10 +198,15 @@ dependencies:
132
198
  version: 1.2.0
133
199
  type: :development
134
200
  prerelease: false
135
- version_requirements: *70167975430440
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ~>
205
+ - !ruby/object:Gem::Version
206
+ version: 1.2.0
136
207
  - !ruby/object:Gem::Dependency
137
208
  name: vcr
138
- requirement: &70167975429980 !ruby/object:Gem::Requirement
209
+ requirement: !ruby/object:Gem::Requirement
139
210
  none: false
140
211
  requirements:
141
212
  - - ~>
@@ -143,10 +214,15 @@ dependencies:
143
214
  version: 2.2.4
144
215
  type: :development
145
216
  prerelease: false
146
- version_requirements: *70167975429980
217
+ version_requirements: !ruby/object:Gem::Requirement
218
+ none: false
219
+ requirements:
220
+ - - ~>
221
+ - !ruby/object:Gem::Version
222
+ version: 2.2.4
147
223
  - !ruby/object:Gem::Dependency
148
224
  name: webmock
149
- requirement: &70167975429520 !ruby/object:Gem::Requirement
225
+ requirement: !ruby/object:Gem::Requirement
150
226
  none: false
151
227
  requirements:
152
228
  - - ~>
@@ -154,7 +230,12 @@ dependencies:
154
230
  version: 1.8.8
155
231
  type: :development
156
232
  prerelease: false
157
- version_requirements: *70167975429520
233
+ version_requirements: !ruby/object:Gem::Requirement
234
+ none: false
235
+ requirements:
236
+ - - ~>
237
+ - !ruby/object:Gem::Version
238
+ version: 1.8.8
158
239
  description: Kiseru YouTrack client
159
240
  email:
160
241
  - ben@freeagent.com
@@ -174,7 +255,6 @@ files:
174
255
  - ki_youtrack.gemspec
175
256
  - lib/ki_youtrack.rb
176
257
  - lib/ki_youtrack/api.rb
177
- - lib/ki_youtrack/creds.rb
178
258
  - lib/ki_youtrack/initializer.rb
179
259
  - lib/ki_youtrack/issue_filter.rb
180
260
  - lib/ki_youtrack/kiseru.rb
@@ -197,15 +277,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
197
277
  - - ! '>='
198
278
  - !ruby/object:Gem::Version
199
279
  version: '0'
280
+ segments:
281
+ - 0
282
+ hash: 571299714120245625
200
283
  required_rubygems_version: !ruby/object:Gem::Requirement
201
284
  none: false
202
285
  requirements:
203
286
  - - ! '>='
204
287
  - !ruby/object:Gem::Version
205
288
  version: '0'
289
+ segments:
290
+ - 0
291
+ hash: 571299714120245625
206
292
  requirements: []
207
293
  rubyforge_project:
208
- rubygems_version: 1.8.10
294
+ rubygems_version: 1.8.24
209
295
  signing_key:
210
296
  specification_version: 3
211
297
  summary: Kiseru YouTrack client
@@ -1,10 +0,0 @@
1
- module KiYoutrack
2
-
3
- class Creds
4
-
5
- def self.get
6
- end
7
-
8
- end
9
-
10
- end