jira-ruby 1.5.0 → 1.6.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.
Files changed (88) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +7 -1
  3. data/Guardfile +1 -1
  4. data/Rakefile +4 -5
  5. data/http-basic-example.rb +13 -12
  6. data/jira-ruby.gemspec +9 -10
  7. data/lib/jira-ruby.rb +5 -2
  8. data/lib/jira/base.rb +49 -48
  9. data/lib/jira/base_factory.rb +1 -4
  10. data/lib/jira/client.rb +29 -20
  11. data/lib/jira/has_many_proxy.rb +0 -1
  12. data/lib/jira/http_client.rb +9 -10
  13. data/lib/jira/http_error.rb +3 -5
  14. data/lib/jira/oauth_client.rb +19 -20
  15. data/lib/jira/request_client.rb +3 -4
  16. data/lib/jira/resource/agile.rb +10 -8
  17. data/lib/jira/resource/applinks.rb +5 -8
  18. data/lib/jira/resource/attachment.rb +1 -2
  19. data/lib/jira/resource/board.rb +84 -0
  20. data/lib/jira/resource/comment.rb +0 -2
  21. data/lib/jira/resource/component.rb +1 -3
  22. data/lib/jira/resource/createmeta.rb +12 -14
  23. data/lib/jira/resource/field.rb +22 -22
  24. data/lib/jira/resource/filter.rb +2 -2
  25. data/lib/jira/resource/issue.rb +41 -39
  26. data/lib/jira/resource/issuelink.rb +3 -5
  27. data/lib/jira/resource/issuelinktype.rb +0 -1
  28. data/lib/jira/resource/issuetype.rb +1 -3
  29. data/lib/jira/resource/priority.rb +1 -3
  30. data/lib/jira/resource/project.rb +5 -7
  31. data/lib/jira/resource/rapidview.rb +28 -7
  32. data/lib/jira/resource/remotelink.rb +1 -4
  33. data/lib/jira/resource/resolution.rb +2 -4
  34. data/lib/jira/resource/serverinfo.rb +1 -2
  35. data/lib/jira/resource/sprint.rb +82 -18
  36. data/lib/jira/resource/sprint_report.rb +8 -0
  37. data/lib/jira/resource/status.rb +1 -3
  38. data/lib/jira/resource/transition.rb +2 -6
  39. data/lib/jira/resource/user.rb +12 -2
  40. data/lib/jira/resource/version.rb +1 -3
  41. data/lib/jira/resource/watcher.rb +1 -5
  42. data/lib/jira/resource/webhook.rb +3 -6
  43. data/lib/jira/resource/worklog.rb +3 -5
  44. data/lib/jira/version.rb +1 -1
  45. data/lib/tasks/generate.rake +4 -4
  46. data/spec/integration/attachment_spec.rb +15 -16
  47. data/spec/integration/comment_spec.rb +31 -34
  48. data/spec/integration/component_spec.rb +21 -24
  49. data/spec/integration/field_spec.rb +15 -18
  50. data/spec/integration/issue_spec.rb +44 -48
  51. data/spec/integration/issuelinktype_spec.rb +8 -11
  52. data/spec/integration/issuetype_spec.rb +5 -7
  53. data/spec/integration/priority_spec.rb +5 -8
  54. data/spec/integration/project_spec.rb +13 -20
  55. data/spec/integration/rapidview_spec.rb +17 -10
  56. data/spec/integration/resolution_spec.rb +7 -10
  57. data/spec/integration/status_spec.rb +5 -8
  58. data/spec/integration/transition_spec.rb +17 -20
  59. data/spec/integration/user_spec.rb +24 -8
  60. data/spec/integration/version_spec.rb +21 -25
  61. data/spec/integration/watcher_spec.rb +28 -34
  62. data/spec/integration/webhook.rb +8 -17
  63. data/spec/integration/worklog_spec.rb +30 -34
  64. data/spec/jira/base_factory_spec.rb +11 -12
  65. data/spec/jira/base_spec.rb +204 -228
  66. data/spec/jira/client_spec.rb +26 -28
  67. data/spec/jira/has_many_proxy_spec.rb +11 -12
  68. data/spec/jira/http_client_spec.rb +51 -52
  69. data/spec/jira/http_error_spec.rb +7 -9
  70. data/spec/jira/oauth_client_spec.rb +44 -46
  71. data/spec/jira/request_client_spec.rb +5 -5
  72. data/spec/jira/resource/agile_spec.rb +5 -7
  73. data/spec/jira/resource/attachment_spec.rb +25 -26
  74. data/spec/jira/resource/board_spec.rb +175 -0
  75. data/spec/jira/resource/createmeta_spec.rb +29 -32
  76. data/spec/jira/resource/field_spec.rb +42 -48
  77. data/spec/jira/resource/filter_spec.rb +40 -40
  78. data/spec/jira/resource/issue_spec.rb +87 -89
  79. data/spec/jira/resource/issuelink_spec.rb +1 -1
  80. data/spec/jira/resource/project_factory_spec.rb +2 -4
  81. data/spec/jira/resource/project_spec.rb +33 -33
  82. data/spec/jira/resource/sprint_spec.rb +78 -0
  83. data/spec/jira/resource/user_factory_spec.rb +6 -8
  84. data/spec/jira/resource/worklog_spec.rb +9 -11
  85. data/spec/spec_helper.rb +8 -9
  86. data/spec/support/clients_helper.rb +4 -4
  87. data/spec/support/shared_examples/integration.rb +60 -77
  88. metadata +59 -53
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8705a4ea4d0393dbb5868ad95f420a45f58cea68
4
- data.tar.gz: c8abf36c5a0a0d7cf4b2bd7f592d8cc5b32b7f64
2
+ SHA256:
3
+ metadata.gz: 5433f708b438c961d0ca07b8aa60ae7733382aecb7374d4cc3ea3af1947f0e7f
4
+ data.tar.gz: d6757f05e80e8c005ad0f20461fac98d5509f87f0e0bebaea025e43e7d180d3e
5
5
  SHA512:
