Skip to content

Instantly share code, notes, and snippets.

View pietrocaselani's full-sized avatar
🌴
On vacation

Pietro Caselani pietrocaselani

🌴
On vacation
  • Florianópolis, Brasil
  • 20:30 (UTC -03:00)
  • X @pietropc_
View GitHub Profile
import RxSwift
import RxTest
import XCTest
@testable import ExampleFramework
final class MoviesDefaultViewModelTests: XCTestCase {
private var scheduler: TestScheduler!
private var observer: TestableObserver<MovieViewState>!
private var disposeBag: DisposeBag!
@pietrocaselani
pietrocaselani / MovieDefaultViewModel.swift
Created June 3, 2018 18:44
Testes unitários no iOS sem medo de ser feliz
import RxSwift
public final class MoviesDefaultViewModel: MoviesViewModel {
private let viewStateSubject = BehaviorSubject<MovieViewState>(value: .loading)
private let disposeBag = DisposeBag()
private let repository: MoviesRepository
public init(repository: MoviesRepository) {
self.repository = repository
}
@pietrocaselani
pietrocaselani / MovieContract.swift
Created June 3, 2018 18:43
Testes unitários no iOS sem medo de ser feliz
import RxSwift
public enum MovieViewState: Hashable {
case loading
case error(error: Error)
case showingMovies(titles: [String])
case empty
public var hashValue: Int {
switch self {
@pietrocaselani
pietrocaselani / ThreadWithRunLoopScheduler.swift
Created February 18, 2018 16:54
RxSwift scheduler with run loop
final class ThreadWithRunLoopScheduler: ImmediateSchedulerType {
private let thread: ThreadWithRunLoop
init(name: String) {
thread = ThreadWithRunLoop()
thread.name = name
thread.start()
}
func schedule<StateType>(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable {
@pietrocaselani
pietrocaselani / ThreadWithRunLoop.swift
Created February 18, 2018 16:51
Thread + RunLoop to work with Realm and RxSwift
final class ThreadWithRunLoop: Thread {
var runLoop: RunLoop!
override func main() {
runLoop = RunLoop.current
runLoop.add(Port(), forMode: .commonModes)
runLoop.run()
}
}
@pietrocaselani
pietrocaselani / RealmSchedulerWrong.swift
Created February 18, 2018 16:17
Realm + RxSwift in the wrong way!
let realmQueue = DispatchQueue(label: "RealmQueue", qos: .background)
let realmScheduler = SerialDispatchQueueScheduler(queue: realmQueue, internalSerialQueueName: "RealmScheduler")
@pietrocaselani
pietrocaselani / Example.swift
Last active January 4, 2019 03:35
Carlos + Moya + Rx
func example() -> Single<String> {
let cache = MemoryCacheLevel()
.compose(DiskCacheLevel<GithubService, NSData>())
.compose(MoyaFetcher(provider: provider))
return cache.get(GithubService.zen)
.asObservable()
.map { data -> String in
guard let string = String(data: data as Data, encoding: .utf8) else {
throw MappingError.string(data)
<a id="url_install" href="itms-services://?action=download-manifest&url=https://ios.agilepromoter.com.br/_replace_me_/manifest.plist">
<script type="text/javascript">
window.onload = function() {
var path = window.location.pathname;
path = path.substring(1, path.length - 1);
var linkElement = document.getElementById("url_install");
var iOSURL = linkElement.getAttribute("href")
var restify = require('restify');
var MongoClient = require('mongodb').MongoClient;
var passport = require('passport');
var Strategy = require('passport-http').BasicStrategy;
var server = restify.createServer();
var db;
passport.use(new Strategy(
function(username, password, done) {
@pietrocaselani
pietrocaselani / .gitignore
Created August 25, 2016 11:13
Gitignore for iOS projects
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
build