geet 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -0
  3. data/Gemfile +10 -0
  4. data/Gemfile.lock +31 -0
  5. data/README.md +0 -2
  6. data/bin/geet +50 -39
  7. data/geet.gemspec +1 -1
  8. data/lib/geet/commandline/commands.rb +14 -0
  9. data/lib/geet/{helpers/configuration_helper.rb → commandline/configuration.rb} +4 -12
  10. data/lib/geet/git/repository.rb +93 -44
  11. data/lib/geet/{git_hub → github}/abstract_issue.rb +13 -13
  12. data/lib/geet/github/account.rb +19 -0
  13. data/lib/geet/{git_hub/api_helper.rb → github/api_interface.rb} +21 -19
  14. data/lib/geet/github/collaborator.rb +17 -0
  15. data/lib/geet/{git_hub → github}/gist.rb +4 -4
  16. data/lib/geet/{git_hub → github}/issue.rb +10 -10
  17. data/lib/geet/github/label.rb +17 -0
  18. data/lib/geet/{git_hub → github}/milestone.rb +11 -11
  19. data/lib/geet/github/pr.rb +61 -0
  20. data/lib/geet/services/create_gist.rb +4 -4
  21. data/lib/geet/services/create_issue.rb +30 -25
  22. data/lib/geet/services/create_pr.rb +28 -27
  23. data/lib/geet/services/list_issues.rb +2 -2
  24. data/lib/geet/services/list_labels.rb +2 -2
  25. data/lib/geet/services/list_milestones.rb +10 -10
  26. data/lib/geet/services/list_prs.rb +2 -2
  27. data/lib/geet/services/merge_pr.rb +8 -7
  28. data/lib/geet/version.rb +1 -1
  29. data/spec/integration/create_gist_spec.rb +46 -0
  30. data/spec/integration/create_issue_spec.rb +66 -0
  31. data/spec/integration/create_pr_spec.rb +68 -0
  32. data/spec/integration/list_issues_spec.rb +52 -0
  33. data/spec/integration/list_labels_spec.rb +28 -0
  34. data/spec/integration/list_milestones_spec.rb +43 -0
  35. data/spec/integration/list_prs_spec.rb +52 -0
  36. data/spec/integration/merge_pr_spec.rb +30 -0
  37. data/spec/spec_helper.rb +121 -0
  38. data/spec/vcr_cassettes/create_gist_private.yml +80 -0
  39. data/spec/vcr_cassettes/create_gist_public.yml +80 -0
  40. data/spec/vcr_cassettes/create_issue.yml +534 -0
  41. data/spec/vcr_cassettes/create_issue_upstream.yml +235 -0
  42. data/spec/vcr_cassettes/create_pr.yml +693 -0
  43. data/spec/vcr_cassettes/create_pr_upstream.yml +313 -0
  44. data/spec/vcr_cassettes/list_issues.yml +82 -0
  45. data/spec/vcr_cassettes/list_issues_upstream.yml +84 -0
  46. data/spec/vcr_cassettes/list_labels.yml +78 -0
  47. data/spec/vcr_cassettes/list_milestones.yml +468 -0
  48. data/spec/vcr_cassettes/list_prs.yml +84 -0
  49. data/spec/vcr_cassettes/list_prs_upstream.yml +80 -0
  50. data/spec/vcr_cassettes/merge_pr.yml +156 -0
  51. metadata +36 -11
  52. data/lib/geet/git_hub/account.rb +0 -19
  53. data/lib/geet/git_hub/pr.rb +0 -57
  54. data/lib/geet/git_hub/remote_repository.rb +0 -65
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f6851bac2fb23c71d05f45df5bb3fd5031f7edd3
4
- data.tar.gz: 82d8882974a9ce36099507adbd88f1030da1331a
3
+ metadata.gz: b893cf44b85d8bfeedc77128b96c5bc921abb701
4
+ data.tar.gz: e50482a1691bedde73ef4c1c195693a57c60d9ce
5
5
  SHA512:
