mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 21:52:25 -06:00 
			
		
		
		
	* Add Swagger spec test script * Fix Swagger spec errors not related to statuses with polls * Add API tests that post a status with a poll * Fix creating a status with a poll from form params * Fix Swagger spec errors related to statuses with polls (this is the last error) * Fix Swagger spec warnings not related to unused definitions * Suppress a duplicate list update params definition that was somehow causing wrong param names * Add Swagger test to CI - updates Drone config - vendorizes go-swagger - fixes a file extension issue that caused the test script to generate JSON instead of YAML with the vendorized version * Put `Sample: ` on its own line everywhere * Remove unused id param from emojiCategoriesGet * Add 5 more pairs of profile fields to account update API Swagger * Remove Swagger prefix from dummy fields It makes the generated code look weird * Manually annotate params for statusCreate operation * Fix all remaining Swagger spec warnings - Change some models into operation parameters - Ignore models that already correspond to manually documented operation parameters but can't be trivially changed (those with file fields) * Documented that creating a status with scheduled_at isn't implemented yet * sign drone.yml * Fix filter API Swagger errors * fixup! Fix filter API Swagger errors --------- Co-authored-by: tobi <tobi.smethurst@protonmail.com>
		
			
				
	
	
		
			240 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			240 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
Copyright 2014 Alexander Okoli
 | 
						|
 | 
						|
Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
you may not use this file except in compliance with the License.
 | 
						|
You may obtain a copy of the License at
 | 
						|
 | 
						|
    http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 | 
						|
Unless required by applicable law or agreed to in writing, software
 | 
						|
distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
See the License for the specific language governing permissions and
 | 
						|
limitations under the License.
 | 
						|
*/
 | 
						|
 | 
						|
package goutils
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"fmt"
 | 
						|
	"strings"
 | 
						|
	"unicode"
 | 
						|
)
 | 
						|
 | 
						|
// Typically returned by functions where a searched item cannot be found
 | 
						|
const INDEX_NOT_FOUND = -1
 | 
						|
 | 
						|
/*
 | 
						|
Abbreviate abbreviates a string using ellipses. This will turn  the string "Now is the time for all good men" into "Now is the time for..."
 | 
						|
 | 
						|
Specifically, the algorithm is as follows:
 | 
						|
 | 
						|
    - If str is less than maxWidth characters long, return it.
 | 
						|
    - Else abbreviate it to (str[0:maxWidth - 3] + "...").
 | 
						|
    - If maxWidth is less than 4, return an illegal argument error.
 | 
						|
    - In no case will it return a string of length greater than maxWidth.
 | 
						|
 | 
						|
Parameters:
 | 
						|
    str -  the string to check
 | 
						|
    maxWidth - maximum length of result string, must be at least 4
 | 
						|
 | 
						|
Returns:
 | 
						|
    string - abbreviated string
 | 
						|
    error - if the width is too small
 | 
						|
*/
 | 
						|
