Skip to content

Commit cb4069d

Browse files
Feat/synonyms (#88)
* feat: add synonyms category * feat: add plan validations for synonyms * fix: category ordering * add: reusable index exists or not util * fix: func type * fix: export function Co-authored-by: Siddharth Kothari <sids.aquarius@gmail.com>
1 parent cd3458e commit cb4069d

11 files changed

Lines changed: 60 additions & 0 deletions

File tree

main.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ var (
6161
FeatureFunctions string
6262
// FeatureSearchRelevancy for testing
6363
FeatureSearchRelevancy string
64+
// FeatureSynonyms for testing
65+
FeatureSynonyms string
6466
)
6567

6668
func init() {
@@ -187,6 +189,9 @@ func main() {
187189
if FeatureSearchRelevancy != "" && FeatureSearchRelevancy == "true" {
188190
util.SetFeatureSearchRelevancy(true)
189191
}
192+
if FeatureSynonyms == "true" {
193+
util.SetFeatureSynonyms(true)
194+
}
190195

191196
// ES client instantiation
192197
// ES v7 and v6 clients

model/category/category.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ const (
3636
Functions
3737
ReactiveSearch
3838
SearchRelevancy
39+
Synonyms
3940
)
4041

4142
// String is an implementation of Stringer interface that returns the string representation of category.Categories.
@@ -58,6 +59,7 @@ func (c Category) String() string {
5859
"functions",
5960
"reactivesearch",
6061
"searchrelevancy",
62+
"synonyms",
6163
}[c]
6264
}
6365

@@ -103,6 +105,8 @@ func (c *Category) UnmarshalJSON(bytes []byte) error {
103105
*c = ReactiveSearch
104106
case SearchRelevancy.String():
105107
*c = SearchRelevancy
108+
case Synonyms.String():
109+
*c = Synonyms
106110
default:
107111
return fmt.Errorf("invalid category encountered: %v", category)
108112
}
@@ -147,6 +151,8 @@ func (c Category) MarshalJSON() ([]byte, error) {
147151
category = ReactiveSearch.String()
148152
case SearchRelevancy:
149153
category = SearchRelevancy.String()
154+
case Synonyms:
155+
category = Synonyms.String()
150156
default:
151157
return nil, fmt.Errorf("invalid category encountered: %v" + c.String())
152158
}

model/permission/defaults.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ var (
3030
category.Functions,
3131
category.ReactiveSearch,
3232
category.SearchRelevancy,
33+
category.Synonyms,
3334
}
3435

3536
defaultOps = []op.Operation{

model/permission/permission.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ type Limits struct {
7272
FunctionsLimit int64 `json:"functions_limit"`
7373
ReactiveSearchLimit int64 `json:"reactivesearch_limit"`
7474
SearchRelevancyLimit int64 `json:"searchrelevancy_limit"`
75+
SynonymsLimit int64 `json:"synonyms_limit"`
7576
}
7677

7778
// Options is a function type used to define a permission's properties.
@@ -474,6 +475,8 @@ func (p *Permission) GetLimitFor(c category.Category) (int64, error) {
474475
return p.Limits.ReactiveSearchLimit, nil
475476
case category.SearchRelevancy:
476477
return p.Limits.SearchRelevancyLimit, nil
478+
case category.Synonyms:
479+
return p.Limits.SynonymsLimit, nil
477480
default:
478481
return -1, fmt.Errorf(`we do not rate limit "%s" category`, c)
479482
}

model/user/defaults.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ var (
3030
category.ReactiveSearch,
3131
category.SearchRelevancy,
3232
category.Auth,
33+
category.Synonyms,
3334
}
3435

3536
defaultOps = []op.Operation{

plugins/auth/e2e_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ var adminCategories = []category.Category{
2929
category.Functions,
3030
category.ReactiveSearch,
3131
category.SearchRelevancy,
32+
category.Synonyms,
3233
}
3334

3435
var adminOps = []op.Operation{

plugins/permissions/e2e_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ var adminCategories = []category.Category{
3030
category.Functions,
3131
category.ReactiveSearch,
3232
category.SearchRelevancy,
33+
category.Synonyms,
3334
}
3435

3536
var adminOps = []op.Operation{

util/billing.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ type ClusterPlan struct {
7070
FeatureTemplates bool `json:"feature_templates"`
7171
FeatureFunctions bool `json:"feature_functions"`
7272
FeatureSearchRelevancy bool `json:"feature_search_relevancy"`
73+
FeatureSynonyms bool `json:"feature_synonyms"`
7374
Trial bool `json:"trial"`
7475
TrialValidity int64 `json:"trial_validity"`
7576
TierValidity int64 `json:"tier_validity"`
@@ -121,6 +122,7 @@ type ArcInstanceDetails struct {
121122
FeatureTemplates bool `json:"feature_templates"`
122123
FeatureFunctions bool `json:"feature_functions"`
123124
FeatureSearchRelevancy bool `json:"feature_search_relevancy"`
125+
FeatureSynonyms bool `json:"feature_synonyms"`
124126
}
125127

126128
// SetDefaultTier sets the default tier when billing is disabled
@@ -206,6 +208,7 @@ func getArcInstance(arcID string) (ArcInstance, error) {
206208
SetFeatureRules(arcInstanceByID.FeatureRules)
207209
SetFeatureFunctions(arcInstanceByID.FeatureFunctions)
208210
SetFeatureSearchRelevancy(arcInstanceByID.FeatureSearchRelevancy)
211+
SetFeatureSynonyms(arcInstanceByID.FeatureSynonyms)
209212
SetFeatureTemplates(arcInstanceByID.FeatureTemplates)
210213
} else {
211214
return arcInstance, errors.New("No valid instance found for the provided ARC_ID")
@@ -256,6 +259,7 @@ func getArcClusterInstance(clusterID string) (ArcInstance, error) {
256259
SetFeatureRules(arcInstanceDetails.FeatureRules)
257260
SetFeatureFunctions(arcInstanceDetails.FeatureFunctions)
258261
SetFeatureSearchRelevancy(arcInstanceDetails.FeatureSearchRelevancy)
262+
SetFeatureSynonyms(arcInstanceDetails.FeatureSynonyms)
259263
SetFeatureTemplates(arcInstanceDetails.FeatureTemplates)
260264
} else {
261265
return arcInstance, errors.New("No valid instance found for the provided CLUSTER_ID")
@@ -304,6 +308,7 @@ func getClusterPlan(clusterID string) (ClusterPlan, error) {
304308
SetFeatureRules(response.Plan.FeatureRules)
305309
SetFeatureFunctions(response.Plan.FeatureFunctions)
306310
SetFeatureSearchRelevancy(response.Plan.FeatureSearchRelevancy)
311+
SetFeatureSynonyms(response.Plan.FeatureSynonyms)
307312
SetFeatureTemplates(response.Plan.FeatureTemplates)
308313

309314
return clusterPlan, nil

util/billing_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ func TestBilling(t *testing.T) {
5252
SetFeatureSearchRelevancy(true)
5353
So(GetFeatureSearchRelevancy(), ShouldEqual, true)
5454
})
55+
Convey("Set FeatureSynonyms", func() {
56+
SetFeatureSynonyms(true)
57+
So(GetFeatureSynonyms(), ShouldEqual, true)
58+
})
5559
Convey("Validate TimeValidity: Positive Value", func() {
5660
// Set TimeValidity to a positive value
5761
var timeValidityMock = 1200000

util/feature.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,16 @@ func GetFeatureSearchRelevancy() bool {
7777
func SetFeatureSearchRelevancy(val bool) {
7878
featureSearchRelevancy = val
7979
}
80+
81+
// Feature synonyms
82+
var featureSynonyms bool
83+
84+
// GetFeatureSynonyms returns the featureSynonyms
85+
func GetFeatureSynonyms() bool {
86+
return featureSynonyms
87+
}
88+
89+
// SetFeatureSynonyms sets the featureSynonyms
90+
func SetFeatureSynonyms(val bool) {
91+
featureSynonyms = val
92+
}

0 commit comments

Comments
 (0)