Created
March 27, 2023 17:54
-
-
Save eculver/28fa76c97f7e02416865bdad0805f9c2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// package bunny provides the public API for the eBunny tool. | |
package bunny | |
import ( | |
"errors" | |
"fmt" | |
"strconv" | |
"strings" | |
"github.com/eculver/go-play/pkg/bunny/github" | |
) | |
// New returns a new Bunny that is JACKED and ready to JUMP | |
func New() Bunny { | |
// all our Bunny can do for now is jump to GitHub URLs in a browser | |
return &GitHubBunny{ | |
Commands: []string{"github", "gh"}, | |
} | |
} | |
// Bunny is an incredibly cute animal that jumps. When a bunny lands its jump, | |
// it can either stop or... keep jumping! The options are limitless! | |
// | |
// From a practical perspective, this is root of our execution path. A Bunny | |
// will call Jump's until the path terminates. It's just a way to express paths | |
// through the tree of all known Jumps. When the bunny starts up, a Jump graph | |
// is generated from config/code and the root Jump | |
// starts traversing until it's done. | |
type Bunny interface { | |
Jump(args ...string) error | |
} | |
// GitHubBunny Jumps to GitHub URLs | |
type GitHubBunny struct { | |
Commands []string | |
} | |
// Jump ... | |
func (gh *GitHubBunny) Jump(args ...string) error { | |
if len(args) == 0 { | |
return errors.New("GitHub Bunny requires arguments. Usage will be here eventually") | |
} | |
// this is going to change to be a proper traversal | |
if len(args) == 3 { | |
switch args[0] { | |
case "pr": | |
num, err := strconv.Atoi(args[2]) | |
if err != nil { | |
return fmt.Errorf("must pass number for PR num, got: %s. %w", args[2], err) | |
} | |
orgRepo := strings.Split(args[1], "/") | |
if len(orgRepo) > 1 { | |
return github.OpenPullRequest(orgRepo[0], orgRepo[1], num) | |
} | |
return fmt.Errorf("must pass / delimited org/repo string, got: %s", args[1]) | |
} | |
} | |
return fmt.Errorf("Nothing happened for args: %v", args) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment