jira-ruby 3.0.0.beta1 → 3.0.0.beta2

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/CI.yml +1 -0
  3. data/.github/workflows/codeql.yml +0 -4
  4. data/.gitignore +3 -1
  5. data/.rubocop.yml +1 -69
  6. data/.yardopts +4 -0
  7. data/lib/jira/base.rb +5 -13
  8. data/lib/jira/client.rb +59 -4
  9. data/lib/jira/has_many_proxy.rb +30 -28
  10. data/lib/jira/http_client.rb +64 -1
  11. data/lib/jira/oauth_client.rb +62 -0
  12. data/lib/jira/request_client.rb +26 -1
  13. data/lib/jira/resource/attachment.rb +88 -3
  14. data/lib/jira/resource/field.rb +4 -8
  15. data/lib/jira/resource/issue.rb +64 -4
  16. data/lib/jira/resource/issue_picker_suggestions.rb +1 -1
  17. data/lib/jira/resource/issuelink.rb +4 -3
  18. data/lib/jira/resource/watcher.rb +1 -1
  19. data/lib/jira/resource/webhook.rb +5 -1
  20. data/lib/jira/version.rb +1 -1
  21. data/lib/tasks/generate.rake +1 -1
  22. data/spec/integration/project_spec.rb +1 -1
  23. data/spec/integration/rapidview_spec.rb +1 -1
  24. data/spec/integration/user_spec.rb +12 -3
  25. data/spec/integration/watcher_spec.rb +6 -2
  26. data/spec/integration/{webhook.rb → webhook_spec.rb} +8 -1
  27. data/spec/jira/base_factory_spec.rb +11 -2
  28. data/spec/jira/base_spec.rb +80 -57
  29. data/spec/jira/client_spec.rb +20 -18
  30. data/spec/jira/http_client_spec.rb +2 -2
  31. data/spec/jira/oauth_client_spec.rb +8 -4
  32. data/spec/jira/resource/agile_spec.rb +2 -2
  33. data/spec/jira/resource/attachment_spec.rb +36 -13
  34. data/spec/jira/resource/board_spec.rb +5 -5
  35. data/spec/jira/resource/field_spec.rb +23 -24
  36. data/spec/jira/resource/issue_spec.rb +18 -18
  37. data/spec/jira/resource/project_spec.rb +6 -6
  38. data/spec/jira/resource/sprint_spec.rb +20 -8
  39. data/spec/jira/resource/status_spec.rb +1 -1
  40. data/spec/jira/resource/user_factory_spec.rb +2 -2
  41. data/spec/jira/resource/worklog_spec.rb +1 -1
  42. data/spec/support/clients_helper.rb +2 -2
  43. data/spec/support/mock_client.rb +9 -0
  44. data/spec/support/mock_response.rb +8 -0
  45. metadata +9 -10
@@ -1,56 +1,55 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe JIRA::Resource::Field do
4
- let(:cache) { OpenStruct.new }
5
-
6
4
  let(:client) do
7
5
  client = double(options: { rest_base_path: '/jira/rest/api/2' })
8
6
  field = JIRA::Resource::FieldFactory.new(client)
9
7
  allow(client).to receive(:Field).and_return(field)
10
- allow(client).to receive(:cache).and_return(cache)
8
+ allow(client).to receive(:field_map_cache).and_return(nil)
9
+ allow(client).to receive(:field_map_cache=)
11
10
  # info about all fields on the client
