adaptyteam / AdaptySDK-iOS

iOS SDK for growing mobile in-app purchases
https://docs.adapty.io/docs/quickstart
MIT License
368 stars 38 forks source link

Please extend Model Objects with CustomStringConvertible #6

Closed larryonoff closed 3 years ago

larryonoff commented 4 years ago

Please extend Model Objects with CustomStringConvertible to simplify debugging.

Now it prints e.g. <Adapty.PurchaserInfoModel: 0x2832cbd80>.

larryonoff commented 4 years ago

Just implemented it myself. Please check. I can make pull request from it.

// MARK: - PaywallModel

extension PaywallModel: CustomStringConvertible {
    public override var description: String {
        let keysAndValues: [String: Any] = [
            "developerId": developerId,
            "variationId": variationId,
            "revision": revision,
            "isPromo": isPromo,
            "products": products,
            "visualPaywall": visualPaywall,
            "customPayload": customPayload
        ].compactMapValues { $0 }

        return keysAndValues
            .map { "\($0.key): \($0.value)" }
            .joined(separator: ", ")
    }
}

// MARK: - ProductModel

extension ProductModel: CustomStringConvertible {
    public override var description: String {
        let keysAndValues: [String: Any] = [
            "vendorProductId": vendorProductId,
            "introductoryOfferEligibility": introductoryOfferEligibility,
            "promotionalOfferEligibility": promotionalOfferEligibility,
            "promotionalOfferId": promotionalOfferId,
            "localizedDescription": localizedDescription,
            "localizedTitle": localizedTitle,
            "price": price,
            "currencyCode": currencyCode,
            "currencySymbol": currencySymbol,
            "regionCode": regionCode,
            "subscriptionPeriod": subscriptionPeriod,
            "introductoryDiscount": introductoryDiscount,
            "subscriptionGroupIdentifier": subscriptionGroupIdentifier,
            "discounts": discounts,
            "localizedPrice": localizedPrice,
            "discounts": discounts,
            "localizedSubscriptionPeriod": localizedSubscriptionPeriod
        ].compactMapValues { $0 }

        return keysAndValues
            .map { "\($0.key): \($0.value)" }
            .joined(separator: ", ")
    }
}

extension ProductModel.PeriodUnit: CustomStringConvertible {
    public var description: String {
        switch self {
        case .day:
            return "day"
        case .week:
            return "week"
        case .month:
            return "month"
        case .year:
            return "year"
        case .unknown:
            return "unknown"
        }
    }
}

extension ProductSubscriptionPeriodModel: CustomStringConvertible {
    public override var description: String {
        let keysAndValues: [String: Any] = [
            "unit": unit,
            "numberOfUnits": numberOfUnits
        ].compactMapValues { $0 }

        return keysAndValues
            .map { "\($0.key): \($0.value)" }
            .joined(separator: ", ")
    }
}

extension ProductDiscountModel: CustomStringConvertible {
    public override var description: String {
        let keysAndValues: [String: Any] = [
            "price": price,
            "identifier": identifier,
            "subscriptionPeriod": subscriptionPeriod,
            "numberOfPeriods": numberOfPeriods,
            "paymentMode": paymentMode,
            "localizedPrice": localizedPrice,
            "localizedSubscriptionPeriod": localizedSubscriptionPeriod,
            "localizedNumberOfPeriods": localizedNumberOfPeriods
        ].compactMapValues { $0 }

        return keysAndValues
            .map { "\($0.key): \($0.value)" }
            .joined(separator: ", ")
    }
}

extension ProductDiscountModel.PaymentMode: CustomStringConvertible {
    public var description: String {
        switch self {
        case .payAsYouGo:
            return "payAsYouGo"
        case .payUpFront:
            return "payUpFront"
        case .freeTrial:
            return "freeTrial"
        case .unknown:
            return "unknown"
        }
    }
}

// MARK: - PromoModel

