Skip to content

Commit

Permalink
Merge pull request #32 from lindsaygelle/developer
Browse files Browse the repository at this point in the history
Developer
  • Loading branch information
lindsaygelle committed Jul 10, 2020
2 parents c5c8e73 + e571ba3 commit 3e04ed5
Show file tree
Hide file tree
Showing 5 changed files with 174 additions and 1 deletion.
2 changes: 1 addition & 1 deletion amiibo.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"golang.org/x/text/language"
)

// Amiibo is a generic interface for an Amiibo product.
// Amiibo is a generic interface for a Nintendo Amiibo product.
//
// Amiibo provides a handler to get all common fields between the ENGAmiibo and JPNAmiibo.
type Amiibo interface {
Expand Down
46 changes: 46 additions & 0 deletions en-game.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package amiibo

import (
"crypto/md5"
"encoding/json"
"fmt"
"path/filepath"
"reflect"
Expand All @@ -9,8 +11,11 @@ import (
"time"

"github.com/google/uuid"
"golang.org/x/text/language"
)

var _ Software = (&ENGGame{})

// ENGGame is a formatted ENGChartGame and ENGChartItem.
type ENGGame struct {
// Available is the Nintendo game availability status.
Expand Down Expand Up @@ -86,11 +91,52 @@ func (e *ENGGame) AddENGChartItem(v *ENGChartItem) (err error) {
return
}

// GetAvailable returns the ENGGame availability.
func (e ENGGame) GetAvailable() bool {
return time.Now().After(e.ReleaseDate)
}

// GetID returns the ENGGame ID.
func (e ENGGame) GetID() string {
return strings.TrimSuffix(filepath.Base(e.URL), ".html")
}

// GetLanguage returns the ENGGame language.
func (e ENGGame) GetLanguage() language.Tag {
return language.English
}

// GetName returns the ENGGame name.
func (e ENGGame) GetName() string {
return e.Name
}

// GetNameAlternative returns the ENGGame name alternative.
func (e ENGGame) GetNameAlternative() string {
return e.Name
}

// GetMD5 returns the ENGGame MD5.
func (e ENGGame) GetMD5() (MD5 string, err error) {
var b ([]byte)
b, err = marshal(&e, json.Marshal)
if err != nil {
return
}
MD5 = fmt.Sprintf("%x", md5.Sum(b))
return
}

// GetReleaseDate returns the ENGGame release date.
func (e ENGGame) GetReleaseDate() time.Time {
return e.ReleaseDate
}

// GetURL returns the ENGGame URL.
func (e ENGGame) GetURL() string {
return e.URL
}

// NewENGGame returns a ENGGame.
func NewENGGame(ENGChartGame *ENGChartGame, ENGChartItem *ENGChartItem) (v ENGGame, err error) {
var ok bool
Expand Down
54 changes: 54 additions & 0 deletions jp-software.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
package amiibo

import (
"crypto/md5"
"encoding/json"
"fmt"
"path/filepath"
"strings"
"time"

"golang.org/x/text/language"
)

var _ Software = (JPNSoftware{})

// JPNSoftware is a formatted JPNChartSoftwareItem.
type JPNSoftware struct {
// ID is the fully qualified ID for the Nintendo software product given by Nintendo Japan.
Expand Down Expand Up @@ -49,6 +57,52 @@ func (j *JPNSoftware) AddJPNChartSoftwareItem(v *JPNChartSoftwareItem) (err erro
return
}

// GetAvailable returns the JPNSoftware availability.
func (j JPNSoftware) GetAvailable() bool {
return time.Now().After(j.ReleaseDate)
}

// GetID returns the JPNSoftware ID.
func (j JPNSoftware) GetID() string {
return strings.TrimSuffix(filepath.Base(j.URL), ".html")
}

// GetLanguage returns the JPNSoftware language.
func (j JPNSoftware) GetLanguage() language.Tag {
return language.Japanese
}

// GetName returns the JPNSoftware name.
func (j JPNSoftware) GetName() string {
return j.Name
}

// GetNameAlternative returns the JPNSoftware name alternative.
func (j JPNSoftware) GetNameAlternative() string {
return j.Name
}

// GetMD5 returns the JPNSoftware MD5.
func (j JPNSoftware) GetMD5() (MD5 string, err error) {
var b ([]byte)
b, err = marshal(&j, json.Marshal)
if err != nil {
return
}
MD5 = fmt.Sprintf("%x", md5.Sum(b))
return
}

// GetReleaseDate returns the JPNSoftware release date.
func (j JPNSoftware) GetReleaseDate() time.Time {
return j.ReleaseDate
}

// GetURL returns the JPNSoftware URL.
func (j JPNSoftware) GetURL() string {
return j.URL
}

// ReadJPNSoftware reads a JPNSoftware from disc.
func ReadJPNSoftware(dir string, filename string) (v JPNSoftware, err error) {
err = readJSONFile(dir, filename, &v)
Expand Down
21 changes: 21 additions & 0 deletions software.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package amiibo

import (
"time"

"golang.org/x/text/language"
)

// Software is a generic interface for an Nintendo software product.
//
// Software provides a handler to get all common fields between the ENGGame and JPNSoftware.
type Software interface {
GetAvailable() bool
GetID() string
GetLanguage() language.Tag
GetMD5() (string, error)
GetName() string
GetNameAlternative() string
GetReleaseDate() time.Time
GetURL() string
}
52 changes: 52 additions & 0 deletions software_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package amiibo_test

import (
"testing"
"time"

"github.com/lindsaygelle/amiibo"
"golang.org/x/text/language"
)

func TestSoftware(t *testing.T) {
var name = "name"
var nameAlt = "nameAlt"
var releaseDate = time.Now()
var URL = "https://ninendo.com/"
var engSoftware amiibo.Software = amiibo.ENGGame{
Name: name,
ReleaseDate: releaseDate,
URL: URL}
var jpnSoftware amiibo.Software = amiibo.JPNSoftware{
Name: name,
NameAlternative: nameAlt,
ReleaseDate: releaseDate,
URL: URL}

if getLanguage := engSoftware.GetLanguage(); getLanguage != language.English {
t.Fatalf("(Software).GetLanguage() %v != %v", getLanguage, language.English)
}
if getLanguage := jpnSoftware.GetLanguage(); getLanguage != language.Japanese {
t.Fatalf("(Software).GetLanguage() %v != %v", getLanguage, language.Japanese)
}
for _, v := range []amiibo.Software{engSoftware, jpnSoftware} {
if getAvailable := v.GetAvailable(); !getAvailable {
t.Fatalf("(Software).GetAvailable() %t != true", getAvailable)
}
if getName := v.GetName(); getName != name {
t.Fatalf("(Software).GetName() %s != %s", getName, name)
}
if getNameAlternative := v.GetNameAlternative(); !(getNameAlternative == nameAlt || getNameAlternative == name) {
t.Fatalf("(Software).GetNameAlternative() %s != %s || %s", getNameAlternative, nameAlt, name)
}
if MD5, err := v.GetMD5(); err != nil {
t.Fatalf("(Software).GetMD5() (%s, %s)", MD5, err)
}
if getReleaseDate := v.GetReleaseDate(); getReleaseDate != releaseDate {
t.Fatalf("(Software).GetReleaseDate() %v != %v", getReleaseDate, releaseDate)
}
if getURL := v.GetURL(); getURL != URL {
t.Fatalf("(Software).GetURL() %s != %s", getURL, URL)
}
}
}

0 comments on commit 3e04ed5

Please sign in to comment.