Follow Golang naming specifications

This commit is contained in:
Luke Young 2016-07-05 20:32:15 -05:00
parent 5005a0cfae
commit 57819f3b34
7 changed files with 106 additions and 106 deletions

12
doc.go
View File

@ -13,26 +13,26 @@ the library in your jsonapi tags.
Example structs using a Blog > Post > Comment structure,
type Blog struct {
Id int `jsonapi:"primary,blogs"`
ID int `jsonapi:"primary,blogs"`
Title string `jsonapi:"attr,title"`
Posts []*Post `jsonapi:"relation,posts"`
CurrentPost *Post `jsonapi:"relation,current_post"`
CurrentPostId int `jsonapi:"attr,current_post_id"`
CurrentPostID int `jsonapi:"attr,current_post_id"`
CreatedAt time.Time `jsonapi:"attr,created_at"`
ViewCount int `jsonapi:"attr,view_count"`
}
type Post struct {
Id int `jsonapi:"primary,posts"`
BlogId int `jsonapi:"attr,blog_id"`
ID int `jsonapi:"primary,posts"`
BlogID int `jsonapi:"attr,blog_id"`
Title string `jsonapi:"attr,title"`
Body string `jsonapi:"attr,body"`
Comments []*Comment `jsonapi:"relation,comments"`
}
type Comment struct {
Id int `jsonapi:"primary,comments"`
PostId int `jsonapi:"attr,post_id"`
ID int `jsonapi:"primary,comments"`
PostID int `jsonapi:"attr,post_id"`
Body string `jsonapi:"attr,body"`
}

View File