6
- metadata.gz: 65f8792ced5b13ce0d3c2e629d7600ce1802cf1479c99f2aed61fc782748819482ef3a45e19affeebff6e23c9d57a8078f86901a8d43e557ba528c05644b052f
7
- data.tar.gz: 72c988b648ae5a272a93b9cb4e655e90cadc4643fb2f6d51329d2dbd7d343d82599fbde0782d7100b58555923b9313a6edbb9a3419bf68a31f30e1f1eaf20d6a
6
+ metadata.gz: 25f924c28544baf800585f9243d6d29622b0facab654aa03cf620bf76e4133731334b649c6af725fb0f246c68e3f5aa17bd8623eba5c2dd66303d2f2b2766dd2
7
+ data.tar.gz: b15c6540010df98f03acd562a50520dd90705bfa58cb2815070bc0ba3a535aea00d092c61a0f58bd3e3f23345c8ee48cf14e5d602fe324c3f7197b408d64e252
data/Gemfile CHANGED
@@ -1,8 +1,14 @@
1
- source "http://rubygems.org"
1
+ source 'http://rubygems.org'
2
2
 
3
3
  group :development do
4
+ gem 'guard'
5
+ gem 'guard-rspec'
4
6
  gem 'wdm', '>= 0.1.0' if Gem.win_platform?
5
7
  end
6
8
 
9
+ group :development, :test do
10
+ gem 'pry' # this was in the original Gemfile - but only needed in development & test
11
+ end
12
+
7
13
  # Specify your gem's dependencies in jira_api.gemspec
8
14
  gemspec
data/Guardfile CHANGED
@@ -6,7 +6,7 @@ guard 'rspec', cmd: 'bundle exec rspec --color --format doc' do
6
6
  watch(%r{^lib/(.+).rb$}) do |m|
7
7
  "spec/#{m[1]}_spec.rb"
8
8
  end
9
-
9
+
10
10
  # watch /spec/ files
