Skip to content
This repository has been archived by the owner on Feb 24, 2024. It is now read-only.

Commit

Permalink
Merge pull request #64 from markbates/gore
Browse files Browse the repository at this point in the history
Add a REPL/console closes #63
  • Loading branch information
markbates authored Dec 18, 2016
2 parents 4ee0b68 + f3e880d commit f0aad36
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 3 deletions.
85 changes: 85 additions & 0 deletions buffalo/cmd/console.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
// Copyright © 2016 NAME HERE <EMAIL ADDRESS>
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package cmd

import (
"errors"
"os"
"os/exec"
"path/filepath"

"github.com/markbates/gentronics"
"github.com/markbates/inflect"
"github.com/spf13/cobra"
)

// consoleCmd represents the console command
var consoleCmd = &cobra.Command{
Use: "console",
Aliases: []string{"c"},
Short: "Runs your Buffalo app in a REPL console",
RunE: func(c *cobra.Command, args []string) error {
_, err := exec.LookPath("gore")
if err != nil {
return errors.New(`We could not find "gore" in your path.
You must first install "gore" in order to use the Buffalo console:
$ go get -u github.com/motemen/gore
`)
}
rootPath, err := rootPath("")
if err != nil {
return err
}
packagePath := packagePath(rootPath)
packages := []string{}
for _, p := range []string{"models", "actions"} {
s, _ := os.Stat(filepath.Join(rootPath, p))
if s != nil {
packages = append(packages, filepath.Join(packagePath, p))
}
}

fname := inflect.Parameterize(packagePath) + "_loader.go"
g := gentronics.New()
g.Add(gentronics.NewFile(fname, cMain))
err = g.Run(os.TempDir(), gentronics.Data{
"packages": packages,
})
os.Chdir(rootPath)
if err != nil {
return err
}

cmd := exec.Command("gore", "-autoimport", "-context", filepath.Join(os.TempDir(), fname))
cmd.Stdin = os.Stdin
cmd.Stderr = os.Stderr
cmd.Stdout = os.Stdout

return cmd.Run()
},
}

func init() {
RootCmd.AddCommand(consoleCmd)
}

var cMain = `
package main
{{range .packages}}
import _ "{{.}}"
{{end}}
`
18 changes: 15 additions & 3 deletions buffalo/cmd/new.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,10 @@ var newCmd = &cobra.Command{
return errors.New("You must enter a name for your new application.")
}
name := args[0]
pwd, err := os.Getwd()
rootPath, err := rootPath(name)
if err != nil {
return err
}
rootPath := filepath.Join(pwd, name)

s, _ := os.Stat(rootPath)
if s != nil {
Expand All @@ -66,6 +65,19 @@ var newCmd = &cobra.Command{
},
}

func rootPath(name string) (string, error) {
pwd, err := os.Getwd()
if err != nil {
return "", err
}
rootPath := filepath.Join(pwd, name)
return rootPath, nil
}

func packagePath(rootPath string) string {
return strings.Replace(rootPath, filepath.Join(os.Getenv("GOPATH"), "src")+"/", "", 1)
}

func goInstall(pkg string) *exec.Cmd {
args := []string{"install"}
if verbose {
Expand All @@ -85,7 +97,7 @@ func goGet(pkg string) *exec.Cmd {
}

func genNewFiles(name, rootPath string) error {
packagePath := strings.Replace(rootPath, filepath.Join(os.Getenv("GOPATH"), "src")+"/", "", 1)
packagePath := packagePath(rootPath)

data := map[string]interface{}{
"name": name,
Expand Down

0 comments on commit f0aad36

Please sign in to comment.