Skip to content

Commit

Permalink
Feat: prepare filter parameters in BeersRequest
Browse files Browse the repository at this point in the history
  • Loading branch information
Oni-zerone committed Mar 2, 2019
1 parent 5596b06 commit d236105
Show file tree
Hide file tree
Showing 6 changed files with 83 additions and 54 deletions.
2 changes: 1 addition & 1 deletion Example/Pods/Pods.xcodeproj/project.pbxproj

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

36 changes: 30 additions & 6 deletions PunkAPI/Classes/Request/BeersRequest.swift
Expand Up @@ -7,19 +7,43 @@

import UIKit

class BeersRequest {
public struct BeersRequest {

var page: Int

init(page: Int = 0) {
public var page: Int
public var filter: [BeersRequest.Parameter]

public init(filter:[BeersRequest.Parameter] = [], page: Int = 0) {
self.filter = filter
self.page = page
}

}

extension BeersRequest: Request {

var path: String {
public var path: String {
return "beers"
}

public var parameters: [String: Any]? {

if var filter = filterParameters {
filter["page"] = page
return filter
}
return ["page": page]
}
}

extension BeersRequest {

var filterParameters: [String: Any]? {

if filter.isEmpty { return nil }

return filter.map { parameter -> RequestParameter in
return parameter.parameter
}.reduce(into: [:], { (result, parameter) in
result[parameter.key] = parameter.value
})
}
}
68 changes: 36 additions & 32 deletions PunkAPI/Classes/Request/Parameter/BeersRequestParameter.swift
Expand Up @@ -9,7 +9,7 @@ import Foundation

extension BeersRequest {

public enum Parameter {
public enum Parameter {

case abv(condition: Condition, value: Float)
case ibu(condition: Condition, value: Float)
Expand All @@ -19,41 +19,45 @@ extension BeersRequest {
case yeast(value: String)

case brewed(condition: Condition, value: Date)

case hops(value: String)
case hops(value: String)
case malt(value: String)
case food(value: String)

case ids(value: [Int])
}
}

extension BeersRequest.Parameter {

case ids(value: [Int])

internal var parameter: RequestParameter {
switch self {
case let .abv(condition, value):
return FloatParameter(key: "abv", condition: condition, value: value)
case let .ibu(condition, value):
return FloatParameter(key: "ibu", condition: condition, value: value)
case let .ebc(condition, value):
return FloatParameter(key: "ebc", condition: condition, value: value)

case let .beerName(value):
return StringParameter(key: "beer_name", value: value)
case let .yeast(value):
return StringParameter(key: "yeast", value: value)

case let .brewed(condition, value):
return DateParameter(type: "brewed", condition: condition, dateValue: value)

case let .hops(value):
return StringParameter(key: "hops", value: value)
case let .malt(value):
return StringParameter(key: "malt", value: value)
case let .food(value):
return StringParameter(key: "food", value: value)

case let .ids(value):
let ids = value.map { "\($0)" }.reduce("", { $0.isEmpty ? $1 : $0 + "|" + $1 })
return StringParameter(key: "ids", value: ids)
}
internal var parameter: RequestParameter {
switch self {
case let .abv(condition, value):
return FloatParameter(key: "abv", condition: condition, value: value)
case let .ibu(condition, value):
return FloatParameter(key: "ibu", condition: condition, value: value)
case let .ebc(condition, value):
return FloatParameter(key: "ebc", condition: condition, value: value)

case let .beerName(value):
return StringParameter(key: "beer_name", value: value)
case let .yeast(value):
return StringParameter(key: "yeast", value: value)

case let .brewed(condition, value):
return DateParameter(type: "brewed", condition: condition, dateValue: value)

case let .hops(value):
return StringParameter(key: "hops", value: value)
case let .malt(value):
return StringParameter(key: "malt", value: value)
case let .food(value):
return StringParameter(key: "food", value: value)

case let .ids(value):
let ids = value.map { "\($0)" }.reduce("", { $0.isEmpty ? $1 : $0 + "|" + $1 })
return StringParameter(key: "ids", value: ids)
}
}
}
2 changes: 1 addition & 1 deletion PunkAPI/Classes/Request/Parameter/DateParameter.swift
Expand Up @@ -20,7 +20,7 @@ struct DateParameter: RequestParameter {
var dateValue: Date

var key: String {
return "\(type)_\(condition.literal)"
return "\(type)_\(condition.time)"
}

var value: Any {
Expand Down
2 changes: 1 addition & 1 deletion PunkAPI/Classes/Request/Parameter/FloatParameter.swift
Expand Up @@ -18,7 +18,7 @@ struct FloatParameter: RequestParameter {
self.value = value
}
var key: String {
return "\(type)_\(condition.literal)"
return "\(type)_\(condition.dimension)"
}

}
27 changes: 14 additions & 13 deletions PunkAPI/Classes/Request/Parameter/RequestParameter.swift
Expand Up @@ -13,23 +13,24 @@ protocol RequestParameter {
var value: Any { get }
}

extension Array where Element: RequestParameter {

var parameters: [String: Any] {
return self.reduce(into: [:], { (result, parameter) in
result[parameter.key] = parameter.value
})
}
public enum Condition {
case more
case less
}

enum Condition {
case greater
case lower
extension Condition {

var literal: String {
var dimension: String {
switch self {
case .more: return "gt"
case .less: return "lt"
}
}

var time: String {
switch self {
case .greater: return "gt"
case .lower: return "lt"
case .more: return "after"
case .less: return "before"
}
}
}

0 comments on commit d236105

Please sign in to comment.