jira-ruby 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
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