6
- metadata.gz: 66454a2b83427c2cbce5a693a5271f78d4b70f38ab2762f949d53c6ba65151961cc31fde338454a171243732bb23ec35498967299eb883b7f039174798a9fcde
7
- data.tar.gz: bb4ac9a4a07dd9a5f72923564b45db22a047576e41c63c05a15442ca5983f20de332c7be1f0edbd183b8780662f11976b9a736813bb2f036202b4018de83c58b
6
+ metadata.gz: 2733412c618b5d39cdeeb3b900364c69fcc551fa9238c30e743d6deb1b6a9083fc3cbf279df09027692a685f9f47fddb2d8eecb6beda7f79f03617f3dce31814
7
+ data.tar.gz: 4cb03d50785c4645e0d206337340d84bd53f8569c667c20787a2507a4579264fc4d13be4c2bffa5109c1a46ac2c79d8011917c50d7e580f0de72e7d207a36611
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/Gemfile CHANGED
@@ -5,3 +5,13 @@ source 'https://rubygems.org'
5
5
  git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
6
 
7
7
  gem 'simple_scripting', '~> 0.9.3'
8
+
9
+ group :development, :test do
10
+ gem 'byebug', '~> 9.1.0'
11
+ end
12
+
13
+ group :test do
14
+ gem 'vcr', '~> 3.0.3'
15
+ gem 'webmock', '~> 3.1.1'
16
+ gem 'rspec', '~> 3.7.0'
17
+ end
@@ -1,15 +1,46 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
+ addressable (2.5.2)
5
+ public_suffix (>= 2.0.2, < 4.0)
6
+ byebug (9.1.0)
7
+ crack (0.4.3)
8
+ safe_yaml (~> 1.0.0)
9
+ diff-lcs (1.3)
10
+ hashdiff (0.3.7)
4
11
  parseconfig (1.0.8)
12
+ public_suffix (3.0.1)
13
+ rspec (3.7.0)
14
+ rspec-core (~> 3.7.0)
15
+ rspec-expectations (~> 3.7.0)
16
+ rspec-mocks (~> 3.7.0)
17
+ rspec-core (3.7.0)
18
+ rspec-support (~> 3.7.0)
19
+ rspec-expectations (3.7.0)
20
+ diff-lcs (>= 1.2.0, < 2.0)
21
+ rspec-support (~> 3.7.0)
22
+ rspec-mocks (3.7.0)
23
+ diff-lcs (>= 1.2.0, < 2.0)
24
+ rspec-support (~> 3.7.0)
25
+ rspec-support (3.7.0)
26
+ safe_yaml (1.0.4)
5
27
  simple_scripting (0.9.3)
6
28
  parseconfig (~> 1.0)
29
+ vcr (3.0.3)
30
+ webmock (3.1.1)
31
+ addressable (>= 2.3.6)
32
+ crack (>= 0.3.2)
33
+ hashdiff
7
34
 
8
35
  PLATFORMS
9
36
  ruby
10
37
 
11
38
  DEPENDENCIES
39
+ byebug (~> 9.1.0)
40
+ rspec (~> 3.7.0)
12
41
  simple_scripting (~> 0.9.3)
42
+ vcr (~> 3.0.3)
43
+ webmock (~> 3.1.1)
13
44
 
14
45
  BUNDLED WITH
15
46
  1.16.0.pre.3
data/README.md CHANGED
@@ -85,5 +85,3 @@ Examples:
85
85
  Geet is in alpha status. Although I use it daily, lots of features are being implemented, and internal/external APIs are frequently changed.
86
86
 
87
87
  The public release will be 1.0, and is expected to be released in January 2018 or earlier.
88
-
89
- The test suite is planned for v0.3.0. In case the project should have any user/developer besides me before that version, I will put any feature on hold, and build the full test suite.
data/bin/geet CHANGED
@@ -1,45 +1,56 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require_relative '../lib/geet/helpers/configuration_helper.rb'
4
+ require_relative '../lib/geet/commandline/configuration.rb'
5
+ require_relative '../lib/geet/commandline/commands.rb'
5
6
  require_relative '../lib/geet/git/repository.rb'
