Skip to content
This repository has been archived by the owner on Aug 12, 2022. It is now read-only.

feat: Add new Resolver PathTableResolver #440

Merged
merged 38 commits into from
Jul 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
2e24cc2
Update execution.go
bbernays Dec 9, 2021
45408da
Respond to comments
bbernays Dec 12, 2021
e36f7ae
simplify
bbernays Dec 13, 2021
33d07e1
Update provider.go
bbernays Dec 13, 2021
628ec2b
Update execution.go
bbernays Dec 13, 2021
2de8470
Update execution.go
bbernays Dec 13, 2021
d6aa846
Update execution.go
bbernays Dec 13, 2021
0c806f1
Update execution.go
bbernays Dec 13, 2021
0fc46c1
Merge branch 'main' into main
bbernays Dec 13, 2021
89f86f1
Merge branch 'cloudquery:main' into main
bbernays Dec 29, 2021
dd57b5a
Merge branch 'cloudquery:main' into main
bbernays Feb 1, 2022
cebf5d1
Add Low Level Copy support
bbernays Feb 1, 2022
69b2a12
Create mock_storage.go
bbernays Feb 1, 2022
2a5246b
Update storage_test.go
bbernays Feb 1, 2022
30f1ea7
Update mocks_test.go
bbernays Feb 2, 2022
a6d113f
Fixed code gen
bbernays Feb 2, 2022
ef598e4
Update storage.go
bbernays Feb 2, 2022
36a9d0a
break out
bbernays Feb 2, 2022
dda6571
Update storage.go
bbernays Feb 2, 2022
5befa10
Update mock_storage.go
bbernays Feb 2, 2022
00840fb
comments
bbernays Feb 2, 2022
b40a81b
Update storage.go
bbernays Feb 2, 2022
2ff9ebc
add copier to storage
bbernays Feb 2, 2022
92ea67e
Update storage.go
bbernays Feb 2, 2022
ce76e7a
Merge branch 'main' into main
bbernays Feb 2, 2022
af63d94
Merge branch 'cloudquery:main' into main
bbernays Feb 24, 2022
77ec278
Merge branch 'cloudquery:main' into main
bbernays Mar 16, 2022
dcc32e4
Merge branch 'cloudquery:main' into main
bbernays May 20, 2022
1f74e05
Merge branch 'cloudquery:main' into main
bbernays Jun 1, 2022
cb832c6
Merge branch 'cloudquery:main' into main
bbernays Jun 3, 2022
7b841a1
Merge branch 'cloudquery:main' into main
bbernays Jun 6, 2022
02c5372
Merge branch 'cloudquery:main' into main
bbernays Jun 24, 2022
a9b4cd0
Merge branch 'cloudquery:main' into main
bbernays Jun 26, 2022
73949b0
Update resolvers.go
bbernays Jul 26, 2022
5b1e918
Add tests
bbernays Jul 26, 2022
a5db808
Update resolvers_test.go
bbernays Jul 27, 2022
302918f
Update resolvers_test.go
bbernays Jul 28, 2022
8289c0c
Merge branch 'cloudquery:main' into main
bbernays Jul 28, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions provider/schema/resolvers.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,19 @@ import (
"github.com/thoas/go-funk"
)

// PathTableResolver resolves a table in the parent.Item
//
// Examples:
// PathTableResolver("Field")
// PathTableResolver("InnerStruct.Field")
// PathTableResolver("InnerStruct.InnerInnerStruct.Field")
func PathTableResolver(path string) TableResolver {
return func(ctx context.Context, meta ClientMeta, parent *Resource, res chan<- interface{}) error {
res <- funk.Get(parent.Item, path, funk.WithAllowZero())
return nil
}
}

// PathResolver resolves a field in the Resource.Item
//
// Examples:
Expand Down
85 changes: 70 additions & 15 deletions provider/schema/resolvers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ type innerStruct struct {
}

type testStruct struct {
NilInner *innerStruct
Inner innerStruct
Value int
unexported bool
Expand Down Expand Up @@ -130,24 +131,78 @@ var UUIDTestTable = &Table{
},
}

func TestPathResolver(t *testing.T) {
r1 := PathResolver("Inner.Value")
r2 := PathResolver("Value")
r3 := PathResolver("unexported")
resource := NewResourceData(PostgresDialect{}, pathTestTable, nil, testStruct{Inner: innerStruct{Value: "bla"}, Value: 5, unexported: false}, nil, time.Now())
err := r1(context.TODO(), nil, resource, Column{Name: "test"})

assert.Nil(t, err)
assert.Equal(t, resource.Get("test"), "bla")
func TestPathTableResolver(t *testing.T) {
results := make(chan interface{})
pathTableTests := []struct {
path string
isNil bool
expectedValue interface{}
}{
{
path: "Inner",
expectedValue: innerStruct{Value: "bla"},
},
{
path: "Inner.Value",
expectedValue: "bla",
},
{
path: "NilInner.Value",
expectedValue: "",
}, {
path: "unexported",
expectedValue: nil,
},
bbernays marked this conversation as resolved.
Show resolved Hide resolved
}

err = r2(context.TODO(), nil, resource, Column{Name: "int_value"})
resource := NewResourceData(PostgresDialect{}, pathTestTable, nil, testStruct{Inner: innerStruct{Value: "bla"}, Value: 5, unexported: false}, nil, time.Now())
for _, test := range pathTableTests {
r1 := PathTableResolver(test.path)
go func() {
err := r1(context.TODO(), nil, resource, results)
assert.Nil(t, err)
}()
result := <-results
assert.Equal(t, test.expectedValue, result, "path: %s", test.path)
}
}

assert.Nil(t, err)
assert.Equal(t, resource.Get("int_value"), 5)
func TestPathResolver(t *testing.T) {
pathTableTests := []struct {
path string
getterPath string
isNil bool
value interface{}
}{
{
path: "Inner.Value",
getterPath: "test",
value: "bla",
},
{
path: "Value",
getterPath: "int_value",
value: 5,
},
{
path: "unexported",
getterPath: "unexported",
isNil: true,
value: nil,
},
}

err = r3(context.TODO(), nil, resource, Column{Name: "unexported"})
assert.Nil(t, err)
assert.Nil(t, resource.Get("unexported"))
resource := NewResourceData(PostgresDialect{}, pathTestTable, nil, testStruct{Inner: innerStruct{Value: "bla"}, Value: 5, unexported: false}, nil, time.Now())
for _, test := range pathTableTests {
r1 := PathResolver(test.path)
err := r1(context.TODO(), nil, resource, Column{Name: test.getterPath})
assert.Nil(t, err)
if test.isNil {
assert.Nil(t, resource.Get(test.getterPath))
} else {
assert.Equal(t, test.value, resource.Get(test.getterPath))
}
}
}

func TestInterfaceSlice(t *testing.T) {
Expand Down