12
11
  allow(client.Field).to receive(:all).and_return([
13
12
  described_class.new(client,
14
13
  attrs: { 'id' => 'customfield_10666', 'name' => 'Priority', 'custom' => true, 'orderable' => true, 'navigable' => true,
15
- 'searchable' => true, 'clauseNames' => ['cf[10666]', 'Priority'], 'schema' => { 'type' => 'string', 'custom' => 'com.atlassian.jira.plugin.system.customfieldtypes:select', 'customId' => 10_666 } }),
14
+ 'searchable' => true, 'clauseNames' => ['cf[10666]', 'Priority'], 'schema' => { 'type' => 'string', 'custom' => 'com.atlassian.jira.plugin.system.customfieldtypes:select', 'customId' => 10_666 } }),
16
15
  described_class.new(client,
17
16
  attrs: { 'id' => 'issuekey', 'name' => 'Key', 'custom' => false, 'orderable' => false,
18
- 'navigable' => true, 'searchable' => false, 'clauseNames' => %w[id issue issuekey key] }),
17
+ 'navigable' => true, 'searchable' => false, 'clauseNames' => %w[id issue issuekey key] }),
19
18
  described_class.new(client,
20
19
  attrs: { 'id' => 'priority', 'name' => 'Priority', 'custom' => false, 'orderable' => true,
21
- 'navigable' => true, 'searchable' => true, 'clauseNames' => ['priority'], 'schema' => { 'type' => 'priority', 'system' => 'priority' } }),
20
+ 'navigable' => true, 'searchable' => true, 'clauseNames' => ['priority'], 'schema' => { 'type' => 'priority', 'system' => 'priority' } }),
22
21
  described_class.new(client,
23
22
  attrs: { 'id' => 'summary', 'name' => 'Summary', 'custom' => false, 'orderable' => true,
24
- 'navigable' => true, 'searchable' => true, 'clauseNames' => ['summary'], 'schema' => { 'type' => 'string', 'system' => 'summary' } }),
23
+ 'navigable' => true, 'searchable' => true, 'clauseNames' => ['summary'], 'schema' => { 'type' => 'string', 'system' => 'summary' } }),
25
24
  described_class.new(client,
26
25
  attrs: { 'id' => 'issuetype', 'name' => 'Issue Type', 'custom' => false, 'orderable' => true,
27
- 'navigable' => true, 'searchable' => true, 'clauseNames' => %w[issuetype type], 'schema' => { 'type' => 'issuetype', 'system' => 'issuetype' } }),
26
+ 'navigable' => true, 'searchable' => true, 'clauseNames' => %w[issuetype type], 'schema' => { 'type' => 'issuetype', 'system' => 'issuetype' } }),
28
27
  described_class.new(client,
29
28
  attrs: { 'id' => 'customfield_10111', 'name' => 'SingleWord', 'custom' => true, 'orderable' => true,
30
- 'navigable' => true, 'searchable' => true, 'clauseNames' => ['cf[10111]', 'SingleWord'], 'schema' => { 'type' => 'string', 'custom' => 'com.atlassian.jira.plugin.system.customfieldtypes:select', 'customId' => 10_111 } }),
29
+ 'navigable' => true, 'searchable' => true, 'clauseNames' => ['cf[10111]', 'SingleWord'], 'schema' => { 'type' => 'string', 'custom' => 'com.atlassian.jira.plugin.system.customfieldtypes:select', 'customId' => 10_111 } }),
31
30
  described_class.new(client,
32
31
  attrs: { 'id' => 'customfield_10222', 'name' => 'Multi Word', 'custom' => true, 'orderable' => true,
33
- 'navigable' => true, 'searchable' => true, 'clauseNames' => ['cf[10222]', 'Multi Word'], 'schema' => { 'type' => 'string', 'custom' => 'com.atlassian.jira.plugin.system.customfieldtypes:select', 'customId' => 10_222 } }),
32
+ 'navigable' => true, 'searchable' => true, 'clauseNames' => ['cf[10222]', 'Multi Word'], 'schema' => { 'type' => 'string', 'custom' => 'com.atlassian.jira.plugin.system.customfieldtypes:select', 'customId' => 10_222 } }),
34
33
  described_class.new(client,
35
34
  attrs: { 'id' => 'customfield_10333', 'name' => 'Why/N@t', 'custom' => true, 'orderable' => true,
36
- 'navigable' => true, 'searchable' => true, 'clauseNames' => ['cf[10333]', 'Why/N@t'], 'schema' => { 'type' => 'string', 'custom' => 'com.atlassian.jira.plugin.system.customfieldtypes:select', 'customId' => 10_333 } }),
35
+ 'navigable' => true, 'searchable' => true, 'clauseNames' => ['cf[10333]', 'Why/N@t'], 'schema' => { 'type' => 'string', 'custom' => 'com.atlassian.jira.plugin.system.customfieldtypes:select', 'customId' => 10_333 } }),
37
36
  described_class.new(client,
38
37
  attrs: { 'id' => 'customfield_10444', 'name' => 'SingleWord', 'custom' => true, 'orderable' => true,
39
- 'navigable' => true, 'searchable' => true, 'clauseNames' => ['cf[10444]', 'SingleWord'], 'schema' => { 'type' => 'string', 'custom' => 'com.atlassian.jira.plugin.system.customfieldtypes:select', 'customId' => 10_444 } })
38
+ 'navigable' => true, 'searchable' => true, 'clauseNames' => ['cf[10444]', 'SingleWord'], 'schema' => { 'type' => 'string', 'custom' => 'com.atlassian.jira.plugin.system.customfieldtypes:select', 'customId' => 10_444 } })
40
39
  ])
