Skip to content

Commit b4bdbf3

Browse files
committed
Moved the priceFormattingRuleSets from new Config struct to the existing UIConfig
1 parent a8cc230 commit b4bdbf3

File tree

12 files changed

+102
-106
lines changed

12 files changed

+102
-106
lines changed

RevenueCatUI/Templates/V2/Previews/PreviewMock.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ enum PreviewUIConfig {
6464
variableConfig: .init(
6565
variableCompatibilityMap: [:],
6666
functionCompatibilityMap: [:]
67-
)
67+
),
68+
priceFormattingRuleSets: [:]
6869
)
6970
}
7071

@@ -239,7 +240,8 @@ enum PreviewMock {
239240
variableConfig: .init(
240241
variableCompatibilityMap: [:],
241242
functionCompatibilityMap: [:]
242-
)
243+
),
244+
priceFormattingRuleSets: [:]
243245
)
244246

245247
}

RevenueCatUI/Templates/V2/Previews/TemplateComponentsViewPreviews/ButtonWithFooterPreview.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,8 @@ private enum ButtonWithSheetPreview {
423423
variableConfig: .init(
424424
variableCompatibilityMap: [:],
425425
functionCompatibilityMap: [:]
426-
)
426+
),
427+
priceFormattingRuleSets: [:]
427428
),
428429
data: data
429430
)

RevenueCatUI/Templates/V2/Previews/TemplateComponentsViewPreviews/Template1Preview.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,8 @@ private enum Template1Preview {
164164
variableConfig: .init(
165165
variableCompatibilityMap: [:],
166166
functionCompatibilityMap: [:]
167-
)
167+
),
168+
priceFormattingRuleSets: [:]
168169
),
169170
data: data
170171
)

Sources/Networking/Responses/OfferingsResponse.swift

Lines changed: 0 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -54,70 +54,6 @@ struct OfferingsResponse {
5454
let placements: Placements?
5555
let targeting: Targeting?
5656
let uiConfig: UIConfig?
57-
let config: Config?
58-
59-
public struct Config {
60-
61-
@DefaultDecodable.EmptyDictionary
62-
var priceFormattingRuleSets: [
63-
// storefront country code -> ruleset
64-
String: PriceFormattingRuleSet
65-
]
66-
67-
}
68-
}
69-
70-
/*
71-
Contains a set of rules that will be used when formatting a price
72-
Currrently only supports overriding the currencySymbol per currency
73-
*/
74-
struct PriceFormattingRuleSet: Sendable {
75-
76-
// currencyCode: CurrencySymbolOverride
77-
private var currencySymbolOverrides: [String: CurrencySymbolOverride]
78-
79-
public init(currencySymbolOverrides: [String : CurrencySymbolOverride]) {
80-
self.currencySymbolOverrides = currencySymbolOverrides
81-
}
82-
83-
public func currencySymbolOverride(
84-
currencyCode: String
85-
) -> CurrencySymbolOverride? {
86-
return self.currencySymbolOverrides[currencyCode]
87-
}
88-
89-
/*
90-
Contains a set of currencySymbol overrides for different pluralization rules
91-
*/
92-
public struct CurrencySymbolOverride: Sendable {
93-
let zero: String
94-
let one: String
95-
let two: String
96-
let few: String
97-
let many: String
98-
let other: String
99-
100-
func value(for rule: PluralRule) -> String {
101-
switch rule {
102-
case .zero:
103-
return self.zero
104-
case .one:
105-
return self.one
106-
case .two:
107-
return self.two
108-
case .few:
109-
return self.few
110-
case .many:
111-
return self.many
112-
case .other:
113-
return self.other
114-
}
115-
}
116-
117-
public enum PluralRule {
118-
case zero, one, two, few, many, other
119-
}
120-
}
12157
}
12258

