Skip to content

Commit

Permalink
Fix concurrency for acronyms
Browse files Browse the repository at this point in the history
Closes #43
  • Loading branch information
iancoleman committed Jul 13, 2023
1 parent 6ce6fd7 commit 531aaa4
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 6 deletions.
11 changes: 7 additions & 4 deletions acronyms.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package strcase

var uppercaseAcronym = map[string]string{
"ID": "id",
}
import (
"sync"
)

var uppercaseAcronym = sync.Map{}
//"ID": "id",

// ConfigureAcronym allows you to add additional words which will be considered acronyms
func ConfigureAcronym(key, val string) {
uppercaseAcronym[key] = val
uppercaseAcronym.Store(key, val)
}
4 changes: 2 additions & 2 deletions camel.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ func toCamelInitCase(s string, initCase bool) string {
if s == "" {
return s
}
a, hasAcronym := uppercaseAcronym[s]
a, hasAcronym := uppercaseAcronym.Load(s)
if hasAcronym {
s = a
s = a.(string)
}

n := strings.Builder{}
Expand Down
46 changes: 46 additions & 0 deletions concurrency_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package strcase

import (
"testing"
)

func TestConcurrency(t *testing.T) {
for i := 0; i < 10000; i++ {
go doConvert()
}

}

func doConvert() {
var snakes = []string{"code", "exchange", "pe_ratio", "profit_margin", "updated_date"}
for _, v := range snakes {
_ = convertDatabaseNameToCamelCase(v)
}
}

func convertDatabaseNameToCamelCase(d string) (s string) {
ConfigureAcronym("price_book_mrq", "PriceBookMRQ")
ConfigureAcronym("pe_ratio", "PERatio")
ConfigureAcronym("peg_ratio", "PEGRatio")
ConfigureAcronym("eps_estimate_current_year", "EPSEstimateCurrentYear")
ConfigureAcronym("eps_estimate_next_year", "EPSEstimateNextYear")
ConfigureAcronym("eps_estimate_next_quarter", "EPSNextQuarter")
ConfigureAcronym("eps_estimate_current_quarter", "EPSEstimateCurrentQuarter")
ConfigureAcronym("ebitda", "EBITDA")
ConfigureAcronym("operating_margin_ttm", "OperatingMarginTTM")
ConfigureAcronym("return_on_assets_ttm", "ReturnOnAssetsTTM")
ConfigureAcronym("return_on_equity_ttm", "ReturnOnEquityTTM")
ConfigureAcronym("revenue_ttm", "RevenueTTM")
ConfigureAcronym("revenue_per_share_ttm", "RevenuePerShareTTM")
ConfigureAcronym("quarterly_revenue_growth_yoy", "QuarterlyRevenueGrowthYOY")
ConfigureAcronym("gross_profit_ttm", "GrossProfitTTM")
ConfigureAcronym("diluted_eps_ttm", "DilutedEpsTTM")
ConfigureAcronym("quarterly_earnings_growth_yoy", "QuarterlyEarningsGrowthYOY")
ConfigureAcronym("two_hundred_day_ma", "TwoHundredDayMA")
ConfigureAcronym("trailing_pe", "TrailingPE")
ConfigureAcronym("forward_pe", "ForwardPE")
ConfigureAcronym("price_sales_ttm", "PriceSalesTTM")
ConfigureAcronym("price_book_mrq", "PriceBookMRQ")
s = ToCamel(d)
return
}

0 comments on commit 531aaa4

Please sign in to comment.