jiralicious 0.4.0 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 35abe5a91ed496a677046d8d7cf6776be6388529
4
+ data.tar.gz: a5c39e5f19761e501d88fe16578bd94cbfd1b8e7
5
+ SHA512:
6
+ metadata.gz: a16791567cc35d0155ebcc0400e3dc5d62f7870fbb83aa994138ff6bafb1757ce0498078640db2b73a690daed0cf8b1b05b1e6fcb258985c261d01f9e707c07f
7
+ data.tar.gz: 264071527d0704fbbd06c2523d27b911f8d5336d7456e08c406b9c0ec4817d3319a539339f96459baaf40aadb0d8f37dde870d8f113321307d6611eb22573bc4
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # jiralicious
2
2
 
3
- [![Build Status](https://travis-ci.org/jstewart/jiralicious.png)](https://travis-ci.org/jstewart/jiralicious)
3
+ [![Build Status](https://travis-ci.org/dorack/jiralicious.png)](https://travis-ci.org/dorack/jiralicious)
4
4
 
5
5
  ## Examples:
6
6
 
@@ -40,6 +40,19 @@ Finding a single issue:
40
40
 
41
41
  Default auth type is now Basic auth. Cookie auth will be deprecated in the next version.
42
42
 
43
+ ## Changes in 0.4.2
44
+
45
+ * Opened up HTTParty to any version.
46
+ * Issue.new now works if provided a hash set.
47
+ * Error is thrown if the Jira key is invalid.
48
+ * Error is thrown if issue cannot be created during new opperation.
49
+ * Corrected and Updated RSPEC
50
+
51
+ ## Changes from 0.4.0 to 0.4.1
52
+
53
+ * Initial implementation of OAuth.
54
+ ** Note: the system does not support webhooks at this time. **
55
+
43
56
  ## Changes from 0.3.0
44
57
 
45
58
  * User and Avatars are now supported.
@@ -63,6 +76,7 @@ Default auth type is now Basic auth. Cookie auth will be deprecated in the next
63
76
  * Stanley Handschuh (dorack)
64
77
  * Mike Fiedler (miketheman)
65
78
  * Girish Sonawane (girishso)
79
+ * Jan Lindblom (janlindblom)
66
80
 
67
81
  ## Contributing to jiralicious
68
82
 
@@ -13,9 +13,19 @@ Gem::Specification.new do |s|
13
13
  s.email = "jstewart@fusionary.com"
14
14
  s.authors = ["Jason Stewart"]
15
15
  s.add_runtime_dependency 'crack', '~> 0.1.8'
16
- s.add_runtime_dependency 'httparty', '>= 0.10', '< 0.12.0'
16
+ if Gem::Version.new(RUBY_VERSION) > Gem::Version.new('1.9.2')
17
+ s.add_runtime_dependency 'httparty', '>= 0.10'
18
+ else
19
+ s.add_runtime_dependency 'httparty', '>= 0.10', '< 0.12.0'
20
+ end
17
21
  s.add_runtime_dependency 'hashie', '>= 1.1'
18
22
  s.add_runtime_dependency 'json', '>= 1.6', '< 1.9.0'
23
+ s.add_runtime_dependency 'oauth'
24
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('1.9.0')
25
+ s.add_runtime_dependency 'nokogiri'
26
+ else
27
+ s.add_runtime_dependency 'nokogiri', '< 1.6'
28
+ end
19
29
  s.add_development_dependency 'rspec', '~> 2.6'
20
30
  s.add_development_dependency 'rake'
21
31
  s.add_development_dependency 'fakeweb', '~> 1.3.0'
@@ -23,6 +23,7 @@ require 'jiralicious/user'
23
23
  require 'jiralicious/user/avatar'
24
24
  require 'jiralicious/basic_session'
25
25
  require 'jiralicious/cookie_session'
26
+ require 'jiralicious/oauth_session'
26
27
  require 'jiralicious/configuration'
27
28
  require 'jiralicious/avatar'
28
29
 
@@ -139,6 +139,18 @@ module Jiralicious
139
139
  end
140
140
  end
141
141
 
142
+ ##
143
+ # Validates that the provided key is not malformed
144
+ #
145
+ #
146
+ def issueKey_test(key, no_throw = false)
147
+ if key.nil? || !(/^[A-Z]+-[0-9]+$/i =~ key)
148
+ raise Jiralicious::JiraError.new("The key #{key} is invalid") unless no_throw
149
+ return false
150
+ end
151
+ return true
152
+ end
153
+
142
154
  alias :all :find_all
143
155
  end
144
156
 
@@ -6,7 +6,7 @@ module Jiralicious
6
6
  #
7
7
  module Configuration
8
8
  # Array of available attributes
9
- VALID_OPTIONS = [:username, :password, :uri, :api_version, :auth_type, :project]
9
+ VALID_OPTIONS = [:username, :password, :uri, :api_version, :auth_type, :project, :oauth_secret, :oauth_secret_filename, :oauth_pass_phrase, :oauth_consumer_key, :config_path]
10
10
  # Default user name set prior to login attempt
11
11
  DEFAULT_USERNAME = nil
12
12
  # Default password set prior to login attempt
@@ -56,6 +56,12 @@ module Jiralicious
56
56
  self.uri = DEFAULT_URI
57
57
  self.api_version = DEFAULT_API_VERSION
58
58
  self.auth_type = DEFAULT_AUTH_TYPE
59
+ self.project = nil
60
+ self.oauth_secret = nil
61
+ self.oauth_secret_filename = nil
62
+ self.oauth_pass_phrase = nil
63
+ self.oauth_consumer_key = nil
64
+ self.config_path = nil
59
65
  end
60
66
 
61
67
  ##
@@ -42,14 +42,19 @@ module Jiralicious
42
42
  def initialize(decoded_json = nil, default = nil)
43
43
  @loaded = false
44
44
  if (!decoded_json.nil?)
45
+ if !decoded_json.include? 'fields'
46
+ decoded_json = {'fields' => decoded_json}
47
+ end
45
48
  super(decoded_json)
46
49
  parse!(decoded_json["fields"])
47
50
  if default.nil?
48
51
  @fields = Fields.new(self['fields']) if self['fields']
49
- @comments = Comment.find_by_key(self.jira_key)
50
- @watchers = Watchers.find_by_key(self.jira_key)
51
- @transitions = Transitions.new(self.jira_key)
52
- @loaded = true
52
+ if self.jira_key
53
+ @comments = Comment.find_by_key(self.jira_key)
54
+ @watchers = Watchers.find_by_key(self.jira_key)
55
+ @transitions = Transitions.new(self.jira_key)
56
+ @loaded = true
57
+ end
53
58
  end
54
59
  end
55
60
  @fields = Fields.new if @fields.nil?
@@ -77,14 +82,14 @@ module Jiralicious
77
82
  if default.nil?
78
83
  parse!(self['fields'])
79
84
  @fields = Fields.new(self['fields']) if self['fields']
80
- @comments = Comment.find_by_key(self.jira_key)
81
- @watchers = Watchers.find_by_key(self.jira_key)
82
- @loaded = true
85
+ @comments = Comment.find_by_key(self.jira_key) if self.jira_key
86
+ @watchers = Watchers.find_by_key(self.jira_key) if self.jira_key
87
+ @loaded = true if self.jira_key
83
88
  else
84
89
  parse!(decoded_hash)
85
90
  end
86
91
  end
87
-
92
+
88
93
  ##
89
94
  # Forces the Jira Issue to reload with current or updated
90
95
  # information. This method is used in lazy loading methods.
@@ -249,12 +254,11 @@ module Jiralicious
249
254
  def save
250
255
  if loaded?
251
256
  self.class.update(@fields.format_for_update, self.jira_key)
252
- key = self.jira_key
253
257
  else
254
258
  response = self.class.create(@fields.format_for_create)
255
- key = response.parsed_response['key']
259
+ self.jira_key = response.parsed_response['key']
256
260
  end
257
- return key
261
+ return self.jira_key
258
262
  end
259
263
 
260
264
  ##
@@ -40,6 +40,7 @@ module Jiralicious
40
40
  # :key (required) issue key
41
41
  #
42
42
  def find_by_key(key)
43
+ issueKey_test(key)
43
44
  response = fetch({:parent => parent_name, :parent_key => key})
44
45
  a = new(response)
45
46
  a.jira_key = key
@@ -55,6 +56,7 @@ module Jiralicious
55
56
  # :id (required) comment id
56
57
  #
57
58
  def find_by_key_and_id(key, id)
59
+ issueKey_test(key)
58
60
  response = fetch({:parent => parent_name, :parent_key => key, :key => id})
59
61
  a = new(response)
60
62
  a.jira_key = key
@@ -70,6 +72,7 @@ module Jiralicious
70
72
  # :key (required) issue key
71
73
  #
72
74
  def add(comment, key)
75
+ issueKey_test(key)
73
76
  fetch({:method => :post, :body => comment, :parent => parent_name, :parent_key => key})
74
77
  end
75
78
 
@@ -84,6 +87,7 @@ module Jiralicious
84
87
  # :id (required) comment id
85
88
  #
86
89
  def edit(comment, key, id)
90
+ issueKey_test(key)
87
91
  fetch({:method => :put, :key => id, :body => comment, :parent => parent_name, :parent_key => key})
88
92
  end
89
93
 
@@ -100,6 +104,7 @@ module Jiralicious
100
104
  # :id (required) comment id
101
105
  #
102
106
  def remove(key, id)
107
+ issueKey_test(key)
103
108
  fetch({:method => :delete, :body_to_params => true, :key => id, :parent => parent_name, :parent_key => key})
104
109
  end
105
110
  end
@@ -100,6 +100,14 @@ module Jiralicious
100
100
  @fields_update[field].merge!(hash)
101
101
  end
102
102
 
103
+ ##
104
+ # Merges current to updated to allow for a forced
105
+ # update request to process.
106
+ #
107
+ def force_update
108
+ @fields_update.merge!(@fields_current)
109
+ end
110
+
103
111
  ##
104
112
  # Sets the field key with the provided value.
105
113
  #
@@ -55,6 +55,7 @@ module Jiralicious
55
55
  # :key (required) issue key
56
56
  #
57
57
  def find(key)
58
+ issueKey_test(key)
58
59
  response = fetch({:parent => parent_name, :parent_key => key})
59
60
  response.parsed_response['transitions'].each do |t|
60
61
  t['jira_key'] = key
@@ -71,6 +72,7 @@ module Jiralicious
71
72
  # :id (required) transition id
72
73
  #
73
74
  def find_by_key_and_id(key, id)
75
+ issueKey_test(key)
74
76
  response = fetch({:parent => parent_name, :parent_key => key, :body => {"transitionId" => id}, :body_to_params => true })
75
77
  response.parsed_response['transitions'].each do |t|
76
78
  t['jira_key'] = key
@@ -92,6 +94,7 @@ module Jiralicious
92
94
  # based on the individual transition
93
95
  #
94
96
  def go(key, id, options = {})
97
+ issueKey_test(key)
95
98
  transition = {"transition" => {"id" => id}}
96
99
  if options[:comment].is_a? String
97
100
  transition.merge!({"update" => {"comment" => [{"add" => {"body" => options[:comment].to_s}}]}})
@@ -120,6 +123,7 @@ module Jiralicious
120
123
  # :return (optional) boolean flag to determine if an object or hash is returned
121
124
  #
122
125
  def meta(key, id, options = {})
126
+ issueKey_test(key)
123
127
  response = fetch({:method => :get, :parent => parent_name, :parent_key => key, :body_to_params => true,
124
128
  :body => {"transitionId" => id, "expand" => "transitions.fields"}})
125
129
  response.parsed_response['transitions'].each do |t|
@@ -30,6 +30,7 @@ module Jiralicious
30
30
  # :key (required) issue key to find
31
31
  #
32
32
  def find_by_key(key)
33
+ issueKey_test(key)
33
34
  response = fetch({:parent => parent_name, :parent_key => key})
34
35
  a = new(response)
35
36
  a.jira_key = key
@@ -45,6 +46,7 @@ module Jiralicious
45
46
  # :key (required) issue key
46
47
  #
47
48
  def add(name, key)
49
+ issueKey_test(key)
48
50
  fetch({:method => :post, :body => name, :body_override => true, :parent => parent_name, :parent_key => key})
49
51
  end
50
52
 
@@ -57,6 +59,7 @@ module Jiralicious
57
59
  # :key (required) issue key
58
60
  #
59
61
  def remove(name, key)
62
+ issueKey_test(key)
60
63
  fetch({:method => :delete, :body_to_params => true, :body => {:username => name}, :parent => parent_name, :parent_key => key})
61
64
  end
62
65
  end
@@ -0,0 +1,129 @@
1
+ require 'oauth'
2
+ require 'nokogiri'
3
+
4
+ module Jiralicious
5
+ ##
6
+ # The OauthSesion class extends the default OAuth::AccessToken
7
+ # The functions herein convert between the current Jiralicious
8
+ # and HTTParty formats and those required by OAuth. This is a
9
+ # Bidirectional conversion.
10
+ #
11
+ class OauthSession < OAuth::AccessToken
12
+ attr_accessor :option
13
+
14
+ ##
15
+ # After Request reprocesses the response provided in to the
16
+ # HTTParty::Response format that is expected by the rest of
17
+ # the gem.
18
+ #
19
+ def after_request(response)
20
+ @response = HTTParty::Response.new(self, response, lambda { HTTParty::Parser.new(response.body, Jiralicious::Session.format).parse }, :body => response.body)
21
+ end
22
+
23
+ ##
24
+ # Initializer extends the functionality of the basic OAuth::AccessToken
25
+ # However provides the base functionality to handle the initial root
26
+ # generation for the custom Jiralicious authentication to JIRA
27
+ #
28
+ def initialize(token = nil, secret = nil)
29
+ self.option = {
30
+ :signature_method => 'RSA-SHA1',
31
+ :request_token_path => '/plugins/servlet/oauth/request-token',
32
+ :authorize_path => "/plugins/servlet/oauth/authorize",
33
+ :access_token_path => '/plugins/servlet/oauth/access-token',
34
+ :site => "http://rome:8080"
35
+ }
36
+ if (token.nil? || secret.nil?)
37
+ consumer = OAuth::Consumer.new(Jiralicious.oauth_consumer_key, OpenSSL::PKey::RSA.new(get_secret, Jiralicious.oauth_pass_phrase.to_s), self.option)
38
+ request_token = consumer.get_request_token
39
+ ## request access confirmation ##
40
+ bs = Jiralicious::BasicSession.new
41
+ bsr = bs.request(:get, request_token.authorize_url)
42
+ bsp = HTTParty::Parser.new(bsr.message, :html)
43
+ bsb = Nokogiri::HTML(bsp.body)
44
+ ## Parse confirm page and send form ##
45
+ a = {}
46
+ bsb.xpath('//input').each do |input|
47
+ if (input.get_attribute('name') != 'deny' && !input.get_attribute('name').nil?)
48
+ a.merge!({input.get_attribute('name').to_sym => input.get_attribute('value')})
49
+ end
50
+ end
51
+ urip = "#{request_token.authorize_url.split('?')[0]}?#{build_body(a)}"
52
+ bsr = bs.request(bsb.xpath('//form')[0].get_attribute('method').downcase.to_sym, urip)
53
+ ## Parse response for access ##
54
+ bss = bsr.message.split("&#39;") # brute force method don't know a better way to do this
55
+ crt = request_token.consumer.token_request(request_token.consumer.http_method, (request_token.consumer.access_token_url? ? request_token.consumer.access_token_url : request_token.consumer.access_token_path), request_token, {:oauth_verifier => bss[3]})
56
+ super(request_token.consumer, crt[:oauth_token], crt[:oauth_token_secret])
57
+ self.params = crt
58
+ else
59
+ super(token, secret)
60
+ end
61
+ end
62
+
63
+ ##
64
+ # Main access method to request data from the Jira API
65
+ #
66
+ # [Arguments]
67
+ # :method (required) http method type
68
+ #
69
+ # :options (required) request specific options
70
+ #
71
+ def request(method, *options)
72
+ if options.last.is_a?(Hash) && options.last[:handler]
73
+ response_handler = options.last.delete(:handler)
74
+ else
75
+ response_handler = handler
76
+ end
77
+ path = options.first
78
+ options = options.last
79
+ before_request if respond_to?(:before_request)
80
+ super(method, path, *options)
81
+ after_request(response) if respond_to?(:after_request)
82
+
83
+ response_handler.call(response)
84
+ end
85
+
86
+ protected
87
+
88
+ ##
89
+ # Restructures the Hash into a param string
90
+ #
91
+ def build_body(a)
92
+ o = ''
93
+ a.each do |k, v|
94
+ o += "#{k}=#{v}&"
95
+ end
96
+ o
97
+ end
98
+
99
+ ##
100
+ # returns the oauth_secret parameter or the file
101
+ #
102
+ def get_secret
103
+ if Jiralicious.oauth_secret.nil?
104
+ IO.read(Jiralicious.config_path + Jiralicious.oauth_secret_filename)
105
+ else
106
+ Jiralicious.oauth_secret
107
+ end
108
+ end
109
+
110
+ ##
111
+ # Configures the default handler. This can be overridden in
112
+ # the child class to provide additional error handling.
113
+ #
114
+ def handler
115
+ Proc.new do |response|
116
+ case response.code
117
+ when 200..204
118
+ response
119
+ else
120
+ message = response.body
121
+ if message.is_a?(Hash)
122
+ message = message['errorMessages'].join('\n')
123
+ end
124
+ Jiralicious::JiraError.new(message)
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
@@ -42,7 +42,8 @@ module Jiralicious
42
42
  response.issues_raw.each do |issue|
43
43
  i_out.class.property :"#{issue["key"].gsub("-", "_")}"
44
44
  t = Issue.new
45
- i_out[issue["key"].gsub("-", "_")] = t.load(issue, true)
45
+ t.load(issue, true)
46
+ i_out[issue["key"].gsub("-", "_")] = t
46
47
  end
47
48
  i_out
48
49
  end
@@ -1,4 +1,4 @@
1
1
  module Jiralicious
2
2
  # Current Jiralicious Version
3
- VERSION = "0.4.0"
3
+ VERSION = "0.4.3"
4
4
  end
@@ -123,8 +123,7 @@ describe Jiralicious::Issue, "Managing Issues" do
123
123
  issue.watchers.watchers.count.should == 1
124
124
  end
125
125
 
126
-
127
- it "creates a new issue" do
126
+ it "creates a new issue through fields" do
128
127
  issue = Jiralicious::Issue.new
129
128
  issue.fields.set_id("project", "10000")
130
129
  issue.fields.set("summary", "this is a test of creating a scratch ticket")
@@ -139,6 +138,59 @@ describe Jiralicious::Issue, "Managing Issues" do
139
138
  issue.comments.comments.count.should == 0
140
139
  issue.watchers.watchers.count.should == 1
141
140
  end
141
+
142
+ it "creates a new issue thgrough load with reload" do
143
+ hash = {"fields" => {"project" => {"id" => "10000"},
144
+ "summary" => "this is a test of creating a scratch ticket",
145
+ "issuetype" => {"id" => "7"},
146
+ "assignee" => {"name" => "stanley.handschuh"},
147
+ "priority" => {"id" => "1"},
148
+ "labels" => ["new_label_p"],
149
+ "environment" => "example of environment",
150
+ "description" => "example of the description extending"
151
+ }}
152
+ issue = Jiralicious::Issue.new
153
+ issue.load(hash, true)
154
+ issue.save!
155
+ issue.jira_key.should == 'EX-2'
156
+ issue.comments.comments.count.should == 0
157
+ issue.watchers.watchers.count.should == 1
158
+ end
159
+
160
+ it "creates a new issue thgrough load without reload" do
161
+ hash = {"fields" => {"project" => {"id" => "10000"},
162
+ "summary" => "this is a test of creating a scratch ticket",
163
+ "issuetype" => {"id" => "7"},
164
+ "assignee" => {"name" => "stanley.handschuh"},
165
+ "priority" => {"id" => "1"},
166
+ "labels" => ["new_label_p"],
167
+ "environment" => "example of environment",
168
+ "description" => "example of the description extending"
169
+ }}
170
+ issue = Jiralicious::Issue.new
171
+ issue.load(hash)
172
+ issue.save!
173
+ issue.jira_key.should == 'EX-2'
174
+ issue.comments.comments.count.should == 0
175
+ issue.watchers.watchers.count.should == 1
176
+ end
177
+
178
+ it "creates a new issue through new" do
179
+ hash = {"project" => {"id" => "10000"},
180
+ "summary" => "this is a test of creating a scratch ticket",
181
+ "issuetype" => {"id" => "7"},
182
+ "assignee" => {"name" => "stanley.handschuh"},
183
+ "priority" => {"id" => "1"},
184
+ "labels" => ["new_label_p"],
185
+ "environment" => "example of environment",
186
+ "description" => "example of the description extending"
187
+ }
188
+ issue = Jiralicious::Issue.new(hash)
189
+ issue.save!
190
+ issue.jira_key.should == 'EX-2'
191
+ issue.comments.comments.count.should == 0
192
+ issue.watchers.watchers.count.should == 1
193
+ end
142
194
 
143
195
  it "updates a new issue" do
144
196
  issue = Jiralicious::Issue.find("EX-3")
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jiralicious
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
5
- prerelease:
4
+ version: 0.4.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jason Stewart
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-07 00:00:00.000000000 Z
11
+ date: 2014-05-10 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: crack
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,47 +27,36 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: httparty
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0.10'
38
- - - <
39
- - !ruby/object:Gem::Version
40
- version: 0.12.0
41
34
  type: :runtime
42
35
  prerelease: false
43
36
  version_requirements: !ruby/object:Gem::Requirement
44
- none: false
45
37
  requirements:
46
- - - ! '>='
38
+ - - '>='
47
39
  - !ruby/object:Gem::Version
48
40
  version: '0.10'
49
- - - <
50
- - !ruby/object:Gem::Version
51
- version: 0.12.0
52
41
  - !ruby/object:Gem::Dependency
53
42
  name: hashie
54
43
  requirement: !ruby/object:Gem::Requirement
55
- none: false
56
44
  requirements:
57
- - - ! '>='
45
+ - - '>='
58
46
  - !ruby/object:Gem::Version
59
47
  version: '1.1'
60
48
  type: :runtime
61
49
  prerelease: false
62
50
  version_requirements: !ruby/object:Gem::Requirement
63
- none: false
64
51
  requirements:
65
- - - ! '>='
52
+ - - '>='
66
53
  - !ruby/object:Gem::Version
67
54
  version: '1.1'
68
55
  - !ruby/object:Gem::Dependency
69
56
  name: json
70
57
  requirement: !ruby/object:Gem::Requirement
71
- none: false
72
58
  requirements:
73
- - - ! '>='
59
+ - - '>='
74
60
  - !ruby/object:Gem::Version
75
61
  version: '1.6'
76
62
  - - <
@@ -79,18 +65,44 @@ dependencies:
79
65
  type: :runtime
80
66
  prerelease: false
81
67
  version_requirements: !ruby/object:Gem::Requirement
82
- none: false
83
68
  requirements:
84
- - - ! '>='
69
+ - - '>='
85
70
  - !ruby/object:Gem::Version
86
71
  version: '1.6'
87
72
  - - <
88
73
  - !ruby/object:Gem::Version
89
74
  version: 1.9.0
75
+ - !ruby/object:Gem::Dependency
76
+ name: oauth
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: nokogiri
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :runtime
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
90
103
  - !ruby/object:Gem::Dependency
91
104
  name: rspec
92
105
  requirement: !ruby/object:Gem::Requirement
93
- none: false
94
106
  requirements:
95
107
  - - ~>
96
108
  - !ruby/object:Gem::Version
@@ -98,7 +110,6 @@ dependencies:
98
110
  type: :development
99
111
  prerelease: false
100
112
  version_requirements: !ruby/object:Gem::Requirement
101
- none: false
102
113
  requirements:
103
114
  - - ~>
104
115
  - !ruby/object:Gem::Version
@@ -106,23 +117,20 @@ dependencies:
106
117
  - !ruby/object:Gem::Dependency
107
118
  name: rake
108
119
  requirement: !ruby/object:Gem::Requirement
109
- none: false
110
120
  requirements:
111
- - - ! '>='
121
+ - - '>='
112
122
  - !ruby/object:Gem::Version
113
123
  version: '0'
114
124
  type: :development
115
125
  prerelease: false
116
126
  version_requirements: !ruby/object:Gem::Requirement
117
- none: false
118
127
  requirements:
119
- - - ! '>='
128
+ - - '>='
120
129
  - !ruby/object:Gem::Version
121
130
  version: '0'
122
131
  - !ruby/object:Gem::Dependency
123
132
  name: fakeweb
124
133
  requirement: !ruby/object:Gem::Requirement
125
- none: false
126
134
  requirements:
127
135
  - - ~>
128
136
  - !ruby/object:Gem::Version
@@ -130,7 +138,6 @@ dependencies:
130
138
  type: :development
131
139
  prerelease: false
132
140
  version_requirements: !ruby/object:Gem::Requirement
133
- none: false
134
141
  requirements:
135
142
  - - ~>
136
143
  - !ruby/object:Gem::Version
@@ -167,6 +174,7 @@ files:
167
174
  - lib/jiralicious/issue/fields.rb
168
175
  - lib/jiralicious/issue/transitions.rb
169
176
  - lib/jiralicious/issue/watchers.rb
177
+ - lib/jiralicious/oauth_session.rb
170
178
  - lib/jiralicious/parsers/field_parser.rb
171
179
  - lib/jiralicious/project.rb
172
180
  - lib/jiralicious/project/avatar.rb
@@ -220,27 +228,26 @@ files:
220
228
  homepage: http://github.com/jstewart/jiralicious
221
229
  licenses:
222
230
  - MIT
231
+ metadata: {}
223
232
  post_install_message:
224
233
  rdoc_options: []
225
234
  require_paths:
226
235
  - lib
227
236
  required_ruby_version: !ruby/object:Gem::Requirement
228
- none: false
229
237
  requirements:
230
- - - ! '>='
238
+ - - '>='
231
239
  - !ruby/object:Gem::Version
232
240
  version: '0'
233
241
  required_rubygems_version: !ruby/object:Gem::Requirement
234
- none: false
235
242
  requirements:
236
- - - ! '>='
243
+ - - '>='
237
244
  - !ruby/object:Gem::Version
238
245
  version: '0'
239
246
  requirements: []
240
247
  rubyforge_project:
241
- rubygems_version: 1.8.23
248
+ rubygems_version: 2.0.3
242
249
  signing_key:
243
- specification_version: 3
250
+ specification_version: 4
244
251
  summary: A Ruby library for interacting with JIRA's REST API
245
252
  test_files:
246
253
  - spec/avatar_spec.rb