7
+ Dir[File.join(__dir__, '../lib/geet/services/*.rb')].each { |filename| require filename }
8
+
9
+ class GeetLauncher
10
+ include Geet
11
+ include Geet::Commandline::Commands
12
+
13
+ def launch
14
+ commandline_configuration = Commandline::Configuration.new
15
+
16
+ command, options = commandline_configuration.decode_argv || exit
17
+ api_token = commandline_configuration.api_token
18
+
19
+ # `:upstream` is always false in the gist command case.
20
+ repository = Git::Repository.new(api_token, upstream: !!options[:upstream])
21
+
22
+ case command
23
+ when GIST_CREATE_COMMAND
24
+ filename = options.delete(:filename)
25
+ options[:publik] = options.delete(:public) if options.key?(:public)
26
+
27
+ Services::CreateGist.new.execute(repository, filename, options)
28
+ when ISSUE_CREATE_COMMAND
29
+ title, description = options.values_at(:title, :description)
30
+ options[:milestone_pattern] = options.delete(:milestone) if options.key?(:milestone)
31
+
32
+ Services::CreateIssue.new.execute(repository, title, description, options)
33
+ when ISSUE_LIST_COMMAND
34
+ Services::ListIssues.new.execute(repository)
35
+ when LABEL_LIST_COMMAND
36
+ Services::ListLabels.new.execute(repository)
37
+ when MILESTONE_LIST_COMMAND
38
+ Services::ListMilestones.new.execute(repository)
39
+ when PR_CREATE_COMMAND
40
+ title, description = options.values_at(:title, :description)
41
+ options[:milestone_pattern] = options.delete(:milestone) if options.key?(:milestone)
42
+
43
+ Services::CreatePr.new.execute(repository, title, description, options)
44
+ when PR_LIST_COMMAND
45
+ Services::ListPrs.new.execute(repository)
46
+ when PR_MERGE_COMMAND
47
+ Services::MergePr.new.execute(repository)
48
+ else
49
+ raise "Internal error - Unrecognized command #{command.inspect}"
50
+ end
51
+ end
52
+ end
6
53
 
7
- include Geet
8
-
9
- configuration_helper = Helpers::ConfigurationHelper.new
10
-
11
- command, options = configuration_helper.decode_argv || exit
12
- api_token = configuration_helper.api_token
13
-
14
- # `:upstream` is always false in the gist command case.
15
- repository = Git::Repository.new(api_token, upstream: !!options[:upstream])
16
-
17
- case command
18
- when Helpers::ConfigurationHelper::GIST_CREATE_COMMAND
19
- filename = options.delete(:filename)
20
- options[:publik] = options.delete(:public) if options.key?(:public)
21
-
22
- Services::CreateGist.new.execute(repository, filename, options)
23
- when Helpers::ConfigurationHelper::ISSUE_CREATE_COMMAND
24
- title, description = options.values_at(:title, :description)
25
- options[:milestone_pattern] = options.delete(:milestone) if options.key?(:milestone)
26
-
27
- Services::CreateIssue.new.execute(repository, title, description, options)
28
- when Helpers::ConfigurationHelper::ISSUE_LIST_COMMAND
29
- Services::ListIssues.new.execute(repository)
30
- when Helpers::ConfigurationHelper::LABEL_LIST_COMMAND
31
- Services::ListLabels.new.execute(repository)
32
- when Helpers::ConfigurationHelper::MILESTONE_LIST_COMMAND
33
- Services::ListMilestones.new.execute(repository)
34
- when Helpers::ConfigurationHelper::PR_CREATE_COMMAND
35
- title, description = options.values_at(:title, :description)
36
- options[:milestone_pattern] = options.delete(:milestone) if options.key?(:milestone)
37
-
38
- Services::CreatePr.new.execute(repository, title, description, options)
39
- when Helpers::ConfigurationHelper::PR_LIST_COMMAND
40
- Services::ListPrs.new.execute(repository)
41
- when Helpers::ConfigurationHelper::PR_MERGE_COMMAND
42
- Services::MergePr.new.execute(repository)
43
- else
44
- raise "Internal error - Unrecognized command #{command.inspect}"
54
+ if __FILE__ == $0
55
+ GeetLauncher.new.launch
45
56
  end
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.platform = Gem::Platform::RUBY
11
11
  s.required_ruby_version = '>= 2.2.0'
12
12
  s.authors = ['Saverio Miroddi']