11
11
  watch(%r{^spec/(.+).rb$}) do |m|
12
12
  "spec/#{m[1]}.rb"
data/Rakefile CHANGED
@@ -6,25 +6,24 @@ require 'rdoc/task'
6
6
 
7
7
  Dir.glob('lib/tasks/*.rake').each { |r| import r }
8
8
 
9
- task :default => [:test]
9
+ task default: [:test]
10
10
 
11
- task :test => [:prepare, :spec]
11
+ task test: %i[prepare spec]
12
12
 
13
13
  desc 'Prepare and run rspec tests'
14
14
  task :prepare do
15
15
  rsa_key = File.expand_path('rsakey.pem')
16
- unless File.exists?(rsa_key)
16
+ unless File.exist?(rsa_key)
17
17
  raise 'rsakey.pem does not exist, tests will fail. Run `rake jira:generate_public_cert` first'
18
18
  end
19
19
  end
20
20
 
21
21
  desc 'Run RSpec tests'
22
- #RSpec::Core::RakeTask.new(:spec)
22
+ # RSpec::Core::RakeTask.new(:spec)
23
23
  RSpec::Core::RakeTask.new(:spec) do |task|
24
24
  task.rspec_opts = ['--color', '--format', 'doc']
25
25
  end
26
26
 
27
-
28
27
  Rake::RDocTask.new(:doc) do |rd|
29
28
  rd.main = 'README.rdoc'
30
29
  rd.rdoc_dir = 'doc'
@@ -2,29 +2,30 @@ require 'rubygems'
2
2
  require 'pp'
3
3
  require 'jira-ruby'
4
4
 
5
- if ARGV.length == 0
5
+ if ARGV.empty?
6
6
  # If not passed any command line arguments, prompt the
7
7
  # user for the username and password.
8
- puts "Enter the username: "
8
+ puts 'Enter the username: '
9
9
  username = gets.strip
10
10
 
11
- puts "Enter the password: "
11
+ puts 'Enter the password: '
12
12
  password = gets.strip
13
13
  elsif ARGV.length == 2
14
- username, password = ARGV[0], ARGV[1]
14
+ username = ARGV[0]
15
+ password = ARGV[1]
15
16
  else
16
17
  # Script must be passed 0 or 2 arguments
17
- raise "Usage: #{$0} [ username password ]"
18
+ raise "Usage: #{$PROGRAM_NAME} [ username password ]"
18
19
  end
19
20
 
20
21
  options = {
21
- :username => username,
22
- :password => password,
23
- :site => 'http://localhost:8080/',
24
- :context_path => '',
25
- :auth_type => :basic,
26
- :use_ssl => false
27
- }
22
+ username: username,
23
+ password: password,
24
+ site: 'http://localhost:8080/',
25
+ context_path: '',
26
+ auth_type: :basic,
27
+ use_ssl: false
28
+ }
28
29
 
29
30
  client = JIRA::Client.new(options)
30
31
 
@@ -1,5 +1,4 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path('../lib', __FILE__)
1
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
3
2
  require 'jira/version'
4
3
 
5
4
  Gem::Specification.new do |s|
@@ -7,8 +6,8 @@ Gem::Specification.new do |s|
7
6
  s.version = JIRA::VERSION
8
7
  s.authors = ['SUMO Heavy Industries', 'test IO']
9
8
  s.homepage = 'http://www.sumoheavy.com'
10
- s.summary = %q{Ruby Gem for use with the Atlassian JIRA REST API}
11
- s.description = %q{API for JIRA}
9
+ s.summary = 'Ruby Gem for use with the Atlassian JIRA REST API'
10
+ s.description = 'API for JIRA'
12
11
  s.licenses = ['MIT']
13
12
  s.metadata = { 'source_code_uri' => 'https://github.com/sumoheavy/jira-ruby' }
14
13
 
@@ -18,20 +17,20 @@ Gem::Specification.new do |s|
18
17
 
19
18
  s.files = `git ls-files`.split("\n")