41
40
  client
42
41
  end
43
42
 
44
43
  describe 'field_mappings' do
45
- shared_context 'mapped or not' do
44
+ shared_context 'with or without mapping' do
46
45
  subject do
47
46
  described_class.new(client, attrs: {
48
47
  'priority' => 1,
49
- 'customfield_10111' => 'data_in_custom_field',
50
- 'customfield_10222' => 'multi word custom name',
51
- 'customfield_10333' => 'complex custom name',
52
- 'customfield_10444' => 'duplicated custom name',
53
- 'customfield_10666' => 'duplicate of a system name'
48
+ 'customfield_10111' => 'data_in_custom_field',
49
+ 'customfield_10222' => 'multi word custom name',
50
+ 'customfield_10333' => 'complex custom name',
51
+ 'customfield_10444' => 'duplicated custom name',
52
+ 'customfield_10666' => 'duplicate of a system name'
54
53
  })
55
54
  end
56
55
 
@@ -65,12 +64,12 @@ describe JIRA::Resource::Field do
65
64
  it 'is not confused by common attribute keys' do
66
65
  expect { subject.name }.to raise_error(NoMethodError)
67
66
  expect { subject.custom }.to raise_error(NoMethodError)
68
- expect(subject.id).to eq(nil) # picks up ID from the parent -
67
+ expect(subject.id).to be_nil # picks up ID from the parent -
69
68
  end
70
69
  end
71
70
 
72
- context 'before fields are mapped' do
73
- include_context 'mapped or not'
71
+ context 'when fields are not yet mapped' do
72
+ include_context 'with or without mapping'
74
73
 
75
74
  it 'can find a standard field by id' do
76
75
  expect(subject.priority).to eq(1)
@@ -87,12 +86,12 @@ describe JIRA::Resource::Field do
87
86
  it 'is not confused by common attribute keys and raises error' do
88
87
  expect { subject.name }.to raise_error(NoMethodError)
89
88
  expect { subject.custom }.to raise_error(NoMethodError)
90
- expect(subject.id).to eq(nil) # picks up ID from the parent -
89
+ expect(subject.id).to be_nil # picks up ID from the parent -
91
90
  end
92
91
  end
93
92
 
94
- context 'after fields are mapped' do
95
- include_context 'mapped or not'
93
+ context 'when fields have been mapped' do
94
+ include_context 'with or without mapping'
96
95
 
97
96
  it 'warns of duplicate fields' do
98
97
  expect { client.Field.map_fields }.to output(/renaming as Priority_10666/).to_stderr
@@ -7,7 +7,7 @@ describe JIRA::Resource::Issue do
7
7
  let(:client) do
8
8
  client = double(options: { rest_base_path: '/jira/rest/api/2' })
9
9
  allow(client).to receive(:Field).and_return(JIRA::Resource::FieldFactory.new(client))
10
- allow(client).to receive(:cache).and_return(OpenStruct.new)
10
+ allow(client).to receive(:field_map_cache).and_return(nil)
11
11
  client
12
12
  end
13
13
 
@@ -25,7 +25,7 @@ describe JIRA::Resource::Issue do
25
25
  end
26
26
 
27
27
  it 'responds to key' do
28
- expect(@decorated.respond_to?(:key)).to eq(true)
28
+ expect(@decorated.respond_to?(:key)).to be(true)
29
29
  end
