Basic library for transports
Go to file
Neur0toxine e6dd1643cf
[feature] Individual localizer for each context
* proposal with context localizer (engine.GetLocalizedMessage shouldn't be used for localizing for individual requests data)
* normal test for SetLocale
* use sync.Map
* method to preload languages into localizer
* DefaultLanguages variable
* PreloadLanguages field in core.Engine
* don't copy sync.Map
* patch for goroutine safety usage of Localizer
* fix for engine constructor
* additional test for localizer middleware, which is more close to real environment
* filter language.Und
* prevent root placeholder tag usage
* remove reduntant bundle storage, deprecated (*core.Localizer).FetchLanguage()
2020-05-18 13:37:24 +03:00
cmd/transport-core-tool updated gin, better code 2019-12-12 12:06:38 +03:00
core [feature] Individual localizer for each context 2020-05-18 13:37:24 +03:00
.gitignore [feature] Individual localizer for each context 2020-05-18 13:37:24 +03:00
.travis.yml fixes for tests 2019-12-17 13:50:30 +03:00
go.mod adaptations for broken BC in gin 1.6.2, now gin 1.6.2 is the minimum supported version 2020-04-29 10:08:00 +03:00
go.sum adaptations for broken BC in gin 1.6.2, now gin 1.6.2 is the minimum supported version 2020-04-29 10:08:00 +03:00
LICENSE.md license badge, copyright notice 2019-12-13 10:44:06 +03:00
README.md [feature] Individual localizer for each context 2020-05-18 13:37:24 +03:00

MG Transport Library

Build Status codecov GoDoc Go Report Card License
This library provides different functions like error-reporting, logging, localization, etc. in order to make it easier to create transports.
Usage:

package main

import (
    "os"
    "fmt"
    "html/template"

    "github.com/gin-gonic/gin"
    "github.com/gobuffalo/packr/v2"
    "github.com/retailcrm/mg-transport-core/core"
)

func main() {
    // Create new core.Engine instance
    app := core.New()

    // Load configuration
    app.Config = core.NewConfig("config.yml")

    // Set default error translation key (will be returned if something goes wrong)
    app.DefaultError = "unknown_error"

    // Set translations path
    app.TranslationsPath = "./translations"

    // Preload some translations so they will not be loaded for every request
    app.PreloadLanguages = core.DefaultLanguages
    
    // Configure gin.Engine inside core.Engine
    app.ConfigureRouter(func(engine *gin.Engine) {
        engine.Static("/static", "./static")
        engine.HTMLRender = app.CreateRenderer(
]           // Insert templates here. Custom functions also can be provided.
            // Default transl function will be injected automatically
            func(renderer *core.Renderer) {
                // Push method will load template from FS or from binary
                r.Push("home", "templates/layout.html", "templates/home.html")
            }, 
            template.FuncMap{},
        )
    })
    
    // Start application or fail if something gone wrong (e.g. port is already in use)
    if err := app.Prepare().Run(); err != nil {
        fmt.Printf("Fatal error: %s", err.Error())
        os.Exit(1)
    }
}

Resource embedding

packr can be used to provide resource embedding. In order to use packr you must follow this instruction, and provide boxes with templates, translations and assets to library. Example:

package main

import (
    "os"
    "fmt"
    "html/template"

    "github.com/gin-gonic/gin"
    "github.com/gobuffalo/packr/v2"
    "github.com/retailcrm/mg-transport-core/core"
)

func main() {
    static := packr.New("assets", "./static")
    templates := packr.New("templates", "./templates")
    translations := packr.New("translations", "./translate")
    
    app := core.New()
    app.Config = core.NewConfig("config.yml")
    app.DefaultError = "unknown_error"

    // Now translations will be loaded from packr.Box
    app.TranslationsBox = translations
    app.PreloadLanguages = core.DefaultLanguages
    
    app.ConfigureRouter(func(engine *gin.Engine) {
        // gin.Engine can use packr.Box as http.FileSystem
        engine.StaticFS("/static", static)
        engine.HTMLRender = app.CreateRendererFS(
            templates, 
            func(renderer *core.Renderer) {
                // Same Push method here, but without relative directory.
                r.Push("home", "layout.html", "home.html")
            }, 
            template.FuncMap{},
        )
    })
    
    if err := app.Prepare().Run(); err != nil {
        fmt.Printf("Fatal error: %s", err.Error())
        os.Exit(1)
    }
}

Migration generator

This library contains helper tool for transports. You can install it via go:

$ go get -u github.com/retailcrm/mg-transport-core/cmd/transport-core-tool

Currently, it only can generate new migrations for your transport.