Rename CSV option from comma to delimiter

See #5555
This commit is contained in:
Bjørn Erik Pedersen 2018-12-23 21:08:12 +01:00
parent 2efc1a64c3
commit ce06bdb16a
No known key found for this signature in database
GPG key ID: 330E6E2BD4859D8F
6 changed files with 14 additions and 15 deletions

View file

@ -35,8 +35,8 @@ The above prints `Hello Hugo`.
Unmarshal with CSV as input has some options you can set: Unmarshal with CSV as input has some options you can set:
comma delimiter
: The delmiter used, default is `,` : The delimiter used, default is `,`
comment comment
: The comment character ued in the CSV. If set, lines beginning with the comment character without preceding whitespace are ignored.: : The comment character ued in the CSV. If set, lines beginning with the comment character without preceding whitespace are ignored.:

View file

@ -343,12 +343,11 @@ Publish 2: {{ $cssPublish2.Permalink }}
b.WithTemplates("home.html", ` b.WithTemplates("home.html", `
{{ $toml := "slogan = \"Hugo Rocks!\"" | resources.FromString "slogan.toml" | transform.Unmarshal }} {{ $toml := "slogan = \"Hugo Rocks!\"" | resources.FromString "slogan.toml" | transform.Unmarshal }}
{{ $csv1 := "\"Hugo Rocks\",\"Hugo is Fast!\"" | resources.FromString "slogans.csv" | transform.Unmarshal }} {{ $csv1 := "\"Hugo Rocks\",\"Hugo is Fast!\"" | resources.FromString "slogans.csv" | transform.Unmarshal }}
{{ $csv2 := "a;b;c" | transform.Unmarshal (dict "comma" ";") }} {{ $csv2 := "a;b;c" | transform.Unmarshal (dict "delimiter" ";") }}
Slogan: {{ $toml.slogan }} Slogan: {{ $toml.slogan }}
CSV1: {{ $csv1 }} {{ len (index $csv1 0) }} CSV1: {{ $csv1 }} {{ len (index $csv1 0) }}
CSV2: {{ $csv2 }} CSV2: {{ $csv2 }}
`) `)
}, func(b *sitesBuilder) { }, func(b *sitesBuilder) {
b.AssertFileContent("public/index.html", b.AssertFileContent("public/index.html",

View file

@ -31,8 +31,8 @@ import (
// Decoder provides some configuration options for the decoders. // Decoder provides some configuration options for the decoders.
type Decoder struct { type Decoder struct {
// Comma is the field delimiter used in the CSV decoder. It defaults to ','. // Delimiter is the field delimiter used in the CSV decoder. It defaults to ','.
Comma rune Delimiter rune
// Comment, if not 0, is the comment character ued in the CSV decoder. Lines beginning with the // Comment, if not 0, is the comment character ued in the CSV decoder. Lines beginning with the
// Comment character without preceding whitespace are ignored. // Comment character without preceding whitespace are ignored.
@ -41,7 +41,7 @@ type Decoder struct {
// Default is a Decoder in its default configuration. // Default is a Decoder in its default configuration.
var Default = Decoder{ var Default = Decoder{
Comma: ',', Delimiter: ',',
} }
// UnmarshalToMap will unmarshall data in format f into a new map. This is // UnmarshalToMap will unmarshall data in format f into a new map. This is
@ -156,7 +156,7 @@ func (d Decoder) unmarshal(data []byte, f Format, v interface{}) error {
func (d Decoder) unmarshalCSV(data []byte, v interface{}) error { func (d Decoder) unmarshalCSV(data []byte, v interface{}) error {
r := csv.NewReader(bytes.NewReader(data)) r := csv.NewReader(bytes.NewReader(data))
r.Comma = d.Comma r.Comma = d.Delimiter
r.Comment = d.Comment r.Comment = d.Comment
records, err := r.ReadAll() records, err := r.ReadAll()

View file

@ -92,7 +92,7 @@ func FormatFromFrontMatterType(typ pageparser.ItemType) Format {
// in the given string. // in the given string.
// It return an empty string if no format could be detected. // It return an empty string if no format could be detected.
func (d Decoder) FormatFromContentString(data string) Format { func (d Decoder) FormatFromContentString(data string) Format {
csvIdx := strings.IndexRune(data, d.Comma) csvIdx := strings.IndexRune(data, d.Delimiter)
jsonIdx := strings.Index(data, "{") jsonIdx := strings.Index(data, "{")
yamlIdx := strings.Index(data, ":") yamlIdx := strings.Index(data, ":")
tomlIdx := strings.Index(data, "=") tomlIdx := strings.Index(data, "=")

View file

@ -116,12 +116,12 @@ func decodeDecoder(m map[string]interface{}) (metadecoders.Decoder, error) {
// mapstructure does not support string to rune conversion, so do that manually. // mapstructure does not support string to rune conversion, so do that manually.
// See https://github.com/mitchellh/mapstructure/issues/151 // See https://github.com/mitchellh/mapstructure/issues/151
for k, v := range m { for k, v := range m {
if strings.EqualFold(k, "Comma") { if strings.EqualFold(k, "Delimiter") {
r, err := stringToRune(v) r, err := stringToRune(v)
if err != nil { if err != nil {
return opts, err return opts, err
} }
opts.Comma = r opts.Delimiter = r
delete(m, k) delete(m, k)
} else if strings.EqualFold(k, "Comment") { } else if strings.EqualFold(k, "Comment") {

View file

@ -118,7 +118,7 @@ func TestUnmarshal(t *testing.T) {
assert.Equal(5, len(first)) assert.Equal(5, len(first))
assert.Equal("Ford", first[1]) assert.Equal("Ford", first[1])
}}, }},
{testContentResource{key: "r1", content: `a;b;c`, mime: media.CSVType}, map[string]interface{}{"comma": ";"}, func(r [][]string) { {testContentResource{key: "r1", content: `a;b;c`, mime: media.CSVType}, map[string]interface{}{"delimiter": ";"}, func(r [][]string) {
assert.Equal(r, [][]string{[]string{"a", "b", "c"}}) assert.Equal(r, [][]string{[]string{"a", "b", "c"}})
}}, }},
@ -126,13 +126,13 @@ func TestUnmarshal(t *testing.T) {
assert.Equal(r, [][]string{[]string{"a", "b", "c"}}) assert.Equal(r, [][]string{[]string{"a", "b", "c"}})
}}, }},
{"a;b;c", map[string]interface{}{"comma": ";"}, func(r [][]string) { {"a;b;c", map[string]interface{}{"delimiter": ";"}, func(r [][]string) {
assert.Equal(r, [][]string{[]string{"a", "b", "c"}}) assert.Equal(r, [][]string{[]string{"a", "b", "c"}})
}}, }},
{testContentResource{key: "r1", content: ` {testContentResource{key: "r1", content: `
% This is a comment % This is a comment
a;b;c`, mime: media.CSVType}, map[string]interface{}{"CommA": ";", "Comment": "%"}, func(r [][]string) { a;b;c`, mime: media.CSVType}, map[string]interface{}{"DElimiter": ";", "Comment": "%"}, func(r [][]string) {
assert.Equal(r, [][]string{[]string{"a", "b", "c"}}) assert.Equal(r, [][]string{[]string{"a", "b", "c"}})
}}, }},