30
30
 
31
31
  it 'does not raise an error' do
@@ -51,7 +51,7 @@ describe JIRA::Resource::Issue do
51
51
  expect(client).to receive(:Issue).and_return(issue)
52
52
  expect(issue).to receive(:build).with({ 'id' => '1', 'summary' => 'Bugs Everywhere' })
53
53
 
54
- issues = described_class.all(client)
54
+ described_class.all(client)
55
55
  end
56
56
 
57
57
  it 'finds an issue by key or id' do
@@ -113,7 +113,7 @@ describe JIRA::Resource::Issue do
113
113
 
114
114
  it 'searches an issue with a jql query string and maxResults equals zero and should return the count of tickets' do
115
115
  response = double
116
- issue = double
116
+ double
117
117
 
118
118
  allow(response).to receive(:body).and_return('{"total": 1, "issues": []}')
119
119
  expect(client).to receive(:get)
@@ -175,20 +175,20 @@ describe JIRA::Resource::Issue do
175
175
  subject do
176
176
  described_class.new(client, attrs: {
177
177
  'id' => '123',
178
- 'fields' => {
179
- 'reporter' => { 'foo' => 'bar' },
180
- 'assignee' => { 'foo' => 'bar' },
181
- 'project' => { 'foo' => 'bar' },
182
- 'priority' => { 'foo' => 'bar' },
183
- 'issuetype' => { 'foo' => 'bar' },
184
- 'status' => { 'foo' => 'bar' },
185
- 'resolution' => { 'foo' => 'bar' },
186
- 'components' => [{ 'foo' => 'bar' }, { 'baz' => 'flum' }],
187
- 'versions' => [{ 'foo' => 'bar' }, { 'baz' => 'flum' }],
188
- 'comment' => { 'comments' => [{ 'foo' => 'bar' }, { 'baz' => 'flum' }] },
189
- 'attachment' => [{ 'foo' => 'bar' }, { 'baz' => 'flum' }],
190
- 'worklog' => { 'worklogs' => [{ 'foo' => 'bar' }, { 'baz' => 'flum' }] }
191
- }
178
+ 'fields' => {
179
+ 'reporter' => { 'foo' => 'bar' },
180
+ 'assignee' => { 'foo' => 'bar' },
181
+ 'project' => { 'foo' => 'bar' },
182
+ 'priority' => { 'foo' => 'bar' },
183
+ 'issuetype' => { 'foo' => 'bar' },
184
+ 'status' => { 'foo' => 'bar' },
185
+ 'resolution' => { 'foo' => 'bar' },
186
+ 'components' => [{ 'foo' => 'bar' }, { 'baz' => 'flum' }],
187
+ 'versions' => [{ 'foo' => 'bar' }, { 'baz' => 'flum' }],
188
+ 'comment' => { 'comments' => [{ 'foo' => 'bar' }, { 'baz' => 'flum' }] },
189
+ 'attachment' => [{ 'foo' => 'bar' }, { 'baz' => 'flum' }],
190
+ 'worklog' => { 'worklogs' => [{ 'foo' => 'bar' }, { 'baz' => 'flum' }] }
191
+ }
192
192
  })
193
193
  end
194
194
 
@@ -11,8 +11,8 @@ describe JIRA::Resource::Project do
11
11
  subject do
12
12
  described_class.new(client, attrs: {
13
13
  'lead' => { 'foo' => 'bar' },
14
- 'issueTypes' => [{ 'foo' => 'bar' }, { 'baz' => 'flum' }],
15
- 'versions' => [{ 'foo' => 'bar' }, { 'baz' => 'flum' }]
14
+ 'issueTypes' => [{ 'foo' => 'bar' }, { 'baz' => 'flum' }],
15
+ 'versions' => [{ 'foo' => 'bar' }, { 'baz' => 'flum' }]
16
16
  })
17
17
  end
18
18
 
@@ -36,7 +36,7 @@ describe JIRA::Resource::Project do
36
36
  end
37
37
 
38
38
  it 'returns issues' do
