diff options
| author | Dave Henderson <dhenderson@gmail.com> | 2018-07-12 21:38:10 -0400 |
|---|---|---|
| committer | Dave Henderson <dhenderson@gmail.com> | 2018-07-12 21:41:39 -0400 |
| commit | 9fd905bb044e65f1e28015fff4841f485d02f0fe (patch) | |
| tree | f37684881e5b1b9f43822e21421a598d6025dafc /data | |
| parent | bd84f71f469a541cfb9eae325d9712a065ba5d9c (diff) | |
Require alias for defineDatasource
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
Diffstat (limited to 'data')
| -rw-r--r-- | data/datasource.go | 48 | ||||
| -rw-r--r-- | data/datasource_test.go | 22 |
2 files changed, 38 insertions, 32 deletions
diff --git a/data/datasource.go b/data/datasource.go index b0e55439..cf2f87a3 100644 --- a/data/datasource.go +++ b/data/datasource.go @@ -190,25 +190,33 @@ func ParseSource(value string) (*Source, error) { } } else if len(parts) == 2 { alias = parts[0] - if parts[1] == "-" { - parts[1] = "stdin://" - } - srcURL, err = url.Parse(parts[1]) + srcURL, err = parseSourceURL(parts[1]) if err != nil { return nil, err } - - if !srcURL.IsAbs() { - srcURL, err = absURL(parts[1]) - if err != nil { - return nil, err - } - } } return NewSource(alias, srcURL) } +func parseSourceURL(value string) (*url.URL, error) { + if value == "-" { + value = "stdin://" + } + srcURL, err := url.Parse(value) + if err != nil { + return nil, err + } + + if !srcURL.IsAbs() { + srcURL, err = absURL(value) + if err != nil { + return nil, err + } + } + return srcURL, nil +} + func absURL(value string) (*url.URL, error) { cwd, err := os.Getwd() if err != nil { @@ -226,23 +234,27 @@ func absURL(value string) (*url.URL, error) { } // DefineDatasource - -func (d *Data) DefineDatasource(alias, value string) error { +func (d *Data) DefineDatasource(alias, value string) (*Source, error) { + if alias == "" { + return nil, errors.New("datasource alias must be provided") + } if d.DatasourceExists(alias) { - return nil + return d.Sources[alias], nil } - if alias != "" { - alias = alias + "=" + srcURL, err := parseSourceURL(value) + if err != nil { + return nil, err } - s, err := ParseSource(alias + value) + s, err := NewSource(alias, srcURL) if err != nil { - return err + return nil, err } s.Header = d.extraHeaders[s.Alias] if d.Sources == nil { d.Sources = make(map[string]*Source) } d.Sources[s.Alias] = s - return nil + return s, nil } // DatasourceExists - diff --git a/data/datasource_test.go b/data/datasource_test.go index 229f5503..57befea1 100644 --- a/data/datasource_test.go +++ b/data/datasource_test.go @@ -379,41 +379,36 @@ func TestReadStdin(t *testing.T) { func TestDefineDatasource(t *testing.T) { d := &Data{} - err := d.DefineDatasource("", "foo.json") - assert.NoError(t, err) - s := d.Sources["foo"] - assert.Equal(t, "foo", s.Alias) + s, err := d.DefineDatasource("", "foo.json") + assert.Error(t, err) d = &Data{} - err = d.DefineDatasource("", "../foo.json") + s, err = d.DefineDatasource("", "../foo.json") assert.Error(t, err) d = &Data{} - err = d.DefineDatasource("", "ftp://example.com/foo.yml") + s, err = d.DefineDatasource("", "ftp://example.com/foo.yml") assert.Error(t, err) d = &Data{} - err = d.DefineDatasource("data", "foo.json") + s, err = d.DefineDatasource("data", "foo.json") assert.NoError(t, err) - s = d.Sources["data"] assert.Equal(t, "data", s.Alias) assert.Equal(t, "file", s.URL.Scheme) assert.Equal(t, jsonMimetype, s.Type) assert.True(t, s.URL.IsAbs()) d = &Data{} - err = d.DefineDatasource("data", "/otherdir/foo.json") + s, err = d.DefineDatasource("data", "/otherdir/foo.json") assert.NoError(t, err) - s = d.Sources["data"] assert.Equal(t, "data", s.Alias) assert.Equal(t, "file", s.URL.Scheme) assert.True(t, s.URL.IsAbs()) assert.Equal(t, "/otherdir/foo.json", s.URL.Path) d = &Data{} - err = d.DefineDatasource("data", "sftp://example.com/blahblah/foo.json") + s, err = d.DefineDatasource("data", "sftp://example.com/blahblah/foo.json") assert.NoError(t, err) - s = d.Sources["data"] assert.Equal(t, "data", s.Alias) assert.Equal(t, "sftp", s.URL.Scheme) assert.True(t, s.URL.IsAbs()) @@ -424,9 +419,8 @@ func TestDefineDatasource(t *testing.T) { "data": {Alias: "data"}, }, } - err = d.DefineDatasource("data", "/otherdir/foo.json") + s, err = d.DefineDatasource("data", "/otherdir/foo.json") assert.NoError(t, err) - s = d.Sources["data"] assert.Equal(t, "data", s.Alias) assert.Nil(t, s.URL) } |
