Skip to content

Commit

Permalink
[master] - Release v2.0.0 馃帀
Browse files Browse the repository at this point in the history
  • Loading branch information
Daltron committed Jun 7, 2019
1 parent 68ae97d commit 41ff49b
Show file tree
Hide file tree
Showing 107 changed files with 8,334 additions and 11,524 deletions.
5 changes: 3 additions & 2 deletions AlamoRecord.podspec
@@ -1,7 +1,7 @@

Pod::Spec.new do |s|
s.name = 'AlamoRecord'
s.version = '1.4.0'
s.version = '2.0.0'
s.summary = 'An elegant Alamofire wrapper inspired by ActiveRecord.'
s.description = <<-DESC
AlamoRecord is a powerful yet simple framework that eliminates the often complex networking layer that exists between your networking framework and your application. AlamoRecord uses the power of AlamoFire, AlamofireObjectMapper and the concepts behind the ActiveRecord pattern to create a networking layer that makes interacting with your API easier than ever.
Expand All @@ -19,5 +19,6 @@ AlamoRecord is a powerful yet simple framework that eliminates the often complex
s.watchos.deployment_target = '3.0'

s.source_files = 'AlamoRecord/Classes/**/*'
s.dependency 'AlamofireObjectMapper', '5.1.0'
s.dependency 'Alamofire', '5.0.0-beta.6'

end
30 changes: 30 additions & 0 deletions AlamoRecord/Classes/AlamoRecordDecoder.swift
@@ -0,0 +1,30 @@
//
// AlamoRecordDecoder.swift
// AlamoRecord
//
// Created by Dalton Hinterscher on 6/6/19.
//

import Alamofire

class AlamoRecordDecoder: DataDecoder {

private let keyPath: String?

init(keyPath: String?) {
self.keyPath = keyPath
}

func decode<D>(_ type: D.Type, from data: Data) throws -> D where D : Decodable {
let decoder = JSONDecoder()
guard let keyPath = keyPath,
let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any],
let keyPathJson = json[keyPath] else {
return try decoder.decode(D.self, from: data)
}
let keyPathJsonData = try JSONSerialization.data(withJSONObject: keyPathJson, options: .prettyPrinted)
return try decoder.decode(D.self, from: keyPathJsonData)
}


}
45 changes: 20 additions & 25 deletions AlamoRecord/Classes/AlamoRecordError.swift
Expand Up @@ -15,38 +15,33 @@
THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import Foundation

import ObjectMapper

