RepresentationKit permits objects to represent themselves through key-values to
arbitrary representations. Thus objects become Representable
. As getters and
setters are
evil
RepresentationKit avoids being interrogated/queried by a "dumper" object.
Instead a Representation
that can be passed to an object that will
describe/represent itself upon it. Representation
s trust objects to not lie
about what information will they expose and thus respect them.
Influenced by Printers instead of getters.
To run the example project, clone the repo, and run pod install
from the
Example directory first.
struct Book {
let name: String
let edition: String
}
extension Book: Representable {
func represent(using representation: Representation) -> Representation {
return representation
.with(key: "name", value: self.name)
.with(key: "edition", value: self.edition)
}
}
extension Book: CustomStringConvertible {
var description: String {
return "Book(\(self.name),\(self.edition))"
}
}
// some books
let books = (0..<2).map { Book(name: "Book \($0)", edition: "Edition \($0)") }
print("Books = \(books)")
// Prints "Books = [Book(Book 0,Edition 0), Book(Book 1,Edition 1)]"
let arrayRep = ArrayRepresentationBuilder()
let dictRep = DictionaryRepresentationBuilder()
// represent a book as an array
let arrayResult: ArrayRepresentationBuilder = books[0].represent(using: arrayRep)
print(arrayResult.array)
// Prints ["Book 0", "Edition 0"]
// represent a book as dictionary
let dictResuslt: DictionaryRepresentation = books[0].represent(using: dictRep)
print(dictResuslt.dictionary)
// Prints ["name": "Book 0", "edition": "Edition 0"]
// represent an array of books
let dictionaryRepresentationOfAnArray: DictionaryRepresentation = books.represent(using: dictRep)
print(dictionaryRepresentationOfAnArray.dictionary)
// Prints ["0": Book(Book 0,Edition 0), "1": Book(Book 1,Edition 1)]
// let's get crazy
let deepRep = DeepArrayRepresentationBuilder(representation: JSONRepresentationBuilder())
let deepRepRes: DeepArrayRepresentationBuilder = books.represent(using: deepRep)
print(deepRepRes.array.map { $0.dictionary })
// Prints [["name": "Book 0", "edition": "Edition 0"], ["name": "Book 1", "edition": "Edition 1"]]
RepresentationKit is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod "RepresentationKit"
Georges Boumis, developer.george.boumis@gmail.com
RepresentationKit is available under the Apache 2.0 license. See the LICENSE file for more info.