12359
extension OfferingsResponse {
@@ -147,8 +83,5 @@ extension OfferingsResponse.Offering: Codable, Equatable {}
14783
extension OfferingsResponse.Placements: Codable, Equatable {}
14884
extension OfferingsResponse.Targeting: Codable, Equatable {}
14985
extension OfferingsResponse: Codable, Equatable {}
150-
extension OfferingsResponse.Config: Codable, Equatable {}
151-
extension PriceFormattingRuleSet: Codable, Equatable {}
152-
extension PriceFormattingRuleSet.CurrencySymbolOverride: Codable, Equatable {}
15386

15487
extension OfferingsResponse: HTTPResponseBody {}

Sources/Networking/Responses/RevenueCatUI/UIConfig.swift

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,21 +115,93 @@ public struct UIConfig: Codable, Equatable, Sendable {
115115
public var app: AppConfig
116116
public var localizations: [String: [String: String]]
117117
public var variableConfig: VariableConfig
118+
119+
@DefaultDecodable.EmptyDictionary
120+
var priceFormattingRuleSets: [
121+
// storefront country code -> ruleset
122+
String: PriceFormattingRuleSet
123+
]
118124

119125
public init(app: AppConfig,
120126
localizations: [String: [String: String]],
121-
variableConfig: VariableConfig) {
127+
variableConfig: VariableConfig,
128+
priceFormattingRuleSets: [String: PriceFormattingRuleSet]) {
122129
self.app = app
123130
self.localizations = localizations
124131
self.variableConfig = variableConfig
132+
self.priceFormattingRuleSets = priceFormattingRuleSets
125133
}
126134

127135
}
128136

129137
#else
130138

131139
public struct UIConfig: Codable, Equatable, Sendable {
132-
140+
@DefaultDecodable.EmptyDictionary
141+
var priceFormattingRuleSets: [
142+
// storefront country code -> ruleset
143+
String: PriceFormattingRuleSet
144+
]
145+
146+
public init(priceFormattingRuleSets: [String: PriceFormattingRuleSet]) {
147+
self.priceFormattingRuleSets = priceFormattingRuleSets
148+
}
133149
}
134150

135151
#endif
152+
153+
/*
154+
Contains a set of rules that will be used when formatting a price
155+
Currrently only supports overriding the currencySymbol per currency
156+
*/
157+
public struct PriceFormattingRuleSet: Sendable {
158+
159+
// currencyCode: CurrencySymbolOverride
160+
private var currencySymbolOverrides: [String: CurrencySymbolOverride]
161+
162+
init(currencySymbolOverrides: [String : CurrencySymbolOverride]) {
163+
self.currencySymbolOverrides = currencySymbolOverrides
164+
}
165+
166+
func currencySymbolOverride(
167+
currencyCode: String
168+
) -> CurrencySymbolOverride? {
169+
return self.currencySymbolOverrides[currencyCode]
170+
}
171+
172+
/*
173+
Contains a set of currencySymbol overrides for different pluralization rules
174+
*/
175+
struct CurrencySymbolOverride: Sendable {
176+
let zero: String
177+
let one: String
178+
let two: String
179+
let few: String
180+
let many: String
181+
let other: String
182+
183+
func value(for rule: PluralRule) -> String {
184+
switch rule {
185+
case .zero:
186+
return self.zero
187+
case .one:
188+
return self.one
189+
case .two:
190+
return self.two
191+
case .few:
192+
return self.few
193+
case .many:
194+
return self.many
195+
case .other:
196+
return self.other
197+
}
198+
}
199+
200+
public enum PluralRule {
201+
case zero, one, two, few, many, other
202+
}
203+
}
204+
}
205+
206+
extension PriceFormattingRuleSet: Codable, Equatable {}
207+
extension PriceFormattingRuleSet.CurrencySymbolOverride: Codable, Equatable {}

Sources/Purchasing/Purchases/Purchases.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ public typealias StartPurchaseBlock = (@escaping PurchaseCompletedBlock) -> Void
399399
if Self.isConfigured, let offeringsResponse = Self.shared.cachedOfferings?.response,
400400
let storeFrontCountryCode = systemInfo.storefront?.countryCode
401401
{
402-
priceFormattingRuleSet = offeringsResponse.config?.priceFormattingRuleSets[storeFrontCountryCode]
402+
priceFormattingRuleSet = offeringsResponse.uiConfig?.priceFormattingRuleSets[storeFrontCountryCode]
403403
}
404404

405405
return priceFormattingRuleSet

Tests/StoreKitUnitTests/OfferingsManagerStoreKitTests.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,7 @@ private extension OfferingsManagerStoreKitTests {
109109
],
110110
placements: nil,
111111
targeting: nil,
112-
uiConfig: nil,
113-
config: nil
112+
uiConfig: nil
114113
)
115114
}
116115

Tests/UnitTests/Caching/DeviceCacheTests.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -853,7 +853,7 @@ private extension DeviceCacheTests {
853853
offerings: [offeringsData],
854854
placements: nil,
855855
targeting: nil,
856-
uiConfig: nil, config: nil)
856+
uiConfig: nil)
857857
)
858858
}
859859

@@ -871,8 +871,7 @@ private extension Offerings {
871871
offerings: [],
872872
placements: nil,
873873
targeting: nil,
874-
uiConfig: nil,
875-
config: nil
874+
uiConfig: nil
876875
)
877876
)
878877

Tests/UnitTests/Misc/PurchasesDiagnosticsTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class PurchasesDiagnosticsTests: TestCase {
4343
offerings: [],
4444
placements: nil,
4545
targeting: nil,
46-
uiConfig: nil, config: nil))
46+
uiConfig: nil))
4747
)
4848
}
4949

Tests/UnitTests/Mocks/MockOfferingsFactory.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class MockOfferingsFactory: OfferingsFactory {
2323
offerings: [],
2424
placements: nil,
2525
targeting: nil,
26-
uiConfig: nil, config: nil))
26+
uiConfig: nil))
2727
}
2828
if nilOfferings {
2929
return nil
@@ -55,7 +55,7 @@ class MockOfferingsFactory: OfferingsFactory {
5555
packages: [
5656
.init(identifier: "", platformProductIdentifier: "$rc_monthly", webCheckoutUrl: nil)
5757
], webCheckoutUrl: nil)
58-
], placements: nil, targeting: nil, uiConfig: nil, config: nil)
58+
], placements: nil, targeting: nil, uiConfig: nil)
5959

6060
)
6161
}
@@ -78,8 +78,7 @@ extension OfferingsResponse {
7878
],
7979
placements: nil,
8080
targeting: nil,
81-
uiConfig: nil,
82-
config: nil
81+
uiConfig: nil
8382
)
8483

8584
}

0 commit comments

Comments
 (0)