@ -54,7 +54,7 @@ func showBlog(w http.ResponseWriter, r *http.Request) {
// ...fetch your blog...
intId, err := strconv.Atoi(id)
intID, err := strconv.Atoi(id)
if err != nil {
http.Error(w, err.Error(), 500)
return
@ -63,7 +63,7 @@ func showBlog(w http.ResponseWriter, r *http.Request) {
jsonapiRuntime := jsonapi.NewRuntime().Instrument("blogs.show")
// but, for now
blog := testBlogForCreate(intId)
blog := testBlogForCreate(intID)
w.WriteHeader(200)
w.Header().Set("Content-Type", "application/vnd.api+json")
@ -113,52 +113,52 @@ func main() {
func testBlogForCreate(i int) *Blog {
return &Blog{
Id: 1 * i,
ID: 1 * i,
Title: "Title 1",
CreatedAt: time.Now(),
Posts: []*Post{
&Post{
Id: 1 * i,
ID: 1 * i,
Title: "Foo",
Body: "Bar",
Comments: []*Comment{
&Comment{
Id: 1 * i,
ID: 1 * i,
Body: "foo",
},
&Comment{
Id: 2 * i,
ID: 2 * i,
Body: "bar",
},
},
},
&Post{
Id: 2 * i,
ID: 2 * i,
Title: "Fuubar",
Body: "Bas",
Comments: []*Comment{
&Comment{
Id: 1 * i,
ID: 1 * i,
Body: "foo",
},
&Comment{
Id: 3 * i,
ID: 3 * i,
Body: "bas",
},
},
},
},
CurrentPost: &Post{
Id: 1 * i,
ID: 1 * i,
Title: "Foo",
Body: "Bar",
Comments: []*Comment{
&Comment{
Id: 1 * i,
ID: 1 * i,
Body: "foo",
},
&Comment{
Id: 2 * i,
ID: 2 * i,
Body: "bar",
},
},
@ -246,25 +246,25 @@ func exerciseHandler() {
}
type Blog struct {
Id int `jsonapi:"primary,blogs"`
ID int `jsonapi:"primary,blogs"`
Title string `jsonapi:"attr,title"`
Posts []*Post `jsonapi:"relation,posts"`
CurrentPost *Post `jsonapi:"relation,current_post"`
CurrentPostId int `jsonapi:"attr,current_post_id"`
CurrentPostID int `jsonapi:"attr,current_post_id"`
CreatedAt time.Time `jsonapi:"attr,created_at"`
ViewCount int `jsonapi:"attr,view_count"`
}
type Post struct {
Id int `jsonapi:"primary,posts"`
BlogId int `jsonapi:"attr,blog_id"`
ID int `jsonapi:"primary,posts"`
BlogID int `jsonapi:"attr,blog_id"`
Title string `jsonapi:"attr,title"`
Body string `jsonapi:"attr,body"`
Comments []*Comment `jsonapi:"relation,comments"`
}
type Comment struct {
Id int `jsonapi:"primary,comments"`
PostId int `jsonapi:"attr,post_id"`
ID int `jsonapi:"primary,comments"`
PostID int `jsonapi:"attr,post_id"`
Body string `jsonapi:"attr,body"`
}

View File

@ -14,8 +14,8 @@ type ManyPayload struct {
type Node struct {
Type string `json:"type"`
Id string `json:"id"`
ClientId string `json:"client-id,omitempty"`
ID string `json:"id"`
ClientID string `json:"client-id,omitempty"`
Attributes map[string]interface{} `json:"attributes,omitempty"`
Relationships map[string]interface{} `json:"relationships,omitempty"`
}

View File

@ -62,7 +62,7 @@ func UnmarshalPayload(in io.Reader, model interface{}) error {
if payload.Included != nil {
includedMap := make(map[string]*Node)
for _, included := range payload.Included {
key := fmt.Sprintf("%s,%s", included.Type, included.Id)
key := fmt.Sprintf("%s,%s", included.Type, included.ID)
includedMap[key] = included
}
@ -83,7 +83,7 @@ func UnmarshalManyPayload(in io.Reader, t reflect.Type) ([]interface{}, error) {
if payload.Included != nil {
includedMap := make(map[string]*Node)
for _, included := range payload.Included {
key := fmt.Sprintf("%s,%s", included.Type, included.Id)
key := fmt.Sprintf("%s,%s", included.Type, included.ID)
includedMap[key] = included
}
@ -151,7 +151,7 @@ func unmarshalNode(data *Node, model reflect.Value, included *map[string]*Node)
}
if annotation == "primary" {
if data.Id == "" {
if data.ID == "" {
continue
}
@ -161,9 +161,9 @@ func unmarshalNode(data *Node, model reflect.Value, included *map[string]*Node)
}
if fieldValue.Kind() == reflect.String {
fieldValue.Set(reflect.ValueOf(data.Id))
fieldValue.Set(reflect.ValueOf(data.ID))
} else if fieldValue.Kind() == reflect.Int {
id, err := strconv.Atoi(data.Id)
id, err := strconv.Atoi(data.ID)
if err != nil {
er = err
break
@ -174,11 +174,11 @@ func unmarshalNode(data *Node, model reflect.Value, included *map[string]*Node)
break
}
} else if annotation == "client-id" {
if data.ClientId == "" {
if data.ClientID == "" {
continue
}
fieldValue.Set(reflect.ValueOf(data.ClientId))
fieldValue.Set(reflect.ValueOf(data.ClientID))
} else if annotation == "attr" {
attributes := data.Attributes
if attributes == nil || len(data.Attributes) == 0 {
@ -371,7 +371,7 @@ func unmarshalNode(data *Node, model reflect.Value, included *map[string]*Node)
}
func fullNode(n *Node, included *map[string]*Node) *Node {
includedKey := fmt.Sprintf("%s,%s", n.Type, n.Id)
includedKey := fmt.Sprintf("%s,%s", n.Type, n.ID)
if included != nil && (*included)[includedKey] != nil {
return (*included)[includedKey]

View File

@ -10,7 +10,7 @@ import (
)
type BadModel struct {
Id int `jsonapi:"primary"`
ID int `jsonapi:"primary"`
}
func TestMalformedTag(t *testing.T) {
@ -32,16 +32,16 @@ func TestUnmarshalInvalidJSON(t *testing.T) {
}
}
func TestUnmarshalSetsId(t *testing.T) {
in := samplePayloadWithId()
func TestUnmarshalSetsID(t *testing.T) {
in := samplePayloadWithID()
out := new(Blog)
if err := UnmarshalPayload(in, out); err != nil {
t.Fatal(err)
}
if out.Id != 2 {
t.Fatalf("Did not set Id on dst interface")
if out.ID != 2 {
t.Fatalf("Did not set ID on dst interface")
}
}
@ -200,8 +200,8 @@ func TestUnmarshalNestedRelationshipsEmbedded_withClientIDs(t *testing.T) {
t.Fatal(err)
}
if model.Posts[0].ClientId == "" {
t.Fatalf("ClientId not set from request on related record")
if model.Posts[0].ClientID == "" {
t.Fatalf("ClientID not set from request on related record")
}
}
@ -234,7 +234,7 @@ func samplePayload() io.Reader {
"title": "Foo",
"body": "Bar",
},
ClientId: "1",
ClientID: "1",
},
&Node{
Type: "posts",
@ -242,7 +242,7 @@ func samplePayload() io.Reader {
"title": "X",
"body": "Y",
},
ClientId: "2",
ClientID: "2",
},
},
},
@ -253,7 +253,7 @@ func samplePayload() io.Reader {
"title": "Bas",
"body": "Fuubar",
},
ClientId: "3",
ClientID: "3",
Relationships: map[string]interface{}{
"comments": &RelationshipManyNode{
Data: []*Node{
@ -262,14 +262,14 @@ func samplePayload() io.Reader {
Attributes: map[string]interface{}{
"body": "Great post!",
},
ClientId: "4",
ClientID: "4",
},
&Node{
Type: "comments",
Attributes: map[string]interface{}{
"body": "Needs some work!",
},
ClientId: "5",
ClientID: "5",
},
},
},
@ -287,10 +287,10 @@ func samplePayload() io.Reader {
return out
}
func samplePayloadWithId() io.Reader {
func samplePayloadWithID() io.Reader {
payload := &OnePayload{
Data: &Node{
Id: "2",
ID: "2",
Type: "blogs",
Attributes: map[string]interface{}{
"title": "New blog",
@ -308,66 +308,66 @@ func samplePayloadWithId() io.Reader {
func testModel() *Blog {
return &Blog{
Id: 5,
ClientId: "1",
ID: 5,
ClientID: "1",
Title: "Title 1",
CreatedAt: time.Now(),
Posts: []*Post{
&Post{
Id: 1,
ID: 1,
Title: "Foo",
Body: "Bar",
Comments: []*Comment{
&Comment{
Id: 1,
ID: 1,
Body: "foo",
},
&Comment{
Id: 2,
ID: 2,
Body: "bar",
},
},
LatestComment: &Comment{
Id: 1,
ID: 1,
Body: "foo",
},
},
&Post{
Id: 2,
ID: 2,
Title: "Fuubar",
Body: "Bas",
Comments: []*Comment{
&Comment{
Id: 1,
ID: 1,
Body: "foo",
},
&Comment{
Id: 3,
ID: 3,
Body: "bas",
},
},
LatestComment: &Comment{
Id: 1,
ID: 1,
Body: "foo",
},
},
},
CurrentPost: &Post{
Id: 1,
ID: 1,
Title: "Foo",
Body: "Bar",
Comments: []*Comment{
&Comment{
Id: 1,
ID: 1,
Body: "foo",
},
&Comment{
Id: 2,
ID: 2,
Body: "bar",
},
},
LatestComment: &Comment{
Id: 1,
ID: 1,
Body: "foo",
},
},

View File

@ -178,15 +178,15 @@ func visitModelNode(model interface{}, included *map[string]*Node, sideload bool
if annotation == "primary" {
id := fieldValue.Interface()
switch nId := id.(type) {
switch nID := id.(type) {
case string:
node.Id = nId
node.ID = nID
case int:
node.Id = strconv.Itoa(nId)
node.ID = strconv.Itoa(nID)
case int64:
node.Id = strconv.FormatInt(nId, 10)
node.ID = strconv.FormatInt(nID, 10)
case uint64:
node.Id = strconv.FormatUint(nId, 10)
node.ID = strconv.FormatUint(nID, 10)
default:
er = ErrBadJSONAPIID
break
@ -196,7 +196,7 @@ func visitModelNode(model interface{}, included *map[string]*Node, sideload bool
} else if annotation == "client-id" {
clientID := fieldValue.String()
if clientID != "" {
node.ClientId = clientID
node.ClientID = clientID
}
} else if annotation == "attr" {
var omitEmpty bool
@ -307,7 +307,7 @@ func visitModelNode(model interface{}, included *map[string]*Node, sideload bool
func toShallowNode(node *Node) *Node {
return &Node{
Id: node.Id,
ID: node.ID,
Type: node.Type,
}
}
@ -336,7 +336,7 @@ func appendIncluded(m *map[string]*Node, nodes ...*Node) {
included := *m
for _, n := range nodes {
k := fmt.Sprintf("%s,%s", n.Type, n.Id)
k := fmt.Sprintf("%s,%s", n.Type, n.ID)
if _, hasNode := included[k]; hasNode {
continue

View File

@ -8,21 +8,21 @@ import (
)
type Blog struct {
Id int `jsonapi:"primary,blogs"`
ClientId string `jsonapi:"client-id"`
ID int `jsonapi:"primary,blogs"`
ClientID string `jsonapi:"client-id"`
Title string `jsonapi:"attr,title"`
Posts []*Post `jsonapi:"relation,posts"`
CurrentPost *Post `jsonapi:"relation,current_post"`
CurrentPostId int `jsonapi:"attr,current_post_id"`
CurrentPostID int `jsonapi:"attr,current_post_id"`
CreatedAt time.Time `jsonapi:"attr,created_at"`
ViewCount int `jsonapi:"attr,view_count"`
}
type Post struct {
Blog
Id int `jsonapi:"primary,posts"`
BlogId int `jsonapi:"attr,blog_id"`
ClientId string `jsonapi:"client-id"`
ID int `jsonapi:"primary,posts"`
BlogID int `jsonapi:"attr,blog_id"`
ClientID string `jsonapi:"client-id"`
Title string `jsonapi:"attr,title"`
Body string `jsonapi:"attr,body"`
Comments []*Comment `jsonapi:"relation,comments"`
@ -30,15 +30,15 @@ type Post struct {
}
type Comment struct {
Id int `jsonapi:"primary,comments"`
ClientId string `jsonapi:"client-id"`
PostId int `jsonapi:"attr,post_id"`
ID int `jsonapi:"primary,comments"`
ClientID string `jsonapi:"client-id"`
PostID int `jsonapi:"attr,post_id"`
Body string `jsonapi:"attr,body"`
}
func TestHasPrimaryAnnotation(t *testing.T) {
testModel := &Blog{
Id: 5,
ID: 5,
Title: "Title 1",
CreatedAt: time.Now(),
}
@ -60,14 +60,14 @@ func TestHasPrimaryAnnotation(t *testing.T) {
t.Fatalf("type should have been blogs, got %s", data.Type)
}
if data.Id != "5" {
t.Fatalf("Id not transfered")
if data.ID != "5" {
t.Fatalf("ID not transfered")
}
}
func TestSupportsAttributes(t *testing.T) {
testModel := &Blog{
Id: 5,
ID: 5,
Title: "Title 1",
CreatedAt: time.Now(),
}
@ -95,7 +95,7 @@ func TestSupportsAttributes(t *testing.T) {
func TestOmitsZeroTimes(t *testing.T) {
testModel := &Blog{
Id: 5,
ID: 5,
Title: "Title 1",
CreatedAt: time.Time{},
}
@ -154,7 +154,7 @@ func TestRelations(t *testing.T) {
}
func TestNoRelations(t *testing.T) {
testModel := &Blog{Id: 1, Title: "Title 1", CreatedAt: time.Now()}
testModel := &Blog{ID: 1, Title: "Title 1", CreatedAt: time.Now()}
out := bytes.NewBuffer(nil)
if err := MarshalOnePayload(out, testModel); err != nil {
@ -174,45 +174,45 @@ func TestNoRelations(t *testing.T) {
func TestMarshalMany(t *testing.T) {
data := []interface{}{
&Blog{
Id: 5,
ID: 5,
Title: "Title 1",
CreatedAt: time.Now(),
Posts: []*Post{
&Post{
Id: 1,
ID: 1,
Title: "Foo",
Body: "Bar",
},
&Post{
Id: 2,
ID: 2,
Title: "Fuubar",
Body: "Bas",
},
},
CurrentPost: &Post{
Id: 1,
ID: 1,
Title: "Foo",
Body: "Bar",
},
},
&Blog{
Id: 6,
ID: 6,
Title: "Title 2",
CreatedAt: time.Now(),
Posts: []*Post{
&Post{
Id: 3,
ID: 3,
Title: "Foo",
Body: "Bar",
},
&Post{
Id: 4,
ID: 4,
Title: "Fuubar",
Body: "Bas",
},
},
CurrentPost: &Post{
Id: 4,
ID: 4,
Title: "Foo",
Body: "Bar",
},
@ -238,65 +238,65 @@ func TestMarshalMany(t *testing.T) {
func testBlog() *Blog {
return &Blog{
Id: 5,
ID: 5,
Title: "Title 1",
CreatedAt: time.Now(),
Posts: []*Post{
&Post{
Id: 1,
ID: 1,
Title: "Foo",
Body: "Bar",
Comments: []*Comment{
&Comment{
Id: 1,
ID: 1,
Body: "foo",
},
&Comment{
Id: 2,
ID: 2,
Body: "bar",
},
},
LatestComment: &Comment{
Id: 1,
ID: 1,
Body: "foo",
},
},
&Post{
Id: 2,
ID: 2,
Title: "Fuubar",
Body: "Bas",
Comments: []*Comment{
&Comment{
Id: 1,
ID: 1,
Body: "foo",
},
&Comment{
Id: 3,
ID: 3,
Body: "bas",
},
},
LatestComment: &Comment{
Id: 1,
ID: 1,
Body: "foo",
},
},
},
CurrentPost: &Post{
Id: 1,
ID: 1,
Title: "Foo",
Body: "Bar",
Comments: []*Comment{
&Comment{
Id: 1,
ID: 1,
Body: "foo",
},
&Comment{
Id: 2,
ID: 2,
Body: "bar",
},
},
LatestComment: &Comment{
Id: 1,
ID: 1,
Body: "foo",
},
},