20
19
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
22
21
  s.require_paths = ['lib']
23
22
 
24
23
  # Runtime Dependencies
25
- s.add_runtime_dependency 'oauth', '~> 0.5', '>= 0.5.0'
26
24
  s.add_runtime_dependency 'activesupport'
27
25
  s.add_runtime_dependency 'multipart-post'
26
+ s.add_runtime_dependency 'oauth', '~> 0.5', '>= 0.5.0'
28
27
 
29
28
  # Development Dependencies
30
- s.add_development_dependency 'railties'
31
- s.add_development_dependency 'webmock', '~> 1.18', '>= 1.18.0'
32
- s.add_development_dependency 'rspec', '~> 3.0', '>= 3.0.0'
33
- s.add_development_dependency 'rake', '~> 10.3', '>= 10.3.2'
34
29
  s.add_development_dependency 'guard', '~> 2.13', '>= 2.13.0'
35
30
  s.add_development_dependency 'guard-rspec', '~> 4.6', '>= 4.6.5'
36
31
  s.add_development_dependency 'pry', '~> 0.10', '>= 0.10.3'
32
+ s.add_development_dependency 'railties'
33
+ s.add_development_dependency 'rake', '~> 10.3', '>= 10.3.2'
34
+ s.add_development_dependency 'rspec', '~> 3.0', '>= 3.0.0'
35
+ s.add_development_dependency 'webmock', '~> 1.18', '>= 1.18.0'
37
36
  end
@@ -1,4 +1,4 @@
1
- $: << File.expand_path(File.dirname(__FILE__))
1
+ $LOAD_PATH << __dir__
2
2
 
3
3
  require 'active_support/inflector'
4
4
  ActiveSupport::Inflector.inflections do |inflector|
@@ -26,6 +26,8 @@ require 'jira/resource/applinks'
26
26
  require 'jira/resource/issuelinktype'
27
27
  require 'jira/resource/issuelink'
28
28
  require 'jira/resource/remotelink'
29
+ require 'jira/resource/sprint'
30
+ require 'jira/resource/sprint_report'
29
31
  require 'jira/resource/issue'
30
32
  require 'jira/resource/filter'
31
33
  require 'jira/resource/field'
@@ -35,7 +37,8 @@ require 'jira/resource/serverinfo'
35
37
  require 'jira/resource/createmeta'
36
38
  require 'jira/resource/webhook'
37
39
  require 'jira/resource/agile'
38
- require 'jira/resource/sprint'
40
+ require 'jira/resource/board'
41
+
39
42
  require 'jira/request_client'
40
43
  require 'jira/oauth_client'
41
44
  require 'jira/http_client'
@@ -3,7 +3,6 @@ require 'active_support/inflector'
3
3
  require 'set'
4
4
 
5
5
  module JIRA
6
-
7
6
  # This class provides the basic object <-> REST mapping for all JIRA::Resource subclasses,
8
7
  # i.e. the Create, Retrieve, Update, Delete lifecycle methods.
9
8
  #
@@ -51,8 +50,8 @@ module JIRA
51
50
  # new_comment = issue.comments.build
52
51
  #
53
52
  class Base
54
- QUERY_PARAMS_FOR_SINGLE_FETCH = Set.new [:expand, :fields]
55
- QUERY_PARAMS_FOR_SEARCH = Set.new [:expand, :fields, :startAt, :maxResults]
53
+ QUERY_PARAMS_FOR_SINGLE_FETCH = Set.new %i[expand fields]
54
+ QUERY_PARAMS_FOR_SEARCH = Set.new %i[expand fields startAt maxResults]
56
55
 
57
56
  # A reference to the JIRA::Client used to initialize this resource.
58
57
  attr_reader :client
@@ -67,8 +66,8 @@ module JIRA
67
66
  # representation of the JSON returned from the JIRA API
68
67
  attr_accessor :attrs
69
68
 
70
- alias :expanded? :expanded
71
- alias :deleted? :deleted
69
+ alias expanded? expanded
70
+ alias deleted? deleted
72
71
 
