Skip to content

Commit

Permalink
Rename from pkg.Pkg to pkg.Package
Browse files Browse the repository at this point in the history
  • Loading branch information
danielfireman committed Nov 13, 2017
1 parent 0ac01f4 commit 0486557
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 63 deletions.
18 changes: 9 additions & 9 deletions pkg/package.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,21 @@ const (

type resourceFactory func(map[string]interface{}) (*resource.Resource, error)

// Pkg represents a https://specs.frictionlessdata.io/data-package/
type Pkg struct {
// Package represents a https://specs.frictionlessdata.io/data-package/
type Package struct {
resources map[string]*resource.Resource

descriptor map[string]interface{}
resFactory resourceFactory
}

// GetResource return the resource which the passed-in name or nil if the resource is not part of the package.
func (p *Pkg) GetResource(name string) *resource.Resource {
func (p *Package) GetResource(name string) *resource.Resource {
return p.resources[name]
}

// AddResource adds a new resource to the package, changing its descriptor accordingly.
func (p *Pkg) AddResource(d map[string]interface{}) error {
func (p *Package) AddResource(d map[string]interface{}) error {
if p.resFactory == nil {
return fmt.Errorf("invalid resource factory. Did you mean resources.FromDescriptor?")
}
Expand Down Expand Up @@ -59,7 +59,7 @@ func (p *Pkg) AddResource(d map[string]interface{}) error {
return nil
}

func fromDescriptor(descriptor map[string]interface{}, resFactory resourceFactory) (*Pkg, error) {
func fromDescriptor(descriptor map[string]interface{}, resFactory resourceFactory) (*Package, error) {
r, ok := descriptor[resourcePropName]
if !ok {
return nil, fmt.Errorf("resources property is required, with at least one resource")
Expand All @@ -80,19 +80,19 @@ func fromDescriptor(descriptor map[string]interface{}, resFactory resourceFactor
}
resources[r.Name] = r
}
return &Pkg{
return &Package{
resources: resources,
resFactory: resFactory,
descriptor: descriptor,
}, nil
}

// FromDescriptor creates a data package from a json descriptor.
func FromDescriptor(descriptor map[string]interface{}) (*Pkg, error) {
func FromDescriptor(descriptor map[string]interface{}) (*Package, error) {
return fromDescriptor(descriptor, resource.New)
}

func fromReader(r io.Reader, resFactory resourceFactory) (*Pkg, error) {
func fromReader(r io.Reader, resFactory resourceFactory) (*Package, error) {
b, err := ioutil.ReadAll(bufio.NewReader(r))
if err != nil {
return nil, err
Expand All @@ -105,6 +105,6 @@ func fromReader(r io.Reader, resFactory resourceFactory) (*Pkg, error) {
}

// FromReader validates and returns a data package from an io.Reader.
func FromReader(r io.Reader) (*Pkg, error) {
func FromReader(r io.Reader) (*Package, error) {
return fromReader(r, resource.New)
}
108 changes: 54 additions & 54 deletions pkg/package_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,67 @@ func validResource(d map[string]interface{}) (*resource.Resource, error) {

var invalidResource = func(map[string]interface{}) (*resource.Resource, error) { return nil, fmt.Errorf("") }

func TestPkg_GetResource(t *testing.T) {
func TestPackage_GetResource(t *testing.T) {
is := is.New(t)
in := `{"resources":[{"name":"res"}]}`
p, err := fromReader(strings.NewReader(in), validResource)
is.NoErr(err)
is.Equal("res", p.GetResource("res").Name)
}

func TestPackage_AddResource(t *testing.T) {
t.Run("ValidDescriptor", func(t *testing.T) {
is := is.New(t)
r1 := map[string]interface{}{"name": "res1"}
r2 := map[string]interface{}{"name": "res2"}

p, err := fromDescriptor(map[string]interface{}{"resources": []interface{}{r1}}, validResource)
is.NoErr(err)

p.AddResource(r2)
is.Equal(len(p.resources), 2)
is.Equal(p.resources["res2"].Name, "res2")

resources := p.descriptor["resources"].([]interface{})
is.Equal(len(resources), 2)
is.Equal(resources[0], r1)
is.Equal(resources[1], r2)
})
t.Run("CodedPackage", func(t *testing.T) {
is := is.New(t)
p := Package{resFactory: validResource}
r1 := map[string]interface{}{"name": "res1"}
err := p.AddResource(r1)
is.NoErr(err)

resources := p.descriptor["resources"].([]interface{})
is.Equal(len(resources), 1)
is.Equal(resources[0], r1)

is.Equal(len(p.resources), 1)
is.Equal(p.resources["res1"].Name, "res1")
})
t.Run("InvalidResource", func(t *testing.T) {
is := is.New(t)
p := Package{resFactory: invalidResource}
err := p.AddResource(map[string]interface{}{})
is.True(err != nil)
})
t.Run("NoResFactory", func(t *testing.T) {
is := is.New(t)
p := Package{}
err := p.AddResource(map[string]interface{}{"name": "res1"})
is.True(err != nil)
})
t.Run("InvalidResourcesSliceDescriptor", func(t *testing.T) {
is := is.New(t)
p := Package{resFactory: validResource}
p.descriptor = map[string]interface{}{"resources": 1}
err := p.AddResource(map[string]interface{}{"name": "res1"})
is.True(err != nil)
})
}

func TestFromDescriptor(t *testing.T) {
t.Run("ValidationErrors", func(t *testing.T) {
is := is.New(t)
Expand Down Expand Up @@ -78,56 +131,3 @@ func TestFromReader(t *testing.T) {
is.True(err != nil)
})
}

func TestAddResource(t *testing.T) {
t.Run("ValidDescriptor", func(t *testing.T) {
is := is.New(t)
r1 := map[string]interface{}{"name": "res1"}
r2 := map[string]interface{}{"name": "res2"}

p, err := fromDescriptor(map[string]interface{}{"resources": []interface{}{r1}}, validResource)
is.NoErr(err)

p.AddResource(r2)
is.Equal(len(p.resources), 2)
is.Equal(p.resources["res2"].Name, "res2")

resources := p.descriptor["resources"].([]interface{})
is.Equal(len(resources), 2)
is.Equal(resources[0], r1)
is.Equal(resources[1], r2)
})
t.Run("CodedPackage", func(t *testing.T) {
is := is.New(t)
p := Pkg{resFactory: validResource}
r1 := map[string]interface{}{"name": "res1"}
err := p.AddResource(r1)
is.NoErr(err)

resources := p.descriptor["resources"].([]interface{})
is.Equal(len(resources), 1)
is.Equal(resources[0], r1)

is.Equal(len(p.resources), 1)
is.Equal(p.resources["res1"].Name, "res1")
})
t.Run("InvalidResource", func(t *testing.T) {
is := is.New(t)
p := Pkg{resFactory: invalidResource}
err := p.AddResource(map[string]interface{}{})
is.True(err != nil)
})
t.Run("NoResFactory", func(t *testing.T) {
is := is.New(t)
p := Pkg{}
err := p.AddResource(map[string]interface{}{"name": "res1"})
is.True(err != nil)
})
t.Run("InvalidResourcesSliceDescriptor", func(t *testing.T) {
is := is.New(t)
p := Pkg{resFactory: validResource}
p.descriptor = map[string]interface{}{"resources": 1}
err := p.AddResource(map[string]interface{}{"name": "res1"})
is.True(err != nil)
})
}

0 comments on commit 0486557

Please sign in to comment.