Refactor to separate files

This commit is contained in:
Trevor Vallender 2023-11-02 17:53:54 +00:00
parent 6af34f3d35
commit 7cf528700f
2 changed files with 60 additions and 59 deletions

View File

@ -3,6 +3,7 @@
require "open3" require "open3"
require "thor" require "thor"
require_relative "./lib/git_ticket"
## ##
# CLI interface to the GitTicket class below # CLI interface to the GitTicket class below
@ -29,63 +30,4 @@ class GitTicketCli < Thor
end end
end end
##
# Provides an interface to the git commits related to a specific ticket
class GitTicket
attr_reader :ticket
attr_accessor :git_command
##
# Creates a new diff from all commits referencing a given ticket.
#
# @param [String] ticket_reference The ticket reference to use
# @param [String] diff_target The git reference to diff against.
def initialize(ticket_reference)
@ticket = ticket_reference
@git_command = "git -c color.ui=always" # So our output is colourised
end
##
# Sets and returns the commit messages for each commit
# @return [Array<String>] The commit messages
def commit_messages
return @commit_messages if @commit_messages
@commit_messages = []
shas.each do |sha|
message, _status = Open3.capture2("#{git_command} show #{sha} -s")
@commit_messages.push(message)
end
@commit_messages
end
##
# Sets and returns the patches for each commit.
#
# @return [Array<String>] The diffs
def patches
return @patches if @patches
@patches = []
shas.each do |sha|
patch, _status = Open3.capture2("#{git_command} show #{sha} --patch")
@patches.push(patch)
end
@patches
end
##
# Sets and returns the commit SHAs referenced.
#
# @return [Array<String>] The commit SHAs
def shas
return @shas if @shas
@shas, _status = Open3.capture2("#{git_command} log --all --grep #{@ticket} --format=%H")
@shas = @shas.split("\n")
end
end
GitTicketCli.start GitTicketCli.start

59
lib/git_ticket.rb Normal file
View File

@ -0,0 +1,59 @@
##
# Provides an interface to the git commits related to a specific ticket
class GitTicket
attr_reader :ticket
attr_accessor :git_command
##
# Creates a new diff from all commits referencing a given ticket.
#
# @param [String] ticket_reference The ticket reference to use
# @param [String] diff_target The git reference to diff against.
def initialize(ticket_reference)
@ticket = ticket_reference
@git_command = "git -c color.ui=always" # So our output is colourised
end
##
# Sets and returns the commit messages for each commit
# @return [Array<String>] The commit messages
def commit_messages
return @commit_messages if @commit_messages
@commit_messages = []
shas.each do |sha|
message, _status = Open3.capture2("#{git_command} show #{sha} -s")
@commit_messages.push(message)
end
@commit_messages
end
##
# Sets and returns the patches for each commit.
#
# @return [Array<String>] The diffs
def patches
return @patches if @patches
@patches = []
shas.each do |sha|
patch, _status = Open3.capture2("#{git_command} show #{sha} --patch")
@patches.push(patch)
end
@patches
end
##
# Sets and returns the commit SHAs referenced.
#
# @return [Array<String>] The commit SHAs
def shas
return @shas if @shas
@shas, _status = Open3.capture2("#{git_command} log --all --grep #{@ticket} --format=%H")
@shas = @shas.split("\n")
end
end