73
72
  def initialize(client, options = {})
74
73
  @client = client
@@ -80,12 +79,12 @@ module JIRA
80
79
  # each of them must be passed in to the initializer.
81
80
  self.class.belongs_to_relationships.each do |relation|
82
81
  if options[relation]
83
- instance_variable_set("@#{relation.to_s}", options[relation])
84
- instance_variable_set("@#{relation.to_s}_id", options[relation].key_value)
82
+ instance_variable_set("@#{relation}", options[relation])
83
+ instance_variable_set("@#{relation}_id", options[relation].key_value)
85
84
  elsif options["#{relation}_id".to_sym]
86
- instance_variable_set("@#{relation.to_s}_id", options["#{relation}_id".to_sym])
85
+ instance_variable_set("@#{relation}_id", options["#{relation}_id".to_sym])
87
86
  else
88
- raise ArgumentError.new("Required option #{relation.inspect} missing") unless options[relation]
87
+ raise ArgumentError, "Required option #{relation.inspect} missing" unless options[relation]
89
88
  end
90
89
  end
91
90
  end
@@ -95,17 +94,15 @@ module JIRA
95
94
  def self.all(client, options = {})
96
95
  response = client.get(collection_path(client))
97
96
  json = parse_json(response.body)
98
- if collection_attributes_are_nested
99
- json = json[endpoint_name.pluralize]
100
- end
97
+ json = json[endpoint_name.pluralize] if collection_attributes_are_nested
101
98
  json.map do |attrs|
102
- self.new(client, {:attrs => attrs}.merge(options))
99
+ new(client, { attrs: attrs }.merge(options))
103
100
  end
104
101
  end
105
102
 
106
103
  # Finds and retrieves a resource with the given ID.
107
104
  def self.find(client, key, options = {})
108
- instance = self.new(client, options)
105
+ instance = new(client, options)
109
106
  instance.attrs[key_attribute.to_s] = key
110
107
  instance.fetch(false, query_params_for_single_fetch(options))
111
108
  instance
@@ -114,7 +111,7 @@ module JIRA
114
111
  # Builds a new instance of the resource with the given attributes.
115
112
  # These attributes will be posted to the JIRA Api if save is called.
116
113
  def self.build(client, attrs)
117
- self.new(client, :attrs => attrs)
114
+ new(client, attrs: attrs)
118
115
  end
119
116
 
120
117
  # Returns the name of this resource for use in URL components.
@@ -122,7 +119,7 @@ module JIRA
122
119
  # JIRA::Resource::Issue.endpoint_name
123
120
  # # => issue
124
121
  def self.endpoint_name
125
- self.name.split('::').last.downcase
122
+ name.split('::').last.downcase
126
123
  end
127
124
 
128
125
  # Returns the full path for a collection of this resource.
@@ -130,7 +127,7 @@ module JIRA
130
127
  # JIRA::Resource::Issue.collection_path
131
128
  # # => /jira/rest/api/2/issue
132
129
  def self.collection_path(client, prefix = '/')
133
- client.options[:rest_base_path] + prefix + self.endpoint_name
130
+ client.options[:rest_base_path] + prefix + endpoint_name
134
131
  end
135
132
 
136
133
  # Returns the singular path for the resource with the given key.
@@ -200,7 +197,7 @@ module JIRA
200
197
  define_method(resource) do
201
198
  attribute = maybe_nested_attribute(attribute_key, options[:nested_under])
202
199
  return nil unless attribute
203
- child_class.new(client, :attrs => attribute)
200
+ child_class.new(client, attrs: attribute)
204
201
  end
205
202
  end
206
203
 
@@ -248,12 +245,12 @@ module JIRA
248
245
  def self.has_many(collection, options = {})
249
246
  attribute_key = options[:attribute_key] || collection.to_s
250
247
  child_class = options[:class] || ('JIRA::Resource::' + collection.to_s.classify).constantize