13
- s.date = '2017-11-08'
13
+ s.date = '2017-11-21'
14
14
  s.email = ['saverio.pub2@gmail.com']
15
15
  s.homepage = 'https://github.com/saveriomiroddi/geet'
16
16
  s.summary = 'Commandline interface for performing SCM (eg. GitHub) operations (eg. PR creation).'
@@ -0,0 +1,14 @@
1
+ module Geet
2
+ module Commandline
3
+ module Commands
4
+ GIST_CREATE_COMMAND = 'gist.create'
5
+ ISSUE_CREATE_COMMAND = 'issue.create'
6
+ ISSUE_LIST_COMMAND = 'issue.list'
7
+ LABEL_LIST_COMMAND = 'label.list'
8
+ MILESTONE_LIST_COMMAND = 'milestone.list'
9
+ PR_CREATE_COMMAND = 'pr.create'
10
+ PR_LIST_COMMAND = 'pr.list'
11
+ PR_MERGE_COMMAND = 'pr.merge'
12
+ end
13
+ end
14
+ end
@@ -1,20 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'simple_scripting/argv'
4
+ require_relative 'commands'
4
5
 
5
6
  module Geet
6
- module Helpers
7
- class ConfigurationHelper
8
- # Commands
9
-
10
- GIST_CREATE_COMMAND = 'gist.create'
11
- ISSUE_CREATE_COMMAND = 'issue.create'
12
- ISSUE_LIST_COMMAND = 'issue.list'
13
- LABEL_LIST_COMMAND = 'label.list'
14
- MILESTONE_LIST_COMMAND = 'milestone.list'
15
- PR_CREATE_COMMAND = 'pr.create'
16
- PR_LIST_COMMAND = 'pr.list'
17
- PR_MERGE_COMMAND = 'pr.merge'
7
+ module Commandline
8
+ class Configuration
9
+ include Commands
18
10
 
19
11
  # Command options
20
12
 
@@ -1,32 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'forwardable'
4
-
5
- Dir[File.join(__dir__, '../**/remote_repository.rb')].each { |repository_file| require repository_file }
6
- Dir[File.join(__dir__, '../**/account.rb')].each { |account_file| require account_file }
7
- Dir[File.join(__dir__, '../**/api_helper.rb')].each { |helper_file| require helper_file }
8
- Dir[File.join(__dir__, '../services/*.rb')].each { |helper_file| require helper_file }
3
+ require 'shellwords'
9
4
 
10
5
  module Geet
11
6
  module Git
12
7
  # This class represents, for convenience, both the local and the remote repository, but the
13
8
  # remote code is separated in each provider module.
14
9
  class Repository
15
- extend Forwardable
16
-
17
- def_delegators :@remote_repository, :abstract_issues
18
- def_delegators :@remote_repository, :collaborators, :labels
19
- def_delegators :@remote_repository, :create_gist
20
- def_delegators :@remote_repository, :create_issue, :issues
21
- def_delegators :@remote_repository, :labels
22
- def_delegators :@remote_repository, :milestones
23
- def_delegators :@remote_repository, :create_pr, :prs
24
- def_delegators :@account, :authenticated_user
25
-
26
- DOMAIN_PROVIDERS_MAPPING = {
27
- 'github.com' => Geet::GitHub
28
- }.freeze
29
-
30
10
  # For simplicity, we match any character except the ones the separators.