extension PromoModel: CustomStringConvertible {
    public override var description: String {
        let keysAndValues: [String: Any] = [
            "promoType": promoType,
            "variationId": variationId,
            "expiresAt": expiresAt,
            "paywall": paywall
        ].compactMapValues { $0 }

        return keysAndValues
            .map { "\($0.key): \($0.value)" }
            .joined(separator: ", ")
    }
}

// MARK: - PurchaserInfoModel

extension PurchaserInfoModel: CustomStringConvertible {
    public override var description: String {
        let keysAndValues: [String: Any] = [
            "paidAccessLevels": paidAccessLevels,
            "subscriptions": subscriptions,
            "nonSubscriptions": nonSubscriptions
        ].compactMapValues { $0 }

        return keysAndValues
            .map { "\($0.key): \($0.value)" }
            .joined(separator: ", ")
    }
}

extension PaidAccessLevelsInfoModel: CustomStringConvertible {
    public override var description: String {
        let keysAndValues: [String: Any] = [
            "id": id,
            "isActive": isActive,
            "vendorProductId": vendorProductId,
            "store": store,
            "activatedAt": activatedAt,
            "renewedAt": renewedAt,
            "expiresAt": expiresAt,
            "isLifetime": isLifetime,
            "activeIntroductoryOfferType": activeIntroductoryOfferType,
            "activePromotionalOfferType": activePromotionalOfferType,
            "willRenew": willRenew,
            "isInGracePeriod": isInGracePeriod,
            "unsubscribedAt": unsubscribedAt,
            "billingIssueDetectedAt": billingIssueDetectedAt
        ].compactMapValues { $0 }

        return keysAndValues
            .map { "\($0.key): \($0.value)" }
            .joined(separator: ", ")
    }
}

extension SubscriptionsInfoModel: CustomStringConvertible {
    public override var description: String {
        let keysAndValues: [String: Any] = [
            "isActive": isActive,
            "vendorProductId": vendorProductId,
            "store": store,
            "activatedAt": activatedAt,
            "renewedAt": renewedAt,
            "expiresAt": expiresAt,
            "startsAt": startsAt,
            "isLifetime": isLifetime,
            "activeIntroductoryOfferType": activeIntroductoryOfferType,
            "activePromotionalOfferType": activePromotionalOfferType,
            "willRenew": willRenew,
            "isInGracePeriod": isInGracePeriod,
            "unsubscribedAt": unsubscribedAt,
            "billingIssueDetectedAt": billingIssueDetectedAt,
            "isSandbox": isSandbox,
            "billingIssueDetectedAt": billingIssueDetectedAt,
            "vendorTransactionId": vendorTransactionId,
            "vendorOriginalTransactionId": vendorOriginalTransactionId

        ].compactMapValues { $0 }

        return keysAndValues
            .map { "\($0.key): \($0.value)" }
            .joined(separator: ", ")
    }
}

extension NonSubscriptionsInfoModel: CustomStringConvertible {
    public override var description: String {
        let keysAndValues: [String: Any] = [
            "purchaseId": purchaseId,
            "vendorProductId": vendorProductId,
            "store": store,
            "purchasedAt": purchasedAt,
            "isOneTime": isOneTime,
            "isSandbox": isSandbox,
            "vendorTransactionId": vendorTransactionId,
            "vendorOriginalTransactionId": vendorOriginalTransactionId
        ].compactMapValues { $0 }

        return keysAndValues
            .map { "\($0.key): \($0.value)" }
            .joined(separator: ", ")
    }
}
Skifcha commented 4 years ago

@larryonoff sure, feel free to create PR. We'll review and add in upcoming release in case everything's fine.

larryonoff commented 3 years ago

@Skifcha Done. https://github.com/adaptyteam/AdaptySDK-iOS/pull/8

Skifcha commented 3 years ago

@larryonoff let's close this one then and continue in PR, do you mind?

larryonoff commented 3 years ago

@Skifcha sure!

larryonoff commented 3 years ago

closing issue in favor PR #8