Improving code documentation by adding comments

Improving documentation

Signed-off-by: Jonas Franz <info@jonasfranz.de>
pull/1/head
Jonas Franz 7 years ago
parent cab4da2580
commit 4b0de86a3f
  1. 4
      DOCS.md
  2. 15
      plugin.go
  3. 4
      responses/responses.go
  4. 4
      types.go

@ -4,7 +4,9 @@ You must provide in your configuration:
* `project_identifier` - Identifier of your Crowdin project (also available as secret `CROWDIN_IDENTIFIER`) * `project_identifier` - Identifier of your Crowdin project (also available as secret `CROWDIN_IDENTIFIER`)
* `project_key` - API Key of your Crowdin project (also available as secret `CROWDIN_KEY`) * `project_key` - API Key of your Crowdin project (also available as secret `CROWDIN_KEY`)
* `files` - Map of files with the crowdin file name as key and the to-upload file-path as value. * `files` - Map of files to upload to Crowdin
* key: the Crowdin file name
* value: the real path the to file
Information about API keys: https://support.crowdin.com/api/api-integration-setup/ Information about API keys: https://support.crowdin.com/api/api-integration-setup/
## Example ## Example

@ -13,23 +13,28 @@ import (
) )
type ( type (
// Files is a mapping between the crowdin path and the real file path
Files map[string]string Files map[string]string
// Config stores the credentials for the crowdin API
Config struct { Config struct {
Key string Key string
Identifier string Identifier string
} }
// Plugin represents the drone-crowdin plugin including config and file-mapping.
Plugin struct { Plugin struct {
Config Config Config Config
Files Files Files Files
} }
) )
// ToURL returns the API-endpoint including identifier and API-KEY
func (c Config) ToURL() string { func (c Config) ToURL() string {
return fmt.Sprintf("https://api.crowdin.com/api/project/%s/update-file?key=%s", c.Identifier, c.Key) return fmt.Sprintf("https://api.crowdin.com/api/project/%s/update-file?key=%s", c.Identifier, c.Key)
} }
// Exec starts the plugin and updates the crowdin translation by uploading files from the files map
func (p Plugin) Exec() error { func (p Plugin) Exec() error {
if len(p.Files) > 20 { if len(p.Files) > 20 {
return fmt.Errorf("20 files max are allowed to upload. %d files given", len(p.Files)) return fmt.Errorf("20 files max are allowed to upload. %d files given", len(p.Files))
@ -37,7 +42,7 @@ func (p Plugin) Exec() error {
body := &bytes.Buffer{} body := &bytes.Buffer{}
writer := multipart.NewWriter(body) writer := multipart.NewWriter(body)
for crowdin_path, path := range p.Files { for crowdinPath, path := range p.Files {
var err error var err error
var file *os.File var file *os.File
if file, err = os.Open(path); err != nil { if file, err = os.Open(path); err != nil {
@ -45,7 +50,7 @@ func (p Plugin) Exec() error {
} }
defer file.Close() defer file.Close()
part, err := writer.CreateFormFile(fmt.Sprintf("files[%s]", crowdin_path), crowdin_path) part, err := writer.CreateFormFile(fmt.Sprintf("files[%s]", crowdinPath), crowdinPath)
if err != nil { if err != nil {
return err return err
} }
@ -77,13 +82,13 @@ func (p Plugin) Exec() error {
return err return err
} }
if resp.StatusCode != 200 { if resp.StatusCode != 200 {
var err_response = new(responses.Error) var errResponse = new(responses.Error)
decoder := xml.NewDecoder(body) decoder := xml.NewDecoder(body)
decoder.CharsetReader = charset.NewReaderLabel decoder.CharsetReader = charset.NewReaderLabel
if err := decoder.Decode(&err_response); err != nil { if err := decoder.Decode(&errResponse); err != nil {
return err return err
} }
return err_response return errResponse
} else { } else {
var success = new(responses.Success) var success = new(responses.Success)
decoder := xml.NewDecoder(body) decoder := xml.NewDecoder(body)

@ -5,21 +5,25 @@ import (
"fmt" "fmt"
) )
// Error is a crowdin error message
type Error struct { type Error struct {
XMLName xml.Name `xml:"error"` XMLName xml.Name `xml:"error"`
Code int `xml:"code"` Code int `xml:"code"`
Message string `xml:"message"` Message string `xml:"message"`
} }
// Error implements the error interface to handle like an error
func (e *Error) Error() string { func (e *Error) Error() string {
return fmt.Sprintf("Error from crowdin: %s (error code %d)", e.Message, e.Code) return fmt.Sprintf("Error from crowdin: %s (error code %d)", e.Message, e.Code)
} }
// Success is a crowdin success message
type Success struct { type Success struct {
XMLName xml.Name `xml:"success"` XMLName xml.Name `xml:"success"`
Stats []File `xml:"stats>file"` Stats []File `xml:"stats>file"`
} }
// File represents the status of an uploaded file
type File struct { type File struct {
XMLName xml.Name `xml:"file"` XMLName xml.Name `xml:"file"`
Name string `xml:"name,attr"` Name string `xml:"name,attr"`

@ -2,18 +2,22 @@ package main
import "encoding/json" import "encoding/json"
// StringMapFlag represents a string-based map as a cli flag
type StringMapFlag struct { type StringMapFlag struct {
parts map[string]string parts map[string]string
} }
// String is implemented from cli
func (s *StringMapFlag) String() string { func (s *StringMapFlag) String() string {
return "" return ""
} }
// Get returns the parsed map
func (s *StringMapFlag) Get() map[string]string { func (s *StringMapFlag) Get() map[string]string {
return s.parts return s.parts
} }
// Set parses the map (via json)
func (s *StringMapFlag) Set(value string) error { func (s *StringMapFlag) Set(value string) error {
s.parts = map[string]string{} s.parts = map[string]string{}
err := json.Unmarshal([]byte(value), &s.parts) err := json.Unmarshal([]byte(value), &s.parts)

Loading…
Cancel
Save