39
- response_body = '{"expand":"schema,names","startAt":0,"maxResults":1,"total":1,"issues":[{"expand":"editmeta,renderedFields,transitions,changelog,operations","id":"53062","self":"/rest/api/2/issue/53062","key":"test key","fields":{"summary":"test summary"}}]}' # rubocop:disable Layout/LineLength
39
+ response_body = '{"expand":"schema,names","startAt":0,"maxResults":1,"total":1,"issues":[{"expand":"editmeta,renderedFields,transitions,changelog,operations","id":"53062","self":"/rest/api/2/issue/53062","key":"test key","fields":{"summary":"test summary"}}]}'
40
40
  response = double('response',
41
41
  body: response_body)
42
42
  issue_factory = double('issue factory')
@@ -52,7 +52,7 @@ describe JIRA::Resource::Project do
52
52
 
53
53
  context 'with changelog' do
54
54
  it 'returns issues' do
55
- response_body = '{"expand":"schema,names","startAt":0,"maxResults":1,"total":1,"issues":[{"expand":"editmeta,renderedFields,transitions,changelog,operations","id":"53062","self":"/rest/api/2/issue/53062","key":"test key","fields":{"summary":"test summary"},"changelog":{}}]}' # rubocop:disable Layout/LineLength
55
+ response_body = '{"expand":"schema,names","startAt":0,"maxResults":1,"total":1,"issues":[{"expand":"editmeta,renderedFields,transitions,changelog,operations","id":"53062","self":"/rest/api/2/issue/53062","key":"test key","fields":{"summary":"test summary"},"changelog":{}}]}'
56
56
  response = double('response',
57
57
  body: response_body)
58
58
  issue_factory = double('issue factory')
@@ -73,7 +73,7 @@ describe JIRA::Resource::Project do
73
73
  let(:project_key) { SecureRandom.hex }
74
74
  let(:response) { double('response', body: '[{}]') }
75
75
 
76
- context 'pagination' do
76
+ context 'with pagination' do
77
77
  before do
78
78
  user_factory = double('user factory')
79
79
  expect(client).to receive(:User).and_return(user_factory)
@@ -113,7 +113,7 @@ describe JIRA::Resource::Project do
113
113
  max_results = rand(1000)
114
114
 
115
115
  expect(client).to receive(:get)
116
- .with("/jira/rest/api/2/user/assignable/search?project=#{project_key}&startAt=#{start_at}&maxResults=#{max_results}") # rubocop:disable Layout/LineLength
116
+ .with("/jira/rest/api/2/user/assignable/search?project=#{project_key}&startAt=#{start_at}&maxResults=#{max_results}")
117
117
  .and_return(response)
118
118
 
119
119
  project.users(start_at:, max_results:)
@@ -43,7 +43,9 @@ describe JIRA::Resource::Sprint do
43
43
  let(:given_attrs) { { start_date: '2016-06-10' } }
44
44
 
45
45
  it 'calls save on the super class with the given attributes & agile url' do
46
- expect_any_instance_of(JIRA::Base).to receive(:save).with(given_attrs, agile_sprint_path)
46
+ mock_response = double('response', body: '{"id":"123"}')
47
+
48
+ expect(client).to receive(:post).with(agile_sprint_path, given_attrs.to_json).and_return(mock_response)
47
49
 
48
50
  sprint.save(given_attrs)
49
51
  end
@@ -51,7 +53,9 @@ describe JIRA::Resource::Sprint do
51
53
 
52
54
  context 'when attributes are not specified' do
53
55
  it 'calls save on the super class with the instance attributes & agile url' do
54
- expect_any_instance_of(JIRA::Base).to receive(:save).with(instance_attrs, agile_sprint_path)
56
+ mock_response = double('response', body: '{"id":"123"}')
57
+
58
+ expect(client).to receive(:post).with(agile_sprint_path, instance_attrs.to_json).and_return(mock_response)
55
59
 
56
60
  sprint.save
57
61
  end
@@ -59,7 +63,9 @@ describe JIRA::Resource::Sprint do
59
63
 
60
64
  context 'when providing the path argument' do
61
65
  it 'ignores it' do
