From 2a1d37d876417dd5d6deab04a8fa66a45737766a Mon Sep 17 00:00:00 2001 From: Jeevanandam M Date: Thu, 10 May 2018 23:58:40 -0700 Subject: [PATCH] go-aah/aah#156 vfs support added into forge --- benchmark_test.go | 2 +- example_test.go | 4 ++-- forge.go | 14 ++++++++------ forge_test.go | 2 +- parser.go | 21 +++++++++++++-------- 5 files changed, 25 insertions(+), 18 deletions(-) diff --git a/benchmark_test.go b/benchmark_test.go index 2a111cb..6b9933a 100644 --- a/benchmark_test.go +++ b/benchmark_test.go @@ -67,7 +67,7 @@ func BenchmarkParseReader(b *testing.B) { func BenchmarkParseFile(b *testing.B) { for i := 0; i < b.N; i++ { - _, err := forge.ParseFile("./test.cfg") + _, err := forge.ParseFile(nil, "./test.cfg") if err != nil { b.Fatal(err) } diff --git a/example_test.go b/example_test.go index 71fcf61..eeb41f1 100644 --- a/example_test.go +++ b/example_test.go @@ -9,7 +9,7 @@ import ( func Example() { // Parse a `SectionValue` from `example.cfg` - settings, err := forge.ParseFile("example.cfg") + settings, err := forge.ParseFile(nil, "example.cfg") if err != nil { panic(err) } @@ -41,7 +41,7 @@ func Example() { func ExampleParseFile() { // Parse a `SectionValue` from `example.cfg` - settings, err := forge.ParseFile("example.cfg") + settings, err := forge.ParseFile(nil, "example.cfg") if err != nil { panic(err) } diff --git a/forge.go b/forge.go index 3ea5488..75dc448 100644 --- a/forge.go +++ b/forge.go @@ -103,10 +103,12 @@ import ( "bytes" "io" "strings" + + "aahframework.org/vfs.v0" ) // Version represent current release version of forge. -var Version = "0.4.4" +var Version = "0.5" // ParseBytes takes a []byte representation of the config file, parses it // and responds with `*Section` and potentially an `error` if it cannot @@ -115,11 +117,11 @@ func ParseBytes(data []byte) (*Section, error) { return ParseReader(bytes.NewReader(data)) } -// ParseFile takes a string filename for the config file, parses it +// VFSParseFile takes a vfs and filename for the config file, parses it // and responds with `*Section` and potentially an `error` if it cannot -// properly parse the configf -func ParseFile(filename string) (*Section, error) { - parser, err := NewFileParser(filename) +// properly parse the config +func ParseFile(fs *vfs.VFS, filename string) (*Section, error) { + parser, err := NewFileParser(fs, filename) if err != nil { return nil, err } @@ -135,7 +137,7 @@ func ParseFile(filename string) (*Section, error) { // and responds with `*Section` and potentially an `error` if it cannot // properly parse the config func ParseReader(reader io.Reader) (*Section, error) { - parser := NewParser(reader) + parser := NewParser(nil, reader) err := parser.Parse() if err != nil { return nil, err diff --git a/forge_test.go b/forge_test.go index 05a8d7a..de311bf 100644 --- a/forge_test.go +++ b/forge_test.go @@ -145,7 +145,7 @@ func TestParseReader(t *testing.T) { } func TestParseFile(t *testing.T) { - settings, err := forge.ParseFile("./test.cfg") + settings, err := forge.ParseFile(nil, "./test.cfg") if err != nil { t.Fatal(err) } diff --git a/parser.go b/parser.go index 52398e3..526789d 100644 --- a/parser.go +++ b/parser.go @@ -9,6 +9,7 @@ import ( "strconv" "aahframework.org/forge.v0/token" + "aahframework.org/vfs.v0" ) func isSemicolonOrNewline(id token.TokenID) bool { @@ -17,6 +18,7 @@ func isSemicolonOrNewline(id token.TokenID) bool { // Parser is a struct to hold data necessary for parsing a config from a scanner type Parser struct { + vfs *vfs.VFS files []string settings *Section scanner *Scanner @@ -25,10 +27,12 @@ type Parser struct { previous []*Section } -// NewParser will create and initialize a new Parser from a provided io.Reader -func NewParser(reader io.Reader) *Parser { +// NewParser will create and initialize a new Parser from a +// provided vfs and io.Reader +func NewParser(vfs *vfs.VFS, reader io.Reader) *Parser { settings := NewSection() return &Parser{ + vfs: vfs, files: make([]string, 0), scanner: NewScanner(reader), settings: settings, @@ -37,13 +41,14 @@ func NewParser(reader io.Reader) *Parser { } } -// NewFileParser will create and initialize a new Parser from a provided from a filename string -func NewFileParser(filename string) (*Parser, error) { - reader, err := os.Open(filename) +// NewFileParser will create and initialize a new Parser from a +// provided vfs and filename +func NewFileParser(fs *vfs.VFS, filename string) (*Parser, error) { + reader, err := vfs.Open(fs, filename) if err != nil { return nil, err } - parser := NewParser(reader) + parser := NewParser(fs, reader) parser.addFile(filename) return parser, nil } @@ -242,7 +247,7 @@ func (parser *Parser) parseInclude() error { pattern = filepath.Join(filepath.Dir(parser.files[0]), filepath.Clean(pattern)) } - filenames, err := filepath.Glob(pattern) + filenames, err := vfs.Glob(parser.vfs, pattern) if err != nil { return err } @@ -253,7 +258,7 @@ func (parser *Parser) parseInclude() error { if parser.hasParsed(filename) { continue } - reader, err := os.Open(filename) + reader, err := vfs.Open(parser.vfs, filename) if err != nil { return err }