func Abbreviate(str string, maxWidth int) (string, error) {
 | 
						|
	return AbbreviateFull(str, 0, maxWidth)
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
AbbreviateFull abbreviates a string using ellipses. This will turn the string "Now is the time for all good men" into "...is the time for..."
 | 
						|
This function works like Abbreviate(string, int), but allows you to specify a "left edge" offset. Note that this left edge is not
 | 
						|
necessarily going to be the leftmost character in the result, or the first character following the ellipses, but it will appear
 | 
						|
somewhere in the result.
 | 
						|
In no case will it return a string of length greater than maxWidth.
 | 
						|
 | 
						|
Parameters:
 | 
						|
    str - the string to check
 | 
						|
    offset - left edge of source string
 | 
						|
    maxWidth - maximum length of result string, must be at least 4
 | 
						|
 | 
						|
Returns:
 | 
						|
    string - abbreviated string
 | 
						|
    error - if the width is too small
 | 
						|
*/
 | 
						|
func AbbreviateFull(str string, offset int, maxWidth int) (string, error) {
 | 
						|
	if str == "" {
 | 
						|
		return "", nil
 | 
						|
	}
 | 
						|
	if maxWidth < 4 {
 | 
						|
		err := fmt.Errorf("stringutils illegal argument: Minimum abbreviation width is 4")
 | 
						|
		return "", err
 | 
						|
	}
 | 
						|
	if len(str) <= maxWidth {
 | 
						|
		return str, nil
 | 
						|
	}
 | 
						|
	if offset > len(str) {
 | 
						|
		offset = len(str)
 | 
						|
	}
 | 
						|
	if len(str)-offset < (maxWidth - 3) { // 15 - 5 < 10 - 3 =  10 < 7
 | 
						|
		offset = len(str) - (maxWidth - 3)
 | 
						|
	}
 | 
						|
	abrevMarker := "..."
 | 
						|
	if offset <= 4 {
 | 
						|
		return str[0:maxWidth-3] + abrevMarker, nil // str.substring(0, maxWidth - 3) + abrevMarker;
 | 
						|
	}
 | 
						|
	if maxWidth < 7 {
 | 
						|
		err := fmt.Errorf("stringutils illegal argument: Minimum abbreviation width with offset is 7")
 | 
						|
		return "", err
 | 
						|
	}
 | 
						|
	if (offset + maxWidth - 3) < len(str) { // 5 + (10-3) < 15 = 12 < 15
 | 
						|
		abrevStr, _ := Abbreviate(str[offset:len(str)], (maxWidth - 3))
 | 
						|
		return abrevMarker + abrevStr, nil // abrevMarker + abbreviate(str.substring(offset), maxWidth - 3);
 | 
						|
	}
 | 
						|
	return abrevMarker + str[(len(str)-(maxWidth-3)):len(str)], nil // abrevMarker + str.substring(str.length() - (maxWidth - 3));
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
DeleteWhiteSpace deletes all whitespaces from a string as defined by unicode.IsSpace(rune).
 | 
						|
It returns the string without whitespaces.
 | 
						|
 | 
						|
Parameter:
 | 
						|
    str - the string to delete whitespace from, may be nil
 | 
						|
 | 
						|
Returns:
 | 
						|
    the string without whitespaces
 | 
						|
*/
 | 
						|
func DeleteWhiteSpace(str string) string {
 | 
						|
	if str == "" {
 | 
						|
		return str
 | 
						|
	}
 | 
						|
	sz := len(str)
 | 
						|
	var chs bytes.Buffer
 | 
						|
	count := 0
 | 
						|
	for i := 0; i < sz; i++ {
 | 
						|
		ch := rune(str[i])
 | 
						|
		if !unicode.IsSpace(ch) {
 | 
						|
			chs.WriteRune(ch)
 | 
						|
			count++
 | 
						|
		}
 | 
						|
	}
 | 
						|
	if count == sz {
 | 
						|
		return str
 | 
						|
	}
 | 
						|
	return chs.String()
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
IndexOfDifference compares two strings, and returns the index at which the strings begin to differ.
 | 
						|
 | 
						|
Parameters:
 | 
						|
    str1 - the first string
 | 
						|
    str2 - the second string
 | 
						|
 | 
						|
Returns:
 | 
						|
    the index where str1 and str2 begin to differ; -1 if they are equal
 | 
						|
*/
 | 
						|
func IndexOfDifference(str1 string, str2 string) int {
 | 
						|
	if str1 == str2 {
 | 
						|
		return INDEX_NOT_FOUND
 | 
						|
	}
 | 
						|
	if IsEmpty(str1) || IsEmpty(str2) {
 | 
						|
		return 0
 | 
						|
	}
 | 
						|
	var i int
 | 
						|
	for i = 0; i < len(str1) && i < len(str2); i++ {
 | 
						|
		if rune(str1[i]) != rune(str2[i]) {
 | 
						|
			break
 | 
						|
		}
 | 
						|
	}
 | 
						|
	if i < len(str2) || i < len(str1) {
 | 
						|
		return i
 | 
						|
	}
 | 
						|
	return INDEX_NOT_FOUND
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
IsBlank checks if a string is whitespace or empty (""). Observe the following behavior:
 | 
						|
 | 
						|
    goutils.IsBlank("")        = true
 | 
						|
    goutils.IsBlank(" ")       = true
 | 
						|
    goutils.IsBlank("bob")     = false
 | 
						|
    goutils.IsBlank("  bob  ") = false
 | 
						|
 | 
						|
Parameter:
 | 
						|
    str - the string to check
 | 
						|
 | 
						|
Returns:
 | 
						|
    true - if the string is whitespace or empty ("")
 | 
						|
*/
 | 
						|
func IsBlank(str string) bool {
 | 
						|
	strLen := len(str)
 | 
						|
	if str == "" || strLen == 0 {
 | 
						|
		return true
 | 
						|
	}
 | 
						|
	for i := 0; i < strLen; i++ {
 | 
						|
		if unicode.IsSpace(rune(str[i])) == false {
 | 
						|
			return false
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return true
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
IndexOf returns the index of the first instance of sub in str, with the search beginning from the
 | 
						|
index start point specified. -1 is returned if sub is not present in str.
 | 
						|
 | 
						|
An empty string ("") will return -1 (INDEX_NOT_FOUND). A negative start position is treated as zero.
 | 
						|
A start position greater than the string length returns -1.
 | 
						|
 | 
						|
Parameters:
 | 
						|
    str - the string to check
 | 
						|
    sub - the substring to find
 | 
						|
    start - the start position; negative treated as zero
 | 
						|
 | 
						|
Returns:
 | 
						|
    the first index where the sub string was found  (always >= start)
 | 
						|
*/
 | 
						|
func IndexOf(str string, sub string, start int) int {
 | 
						|
 | 
						|
	if start < 0 {
 | 
						|
		start = 0
 | 
						|
	}
 | 
						|
 | 
						|
	if len(str) < start {
 | 
						|
		return INDEX_NOT_FOUND
 | 
						|
	}
 | 
						|
 | 
						|
	if IsEmpty(str) || IsEmpty(sub) {
 | 
						|
		return INDEX_NOT_FOUND
 | 
						|
	}
 | 
						|
 | 
						|
	partialIndex := strings.Index(str[start:len(str)], sub)
 | 
						|
	if partialIndex == -1 {
 | 
						|
		return INDEX_NOT_FOUND
 | 
						|
	}
 | 
						|
	return partialIndex + start
 | 
						|
}
 | 
						|
 | 
						|
// IsEmpty checks if a string is empty (""). Returns true if empty, and false otherwise.
 | 
						|
func IsEmpty(str string) bool {
 | 
						|
	return len(str) == 0
 | 
						|
}
 | 
						|
 | 
						|
// Returns either the passed in string, or if the string is empty, the value of defaultStr.
 | 
						|
func DefaultString(str string, defaultStr string) string {
 | 
						|
	if IsEmpty(str) {
 | 
						|
		return defaultStr
 | 
						|
	}
 | 
						|
	return str
 | 
						|
}
 | 
						|
 | 
						|
// Returns either the passed in string, or if the string is whitespace, empty (""), the value of defaultStr.
 | 
						|
func DefaultIfBlank(str string, defaultStr string) string {
 | 
						|
	if IsBlank(str) {
 | 
						|
		return defaultStr
 | 
						|
	}
 | 
						|
	return str
 | 
						|
}
 |