feat: engine package

pull/2/head
sundowndev 2020-04-11 16:25:53 +01:00
parent e0ca1a0150
commit fca18f39d1
5 changed files with 107 additions and 0 deletions

1
engine/disk.go Normal file
View File

@ -0,0 +1 @@
package engine

69
engine/redis.go Normal file
View File

@ -0,0 +1,69 @@
package engine
import (
"encoding/json"
"io/ioutil"
"strings"
"github.com/go-redis/redis/v7"
)
// RedisClient is an idiomatic interface for the Redis client,
// adding few methods to interact with the file system.
type RedisClient struct {
conn *redis.Client
}
// NewRedisClient returns a Redis client
func NewRedisClient(addr, port string) (*RedisClient, error) {
client := redis.NewClient(&redis.Options{
Addr: addr + ":" + port,
Password: "", // no password set
DB: 0, // use default DB
})
err := client.Ping().Err()
if err != nil {
return nil, err
}
return &RedisClient{conn: client}, nil
}
// AddFile index a file
func (c *RedisClient) AddFile(file string, score int) error {
data, err := ioutil.ReadFile(file)
if err != nil {
return err
}
words := strings.Split(string(data), " ")
wordsJSONArray, err := json.Marshal(&words)
if err != nil {
return err
}
return c.conn.Set(file, wordsJSONArray, 0).Err()
}
// GetKey returns a key value
func (c *RedisClient) GetKey(key string) (string, error) {
// Utilisez Redigo pour lire toutes les valeurs de la clef, et les
// placer dans une tranche de chaînes. Renvoyez une erreur si nécessaire.
return c.conn.Get(key).Result()
}
// GetAllKeys returns a key value
func (c *RedisClient) GetAllKeys() (keys []string, err error) {
// Utilisez Redigo pour lire toutes les valeurs de la clef, et les
// placer dans une tranche de chaînes. Renvoyez une erreur si nécessaire.
keys, _, err = c.conn.Scan(0, "*", 15).Result()
return
}
// Close closes the Redis connection
func (c *RedisClient) Close() error {
return c.conn.Close()
}

1
engine/results.go Normal file
View File

@ -0,0 +1 @@
package engine

17
engine/text.go Normal file
View File

@ -0,0 +1,17 @@
package engine
import "strings"
// CountWord returns the number of
// occurence for a word in a given text.
func CountWord(text, word string) int {
count := 0
for _, v := range strings.Split(text, " ") {
if v == word {
count++
}
}
return count
}

19
engine/text_test.go Normal file
View File

@ -0,0 +1,19 @@
package engine
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestText(t *testing.T) {
assert := assert.New(t)
t.Run("CountWord", func(t *testing.T) {
t.Run("should count words in text", func(t *testing.T) {
text := "Contrairement à une opinion répandue, le Lorem Ipsum n'est pas simplement du texte aléatoire. Il trouve ses racines dans une oeuvre de la littérature latine classique datant de 45 av. J.-C., le rendant vieux de 2000 ans. Un professeur du Hampden-Sydney College, en Virginie, s'est intéressé à un des mots latins les plus obscurs, consectetur, extrait d'un passage du Lorem Ipsum, et en étudiant tous les usages de ce mot dans la littérature classique, découvrit la source incontestable du Lorem Ipsum."
assert.Equal(3, CountWord(text, "la"), "should be equal")
})
})
}