62
- expect_any_instance_of(JIRA::Base).to receive(:save).with(instance_attrs, agile_sprint_path)
66
+ mock_response = double('response', body: '{"id":"123"}')
67
+
68
+ expect(client).to receive(:post).with(agile_sprint_path, instance_attrs.to_json).and_return(mock_response)
63
69
 
64
70
  sprint.save({}, 'mavenlink.com')
65
71
  end
@@ -77,7 +83,9 @@ describe JIRA::Resource::Sprint do
77
83
  let(:given_attrs) { { start_date: '2016-06-10' } }
78
84
 
79
85
  it 'calls save! on the super class with the given attributes & agile url' do
80
- expect_any_instance_of(JIRA::Base).to receive(:save!).with(given_attrs, agile_sprint_path)
86
+ mock_response = double('response', body: '{"id":"123"}')
87
+
88
+ expect(client).to receive(:post).with(agile_sprint_path, given_attrs.to_json).and_return(mock_response)
81
89
 
82
90
  sprint.save!(given_attrs)
83
91
  end
@@ -85,7 +93,9 @@ describe JIRA::Resource::Sprint do
85
93
 
86
94
  context 'when attributes are not specified' do
87
95
  it 'calls save! on the super class with the instance attributes & agile url' do
88
- expect_any_instance_of(JIRA::Base).to receive(:save!).with(instance_attrs, agile_sprint_path)
96
+ mock_response = double('response', body: '{"id":"123"}')
97
+
98
+ expect(client).to receive(:post).with(agile_sprint_path, instance_attrs.to_json).and_return(mock_response)
89
99
 
90
100
  sprint.save!
91
101
  end
@@ -93,14 +103,16 @@ describe JIRA::Resource::Sprint do
93
103
 
94
104
  context 'when providing the path argument' do
95
105
  it 'ignores it' do
96
- expect_any_instance_of(JIRA::Base).to receive(:save!).with(instance_attrs, agile_sprint_path)
106
+ mock_response = double('response', body: '{"id":"123"}')
107
+
108
+ expect(client).to receive(:post).with(agile_sprint_path, instance_attrs.to_json).and_return(mock_response)
97
109
 
98
110
  sprint.save!({}, 'mavenlink.com')
99
111
  end
100
112
  end
101
113
  end
102
114
 
103
- context 'an issue exists' do
115
+ context 'when an issue exists' do
104
116
  let(:issue_id) { 1001 }
105
117
  let(:post_issue_path) do
106
118
  described_class.agile_path(client, sprint.id)
@@ -126,7 +138,7 @@ describe JIRA::Resource::Sprint do
126
138
  end
127
139
  end
128
140
 
129
- context 'multiple issues exists' do
141
+ context 'when multiple issues exist' do
130
142
  let(:issue_ids) { [1001, 1012] }
131
143
  let(:post_issue_path) do
132
144
  described_class.agile_path(client, sprint.id)
@@ -4,7 +4,7 @@ describe JIRA::Resource::Status do
4
4
  let(:client) do
5
5
  client = double(options: { rest_base_path: '/jira/rest/api/2' })
6
6
  allow(client).to receive(:Field).and_return(JIRA::Resource::FieldFactory.new(client))
7
- allow(client).to receive(:cache).and_return(OpenStruct.new)
7
+ allow(client).to receive(:field_map_cache).and_return(nil)
8
8
  client
9
9
  end
10
10
 
@@ -4,13 +4,13 @@ describe JIRA::Resource::UserFactory do
4
4
  subject { described_class.new(client) }
5
5
 
6
6
  let(:client) do
7
- instance_double('Client', options: { rest_base_path: '/jira/rest/api/2' })
7
+ instance_double(Client, options: { rest_base_path: '/jira/rest/api/2' })
8
8
  end
9
9
 
10
10
  describe '#myself' do
11
11
  let(:response) do
12
12
  instance_double(
13
- 'Response', body: get_mock_response('user_accountId=1234567890abcdef01234567.json')
13
+ Response, body: get_mock_response('user_accountId=1234567890abcdef01234567.json')
14
14
  )
15
15
  end
16
16
 
