From d4d2a7ed805300a14ce419daa13dd7a4823cff50 Mon Sep 17 00:00:00 2001 From: tsuyoshiwada Date: Fri, 16 Feb 2018 15:50:05 +0900 Subject: [PATCH] feat: Add Next and Previous in Tag --- fields.go | 12 +++++-- tag_reader.go | 26 ++++++++++++++ tag_reader_test.go | 87 ++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 109 insertions(+), 16 deletions(-) diff --git a/fields.go b/fields.go index 08ea4dfb..414e9503 100644 --- a/fields.go +++ b/fields.go @@ -78,12 +78,20 @@ type CommitGroup struct { Commits []*Commit } -// Tag ... -type Tag struct { +// RelateTag ... +type RelateTag struct { Name string Date time.Time } +// Tag ... +type Tag struct { + Name string + Date time.Time + Next *RelateTag + Previous *RelateTag +} + // Version ... type Version struct { Tag *Tag diff --git a/tag_reader.go b/tag_reader.go index 295b60e8..7c8aa622 100644 --- a/tag_reader.go +++ b/tag_reader.go @@ -61,5 +61,31 @@ func (r *tagReader) ReadAll() ([]*Tag, error) { }) } + total := len(tags) + + for i, tag := range tags { + var ( + next *RelateTag + prev *RelateTag + ) + + if i > 0 { + next = &RelateTag{ + Name: tags[i-1].Name, + Date: tags[i-1].Date, + } + } + + if i+1 < total { + prev = &RelateTag{ + Name: tags[i+1].Name, + Date: tags[i+1].Date, + } + } + + tag.Next = next + tag.Previous = prev + } + return tags, nil } diff --git a/tag_reader_test.go b/tag_reader_test.go index 01355a2a..a44df44a 100644 --- a/tag_reader_test.go +++ b/tag_reader_test.go @@ -4,6 +4,7 @@ import ( "errors" "strings" "testing" + "time" "github.com/stretchr/testify/assert" ) @@ -29,20 +30,78 @@ func TestTagReader(t *testing.T) { }, } - res, err := newTagReader(client).ReadAll() + actual, err := newTagReader(client).ReadAll() assert.Nil(err) - actual := make([]string, len(res)) - for i, tag := range res { - actual[i] = tag.Name - } - - assert.Equal([]string{ - "v5.2.0-beta.1", - "2.0.0", - "v2.0.4-rc.1", - "2.0.4-beta.1", - "hoge_fuga", - "1.9.29-alpha.0", - }, actual) + assert.Equal( + []*Tag{ + &Tag{ + Name: "v5.2.0-beta.1", + Date: time.Unix(1518023112, 0), + Next: nil, + Previous: &RelateTag{ + Name: "2.0.0", + Date: time.Unix(1517875200, 0), + }, + }, + &Tag{ + Name: "2.0.0", + Date: time.Unix(1517875200, 0), + Next: &RelateTag{ + Name: "v5.2.0-beta.1", + Date: time.Unix(1518023112, 0), + }, + Previous: &RelateTag{ + Name: "v2.0.4-rc.1", + Date: time.Unix(1517788800, 0), + }, + }, + &Tag{ + Name: "v2.0.4-rc.1", + Date: time.Unix(1517788800, 0), + Next: &RelateTag{ + Name: "2.0.0", + Date: time.Unix(1517875200, 0), + }, + Previous: &RelateTag{ + Name: "2.0.4-beta.1", + Date: time.Unix(1517702400, 0), + }, + }, + &Tag{ + Name: "2.0.4-beta.1", + Date: time.Unix(1517702400, 0), + Next: &RelateTag{ + Name: "v2.0.4-rc.1", + Date: time.Unix(1517788800, 0), + }, + Previous: &RelateTag{ + Name: "hoge_fuga", + Date: time.Unix(1517616000, 0), + }, + }, + &Tag{ + Name: "hoge_fuga", + Date: time.Unix(1517616000, 0), + Next: &RelateTag{ + Name: "2.0.4-beta.1", + Date: time.Unix(1517702400, 0), + }, + Previous: &RelateTag{ + Name: "1.9.29-alpha.0", + Date: time.Unix(1517529600, 0), + }, + }, + &Tag{ + Name: "1.9.29-alpha.0", + Date: time.Unix(1517529600, 0), + Next: &RelateTag{ + Name: "hoge_fuga", + Date: time.Unix(1517616000, 0), + }, + Previous: nil, + }, + }, + actual, + ) }