open class AlamoRecordError: NSError, Mappable {

override open var description: String {
guard let nsError = nsError else {
return "[AlamoRecordError] No description could be found for this error."
}
return "[AlamoRecordError] \(nsError.localizedDescription)"
}
open class AlamoRecordError: Error {

/// The error of the failed request
public var nsError: NSError?
public let error: Error?

public required init() {
super.init(domain: "", code: -1, userInfo: [:])
required public init(error: Error) {
self.error = error
}

required public init(nsError: NSError) {
super.init(domain: nsError.domain, code: nsError.code, userInfo: nsError.userInfo)
self.nsError = nsError
}

required public init?(map: Map) {
super.init(domain: "", code: -1, userInfo: [:])
mapping(map: map)
public required init(from decoder: Decoder) throws {
error = nil
}

}

extension AlamoRecordError: Codable {
open func encode(to encoder: Encoder) throws {}
}

extension AlamoRecordError: CustomStringConvertible {

required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
open var description: String {
guard let error = error else {
return "鉂楋笍 [AlamoRecordError] No description could be found for this error."
}
return "鉂楋笍 [AlamoRecordError] \(error.localizedDescription)"
}

open func mapping(map: Map) {}
}
122 changes: 52 additions & 70 deletions AlamoRecord/Classes/AlamoRecordObject.swift
Expand Up @@ -17,13 +17,11 @@
*/

import Alamofire
import AlamofireObjectMapper
import ObjectMapper

open class AlamoRecordObject<U: AlamoRecordURL, E: AlamoRecordError, IDType>: NSObject, Mappable {
open class AlamoRecordObject<U: AlamoRecordURL, E: AlamoRecordError, IDType: Codable>: Codable {

/// Key to encode/decode the id variable
private let idKey: String = "id"
/// The id of this instance. This should be a String or an Int.
public let id: IDType

/// The RequestManager that is tied to all instances of this class
open class var requestManager: RequestManager<U, E, IDType> {
Expand All @@ -35,9 +33,6 @@ open class AlamoRecordObject<U: AlamoRecordURL, E: AlamoRecordError, IDType>: NS
return type(of: self).requestManager
}

/// The id of this instance. This should be a String or an Int.
open var id: IDType!

/// The root of all instances of this class. This is used when making URL's that relate to a component of this class.
// Example: '/comment/id' --> '/\(Comment.root)/id'
open class var root: String {
Expand Down Expand Up @@ -95,37 +90,24 @@ open class AlamoRecordObject<U: AlamoRecordURL, E: AlamoRecordError, IDType>: NS
open var pluralKeyPath: String? {
return type(of: self).pluralKeyPath
}

public override init() {
super.init()
}

public required init?(map: Map) {
super.init()
mapping(map: map)
}

open func mapping(map: Map) {
id <- map["id"]
}

/**
Returns an array of all objects of this instance if the server supports it
- parameter parameters: The parameters. `nil` by default
- parameter encoding: The parameter encoding. `URLEncoding.default` by default
- parameter encoding: The parameter encoding. `JSONEncoding.default` by default
- parameter headers: The HTTP headers. `nil` by default
- parameter success: The block to execute if the request succeeds
- parameter failure: The block to execute if the request fails
*/
@discardableResult
open class func all<T: AlamoRecordObject>(parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: HTTPHeaders? = nil,
success: (([T]) -> Void)?,
failure: ((E) -> Void)?) -> DataRequest {
return requestManager.findArray(T.urlForAll(),
open class func all<O: AlamoRecordObject>(parameters: Parameters? = nil,
encoding: ParameterEncoding = JSONEncoding.default,
headers: HTTPHeaders? = nil,
success: (([O]) -> Void)?,
failure: ((E) -> Void)?) -> DataRequest {
return requestManager.findArray(O.urlForAll(),
parameters: parameters,
keyPath: T.pluralKeyPath,
keyPath: O.pluralKeyPath,
encoding: encoding,
headers: headers,
success: success,
Expand All @@ -135,17 +117,17 @@ open class AlamoRecordObject<U: AlamoRecordURL, E: AlamoRecordError, IDType>: NS
/**
Creates an object of this instance
- parameter parameters: The parameters. `nil` by default
- parameter encoding: The parameter encoding. `URLEncoding.default` by default
- parameter encoding: The parameter encoding. `JSONEncoding.default` by default
- parameter headers: The HTTP headers. `nil` by default
- parameter success: The block to execute if the request succeeds
- parameter failure: The block to execute if the request fails
*/
@discardableResult
open class func create<T: AlamoRecordObject>(parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: HTTPHeaders? = nil,
success: ((T) -> Void)?,
failure: ((E) -> Void)?) -> DataRequest {
open class func create<O: AlamoRecordObject>(parameters: Parameters? = nil,
encoding: ParameterEncoding = JSONEncoding.default,
headers: HTTPHeaders? = nil,
success: ((O) -> Void)?,
failure: ((E) -> Void)?) -> DataRequest {

return requestManager.createObject(parameters: parameters,
keyPath: keyPath,
Expand All @@ -158,14 +140,14 @@ open class AlamoRecordObject<U: AlamoRecordURL, E: AlamoRecordError, IDType>: NS
/**
Creates an object of this instance
- parameter parameters: The parameters. `nil` by default
- parameter encoding: The parameter encoding. `URLEncoding.default` by default
- parameter encoding: The parameter encoding. `JSONEncoding.default` by default
- parameter headers: The HTTP headers. `nil` by default
- parameter success: The block to execute if the request succeeds
- parameter failure: The block to execute if the request fails
*/
@discardableResult
open class func create(parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
encoding: ParameterEncoding = JSONEncoding.default,
headers: HTTPHeaders? = nil,
success: (() -> Void)?,
failure: ((E) -> Void)?) -> DataRequest {
Expand All @@ -182,18 +164,18 @@ open class AlamoRecordObject<U: AlamoRecordURL, E: AlamoRecordError, IDType>: NS
Finds an object of this instance based on the given id
- parameter id: The id of the object to find
- parameter parameters: The parameters. `nil` by default
- parameter encoding: The parameter encoding. `URLEncoding.default` by default
- parameter encoding: The parameter encoding. `JSONEncoding.default` by default
- parameter headers: The HTTP headers. `nil` by default
- parameter success: The block to execute if the request succeeds
- parameter failure: The block to execute if the request fails
*/
@discardableResult
open class func find<T: AlamoRecordObject>(id: IDType,
parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: HTTPHeaders? = nil,
success: ((T) -> Void)?,
failure: ((E) -> Void)?) -> DataRequest {
open class func find<O: AlamoRecordObject>(id: IDType,
parameters: Parameters? = nil,
encoding: ParameterEncoding = JSONEncoding.default,
headers: HTTPHeaders? = nil,
success: ((O) -> Void)?,
failure: ((E) -> Void)?) -> DataRequest {

return requestManager.findObject(id: id,
parameters: parameters,
Expand All @@ -207,19 +189,19 @@ open class AlamoRecordObject<U: AlamoRecordURL, E: AlamoRecordError, IDType>: NS
/**
Updates the object
- parameter parameters: The parameters. `nil` by default
- parameter encoding: The parameter encoding. `URLEncoding.default` by default
- parameter encoding: The parameter encoding. `JSONEncoding.default` by default
- parameter headers: The HTTP headers. `nil` by default
- parameter success: The block to execute if the request succeeds
- parameter failure: The block to execute if the request fails
*/
@discardableResult
open func update<T: AlamoRecordObject>(parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: HTTPHeaders? = nil,
success: ((T) -> Void)?,
failure: ((E) -> Void)?) -> DataRequest {
open func update<O: AlamoRecordObject>(parameters: Parameters? = nil,
encoding: ParameterEncoding = JSONEncoding.default,
headers: HTTPHeaders? = nil,
success: ((O) -> Void)?,
failure: ((E) -> Void)?) -> DataRequest {

return T.update(id: id,
return O.update(id: id,
parameters: parameters,
encoding: encoding,
headers: headers,
Expand All @@ -231,18 +213,18 @@ open class AlamoRecordObject<U: AlamoRecordURL, E: AlamoRecordError, IDType>: NS
Updates an object of this instance based with the given id
- parameter id: The id of the object to update
- parameter parameters: The parameters. `nil` by default
- parameter encoding: The parameter encoding. `URLEncoding.default` by default
- parameter encoding: The parameter encoding. `JSONEncoding.default` by default
- parameter headers: The HTTP headers. `nil` by default
- parameter success: The block to execute if the request succeeds
- parameter failure: The block to execute if the request fails
*/
@discardableResult
open class func update<T: AlamoRecordObject>(id: IDType,
parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: HTTPHeaders? = nil,
success: ((T) -> Void)?,
failure: ((E) -> Void)?) -> DataRequest {
open class func update<O: AlamoRecordObject>(id: IDType,
parameters: Parameters? = nil,
encoding: ParameterEncoding = JSONEncoding.default,
headers: HTTPHeaders? = nil,
success: ((O) -> Void)?,
failure: ((E) -> Void)?) -> DataRequest {

return requestManager.updateObject(id: id,
parameters: parameters,
Expand All @@ -257,15 +239,15 @@ open class AlamoRecordObject<U: AlamoRecordURL, E: AlamoRecordError, IDType>: NS
Updates an object of this instance based with the given id
- parameter id: The id of the object to update
- parameter parameters: The parameters. `nil` by default
- parameter encoding: The parameter encoding. `URLEncoding.default` by default
- parameter encoding: The parameter encoding. `JSONEncoding.default` by default
- parameter headers: The HTTP headers. `nil` by default
- parameter success: The block to execute if the request succeeds
- parameter failure: The block to execute if the request fails
*/
@discardableResult
open class func update(id: IDType,
parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
encoding: ParameterEncoding = JSONEncoding.default,
headers: HTTPHeaders? = nil,
success: (() -> Void)?,
failure: ((E) -> Void)?) -> DataRequest {
Expand All @@ -282,14 +264,14 @@ open class AlamoRecordObject<U: AlamoRecordURL, E: AlamoRecordError, IDType>: NS
Updates an object of this instance based with the given id
- parameter id: The id of the object to update
- parameter parameters: The parameters. `nil` by default
- parameter encoding: The parameter encoding. `URLEncoding.default` by default
- parameter encoding: The parameter encoding. `JSONEncoding.default` by default
- parameter headers: The HTTP headers. `nil` by default
- parameter success: The block to execute if the request succeeds
- parameter failure: The block to execute if the request fails
*/
@discardableResult
open func update(parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
encoding: ParameterEncoding = JSONEncoding.default,
headers: HTTPHeaders? = nil,
success: (() -> Void)?,
failure: ((E) -> Void)?) -> DataRequest {
Expand All @@ -305,14 +287,14 @@ open class AlamoRecordObject<U: AlamoRecordURL, E: AlamoRecordError, IDType>: NS
/**
Destroys the object
- parameter parameters: The parameters. `nil` by default
- parameter encoding: The parameter encoding. `URLEncoding.default` by default
- parameter encoding: The parameter encoding. `JSONEncoding.default` by default
- parameter headers: The HTTP headers. `nil` by default
- parameter success: The block to execute if the request succeeds
- parameter failure: The block to execute if the request fails
*/
@discardableResult
open func destroy(parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
encoding: ParameterEncoding = JSONEncoding.default,
headers: HTTPHeaders? = nil,
success: (() -> Void)?,
failure: ((E) -> Void)?) -> DataRequest {
Expand All @@ -329,18 +311,18 @@ open class AlamoRecordObject<U: AlamoRecordURL, E: AlamoRecordError, IDType>: NS
Finds an object of this instance based on the given id
- parameter id: The id of the object to destroy
- parameter parameters: The parameters. `nil` by default
- parameter encoding: The parameter encoding. `URLEncoding.default` by default
- parameter encoding: The parameter encoding. `JSONEncoding.default` by default
- parameter headers: The HTTP headers. `nil` by default
- parameter success: The block to execute if the request succeeds
- parameter failure: The block to execute if the request fails
*/
@discardableResult
open class func destroy(id: IDType,
parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: HTTPHeaders? = nil,
success: (() -> Void)?,
failure: ((E) -> Void)?) -> DataRequest {
parameters: Parameters? = nil,
encoding: ParameterEncoding = JSONEncoding.default,
headers: HTTPHeaders? = nil,
success: (() -> Void)?,
failure: ((E) -> Void)?) -> DataRequest {

return requestManager.destroyObject(url: urlForDestroy(id),
parameters: parameters,
Expand Down

0 comments on commit 41ff49b

Please sign in to comment.