251
- self_class_basename = self.name.split('::').last.downcase.to_sym
248
+ self_class_basename = name.split('::').last.downcase.to_sym
252
249
  define_method(collection) do
253
- child_class_options = {self_class_basename => self}
250
+ child_class_options = { self_class_basename => self }
254
251
  attribute = maybe_nested_attribute(attribute_key, options[:nested_under]) || []
255
252
  collection = attribute.map do |child_attributes|
256
- child_class.new(client, child_class_options.merge(:attrs => child_attributes))
253
+ child_class.new(client, child_class_options.merge(attrs: child_attributes))
257
254
  end
258
255
  HasManyProxy.new(self, child_class, collection)
259
256
  end
@@ -290,8 +287,8 @@ module JIRA
290
287
  # Checks if method_name is set in the attributes hash
291
288
  # and returns true when found, otherwise proxies the
292
289
  # call to the superclass.
293
- def respond_to?(method_name, include_all=false)
294
- if attrs.keys.include? method_name.to_s
290
+ def respond_to?(method_name, _include_all = false)
291
+ if attrs.key?(method_name.to_s)
295
292
  true
296
293
  else
297
294
  super(method_name)
@@ -301,8 +298,8 @@ module JIRA
301
298
  # Overrides method_missing to check the attribute hash
302
299
  # for resources matching method_name and proxies the call
303
300
  # to the superclass if no match is found.
304
- def method_missing(method_name, *args, &block)
305
- if attrs.keys.include? method_name.to_s
301
+ def method_missing(method_name, *_args)
302
+ if attrs.key?(method_name.to_s)
306
303
  attrs[method_name.to_s]
307
304
  else
308
305
  super(method_name)
@@ -315,7 +312,7 @@ module JIRA
315
312
  @attrs[self.class.key_attribute.to_s]
316
313
  end
317
314
 
318
- def collection_path(prefix = "/")
315
+ def collection_path(prefix = '/')
319
316
  # Just proxy this to the class method
320
317
  self.class.collection_path(client, prefix)
321
318
  end
@@ -325,9 +322,7 @@ module JIRA
325
322
  # issue it returns '/issue'
326
323
  def path_component
327
324
  path_component = "/#{self.class.endpoint_name}"
328
- if key_value
329
- path_component += '/' + key_value
330
- end
325
+ path_component += '/' + key_value if key_value
331
326
  path_component
332
327
  end
333
328
 
@@ -346,9 +341,10 @@ module JIRA
346
341
  #
347
342
  # Accepts an attributes hash of the values to be saved. Will throw a
348
343
  # JIRA::HTTPError if the request fails (response is not HTTP 2xx).
349
- def save!(attrs)
344
+ def save!(attrs, path = nil)
345
+ path ||= new_record? ? url : patched_url
350
346
  http_method = new_record? ? :post : :put
351
- response = client.send(http_method, new_record? ? url : patched_url, attrs.to_json)
347
+ response = client.send(http_method, path, attrs.to_json)
352
348
  set_attrs(attrs, false)
353
349
  set_attrs_from_response(response)
354
350
  @expanded = false
@@ -360,19 +356,18 @@ module JIRA
360
356
  #
361
357
  # Accepts an attributes hash of the values to be saved. Will return false
362
358
  # if the request fails.
363
- def save(attrs)
359
+ def save(attrs, path = url)
364
360
  begin
365
- save_status = save!(attrs)
361
+ save_status = save!(attrs, path)
366
362
  rescue JIRA::HTTPError => exception
367
363
  begin
368
364
  set_attrs_from_response(exception.response) # Merge error status generated by JIRA REST API
369
365
  rescue JSON::ParserError => parse_exception
370
- set_attrs("exception" => {
371
- "class" => exception.response.class.name,
372
- "code" => exception.response.code,
373
- "message" => exception.response.message
374
- }
375
- )
366
+ set_attrs('exception' => {
367
+ 'class' => exception.response.class.name,
368
+ 'code' => exception.response.code,
369
+ 'message' => exception.response.message
370
+ })
376
371
  end