@@ -7,7 +7,7 @@ describe JIRA::Resource::Worklog do
7
7
  subject do
8
8
  described_class.new(client, issue_id: '99999', attrs: {
9
9
  'author' => { 'foo' => 'bar' },
10
- 'updateAuthor' => { 'foo' => 'bar' }
10
+ 'updateAuthor' => { 'foo' => 'bar' }
11
11
  })
12
12
  end
13
13
 
@@ -1,5 +1,5 @@
1
1
  module ClientsHelper
2
- def with_each_client(&block)
2
+ def with_each_client(&)
3
3
  clients = {}
4
4
 
5
5
  oauth_client = JIRA::Client.new(consumer_key: 'foo', consumer_secret: 'bar')
@@ -9,6 +9,6 @@ module ClientsHelper
9
9
  basic_client = JIRA::Client.new(username: 'foo', password: 'bar', auth_type: :basic, use_ssl: false)
10
10
  clients['http://localhost:2990'] = basic_client
11
11
 
12
- clients.each(&block)
12
+ clients.each(&)
13
13
  end
14
14
  end
@@ -0,0 +1,9 @@
1
+ class Client
2
+ attr_reader :options
3
+
4
+ def initialize(options = {})
5
+ @options = options
6
+ end
7
+
8
+ def get(url) end
9
+ end
@@ -0,0 +1,8 @@
1
+ class Response
2
+ attr_reader :body, :status
3
+
4
+ def initialize(body, status = nil)
5
+ @body = body
6
+ @status = status
7
+ end
8
+ end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jira-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.beta1
4
+ version: 3.0.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - SUMO Heavy Industries
8
8
  - test IO
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2024-08-15 00:00:00.000000000 Z
11
+ date: 2025-03-11 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activesupport
@@ -68,7 +67,6 @@ dependencies:
68
67
  - !ruby/object:Gem::Version
69
68
  version: '1.0'
70
69
  description: API for JIRA
71
- email:
72
70
  executables: []
73
71
  extensions: []
74
72
  extra_rdoc_files: []
@@ -81,6 +79,7 @@ files:
81
79
  - ".github/workflows/rubocop.yml"
82
80
  - ".gitignore"
83
81
  - ".rubocop.yml"
82
+ - ".yardopts"
84
83
  - Gemfile
85
84
  - Guardfile
86
85
  - LICENSE
@@ -150,7 +149,7 @@ files:
150
149
  - spec/integration/user_spec.rb
151
150
  - spec/integration/version_spec.rb
152
151
  - spec/integration/watcher_spec.rb
153
- - spec/integration/webhook.rb
152
+ - spec/integration/webhook_spec.rb
154
153
  - spec/integration/worklog_spec.rb
155
154
  - spec/jira/base_factory_spec.rb
156
155
  - spec/jira/base_spec.rb
@@ -237,6 +236,8 @@ files:
237
236
  - spec/support/matchers/have_attributes.rb
238
237
  - spec/support/matchers/have_many.rb
239
238
  - spec/support/matchers/have_one.rb
239
+ - spec/support/mock_client.rb
240
+ - spec/support/mock_response.rb
240
241
  - spec/support/shared_examples/integration.rb
241
242
  homepage: http://www.sumoheavy.com
242
243
  licenses:
@@ -244,7 +245,6 @@ licenses:
244
245
  metadata:
245
246
  source_code_uri: https://github.com/sumoheavy/jira-ruby
246
247
  rubygems_mfa_required: 'true'
247
- post_install_message:
248
248
  rdoc_options: []
249
249
  require_paths:
250
250
  - lib
@@ -255,12 +255,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
255
255
  version: 3.1.0
256
256
  required_rubygems_version: !ruby/object:Gem::Requirement
257
257
  requirements:
258
- - - ">"
258
+ - - ">="
259
259
  - !ruby/object:Gem::Version
260
- version: 1.3.1
260
+ version: '0'
261
261
  requirements: []
262
- rubygems_version: 3.3.3
263
- signing_key:
262
+ rubygems_version: 3.6.2
264
263
  specification_version: 4
265
264
  summary: Ruby Gem for use with the Atlassian JIRA REST API
266
265
  test_files: []