@@ -18,6 +18,7 @@ var Version string = "dev"
1818
1919type userFlags struct {
2020 outFile string
21+ outDir string
2122 pkgName string
2223 formatter string
2324 stubImpl bool
@@ -30,6 +31,7 @@ type userFlags struct {
3031func main () {
3132 var flags userFlags
3233 flag .StringVar (& flags .outFile , "out" , "" , "output file (default stdout)" )
34+ flag .StringVar (& flags .outDir , "out-dir" , "" , "output dir (exclusive with -out)" )
3335 flag .StringVar (& flags .pkgName , "pkg" , "" , "package name (default will infer)" )
3436 flag .StringVar (& flags .formatter , "fmt" , "" , "go pretty-printer: gofmt, goimports or noop (default gofmt)" )
3537 flag .BoolVar (& flags .stubImpl , "stub" , false ,
@@ -76,12 +78,6 @@ func run(flags userFlags) error {
7678 }
7779 }
7880
79- var buf bytes.Buffer
80- var out io.Writer = os .Stdout
81- if flags .outFile != "" {
82- out = & buf
83- }
84-
8581 srcDir , args := flags .args [0 ], flags .args [1 :]
8682 m , err := moq .New (moq.Config {
8783 SrcDir : srcDir ,
@@ -95,19 +91,52 @@ func run(flags userFlags) error {
9591 return err
9692 }
9793
98- if err = m .Mock (out , args ... ); err != nil {
94+ switch {
95+ case flags .outDir != "" && flags .outFile != "" :
96+ return errors .New ("use only one from -out and -out-dir arguments" )
97+ case flags .outDir != "" :
98+ return mockToDir (m , flags .outDir , args ... )
99+ case flags .outFile != "" :
100+ return mockToFile (m , flags .outFile , args ... )
101+ default :
102+ // mock to stdout
103+ return m .Mock (os .Stdout , args ... )
104+ }
105+ }
106+
107+ func mockToDir (m * moq.Mocker , outDir string , args ... string ) error {
108+ if err := os .MkdirAll (outDir , 0o750 ); err != nil {
99109 return err
100110 }
101111
102- if flags .outFile == "" {
103- return nil
112+ var buf bytes.Buffer
113+ for _ , arg := range args {
114+ if err := m .Mock (& buf , arg ); err != nil {
115+ return err
116+ }
117+
118+ filename := filepath .Join (outDir , m .FileMockName (arg ))
119+ if err := ioutil .WriteFile (filename , buf .Bytes (), 0o600 ); err != nil {
120+ return err
121+ }
122+
123+ buf .Reset ()
104124 }
105125
106- // create the file
107- err = os .MkdirAll (filepath .Dir (flags .outFile ), 0o750 )
108- if err != nil {
126+ return nil
127+ }
128+
129+ func mockToFile (m * moq.Mocker , outFile string , args ... string ) error {
130+ var buf bytes.Buffer
131+ var out io.Writer = & buf
132+
133+ if err := m .Mock (out , args ... ); err != nil {
134+ return err
135+ }
136+
137+ if err := os .MkdirAll (filepath .Dir (outFile ), 0o750 ); err != nil {
109138 return err
110139 }
111140
112- return ioutil .WriteFile (flags . outFile , buf .Bytes (), 0o600 )
141+ return ioutil .WriteFile (outFile , buf .Bytes (), 0o600 )
113142}
0 commit comments