377
372
  # raise exception
378
373
  save_status = false
@@ -383,7 +378,7 @@ module JIRA
383
378
  # Sets the attributes hash from a HTTPResponse object from JIRA if it is
384
379
  # not nil or is not a json response.
385
380
  def set_attrs_from_response(response)
386
- unless response.body.nil? or response.body.length < 2
381
+ unless response.body.nil? || (response.body.length < 2)
387
382
  json = self.class.parse_json(response.body)
388
383
  set_attrs(json)
389
384
  end
@@ -393,7 +388,7 @@ module JIRA
393
388
  # hash values will be clobbered by the new hash, otherwise the hash will
394
389
  # be deeply merged into attrs. The target paramater is for internal use only
395
390
  # and should not be used.
396
- def set_attrs(hash, clobber=true, target = nil)
391
+ def set_attrs(hash, clobber = true, target = nil)
397
392
  target ||= @attrs
398
393
  if clobber
399
394
  target.merge!(hash)
@@ -424,7 +419,7 @@ module JIRA
424
419
  prefix = '/'
425
420
  unless self.class.belongs_to_relationships.empty?
426
421
  prefix = self.class.belongs_to_relationships.inject(prefix) do |prefix_so_far, relationship|
427
- prefix_so_far.to_s + relationship.to_s + "/" + self.send("#{relationship.to_s}_id").to_s + '/'
422
+ prefix_so_far.to_s + relationship.to_s + '/' + send("#{relationship}_id").to_s + '/'
428
423
  end
429
424
  end
430
425
  if @attrs['self']
@@ -494,9 +489,15 @@ module JIRA
494
489
  end
495
490
 
496
491
  def url_with_query_params(url, query_params)
497
- uri = URI.parse(url)
498
- uri.query = uri.query.nil? ? "#{hash_to_query_string query_params}" : "#{uri.query}&#{hash_to_query_string query_params}" unless query_params.empty?
499
- uri.to_s
492
+ self.class.url_with_query_params(url, query_params)
493
+ end
494
+
495
+ def self.url_with_query_params(url, query_params)
496
+ if !query_params.empty?
497
+ "#{url}?#{hash_to_query_string query_params}"
498
+ else
499
+ url
500
+ end
500
501
  end
501
502
 
502
503
  def hash_to_query_string(query_params)
@@ -504,19 +505,19 @@ module JIRA
504
505
  end
505
506
 
506
507
  def self.hash_to_query_string(query_params)
507
- query_params.map do |k,v|
508
+ query_params.map do |k, v|
508
509
  CGI.escape(k.to_s) + '=' + CGI.escape(v.to_s)
509
510
  end.join('&')
510
511
  end
511
512
 
512
513
  def self.query_params_for_single_fetch(options)
513
- Hash[options.select do |k,v|
514
+ Hash[options.select do |k, _v|
514
515
  QUERY_PARAMS_FOR_SINGLE_FETCH.include? k
515
516
  end]
516
517
  end
517
518
 
518
519
  def self.query_params_for_search(options)
519
- Hash[options.select do |k,v|
520
+ Hash[options.select do |k, _v|
520
521
  QUERY_PARAMS_FOR_SEARCH.include? k
521
522
  end]
522
523
  end
@@ -1,8 +1,6 @@
1
1
  module JIRA
2
-
3
2
  # This is the base class for all the JIRA resource factory instances.
4
3
  class BaseFactory
5
-
6
4
  attr_reader :client
7
5
 
8
6
  def initialize(client)
@@ -41,9 +39,8 @@ module JIRA
41
39
  delegate_to_target_class :all, :find, :collection_path, :singular_path, :jql, :get_backlog_issues, :get_board_issues, :get_sprints, :get_sprint_issues, :get_projects, :get_projects_full
42
40
 
43
41
  # This method needs special handling as it has a default argument value
44
- def build(attrs={})
42
+ def build(attrs = {})
45
43
  target_class.build(@client, attrs)
46
44
  end
47
-
48
45
  end
49
46
  end