31
11
  REMOTE_ORIGIN_REGEX = %r{
32
12
  \A
@@ -39,54 +19,80 @@ module Geet
39
19
  ORIGIN_NAME = 'origin'
40
20
  UPSTREAM_NAME = 'upstream'
41
21
 
42
- def initialize(api_token, upstream: false)
43
- the_provider_domain = provider_domain
44
- provider_module = DOMAIN_PROVIDERS_MAPPING[the_provider_domain] || raise("Provider not supported for domain: #{provider_domain}")
22
+ def initialize(api_token, upstream: false, location: nil)
23
+ @api_token = api_token
24
+ @upstream = upstream
25
+ @location = location
26
+ end
45
27
 
46
- api_helper = provider_module::ApiHelper.new(api_token, user, path(upstream: upstream), upstream)
28
+ # REMOTE FUNCTIONALITIES (REPOSITORY)
47
29
 
48
- @remote_repository = provider_module::RemoteRepository.new(self, api_helper)
49
- @account = provider_module::Account.new(api_helper)
30
+ def collaborators
31
+ provider_module::Collaborator.list(api_interface)
50
32
  end
51
33
 
52
- # METADATA
34
+ def labels
35
+ provider_module::Label.list(api_interface)
36
+ end
53
37
 
54
- def user
55
- `git config --get user.email`.strip
38
+ def create_gist(filename, content, description: nil, publik: false)
39
+ provider_module::Gist.create(filename, content, api_interface, description: description, publik: publik)
56
40
  end
57
41
 
58
- def provider_domain
59
- # We assume that it's not possible to have origin and upstream on different providers.
60
- #
61
- remote_url = remote(ORIGIN_NAME)
42
+ def create_issue(title, description)
43
+ provider_module::Issue.create(title, description, api_interface)
44
+ end
62
45
 
63
- remote_url[REMOTE_ORIGIN_REGEX, 1] || remote_url[REMOTE_ORIGIN_REGEX, 2]
46
+ def abstract_issues(milestone: nil)
47
+ provider_module::AbstractIssue.list(api_interface, milestone: milestone)
64
48
  end
65
49
 
66
- def path(upstream: false)
67
- remote_name = upstream ? UPSTREAM_NAME : ORIGIN_NAME
50
+ def issues
51
+ provider_module::Issue.list(api_interface)
52
+ end
68
53
 
69
- remote(remote_name)[REMOTE_ORIGIN_REGEX, 3]
54
+ def milestone(number)
55
+ provider_module::Milestone.find(number, api_interface)
56
+ end
57
+
58
+ def milestones
59
+ provider_module::Milestone.list(api_interface)
60
+ end
61
+
62
+ def create_pr(title, description, head)
63
+ provider_module::PR.create(title, description, head, api_interface)
64
+ end
65
+
66
+ def prs(head: nil)
67
+ provider_module::PR.list(api_interface, head: head)
70
68
  end
71
69
 
72
- # DATA
70
+ # REMOTE FUNCTIONALITIES (ACCOUNT)
71
+
72
+ def authenticated_user
73
+ provider_module::Account.new(api_interface).authenticated_user
74
+ end
75
+
76
+ # OTHER/CONVENIENCE FUNCTIONALITIES
73
77
 
74
78
  def current_branch
75
- branch = `git rev-parse --abbrev-ref HEAD`.strip
79
+ gitdir_option = "--git-dir #{@location.shellescape}/.git" if @location
80
+ branch = `git #{gitdir_option} rev-parse --abbrev-ref HEAD`.strip
76
81
 
77
82
  raise "Couldn't find current branch" if branch == 'HEAD'
78
83
 
79
84
  branch
80
85
  end
81
86
 
82
- # OTHER
83
-
84
87
  private
85
88
 
86
- # The result is in the format `git@github.com:saveriomiroddi/geet.git`
89
+ # REPOSITORY METADATA
90
+
91
+ # The result is in the format `git@github.com:donaldduck/geet.git`
87
92
  #
88
93
  def remote(name)
89
- remote_url = `git ls-remote --get-url #{name}`.strip
94
+ gitdir_option = "--git-dir #{@location.shellescape}/.git" if @location
95
+ remote_url = `git #{gitdir_option} ls-remote --get-url #{name}`.strip
90
96
 
91
97
  if remote_url == name
92
98
  raise "Remote #{name.inspect} not found!"
@@ -96,6 +102,49 @@ module Geet
96
102
 
97
103
  remote_url
98
104
  end
105
+
106
+ # PROVIDER
107
+
108
+ def provider_domain
109
+ # We assume that it's not possible to have origin and upstream on different providers.
110
+ #
111
+ remote_url = remote(ORIGIN_NAME)
112
+
113
+ domain = remote_url[REMOTE_ORIGIN_REGEX, 1] || remote_url[REMOTE_ORIGIN_REGEX, 2]
114
+
115
+ raise "Can't identify domain in the provider domain string: #{provider_domain}" if domain !~ /(.*)\.\w+/
116
+
117
+ domain
118
+ end
119
+
120
+ def provider_module
121
+ module_name = provider_domain[/(.*)\.\w+/, 1].capitalize
122
+
123
+ require_provider_modules
124
+
125
+ Kernel.const_get("Geet::#{module_name}")
126
+ end
127
+
128
+ def require_provider_modules
129
+ provider_dirname = provider_domain[/(.*)\.\w+/, 1]
130
+ files_pattern = "#{__dir__}/../#{provider_dirname}/*.rb"
131
+
132
+ Dir[files_pattern].each { |filename| require filename }
133
+ end
134
+
135
+ # OTHER HELPERS
136
+
137
+ def api_interface
138
+ provider_module::ApiInterface.new(@api_token, path(upstream: @upstream), @upstream)
139
+ end
140
+
141
+ # Example: `donaldduck/geet`
142
+ #
143
+ def path(upstream: false)
144
+ remote_name = upstream ? UPSTREAM_NAME : ORIGIN_NAME
145
+
146
+ remote(remote_name)[REMOTE_ORIGIN_REGEX, 3]
147
+ end
99
148
  end
100
149
  end
101
150
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Geet
4
- module GitHub
4
+ module Github
5
5
  # It seems that autoloading will be deprecated, but it's currently the cleanest solution
6
6
  # to the legitimate problem of AbstractIssue needing Issue/PR to be loaded (due to :list),
7
7
  # and viceversa (due to class definition).
@@ -13,20 +13,20 @@ module Geet
13
13
  class AbstractIssue
14
14
  attr_reader :number, :title, :link
15
15
 
16
- def initialize(number, api_helper, title, link)
16
+ def initialize(number, api_interface, title, link)
17
17
  @number = number
18
- @api_helper = api_helper
18
+ @api_interface = api_interface
19
19
  @title = title
20
20
  @link = link
21
21
  end
22
22
 
23
23
  # See https://developer.github.com/v3/issues/#list-issues-for-a-repository
24
24
  #
25
- def self.list(api_helper, milestone: nil)
26
- request_address = "#{api_helper.api_repo_link}/issues"
25
+ def self.list(api_interface, milestone: nil)
26
+ api_path = 'issues'
27
27
  request_params = { milestone: milestone } if milestone
28
28
 
29
- response = api_helper.send_request(request_address, params: request_params, multipage: true)
29
+ response = api_interface.send_request(api_path, params: request_params, multipage: true)
30
30
 
31
31
  response.map do |issue_data|
32
32
  number = issue_data.fetch('number')
@@ -35,7 +35,7 @@ module Geet
35
35
 
36
36
  klazz = issue_data.key?('pull_request') ? PR : Issue
37
37
 
38
- klazz.new(number, api_helper, title, link)
38
+ klazz.new(number, api_interface, title, link)
39
39
  end
40
40
  end
41
41
 
@@ -43,26 +43,26 @@ module Geet
43
43
  # users: String, or Array of strings.
44
44
  #
45
45
  def assign_users(users)
46
+ api_path = "issues/#{@number}/assignees"
46
47
  request_data = { assignees: Array(users) }
47
- request_address = "#{@api_helper.api_repo_link}/issues/#{@number}/assignees"
48
48
 
49
- @api_helper.send_request(request_address, data: request_data)
49
+ @api_interface.send_request(api_path, data: request_data)
50
50
  end
51
51
 
52
52
  def add_labels(labels)
53
+ api_path = "issues/#{@number}/labels"
53
54
  request_data = labels
54
- request_address = "#{@api_helper.api_repo_link}/issues/#{@number}/labels"
55
55
 
56
- @api_helper.send_request(request_address, data: request_data)
56
+ @api_interface.send_request(api_path, data: request_data)
57
57
  end
58
58
 
59
59
  # See https://developer.github.com/v3/issues/#edit-an-issue
60
60
  #
61
61
  def edit(milestone:)
62
- request_address = "#{@api_helper.api_repo_link}/issues/#{@number}"
63
62
  request_data = { milestone: milestone }
63
+ api_path = "issues/#{@number}"
64
64
 
65
- @api_helper.send_request(request_address, data: request_data, http_method: :patch)
65
+ @api_interface.send_request(api_path, data: request_data, http_method: :patch)
66
66
  end
67
67
  end
68
68
  end