rally_rest_api 1.0.6 → 1.1.0

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.
@@ -50,6 +50,7 @@ class RallyRestAPI
50
50
  builder = RestBuilder.new(@base_url, @username, @password, @version, @http_headers)
51
51
  end
52
52
  builder.logger = @logger if @logger
53
+ builder.use_cookies = true if options[:use_cookies]
53
54
  @builder = builder
54
55
  end
55
56
 
@@ -59,10 +59,11 @@ end
59
59
  class RestBuilder # :nodoc:
60
60
 
61
61
  attr_reader :base_url, :username, :password, :http_headers
62
- attr_accessor :logger
62
+ attr_accessor :logger, :use_cookies
63
63
 
64
64
  def initialize(base_url, username, password, version = "current", http_headers = CustomHttpHeader.new)
65
65
  @base_url, @username, @password, @version, @http_headers = base_url, username, password, version, http_headers
66
+ @cookie_jar = {}
66
67
  end
67
68
 
68
69
  def marshal_dump
@@ -130,16 +131,48 @@ class RestBuilder # :nodoc:
130
131
  send_request(url, req, username, password)
131
132
  end
132
133
 
134
+ def add_cookies(req)
135
+ req.add_field('cookie', format_cookie(@cookie_jar))
136
+ req
137
+ end
138
+
139
+ def parse_cookies (cookie_str)
140
+ cookies = cookie_str.split(', ')
141
+ cookies.collect! { |cookie| cookie.split(";")[0] }
142
+
143
+ cookie_jar = {}
144
+ cookies.each do |cookie|
145
+ c = cookie.split("=")
146
+ cookie_jar[c[0]] = c[1] || ""
147
+ end
148
+ cookie_jar
149
+ end
150
+
151
+ def format_cookie (cookie_jar)
152
+ cookie_str = ""
153
+ cookie_jar.each do |cookie_name, cookie_value|
154
+ cookie_str += "; " unless cookie_str.empty?
155
+ cookie_str += "#{cookie_name}=#{cookie_value}"
156
+ end
157
+ cookie_str
158
+ end
159
+
160
+ def store_cookies(response)
161
+ @cookie_jar.merge!(parse_cookies(response.response['set-cookie']))
162
+ response
163
+ end
164
+
133
165
  def send_request(url, req, username, password)
134
166
  @http_headers.add_headers(req)
135
167
  req.basic_auth username, password
136
168
  req.content_type = 'text/xml'
137
169
  req.add_field('Accept-Encoding', 'gzip, deflate')
170
+ add_cookies(req) if @use_cookies
138
171
  proxy = ENV['http_proxy'] ? URI.parse(ENV['http_proxy']) : OpenStruct.new
139
172
  http = Net::HTTP.new(url.host, url.port, proxy.host, proxy.port, proxy.user, proxy.password)
140
173
  http.use_ssl = true if url.scheme == "https"
141
174
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
142
- http.ssl_version = "SSLv3"
175
+ #http.ssl_version = "SSLv3"
143
176
  http.read_timeout = 300
144
177
  debug "RestBuilder#send_request req = #{req.inspect} -- #{url}"
145
178
  response = http.start { |http| http.request(req) }
@@ -149,6 +182,7 @@ class RestBuilder # :nodoc:
149
182
  debug "RestBuilder#send_request result = #{response.plain_body}"
150
183
  headerstr = ""
151
184
  response.each_header { |k,v| headerstr << "#{k}--#{v}|" }
185
+ store_cookies(response) if @use_cookies
152
186
  debug "RestBuilder#send_request result headers = #{headerstr} and length is #{response.plain_body.length}"
153
187
  check_for_errors(response)
154
188
  response.plain_body
@@ -1,8 +1,8 @@
1
1
  module RallyRestVersion #:nodoc:
2
2
  module LIBRARY_VERSION #:nodoc:
3
3
  MAJOR = 1
4
- MINOR = 0
5
- TINY = 6
4
+ MINOR = 1
5
+ TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rally_rest_api
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
+ - 1
8
9
  - 0
9
- - 6
10
- version: 1.0.6
10
+ version: 1.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Bob Cotton
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-04-11 00:00:00 Z
18
+ date: 2013-05-16 00:00:00 Z
19
19
  dependencies: []
20
20
 
21
21
  description: ""