Skip to content

Commit 0c1cdd3

Browse files
author
Clément Le Provost
committed
Merge branch 'feat/exactOnSingleWordQuery'
2 parents fe3b659 + 15ef8a6 commit 0c1cdd3

File tree

3 files changed

+124
-0
lines changed

3 files changed

+124
-0
lines changed

ChangeLog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ Change Log
77
corresponding property had to be degraded from `Bool?` to `AnyObject?`; as a consequence, the getter suffers from an
88
incompatible change (but not the setter).
99
- (#79) Support `aroundRadius=all` in query parameters.
10+
- (#76) Support the `exactOnSingleWordQuery` query parameter
11+
- (#76) Support the `alternativesAsExact` query parameter
1012

1113

1214
## 3.2.1 (2016-05-27)

Source/Query.swift

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,79 @@ public func ==(lhs: LatLng, rhs: LatLng) -> Bool {
459459
}
460460
}
461461

462+
/// This parameter control how the exact ranking criterion is computed when the query contains one word.
463+
@objc public var exactOnSingleWordQuery: String? {
464+
get { return exactOnSingleWordQuery_?.rawValue }
465+
set { exactOnSingleWordQuery_ = newValue == nil ? nil : ExactOnSingleWordQuery(rawValue: newValue!) }
466+
}
467+
public enum ExactOnSingleWordQuery: String {
468+
/// No exact on single word query.
469+
case None = "none"
470+
/// Exact set to 1 if the query word is found in the record. The query word needs to have at least 3 chars and
471+
/// not be part of our stop words dictionary.
472+
case Word = "word"
473+
/// (Default) Exact set to 1 if there is an attribute containing a string equals to the query.
474+
case Attribute = "attribute"
475+
}
476+
public var exactOnSingleWordQuery_: ExactOnSingleWordQuery? {
477+
get {
478+
if let value = get("exactOnSingleWordQuery") {
479+
return ExactOnSingleWordQuery(rawValue: value)
480+
} else {
481+
return nil
482+
}
483+
}
484+
set {
485+
set("exactOnSingleWordQuery", value: newValue?.rawValue)
486+
}
487+
}
488+
489+
/// Specify the list of approximation that should be considered as an exact match in the ranking formula.
490+
///
491+
/// - `ignorePlurals`: alternative word added by the ignore plurals feature
492+
/// - `singleWordSynonym`: single word synonym (For example “NY” = “NYC”)
493+
/// - `multiWordsSynonym`: synonym over multiple words (For example “NY” = “New York”)
494+
///
495+
/// The default value is `ignorePlurals,singleWordSynonym`.
496+
///
497+
@objc public var alternativesAsExact: [String]? {
498+
get { return Query.parseStringArray(get("alternativesAsExact")) }
499+
set { set("alternativesAsExact", value: newValue?.joinWithSeparator(",")) }
500+
}
501+
public enum AlternativesAsExact: String {
502+
/// Alternative word added by the ignore plurals feature.
503+
case IgnorePlurals = "ignorePlurals"
504+
/// Single word synonym (For example “NY” = “NYC”).
505+
case SingleWordSynonym = "singleWordSynonym"
506+
/// Synonym over multiple words (For example “NY” = “New York”).
507+
case MultiWordsSynonym = "multiWordsSynonym"
508+
}
509+
public var alternativesAsExact_: [AlternativesAsExact]? {
510+
get {
511+
if let rawValues = alternativesAsExact {
512+
var values = [AlternativesAsExact]()
513+
for rawValue in rawValues {
514+
if let value = AlternativesAsExact(rawValue: rawValue) {
515+
values.append(value)
516+
}
517+
}
518+
return values
519+
} else {
520+
return nil
521+
}
522+
}
523+
set {
524+
var rawValues : [String]?
525+
if newValue != nil {
526+
rawValues = []
527+
for value in newValue! {
528+
rawValues?.append(value.rawValue)
529+
}
530+
}
531+
alternativesAsExact = rawValues
532+
}
533+
}
534+
462535
// MARK: Pagination parameters
463536

464537
/// Pagination parameter used to select the page to retrieve. Page is zero-based and defaults to 0. Thus, to

Tests/QueryTests.swift

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -659,4 +659,53 @@ class QueryTests: XCTestCase {
659659
XCTAssertEqual(query2.filters, VALUE)
660660
}
661661

662+
func test_exactOnSingleWordQuery() {
663+
let query1 = Query()
664+
XCTAssertNil(query1.exactOnSingleWordQuery_)
665+
XCTAssertNil(query1.exactOnSingleWordQuery)
666+
667+
let ALL_VALUES = [Query.ExactOnSingleWordQuery.None, Query.ExactOnSingleWordQuery.Word, Query.ExactOnSingleWordQuery.Attribute]
668+
for value in ALL_VALUES {
669+
query1.exactOnSingleWordQuery_ = value
670+
XCTAssertEqual(query1.exactOnSingleWordQuery_, value)
671+
XCTAssertEqual(query1.exactOnSingleWordQuery, value.rawValue)
672+
XCTAssertEqual(query1["exactOnSingleWordQuery"], value.rawValue)
673+
let query2 = Query.parse(query1.build())
674+
XCTAssertEqual(query2.exactOnSingleWordQuery_, value)
675+
676+
query1.exactOnSingleWordQuery = value.rawValue
677+
XCTAssertEqual(query1.exactOnSingleWordQuery_, value)
678+
XCTAssertEqual(query1.exactOnSingleWordQuery, value.rawValue)
679+
XCTAssertEqual(query1["exactOnSingleWordQuery"], value.rawValue)
680+
}
681+
682+
query1["exactOnSingleWordQuery"] = "invalid"
683+
XCTAssertNil(query1.exactOnSingleWordQuery_)
684+
XCTAssertNil(query1.exactOnSingleWordQuery)
685+
686+
query1.exactOnSingleWordQuery = "invalid"
687+
XCTAssertNil(query1["exactOnSingleWordQuery"])
688+
XCTAssertNil(query1.exactOnSingleWordQuery_)
689+
XCTAssertNil(query1.exactOnSingleWordQuery)
690+
}
691+
692+
func test_alternativesAsExact() {
693+
let query1 = Query()
694+
XCTAssertNil(query1.alternativesAsExact_)
695+
XCTAssertNil(query1.alternativesAsExact)
696+
697+
let VALUES = [Query.AlternativesAsExact.IgnorePlurals, Query.AlternativesAsExact.SingleWordSynonym, Query.AlternativesAsExact.MultiWordsSynonym]
698+
let RAW_VALUES = ["ignorePlurals", "singleWordSynonym", "multiWordsSynonym"]
699+
query1.alternativesAsExact_ = VALUES
700+
XCTAssertEqual(query1.alternativesAsExact_!, VALUES)
701+
XCTAssertEqual(query1.alternativesAsExact!, RAW_VALUES)
702+
XCTAssertEqual(query1["alternativesAsExact"], RAW_VALUES.joinWithSeparator(","))
703+
let query2 = Query.parse(query1.build())
704+
XCTAssertEqual(query2.alternativesAsExact_!, VALUES)
705+
706+
query1.alternativesAsExact = RAW_VALUES
707+
XCTAssertEqual(query1.alternativesAsExact_!, VALUES)
708+
XCTAssertEqual(query1.alternativesAsExact!, RAW_VALUES)
709+
XCTAssertEqual(query1["alternativesAsExact"], RAW_VALUES.joinWithSeparator(","))
710+
}
662711
}

0 commit comments

Comments
 (0)