...

Source file src/github.com/gobuffalo/flect/ordinalize.go

Documentation: github.com/gobuffalo/flect

     1  package flect
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  )
     7  
     8  // Ordinalize converts a number to an ordinal version
     9  //	42 = 42nd
    10  //	45 = 45th
    11  //	1 = 1st
    12  func Ordinalize(s string) string {
    13  	return New(s).Ordinalize().String()
    14  }
    15  
    16  // Ordinalize converts a number to an ordinal version
    17  //	42 = 42nd
    18  //	45 = 45th
    19  //	1 = 1st
    20  func (i Ident) Ordinalize() Ident {
    21  	number, err := strconv.Atoi(i.Original)
    22  	if err != nil {
    23  		return i
    24  	}
    25  	var s string
    26  	switch abs(number) % 100 {
    27  	case 11, 12, 13:
    28  		s = fmt.Sprintf("%dth", number)
    29  	default:
    30  		switch abs(number) % 10 {
    31  		case 1:
    32  			s = fmt.Sprintf("%dst", number)
    33  		case 2:
    34  			s = fmt.Sprintf("%dnd", number)
    35  		case 3:
    36  			s = fmt.Sprintf("%drd", number)
    37  		}
    38  	}
    39  	if s != "" {
    40  		return New(s)
    41  	}
    42  	return New(fmt.Sprintf("%dth", number))
    43  }
    44  

View as plain text