├── .gitignore
├── Cartfile
├── Cartfile.resolved
├── Carthage
└── Checkouts
│ ├── Bond
│ ├── .gitignore
│ ├── .gitmodules
│ ├── .swift-version
│ ├── .travis.yml
│ ├── Bond-App
│ │ ├── AppDelegate.swift
│ │ ├── Base.lproj
│ │ │ └── LaunchScreen.storyboard
│ │ └── Info.plist
│ ├── Bond.podspec
│ ├── Bond.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ ├── Bond-iOS.xcscheme
│ │ │ ├── Bond-macOS.xcscheme
│ │ │ └── Bond-tvOS.xcscheme
│ ├── Bond.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── Bond
│ │ ├── NSObject+Bond.h
│ │ └── NSObject+Bond.m
│ ├── Cartfile
│ ├── Cartfile.resolved
│ ├── Carthage
│ │ └── Checkouts
│ │ │ ├── Diff.swift
│ │ │ ├── .gitignore
│ │ │ ├── .travis.yml
│ │ │ ├── Configurations
│ │ │ │ ├── Deployment-Targets.xcconfig
│ │ │ │ ├── Universal-Framework-Target.xcconfig
│ │ │ │ └── Universal-Target-Base.xcconfig
│ │ │ ├── Diff.podspec
│ │ │ ├── Diff.xcodeproj
│ │ │ │ ├── project.pbxproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ │ └── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ │ ├── xcbaselines
│ │ │ │ │ └── C9838FF01D29571000691BE8.xcbaseline
│ │ │ │ │ │ ├── 5ACB3D1B-D608-4861-BD7C-4E5E202E879C.plist
│ │ │ │ │ │ └── Info.plist
│ │ │ │ │ └── xcschemes
│ │ │ │ │ └── Diff.xcscheme
│ │ │ ├── DiffTests
│ │ │ │ ├── BatchUpdateTests.swift
│ │ │ │ ├── DiffTests.swift
│ │ │ │ ├── ExtendedPatchSortTests.swift
│ │ │ │ ├── Info.plist
│ │ │ │ ├── NestedDiffTests.swift
│ │ │ │ ├── NestedExtendedDiffTests.swift
│ │ │ │ ├── PatchApplyTests.swift
│ │ │ │ └── PatchSortTests.swift
│ │ │ ├── Examples
│ │ │ │ └── TableViewExample
│ │ │ │ │ ├── TableViewExample.xcodeproj
│ │ │ │ │ ├── project.pbxproj
│ │ │ │ │ ├── project.xcworkspace
│ │ │ │ │ │ └── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ │ └── xcschemes
│ │ │ │ │ │ └── TableViewExample.xcscheme
│ │ │ │ │ └── TableViewExample
│ │ │ │ │ ├── AppDelegate.swift
│ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ │ ├── Info.plist
│ │ │ │ │ ├── NestedTableViewController.swift
│ │ │ │ │ └── TableViewController.swift
│ │ │ ├── Framework
│ │ │ │ ├── Diff.h
│ │ │ │ └── Info.plist
│ │ │ ├── Graph.playground
│ │ │ │ ├── Contents.swift
│ │ │ │ ├── Sources
│ │ │ │ │ ├── Arrows.swift
│ │ │ │ │ ├── CharacterLabels.swift
│ │ │ │ │ ├── Diff.swift
│ │ │ │ │ ├── GraphView.swift
│ │ │ │ │ ├── Patch.swift
│ │ │ │ │ └── ViewController.swift
│ │ │ │ └── contents.xcplayground
│ │ │ ├── LICENSE
│ │ │ ├── Package.swift
│ │ │ ├── PerfTests
│ │ │ │ ├── Benchmark
│ │ │ │ │ ├── Benchmark.xcodeproj
│ │ │ │ │ │ ├── Benchmark.xcworkspace
│ │ │ │ │ │ │ └── contents.xcworkspacedata
│ │ │ │ │ │ ├── project.pbxproj
│ │ │ │ │ │ └── project.xcworkspace
│ │ │ │ │ │ │ └── contents.xcworkspacedata
│ │ │ │ │ ├── Benchmark.xcworkspace
│ │ │ │ │ │ └── contents.xcworkspacedata
│ │ │ │ │ ├── Benchmark
│ │ │ │ │ │ ├── AppDelegate.swift
│ │ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── Base.lproj
│ │ │ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ │ │ └── Main.storyboard
│ │ │ │ │ │ ├── Dwifft.swift
│ │ │ │ │ │ ├── Info.plist
│ │ │ │ │ │ └── ViewController.swift
│ │ │ │ │ ├── Cartfile
│ │ │ │ │ └── Cartfile.resolved
│ │ │ │ ├── PerfTests
│ │ │ │ │ ├── build-script
│ │ │ │ │ └── main.swift
│ │ │ │ └── Utils
│ │ │ │ │ ├── PerformanceTestUtils.swift
│ │ │ │ │ └── Resources
│ │ │ │ │ ├── Diff-new.swift
│ │ │ │ │ └── Diff-old.swift
│ │ │ ├── README.md
│ │ │ ├── Sources
│ │ │ │ ├── Diff+UIKit.swift
│ │ │ │ ├── Diff.swift
│ │ │ │ ├── ExtendedDiff.swift
│ │ │ │ ├── ExtendedPatch+Apply.swift
│ │ │ │ ├── ExtendedPatch.swift
│ │ │ │ ├── GenericPatch.swift
│ │ │ │ ├── LinkedList.swift
│ │ │ │ ├── NestedDiff.swift
│ │ │ │ ├── NestedExtendedDiff.swift
│ │ │ │ ├── Patch+Apply.swift
│ │ │ │ ├── Patch+Sort.swift
│ │ │ │ └── Patch.swift
│ │ │ └── codecov.yml
│ │ │ └── ReactiveKit
│ │ │ ├── .gitignore
│ │ │ ├── .gitmodules
│ │ │ ├── .swift-version
│ │ │ ├── .travis.yml
│ │ │ ├── Assets
│ │ │ └── logo.png
│ │ │ ├── LICENSE
│ │ │ ├── Package.swift
│ │ │ ├── Playground.playground
│ │ │ ├── Contents.swift
│ │ │ └── contents.xcplayground
│ │ │ ├── README.md
│ │ │ ├── ReactiveKit.podspec
│ │ │ ├── ReactiveKit.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ └── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── xcbaselines
│ │ │ │ └── ECBCCDD91BEB6B9B00723476.xcbaseline
│ │ │ │ │ ├── 15721443-CEB9-478C-919D-711F1A7CCA56.plist
│ │ │ │ │ └── Info.plist
│ │ │ │ └── xcschemes
│ │ │ │ ├── ReactiveKit-iOS.xcscheme
│ │ │ │ ├── ReactiveKit-macOS.xcscheme
│ │ │ │ ├── ReactiveKit-tvOS.xcscheme
│ │ │ │ └── ReactiveKit-watchOS.xcscheme
│ │ │ ├── ReactiveKit.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ │ ├── ReactiveKit
│ │ │ ├── Info.plist
│ │ │ └── ReactiveKit.h
│ │ │ ├── ReactiveKitTests
│ │ │ └── Info.plist
│ │ │ ├── Sources
│ │ │ ├── Bindable.swift
│ │ │ ├── Connectable.swift
│ │ │ ├── Deallocatable.swift
│ │ │ ├── Disposable.swift
│ │ │ ├── Event.swift
│ │ │ ├── ExecutionContext.swift
│ │ │ ├── Lock.swift
│ │ │ ├── NoError.swift
│ │ │ ├── Observer.swift
│ │ │ ├── Optional.swift
│ │ │ ├── Property.swift
│ │ │ ├── Reactive.swift
│ │ │ ├── Result.swift
│ │ │ ├── Signal.swift
│ │ │ ├── SignalProtocol+Arities.swift
│ │ │ ├── SignalProtocol.swift
│ │ │ ├── Subjects.swift
│ │ │ └── Typealiases.swift
│ │ │ └── Tests
│ │ │ └── ReactiveKitTests
│ │ │ ├── Helpers.swift
│ │ │ ├── PropertyTests.swift
│ │ │ ├── ResultTests.swift
│ │ │ └── SignalTests.swift
│ ├── LICENSE
│ ├── Package.pins
│ ├── Package.swift
│ ├── Playground.playground
│ │ ├── Pages
│ │ │ ├── Key Value Observing.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ │ └── Table View Binding.xcplaygroundpage
│ │ │ │ └── Contents.swift
│ │ └── contents.xcplayground
│ ├── README.md
│ ├── Sources
│ │ ├── BNDProtocolProxyBase
│ │ │ ├── BNDProtocolProxyBase.m
│ │ │ └── include
│ │ │ │ └── BNDProtocolProxyBase.h
│ │ └── Bond
│ │ │ ├── AppKit
│ │ │ ├── NSAppearanceCustomization.swift
│ │ │ ├── NSButton.swift
│ │ │ ├── NSColorWell.swift
│ │ │ ├── NSControl.swift
│ │ │ ├── NSImageView.swift
│ │ │ ├── NSMenuItem.swift
│ │ │ ├── NSPopUpButton.swift
│ │ │ ├── NSProgressIndicator.swift
│ │ │ ├── NSSegmentedControl.swift
│ │ │ ├── NSSlider.swift
│ │ │ ├── NSStatusBarButton.swift
│ │ │ ├── NSTableView.swift
│ │ │ ├── NSTextField.swift
│ │ │ ├── NSTextView.swift
│ │ │ └── NSView.swift
│ │ │ ├── Bond.swift
│ │ │ ├── Collections
│ │ │ ├── Observable2DArray.swift
│ │ │ ├── ObservableArray.swift
│ │ │ ├── ObservableDictionary.swift
│ │ │ └── ObservableSet.swift
│ │ │ ├── DataSource.swift
│ │ │ ├── DynamicSubject.swift
│ │ │ ├── Observable.swift
│ │ │ ├── ProtocolProxy.swift
│ │ │ ├── QueryableDataSource.swift
│ │ │ ├── Shared
│ │ │ ├── CALayer.swift
│ │ │ ├── NSLayoutConstraint.swift
│ │ │ ├── NSObject+KVO.swift
│ │ │ ├── NSObject.swift
│ │ │ ├── NotificationCenter.swift
│ │ │ └── SignalProtocol.swift
│ │ │ └── UIKit
│ │ │ ├── UIAccessibilityIdentification.swift
│ │ │ ├── UIActivityIndicatorView.swift
│ │ │ ├── UIApplication.swift
│ │ │ ├── UIBarButtonItem.swift
│ │ │ ├── UIBarItem.swift
│ │ │ ├── UIButton.swift
│ │ │ ├── UICollectionView.swift
│ │ │ ├── UIControl.swift
│ │ │ ├── UIDatePicker.swift
│ │ │ ├── UIGestureRecognizer.swift
│ │ │ ├── UIImageView.swift
│ │ │ ├── UILabel.swift
│ │ │ ├── UINavigationBar.swift
│ │ │ ├── UINavigationItem.swift
│ │ │ ├── UIProgressView.swift
│ │ │ ├── UIRefreshControl.swift
│ │ │ ├── UISegmentedControl.swift
│ │ │ ├── UISlider.swift
│ │ │ ├── UIStepper.swift
│ │ │ ├── UISwitch.swift
│ │ │ ├── UITableView.swift
│ │ │ ├── UITextField.swift
│ │ │ ├── UITextView.swift
│ │ │ └── UIView.swift
│ ├── Supporting Files
│ │ ├── Bond-Info.plist
│ │ ├── Bond.h
│ │ └── BondTests-Info.plist
│ └── Tests
│ │ └── BondTests
│ │ ├── BondTests.swift
│ │ ├── DynamicSubjectTests.swift
│ │ ├── Helpers.swift
│ │ ├── NSObjectTests.swift
│ │ ├── Observable2DArrayTests.swift
│ │ ├── ObservableArrayTests.swift
│ │ ├── ObservableSetTests.swift
│ │ ├── ProtocolProxyTests.swift
│ │ ├── UICollectionViewTests.swift
│ │ ├── UIKitTests.swift
│ │ └── UITableViewTests.swift
│ ├── Diff.swift
│ ├── .gitignore
│ ├── .travis.yml
│ ├── Configurations
│ │ ├── Deployment-Targets.xcconfig
│ │ ├── Universal-Framework-Target.xcconfig
│ │ └── Universal-Target-Base.xcconfig
│ ├── Diff.podspec
│ ├── Diff.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── xcbaselines
│ │ │ └── C9838FF01D29571000691BE8.xcbaseline
│ │ │ │ ├── 5ACB3D1B-D608-4861-BD7C-4E5E202E879C.plist
│ │ │ │ └── Info.plist
│ │ │ └── xcschemes
│ │ │ └── Diff.xcscheme
│ ├── DiffTests
│ │ ├── BatchUpdateTests.swift
│ │ ├── DiffTests.swift
│ │ ├── ExtendedPatchSortTests.swift
│ │ ├── Info.plist
│ │ ├── NestedDiffTests.swift
│ │ ├── NestedExtendedDiffTests.swift
│ │ ├── PatchApplyTests.swift
│ │ └── PatchSortTests.swift
│ ├── Examples
│ │ └── TableViewExample
│ │ │ ├── TableViewExample.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ └── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ └── xcschemes
│ │ │ │ └── TableViewExample.xcscheme
│ │ │ └── TableViewExample
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ └── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ ├── NestedTableViewController.swift
│ │ │ └── TableViewController.swift
│ ├── Framework
│ │ ├── Diff.h
│ │ └── Info.plist
│ ├── Graph.playground
│ │ ├── Contents.swift
│ │ ├── Sources
│ │ │ ├── Arrows.swift
│ │ │ ├── CharacterLabels.swift
│ │ │ ├── Diff.swift
│ │ │ ├── GraphView.swift
│ │ │ ├── Patch.swift
│ │ │ └── ViewController.swift
│ │ └── contents.xcplayground
│ ├── LICENSE
│ ├── Package.swift
│ ├── PerfTests
│ │ ├── Benchmark
│ │ │ ├── Benchmark.xcodeproj
│ │ │ │ ├── Benchmark.xcworkspace
│ │ │ │ │ └── contents.xcworkspacedata
│ │ │ │ ├── project.pbxproj
│ │ │ │ └── project.xcworkspace
│ │ │ │ │ └── contents.xcworkspacedata
│ │ │ ├── Benchmark.xcworkspace
│ │ │ │ └── contents.xcworkspacedata
│ │ │ ├── Benchmark
│ │ │ │ ├── AppDelegate.swift
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ │ └── Contents.json
│ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── Dwifft.swift
│ │ │ │ ├── Info.plist
│ │ │ │ └── ViewController.swift
│ │ │ ├── Cartfile
│ │ │ └── Cartfile.resolved
│ │ ├── PerfTests
│ │ │ ├── build-script
│ │ │ └── main.swift
│ │ └── Utils
│ │ │ ├── PerformanceTestUtils.swift
│ │ │ └── Resources
│ │ │ ├── Diff-new.swift
│ │ │ └── Diff-old.swift
│ ├── README.md
│ ├── Sources
│ │ ├── Diff+UIKit.swift
│ │ ├── Diff.swift
│ │ ├── ExtendedDiff.swift
│ │ ├── ExtendedPatch+Apply.swift
│ │ ├── ExtendedPatch.swift
│ │ ├── GenericPatch.swift
│ │ ├── LinkedList.swift
│ │ ├── NestedDiff.swift
│ │ ├── NestedExtendedDiff.swift
│ │ ├── Patch+Apply.swift
│ │ ├── Patch+Sort.swift
│ │ └── Patch.swift
│ └── codecov.yml
│ ├── Freddy
│ ├── .cocoadocs.yml
│ ├── .gitignore
│ ├── .ruby-version
│ ├── .swift-version
│ ├── .travis.yml
│ ├── CONTRIBUTING.md
│ ├── Configurations
│ │ ├── Base.xcconfig
│ │ ├── Debug.xcconfig
│ │ ├── Framework.xcconfig
│ │ ├── Release.xcconfig
│ │ └── Tests.xcconfig
│ ├── Freddy.podspec
│ ├── Freddy.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ ├── Freddy.xcscheme
│ │ │ ├── MobileFreddy.xcscheme
│ │ │ ├── NanoFreddy.xcscheme
│ │ │ └── TVFreddy.xcscheme
│ ├── Gemfile
│ ├── Gemfile.lock
│ ├── LICENSE
│ ├── Package.swift
│ ├── README.md
│ ├── README_Images
│ │ ├── addErrorBreakpoint.png
│ │ ├── addType.png
│ │ ├── editBreakpoint.png
│ │ └── projectNav_addBreakpoint.png
│ ├── Resources
│ │ └── scripts
│ │ │ ├── publish_docs.sh
│ │ │ └── validate_carthage.sh
│ ├── Sources
│ │ ├── Freddy.h
│ │ ├── Info.plist
│ │ ├── JSON.swift
│ │ ├── JSONDecodable.swift
│ │ ├── JSONEncodable.swift
│ │ ├── JSONEncodingDetector.swift
│ │ ├── JSONLiteralConvertible.swift
│ │ ├── JSONParser.swift
│ │ ├── JSONParsing.swift
│ │ ├── JSONSerializing.swift
│ │ └── JSONSubscripting.swift
│ ├── Tests
│ │ └── FreddyTests
│ │ │ ├── Info.plist
│ │ │ ├── JSONDecodableTests.swift
│ │ │ ├── JSONEncodableTests.swift
│ │ │ ├── JSONEncodingDetectorTests.swift
│ │ │ ├── JSONParserTests.swift
│ │ │ ├── JSONSerializingTests.swift
│ │ │ ├── JSONSubscriptingTests.swift
│ │ │ ├── JSONTests.swift
│ │ │ ├── JSONTypeTests.swift
│ │ │ ├── Person.swift
│ │ │ ├── sample.JSON
│ │ │ └── sampleNoWhiteSpace.JSON
│ └── fastlane
│ │ ├── Fastfile
│ │ └── README.md
│ └── ReactiveKit
│ ├── .gitignore
│ ├── .gitmodules
│ ├── .swift-version
│ ├── .travis.yml
│ ├── Assets
│ └── logo.png
│ ├── LICENSE
│ ├── Package.swift
│ ├── Playground.playground
│ ├── Contents.swift
│ └── contents.xcplayground
│ ├── README.md
│ ├── ReactiveKit.podspec
│ ├── ReactiveKit.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── xcbaselines
│ │ └── ECBCCDD91BEB6B9B00723476.xcbaseline
│ │ │ ├── 15721443-CEB9-478C-919D-711F1A7CCA56.plist
│ │ │ └── Info.plist
│ │ └── xcschemes
│ │ ├── ReactiveKit-iOS.xcscheme
│ │ ├── ReactiveKit-macOS.xcscheme
│ │ ├── ReactiveKit-tvOS.xcscheme
│ │ └── ReactiveKit-watchOS.xcscheme
│ ├── ReactiveKit.xcworkspace
│ └── contents.xcworkspacedata
│ ├── ReactiveKit
│ ├── Info.plist
│ └── ReactiveKit.h
│ ├── ReactiveKitTests
│ └── Info.plist
│ ├── Sources
│ ├── Bindable.swift
│ ├── Connectable.swift
│ ├── Deallocatable.swift
│ ├── Disposable.swift
│ ├── Event.swift
│ ├── ExecutionContext.swift
│ ├── Lock.swift
│ ├── NoError.swift
│ ├── Observer.swift
│ ├── Optional.swift
│ ├── Property.swift
│ ├── Reactive.swift
│ ├── Result.swift
│ ├── Signal.swift
│ ├── SignalProtocol+Arities.swift
│ ├── SignalProtocol.swift
│ ├── Subjects.swift
│ └── Typealiases.swift
│ └── Tests
│ └── ReactiveKitTests
│ ├── Helpers.swift
│ ├── PropertyTests.swift
│ ├── ResultTests.swift
│ └── SignalTests.swift
├── Client
├── Client.h
├── Client.swift
├── HTTPMethod.swift
├── Info.plist
├── Request.swift
├── RequestParameters.swift
├── Result.swift
└── Utilities.swift
├── Entities
├── Entities.h
├── Info.plist
├── Message.swift
├── Room.swift
├── Token.swift
├── User.swift
└── Utilities.swift
├── Interactors
├── Authentication.swift
├── Info.plist
├── Interactors.h
├── RoomList.swift
└── RoomMessages.swift
├── Networking
├── APIError.swift
├── Activity.swift
├── Client.swift
├── Info.plist
├── Message.swift
├── Networking.h
├── Room.swift
├── SafeClient.swift
├── Token.swift
├── User.swift
└── Utilities.swift
├── README.md
├── ReactiveGitter.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
└── xcuserdata
│ └── srdan.xcuserdatad
│ └── xcschemes
│ ├── ReactiveGitter.xcscheme
│ └── xcschememanagement.plist
├── ReactiveGitter
├── AppDelegate.swift
├── Assets.xcassets
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── Base.lproj
│ └── LaunchScreen.storyboard
├── Extensions.swift
├── Info.plist
└── TokenService.swift
├── Scenes
├── Authentication.swift
├── Extensions.swift
├── Info.plist
├── RoomList.swift
├── RoomMessages.swift
└── Scenes.h
└── Views
├── Cells
├── MessageCell.swift
└── RoomCell.swift
├── Info.plist
├── Utilities.swift
├── View Controllers
├── Authentication.swift
├── RoomList.swift
└── RoomMessages.swift
└── Views.h
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata
19 |
20 | ## Other
21 | *.xccheckout
22 | *.moved-aside
23 | *.xcuserstate
24 | *.xcscmblueprint
25 | .DS_Store
26 |
27 | ## Obj-C/Swift specific
28 | *.hmap
29 | *.ipa
30 |
31 | ## Playgrounds
32 | timeline.xctimeline
33 | playground.xcworkspace
34 |
35 | # Swift Package Manager
36 | #
37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
38 | # Packages/
39 | .build/
40 |
41 | # CocoaPods
42 | #
43 | # We recommend against adding the Pods directory to your .gitignore. However
44 | # you should judge for yourself, the pros and cons are mentioned at:
45 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
46 | #
47 | Pods/
48 |
49 | # Carthage
50 | #
51 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
52 | # Carthage/Checkouts
53 |
54 | # Carthage/Build
55 |
56 | # fastlane
57 | #
58 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
59 | # screenshots whenever they are needed.
60 | # For more information about the recommended setup visit:
61 | # https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md
62 |
63 | fastlane/report.xml
64 | fastlane/screenshots
65 |
--------------------------------------------------------------------------------
/Cartfile:
--------------------------------------------------------------------------------
1 | github "ReactiveKit/Bond" "master"
2 | github "ReactiveKit/ReactiveKit"
3 | github "bignerdranch/Freddy" ~> 3.0
4 |
--------------------------------------------------------------------------------
/Cartfile.resolved:
--------------------------------------------------------------------------------
1 | github "wokalski/Diff.swift" "0.5.3"
2 | github "bignerdranch/Freddy" "3.0.2"
3 | github "ReactiveKit/ReactiveKit" "v3.5.3"
4 | github "ReactiveKit/Bond" "4821043a7dafff6567f58ebb27f8f894e7ea0836"
5 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | build/
4 | *.pbxuser
5 | !default.pbxuser
6 | *.mode1v3
7 | !default.mode1v3
8 | *.mode2v3
9 | !default.mode2v3
10 | *.perspectivev3
11 | !default.perspectivev3
12 | xcuserdata
13 | *.xccheckout
14 | *.moved-aside
15 | DerivedData
16 | *.hmap
17 | *.ipa
18 | *.xcuserstate
19 | .DS_Store
20 |
21 | # CocoaPods
22 | #
23 | # We recommend against adding the Pods directory to your .gitignore. However
24 | # you should judge for yourself, the pros and cons are mentioned at:
25 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
26 | #
27 | # Pods/
28 |
29 | ## Playgrounds
30 | timeline.xctimeline
31 | playground.xcworkspace
32 |
33 | # Swift Package Manager
34 | .build/
35 |
36 | # Carthage
37 | Carthage/Build
38 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "Carthage/Checkouts/ReactiveKit"]
2 | path = Carthage/Checkouts/ReactiveKit
3 | url = https://github.com/ReactiveKit/ReactiveKit.git
4 | [submodule "Carthage/Checkouts/Diff.swift"]
5 | path = Carthage/Checkouts/Diff.swift
6 | url = https://github.com/wokalski/Diff.swift.git
7 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/.swift-version:
--------------------------------------------------------------------------------
1 | 3.0
2 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/.travis.yml:
--------------------------------------------------------------------------------
1 | language: objective-c
2 | osx_image: xcode8.3
3 |
4 | # Travis is currently experiencing issues with Xcode builds: https://github.com/travis-ci/travis-ci/issues/6675#issuecomment-257964767
5 | # When this is resolved, remove the entire `before_install` block, as well as the `travis_retry` command below.
6 | before_install:
7 | - export IOS_SIMULATOR_UDID=`instruments -s devices | grep "iPhone 7 (10.1" | awk -F '[ ]' '{print $4}' | awk -F '[\[]' '{print $2}' | sed 's/.$//'`
8 | - echo $IOS_SIMULATOR_UDID
9 | - open -a "simulator" --args -CurrentDeviceUDID $IOS_SIMULATOR_UDID
10 |
11 | install:
12 | - gem install xcpretty
13 |
14 | script:
15 | - set -o pipefail && travis_retry xcodebuild -project Bond.xcodeproj -scheme Bond-iOS -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 7,OS=10.1' test | xcpretty
16 | - swift test --parallel
17 |
18 | after_success:
19 | - bash <(curl -s https://codecov.io/bash)
20 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Bond-App/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // Bond-App
4 | //
5 | // Created by Srdan Rasic on 29/08/16.
6 | // Copyright © 2016 Swift Bond. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
17 | window = UIWindow(frame: UIScreen.main.bounds)
18 | window?.rootViewController = UIViewController()
19 | window?.makeKeyAndVisible()
20 | return true
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Bond-App/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Bond-App/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIRequiredDeviceCapabilities
26 |
27 | armv7
28 |
29 | UISupportedInterfaceOrientations
30 |
31 | UIInterfaceOrientationPortrait
32 | UIInterfaceOrientationLandscapeLeft
33 | UIInterfaceOrientationLandscapeRight
34 |
35 | UISupportedInterfaceOrientations~ipad
36 |
37 | UIInterfaceOrientationPortrait
38 | UIInterfaceOrientationPortraitUpsideDown
39 | UIInterfaceOrientationLandscapeLeft
40 | UIInterfaceOrientationLandscapeRight
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Bond.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 |
3 | s.name = "Bond"
4 | s.version = "6.2.6"
5 | s.summary = "A Swift binding framework"
6 |
7 | s.description = <<-DESC
8 | Bond is a Swift reactive binding framework that takes binding concept to a whole new level.
9 | It's simple, powerful, type-safe and multi-paradigm - just like Swift.
10 |
11 | Bond is also a framework that bridges the gap between the reactive and imperative paradigms.
12 | You can use it as a standalone framework to simplify your state changes with bindings and reactive data sources,
13 | but you can also use it with ReactiveKit to complement your reactive data flows with bindings and
14 | reactive delegates and data sources.
15 | DESC
16 |
17 | s.homepage = "https://github.com/SwiftBond/Bond"
18 | s.license = { :type => "MIT", :file => "LICENSE" }
19 | s.author = { "Srdan Rasic" => "srdan.rasic@gmail.com" }
20 | s.social_media_url = "http://twitter.com/srdanrasic"
21 | s.ios.deployment_target = "8.0"
22 | s.osx.deployment_target = "10.10"
23 | s.tvos.deployment_target = "9.0"
24 | s.source = { :git => "https://github.com/SwiftBond/Bond.git", :tag => "6.2.6" }
25 | s.source_files = "Sources/**/*.{h,m,swift}", "Supporting Files/Bond.h"
26 | s.ios.exclude_files = "Sources/Bond/AppKit"
27 | s.tvos.exclude_files = "Sources/Bond/AppKit"
28 | s.osx.exclude_files = "Sources/Bond/UIKit"
29 | s.pod_target_xcconfig = { "OTHER_SWIFT_FLAGS" => "-DBUILDING_WITH_XCODE $(inherited)" }
30 | s.requires_arc = true
31 |
32 | s.dependency "ReactiveKit", "~> 3.5.3"
33 | s.dependency "Diff", "~> 0.4"
34 |
35 | end
36 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Bond.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Bond.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Bond/NSObject+Bond.h:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #import
26 |
27 | @interface NSObject (Bond)
28 | - (void)_bnd_dealloc;
29 | @end
30 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Bond/NSObject+Bond.m:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #import "NSObject+Bond.h"
26 |
27 | @implementation NSObject (Bond)
28 |
29 | - (void)_bnd_dealloc {
30 |
31 | SEL selector = NSSelectorFromString(@"_bnd_swift_dealloc");
32 | if ([self respondsToSelector:selector]) {
33 | ((void (*)(id, SEL))[self methodForSelector:selector])(self, selector);
34 | }
35 | [self _bnd_dealloc];
36 | }
37 |
38 | @end
39 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Cartfile:
--------------------------------------------------------------------------------
1 | github "ReactiveKit/ReactiveKit" ~> 3.5.3
2 | github "wokalski/Diff.swift"
3 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Cartfile.resolved:
--------------------------------------------------------------------------------
1 | github "wokalski/Diff.swift" "0.5.3"
2 | github "ReactiveKit/ReactiveKit" "v3.5.3"
3 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | build/
4 | *.pbxuser
5 | !default.pbxuser
6 | *.mode1v3
7 | !default.mode1v3
8 | *.mode2v3
9 | !default.mode2v3
10 | *.perspectivev3
11 | !default.perspectivev3
12 | xcuserdata
13 | *.xccheckout
14 | *.moved-aside
15 | DerivedData
16 | *.hmap
17 | *.ipa
18 | *.xcuserstate
19 |
20 | **/Carthage/Checkouts
21 | **/Carthage/Build
22 |
23 | #SPM
24 | .build/
25 | .DS_Store
26 |
27 | #Vim
28 | *.swp
29 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Configurations/Deployment-Targets.xcconfig:
--------------------------------------------------------------------------------
1 | IPHONEOS_DEPLOYMENT_TARGET = 8.0
2 | MACOSX_DEPLOYMENT_TARGET = 10.10
3 | TVOS_DEPLOYMENT_TARGET = 9.0
4 | WATCHOS_DEPLOYMENT_TARGET = 3.0
5 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Configurations/Universal-Framework-Target.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Universal-Target-Base.xcconfig"
2 |
3 | // OSX-specific default settings
4 | FRAMEWORK_VERSION[sdk=macosx*] = A
5 | COMBINE_HIDPI_IMAGES[sdk=macosx*] = YES
6 |
7 | // iOS-specific default settings
8 | TARGETED_DEVICE_FAMILY[sdk=iphonesimulator*] = 1,2
9 | TARGETED_DEVICE_FAMILY[sdk=iphone*] = 1,2
10 |
11 | // TV-specific default settings
12 | TARGETED_DEVICE_FAMILY[sdk=appletvsimulator*] = 3
13 | TARGETED_DEVICE_FAMILY[sdk=appletv*] = 3
14 |
15 | // Watch-specific default settings
16 | TARGETED_DEVICE_FAMILY[sdk=watchsimulator*] = 4
17 | TARGETED_DEVICE_FAMILY[sdk=watch*] = 4
18 |
19 | ENABLE_BITCODE[sdk=macosx*] = NO
20 | ENABLE_BITCODE[sdk=watchsimulator*] = YES
21 | ENABLE_BITCODE[sdk=watch*] = YES
22 | ENABLE_BITCODE[sdk=iphonesimulator*] = NO
23 | ENABLE_BITCODE[sdk=iphone*] = YES
24 | ENABLE_BITCODE[sdk=appletvsimulator*] = YES
25 | ENABLE_BITCODE[sdk=appletv*] = YES
26 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Configurations/Universal-Target-Base.xcconfig:
--------------------------------------------------------------------------------
1 | SUPPORTED_PLATFORMS = macosx iphonesimulator iphoneos watchos watchsimulator appletvos appletvsimulator
2 | VALID_ARCHS[sdk=macosx*] = i386 x86_64
3 | VALID_ARCHS[sdk=iphoneos*] = arm64 armv7 armv7s
4 | VALID_ARCHS[sdk=iphonesimulator*] = i386 x86_64
5 | VALID_ARCHS[sdk=watchos*] = armv7k
6 | VALID_ARCHS[sdk=watchsimulator*] = i386
7 | VALID_ARCHS[sdk=appletv*] = arm64
8 | VALID_ARCHS[sdk=appletvsimulator*] = x86_64
9 |
10 | // Dynamic linking uses different default copy paths
11 | LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) '@executable_path/../Frameworks' '@loader_path/../Frameworks'
12 | LD_RUNPATH_SEARCH_PATHS[sdk=iphoneos*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
13 | LD_RUNPATH_SEARCH_PATHS[sdk=iphonesimulator*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
14 | LD_RUNPATH_SEARCH_PATHS[sdk=watchos*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
15 | LD_RUNPATH_SEARCH_PATHS[sdk=watchsimulator*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
16 | LD_RUNPATH_SEARCH_PATHS[sdk=appletvos*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
17 | LD_RUNPATH_SEARCH_PATHS[sdk=appletvsimulator*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
18 |
19 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Diff.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = "Diff"
3 | s.version = "0.5.3"
4 | s.summary = "The fastest Diff library in Swift. Includes UICollectionView/UITableView utils."
5 | s.homepage = "https://github.com/wokalski/Diff.swift"
6 | s.description = <<-DESC
7 | This library generates differences between any two Collections (and Strings). It uses a fast algorithm (O((N+M)*D)). It also includes utilities for UICollectionView/UITableView.
8 | DESC
9 |
10 | s.license = { :type => "MIT", :file => "LICENSE" }
11 |
12 | s.author = { "Wojtek Czekalski" => "me@wczekalski.com" }
13 | s.social_media_url = "https://twitter.com/wokalski"
14 |
15 | s.platforms = { :ios => "8.0", :osx => "10.10", :tvos => "9.0", :watchos => "3.0" }
16 | s.osx.exclude_files = "Sources/Diff+UIKit.swift"
17 | s.watchos.exclude_files = "Sources/Diff+UIKit.swift"
18 |
19 | s.source = { :git => "https://github.com/wokalski/Diff.swift.git", :tag => "0.5.3" }
20 |
21 | s.source_files = "Sources"
22 | end
23 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Diff.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Diff.xcodeproj/xcshareddata/xcbaselines/C9838FF01D29571000691BE8.xcbaseline/5ACB3D1B-D608-4861-BD7C-4E5E202E879C.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | classNames
6 |
7 | BatchUpdateTests
8 |
9 | testCellsPerformance()
10 |
11 | com.apple.XCTPerformanceMetric_WallClockTime
12 |
13 | baselineAverage
14 | 0.14952
15 | baselineIntegrationDisplayName
16 | Local Baseline
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Diff.xcodeproj/xcshareddata/xcbaselines/C9838FF01D29571000691BE8.xcbaseline/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | runDestinationsByUUID
6 |
7 | 5ACB3D1B-D608-4861-BD7C-4E5E202E879C
8 |
9 | localComputer
10 |
11 | busSpeedInMHz
12 | 100
13 | cpuCount
14 | 1
15 | cpuKind
16 | Intel Core i5
17 | cpuSpeedInMHz
18 | 2900
19 | logicalCPUCoresPerPackage
20 | 4
21 | modelCode
22 | MacBookPro12,1
23 | physicalCPUCoresPerPackage
24 | 2
25 | platformIdentifier
26 | com.apple.platform.macosx
27 |
28 | targetArchitecture
29 | i386
30 | targetDevice
31 |
32 | modelCode
33 | iPhone5,1
34 | platformIdentifier
35 | com.apple.platform.iphonesimulator
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/DiffTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Examples/TableViewExample/TableViewExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Examples/TableViewExample/TableViewExample/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | }
43 | ],
44 | "info" : {
45 | "version" : 1,
46 | "author" : "xcode"
47 | }
48 | }
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Examples/TableViewExample/TableViewExample/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UIStatusBarTintParameters
32 |
33 | UINavigationBar
34 |
35 | Style
36 | UIBarStyleDefault
37 | Translucent
38 |
39 |
40 |
41 | UISupportedInterfaceOrientations
42 |
43 | UIInterfaceOrientationPortrait
44 | UIInterfaceOrientationLandscapeLeft
45 | UIInterfaceOrientationLandscapeRight
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Framework/Diff.h:
--------------------------------------------------------------------------------
1 | //
2 | // Diff.swift.h
3 | // Diff.swift
4 | //
5 | // Created by Wojciech Czekalski on 26.04.2016.
6 | // Copyright © 2016 wczekalski. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for Diff.swift.
12 | FOUNDATION_EXPORT double Diff_swiftVersionNumber;
13 |
14 | //! Project version string for Diff.swift.
15 | FOUNDATION_EXPORT const unsigned char Diff_swiftVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Framework/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 0.5.3
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSHumanReadableCopyright
24 | Copyright © 2016 wczekalski. All rights reserved.
25 | NSPrincipalClass
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Graph.playground/Contents.swift:
--------------------------------------------------------------------------------
1 | //: Playground - noun: a place where people can play
2 |
3 | import UIKit
4 | import PlaygroundSupport
5 |
6 | let viewController = GraphViewController(string1: "kitten", string2: "sitting")
7 | viewController.view.frame = CGRect(x: 0, y: 0, width: 500, height: 500)
8 | PlaygroundPage.current.liveView = viewController.view
9 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Graph.playground/Sources/CharacterLabels.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CharacterLabels.swift
3 | // Graph
4 | //
5 | // Created by Wojciech Czekalski on 25.03.2016.
6 | // Copyright © 2016 wczekalski. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public extension String {
12 | func length() -> Int {
13 | return lengthOfBytes(using: String.Encoding.utf8)
14 | }
15 |
16 | func characterLabels(withFrames frames: [CGRect]) -> [UILabel] {
17 | let characters = self.characters
18 |
19 | guard characters.count == frames.count else {
20 | return []
21 | }
22 |
23 | let labels = characters.map { $0.label() }
24 | let sizes = labels.map { $0.frame.size }
25 | let frames = inset(rects: frames, to: sizes)
26 | zip(labels, frames).forEach { label, frame in label.frame = frame }
27 | return labels
28 | }
29 | }
30 |
31 | extension Character {
32 | func label() -> UILabel {
33 | let l = UILabel()
34 | l.textColor = .white
35 | l.text = String(self)
36 | l.sizeToFit()
37 | return l
38 | }
39 | }
40 |
41 | func inset(rects: [CGRect], to: [CGSize]) -> [CGRect] {
42 | return zip(to, rects).map { size, rect -> CGRect in
43 | return rect.inset(to: size)
44 | }
45 | }
46 |
47 | extension CGRect {
48 | func inset(to size: CGSize) -> CGRect {
49 | return self.insetBy(dx: (self.width - size.width) / 2, dy: (self.height - size.height) / 2).standardized
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Graph.playground/Sources/Diff.swift:
--------------------------------------------------------------------------------
1 | ../../Sources/Diff.swift
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Graph.playground/Sources/Patch.swift:
--------------------------------------------------------------------------------
1 | ../../Sources/Patch.swift
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Graph.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 Wojtek Czekalski
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Package.swift:
--------------------------------------------------------------------------------
1 | import PackageDescription
2 |
3 | let package = Package(
4 | name: "Diff",
5 | dependencies: []
6 | )
7 |
8 | products.append(Product(name: "Diff", type: .Library(.Dynamic), modules: ["Diff"]))
9 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark.xcodeproj/Benchmark.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "29x29",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "40x40",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "40x40",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "60x60",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "60x60",
31 | "scale" : "3x"
32 | }
33 | ],
34 | "info" : {
35 | "version" : 1,
36 | "author" : "xcode"
37 | }
38 | }
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Dwifft.swift:
--------------------------------------------------------------------------------
1 |
2 | import Dwifft
3 |
4 | func performDwifft(_ a: [Character], b: [Character]) {
5 | _ = dwifft(a, b: b)
6 | }
7 |
8 | private func dwifft(_ a: [Character], b: [Character]) -> Dwifft.Diff {
9 | return a.diff(b)
10 | }
11 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // Benchmark
4 | //
5 | // Created by Wojciech Czekalski on 26.04.2016.
6 | // Copyright © 2016 wczekalski. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ViewController: UIViewController {
12 |
13 | override func viewDidAppear(_ animated: Bool) {
14 | super.viewDidAppear(animated)
15 |
16 | let from = pathForFile(fileName: "Diff-old")
17 | let to = pathForFile(fileName: "Diff-new")
18 |
19 | let dwifft = performDiff(from, toFilePath: to, diffFunc: performDwifft)
20 | let diff = performDiff(from, toFilePath: to, diffFunc: diffSwift)
21 |
22 | print("Both libraries are compiled with -O -whole-module-optimization\n")
23 | print(" | Diff.swift | Dwifft ")
24 | print("---------|------------|--------")
25 | print(" same | \(diff.same) | \(dwifft.same)")
26 | print(" created | \(diff.created) | \(dwifft.created)")
27 | print(" deleted | \(diff.deleted) | \(dwifft.deleted)")
28 | print(" diff | \(diff.changed) | \(dwifft.changed)")
29 | }
30 | }
31 |
32 | func pathForFile(fileName: String) -> String {
33 | return Bundle.main.path(forResource: fileName, ofType: "swift")!
34 | }
35 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Cartfile:
--------------------------------------------------------------------------------
1 | github "jflinter/Dwifft"
2 |
3 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Cartfile.resolved:
--------------------------------------------------------------------------------
1 | github "jflinter/Dwifft" "0.5"
2 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/PerfTests/build-script:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | mkdir -p build/lib
4 | mkdir -p build/Resources
5 |
6 | swiftc -emit-library -emit-module -module-name Diff ../../Sources/* -Xlinker -install_name -Xlinker @rpath/libDiff.dylib -o ./build/lib/libDiff.dylib -g
7 | swiftc ./main.swift ../Utils/PerformanceTestUtils.swift -o ./build/main -module-link-name Diff -I "./build/lib/" -L "./build/lib" -Xlinker -rpath -Xlinker @loader_path/lib -Xlinker -lDiff -g
8 |
9 | cp ../Utils/Resources/* ./build/Resources/
10 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/PerfTests/main.swift:
--------------------------------------------------------------------------------
1 | //
2 | // main.swift
3 | // PerfTests
4 | //
5 | // Created by Wojciech Czekalski on 27.04.2016.
6 | // Copyright © 2016 wczekalski. All rights reserved.
7 | //
8 |
9 | /**
10 | This is a test file
11 | */
12 |
13 | let resourcesPath = proccessPath().appending("/Resources/")
14 | let from = resourcesPath.appending("Diff-old.swift")
15 | let to = resourcesPath.appending("Diff-new.swift")
16 | let diff = performDiff(fromFilePath: from, toFilePath: to, repeatCount: 5, diffFunc: diffSwift)
17 |
18 | print(" | Diff.swift |")
19 | print("-----------------------")
20 | print(" same | \(diff.same) |")
21 | print(" created | \(diff.created) |")
22 | print(" deleted | \(diff.deleted) |")
23 | print(" diff | \(diff.changed) |")
24 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Sources/Patch+Apply.swift:
--------------------------------------------------------------------------------
1 |
2 | public extension RangeReplaceableCollection where Self.Iterator.Element: Equatable {
3 |
4 | public func apply(_ patch: [Patch]) -> Self {
5 | var mutableSelf = self
6 |
7 | for change in patch {
8 | switch change {
9 | case let .insertion(i, element):
10 | let target = mutableSelf.index(mutableSelf.startIndex, offsetBy: IndexDistance(IntMax(i)))
11 | mutableSelf.insert(element, at: target)
12 | case let .deletion(i):
13 | let target = mutableSelf.index(mutableSelf.startIndex, offsetBy: IndexDistance(IntMax(i)))
14 | mutableSelf.remove(at: target)
15 | }
16 | }
17 |
18 | return mutableSelf
19 | }
20 | }
21 |
22 | public extension String {
23 |
24 | public func apply(_ patch: [Patch]) -> String {
25 | var mutableSelf = self
26 |
27 | for change in patch {
28 | switch change {
29 | case let .insertion(i, element):
30 | let target = mutableSelf.index(mutableSelf.startIndex, offsetBy: IndexDistance(IntMax(i)))
31 | mutableSelf.insert(element, at: target)
32 | case let .deletion(i):
33 | let target = mutableSelf.index(mutableSelf.startIndex, offsetBy: IndexDistance(IntMax(i)))
34 | mutableSelf.remove(at: target)
35 | }
36 | }
37 |
38 | return mutableSelf
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/codecov.yml:
--------------------------------------------------------------------------------
1 | codecov:
2 | notify:
3 | require_ci_to_pass: true
4 | comment:
5 | behavior: default
6 | layout: header, diff
7 | require_changes: false
8 | coverage:
9 | precision: 2
10 | range:
11 | - 70.0
12 | - 100.0
13 | round: down
14 | status:
15 | changes: false
16 | patch: false
17 | project: false
18 | parsers:
19 | gcov:
20 | branch_detection:
21 | conditional: true
22 | loop: true
23 | macro: false
24 | method: false
25 | javascript:
26 | enable_partials: false
27 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | build/
4 | *.pbxuser
5 | !default.pbxuser
6 | *.mode1v3
7 | !default.mode1v3
8 | *.mode2v3
9 | !default.mode2v3
10 | *.perspectivev3
11 | !default.perspectivev3
12 | xcuserdata
13 | *.xccheckout
14 | *.moved-aside
15 | DerivedData
16 | *.hmap
17 | *.ipa
18 | *.xcuserstate
19 | .DS_Store
20 |
21 | # CocoaPods
22 | #
23 | # We recommend against adding the Pods directory to your .gitignore. However
24 | # you should judge for yourself, the pros and cons are mentioned at:
25 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
26 | #
27 | # Pods/
28 |
29 | # Carthage
30 | #
31 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
32 | # Carthage/Checkouts
33 |
34 | Carthage/Build
35 |
36 | # Swift Package Manager
37 |
38 | .build
39 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/.gitmodules:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ReactiveKit/ReactiveGitter/3064285e567aa6489414d7fe2b7fade81ae785bf/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/.gitmodules
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/.swift-version:
--------------------------------------------------------------------------------
1 | 3.0-GM-CANDIDATE
2 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/.travis.yml:
--------------------------------------------------------------------------------
1 | language: objective-c
2 | osx_image: xcode8.2
3 |
4 | script:
5 | - set -o pipefail && xcodebuild -project ReactiveKit.xcodeproj -scheme ReactiveKit-iOS -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6s,OS=10.0' test | xcpretty
6 | - set -o pipefail && swift build
7 | - set -o pipefail && swift test
8 |
9 | after_success:
10 | - bash <(curl -s https://codecov.io/bash)
11 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/Assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ReactiveKit/ReactiveGitter/3064285e567aa6489414d7fe2b7fade81ae785bf/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/Assets/logo.png
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 ReactiveKit
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/Package.swift:
--------------------------------------------------------------------------------
1 | import PackageDescription
2 |
3 | let package = Package(
4 | name: "ReactiveKit"
5 | )
6 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/Playground.playground/Contents.swift:
--------------------------------------------------------------------------------
1 | //: Playground - noun: a place where people can play
2 |
3 | import ReactiveKit
4 | import PlaygroundSupport
5 |
6 | var p: Property! = Property(1)
7 | weak var wp: Property? = p
8 |
9 | SafeSignal.interval(1, queue: .main).map { $0 }.debug("test signal").bind(to: p)
10 |
11 | DispatchQueue.main.after(when: 3.3) {
12 | p = nil
13 | wp
14 | }
15 |
16 | PlaygroundPage.current.needsIndefiniteExecution = true
17 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/Playground.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/ReactiveKit.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = "ReactiveKit"
3 | s.version = "3.5.3"
4 | s.summary = "A Swift Reactive Programming Framework"
5 | s.description = "ReactiveKit is a Swift framework for reactive and functional reactive programming."
6 | s.homepage = "https://github.com/ReactiveKit/ReactiveKit"
7 | s.license = 'MIT'
8 | s.author = { "Srdan Rasic" => "srdan.rasic@gmail.com" }
9 | s.source = { :git => "https://github.com/ReactiveKit/ReactiveKit.git", :tag => "v3.5.3" }
10 |
11 | s.ios.deployment_target = '8.0'
12 | s.osx.deployment_target = '10.9'
13 | s.watchos.deployment_target = '2.0'
14 | s.tvos.deployment_target = '9.0'
15 |
16 | s.source_files = 'Sources/*.swift', 'ReactiveKit/*.{h,m}'
17 | s.requires_arc = true
18 | end
19 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/ReactiveKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/ReactiveKit.xcodeproj/xcshareddata/xcbaselines/ECBCCDD91BEB6B9B00723476.xcbaseline/15721443-CEB9-478C-919D-711F1A7CCA56.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | classNames
6 |
7 | SignalTests
8 |
9 | testPerformance()
10 |
11 | com.apple.XCTPerformanceMetric_WallClockTime
12 |
13 | baselineAverage
14 | 0.077
15 | baselineIntegrationDisplayName
16 | Local Baseline
17 | maxPercentRelativeStandardDeviation
18 | 20
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/ReactiveKit.xcodeproj/xcshareddata/xcbaselines/ECBCCDD91BEB6B9B00723476.xcbaseline/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | runDestinationsByUUID
6 |
7 | 15721443-CEB9-478C-919D-711F1A7CCA56
8 |
9 | localComputer
10 |
11 | busSpeedInMHz
12 | 100
13 | cpuCount
14 | 1
15 | cpuKind
16 | Intel Core i5
17 | cpuSpeedInMHz
18 | 2700
19 | logicalCPUCoresPerPackage
20 | 4
21 | modelCode
22 | MacBookPro12,1
23 | physicalCPUCoresPerPackage
24 | 2
25 | platformIdentifier
26 | com.apple.platform.macosx
27 |
28 | targetArchitecture
29 | x86_64
30 | targetDevice
31 |
32 | modelCode
33 | iPhone9,2
34 | platformIdentifier
35 | com.apple.platform.iphonesimulator
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/ReactiveKit.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/ReactiveKit/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 3.5.3
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/ReactiveKit/ReactiveKit.h:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2015 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #import
26 |
27 | //! Project version number for ReactiveKit.
28 | FOUNDATION_EXPORT double ReactiveKitVersionNumber;
29 |
30 | //! Project version string for ReactiveKit.
31 | FOUNDATION_EXPORT const unsigned char ReactiveKitVersionString[];
32 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/ReactiveKitTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/Sources/NoError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | /// An error type that cannot be instantiated. Used to make signals non-failable.
26 | public enum NoError: Error {
27 | }
28 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/Tests/ReactiveKitTests/ResultTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ResultTests.swift
3 | // ReactiveKit
4 | //
5 | // Created by Srdan Rasic on 22/10/2016.
6 | // Copyright © 2016 Srdan Rasic. All rights reserved.
7 | //
8 |
9 | import XCTest
10 | import ReactiveKit
11 |
12 | class ResultTests: XCTestCase {
13 |
14 | func testSuccess() {
15 | let result = Result(5)
16 |
17 | XCTAssert(result.error == nil)
18 | XCTAssert(result.value != nil && result.value! == 5)
19 | }
20 |
21 | func testFailured() {
22 | let result = Result(.Error)
23 |
24 | XCTAssert(result.error != nil && result.error! == .Error)
25 | XCTAssert(result.value == nil)
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015-2016 Bond
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Package.pins:
--------------------------------------------------------------------------------
1 | {
2 | "autoPin": true,
3 | "pins": [
4 | {
5 | "package": "Diff",
6 | "reason": null,
7 | "repositoryURL": "https://github.com/wokalski/Diff.swift.git",
8 | "version": "0.5.3"
9 | },
10 | {
11 | "package": "ReactiveKit",
12 | "reason": null,
13 | "repositoryURL": "https://github.com/ReactiveKit/ReactiveKit.git",
14 | "version": "3.5.1"
15 | }
16 | ],
17 | "version": 1
18 | }
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Package.swift:
--------------------------------------------------------------------------------
1 | import PackageDescription
2 |
3 | let package = Package(
4 | name: "Bond",
5 | targets: [
6 | Target(name: "BNDProtocolProxyBase"),
7 | Target(name: "Bond", dependencies: ["BNDProtocolProxyBase"])
8 | ],
9 | dependencies: [
10 | .Package(url: "https://github.com/ReactiveKit/ReactiveKit.git", versions: Version(3, 5, 3)...self).observe { event in
16 | print(event)
17 | }
18 |
19 | test.test = "a"
20 | test.test = nil
21 | test.test = "g"
22 |
23 | Signal1.just("c").bind(to: test.dynamic(keyPath: "test", ofType: Optional.self))
24 |
25 | test = nil
26 | weakTest
27 |
28 | //: [Next](@next)
29 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Playground.playground/Pages/Table View Binding.xcplaygroundpage/Contents.swift:
--------------------------------------------------------------------------------
1 | //: Playground - noun: a place where people can play
2 |
3 | import UIKit
4 | import Bond
5 | import ReactiveKit
6 | import PlaygroundSupport
7 |
8 | // Turn on the Assistant Editor to see the table view!
9 |
10 | let me = UIView()
11 |
12 | extension UIView {
13 |
14 | open override var bindingExecutionContext: ExecutionContext {
15 | return .immediate
16 | }
17 | }
18 |
19 | //: [Next](@next)
20 |
21 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Playground.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/AppKit/NSAppearanceCustomization.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Tony Arnold (@tonyarnold)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #if os(macOS)
26 |
27 | import AppKit
28 | import ReactiveKit
29 |
30 | public extension ReactiveExtensions where Base: NSObject, Base: NSAppearanceCustomization {
31 |
32 | public var appearance: Bond {
33 | return bond(context: .immediateOnMain) { $0.appearance = $1 }
34 | }
35 | }
36 |
37 | #endif
38 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/AppKit/NSColorWell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Tony Arnold (@tonyarnold)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #if os(macOS)
26 |
27 | import AppKit
28 | import ReactiveKit
29 |
30 | public extension ReactiveExtensions where Base: NSColorWell {
31 |
32 | public var color: DynamicSubject {
33 | return dynamicSubject(
34 | signal: controlEvent.eraseType(),
35 | triggerEventOnSetting: false,
36 | get: { $0.color },
37 | set: { $0.color = $1 }
38 | )
39 | }
40 |
41 | public var isBordered: Bond {
42 | return bond { $0.isBordered = $1 }
43 | }
44 | }
45 |
46 | #endif
47 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/AppKit/NSMenuItem.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Tony Arnold (@tonyarnold)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #if os(macOS)
26 |
27 | import AppKit
28 | import ReactiveKit
29 |
30 | extension NSMenuItem: BindingExecutionContextProvider {
31 | public var bindingExecutionContext: ExecutionContext { return .immediateOnMain }
32 | }
33 |
34 | public extension ReactiveExtensions where Base: NSMenuItem {
35 |
36 | public var state: Bond {
37 | return bond { $0.state = $1 }
38 | }
39 |
40 | public var isEnabled: Bond {
41 | return bond { $0.isEnabled = $1 }
42 | }
43 | }
44 |
45 | #endif
46 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/AppKit/NSStatusBarButton.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Tony Arnold (@tonyarnold)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #if os(macOS)
26 |
27 | import AppKit
28 | import ReactiveKit
29 |
30 | public extension ReactiveExtensions where Base: NSStatusBarButton {
31 |
32 | public var appearsDisabled: Bond {
33 | return bond { $0.appearsDisabled = $1 }
34 | }
35 | }
36 |
37 | #endif
38 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/AppKit/NSTextView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Tony Arnold (@tonyarnold)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #if os(macOS)
26 |
27 | import AppKit
28 | import ReactiveKit
29 |
30 | public extension ReactiveExtensions where Base: NSTextView {
31 |
32 | public var string: DynamicSubject {
33 | let notificationName = NSNotification.Name.NSTextDidChange
34 | return dynamicSubject(
35 | signal: NotificationCenter.default.reactive.notification(name: notificationName, object: base).eraseType(),
36 | get: { $0.string },
37 | set: { $0.string = $1 }
38 | )
39 | }
40 | }
41 |
42 | #endif
43 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/Observable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | import ReactiveKit
26 |
27 | public typealias Observable = Property
28 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/QueryableDataSource.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2017 Tony Arnold (@tonyarnold)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | public protocol QueryableDataSourceProtocol: DataSourceProtocol {
26 | associatedtype Item
27 | associatedtype Index
28 |
29 | func item(at index: Index) -> Item
30 | }
31 |
32 | extension Array: QueryableDataSourceProtocol {
33 |
34 | public func item(at index: Int) -> Iterator.Element {
35 | return self[index]
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/Shared/CALayer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | import QuartzCore
26 | import ReactiveKit
27 |
28 | extension CALayer: BindingExecutionContextProvider {
29 | public var bindingExecutionContext: ExecutionContext { return .immediateOnMain }
30 | }
31 |
32 | public extension ReactiveExtensions where Base: CALayer {
33 |
34 | public var opacity: Bond {
35 | return bond { $0.opacity = $1 }
36 | }
37 |
38 | public var backgroundColor: Bond {
39 | return bond { $0.backgroundColor = $1 }
40 | }
41 |
42 | public var contents: Bond {
43 | return bond { $0.contents = $1 }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/Shared/NSLayoutConstraint.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #if os(macOS)
26 | import AppKit
27 | #else
28 | import UIKit
29 | #endif
30 |
31 | import ReactiveKit
32 |
33 | extension NSLayoutConstraint: BindingExecutionContextProvider {
34 | public var bindingExecutionContext: ExecutionContext { return .immediateOnMain }
35 | }
36 |
37 | public extension ReactiveExtensions where Base: NSLayoutConstraint {
38 |
39 | public var isActive: Bond {
40 | return bond { $0.isActive = $1 }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/Shared/SignalProtocol.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SignalProtocol.swift
3 | // Bond
4 | //
5 | // Created by Srdan Rasic on 14/12/2016.
6 | // Copyright © 2016 Swift Bond. All rights reserved.
7 | //
8 |
9 | import ReactiveKit
10 |
11 | extension SignalProtocol {
12 |
13 | #if os(iOS) || os(tvOS)
14 |
15 | /// Fires an event on start and every `interval` seconds as long as the app is in foreground.
16 | /// Pauses when the app goes to background. Restarts when the app is back in foreground.
17 | public static func heartbeat(interval seconds: Double) -> Signal {
18 | let willEnterForeground = NotificationCenter.default.reactive.notification(name: .UIApplicationWillEnterForeground)
19 | let didEnterBackgorund = NotificationCenter.default.reactive.notification(name: .UIApplicationDidEnterBackground)
20 | return willEnterForeground.replace(with: ()).start(with: ()).flatMapLatest { () -> Signal in
21 | return Signal.interval(seconds, queue: .global()).replace(with: ()).start(with: ()).take(until: didEnterBackgorund)
22 | }
23 | }
24 |
25 | #endif
26 | }
27 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/UIKit/UIAccessibilityIdentification.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIAI.swift
3 | // Bond
4 | //
5 | // Created by Srdan Rasic on 02/04/2017.
6 | // Copyright © 2017 Swift Bond. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(tvOS)
10 |
11 | import UIKit
12 | import ReactiveKit
13 |
14 | extension ReactiveExtensions where Base: Deallocatable, Base: UIAccessibilityIdentification {
15 |
16 | var accessibilityIdentifier: Bond {
17 | return bond(context: .immediateOnMain) {
18 | $0.accessibilityIdentifier = $1
19 | }
20 | }
21 | }
22 |
23 | #endif
24 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/UIKit/UIApplication.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #if os(iOS) || os(tvOS)
26 |
27 | import UIKit
28 | import ReactiveKit
29 |
30 | public extension ReactiveExtensions where Base: UIApplication {
31 |
32 | #if os(iOS)
33 | public var isNetworkActivityIndicatorVisible: Bond {
34 | return bond { $0.isNetworkActivityIndicatorVisible = $1 }
35 | }
36 | #endif
37 | }
38 |
39 | #endif
40 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/UIKit/UIDatePicker.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #if os(iOS)
26 |
27 | import UIKit
28 | import ReactiveKit
29 |
30 | public extension ReactiveExtensions where Base: UIDatePicker {
31 |
32 | public var date: DynamicSubject {
33 | return dynamicSubject(
34 | signal: controlEvents(.valueChanged).eraseType(),
35 | get: { $0.date },
36 | set: { $0.date = $1 }
37 | )
38 | }
39 | }
40 |
41 | extension UIDatePicker: BindableProtocol {
42 |
43 | public func bind(signal: Signal) -> Disposable {
44 | return reactive.date.bind(signal: signal)
45 | }
46 | }
47 |
48 | #endif
49 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/UIKit/UIGestureRecognizer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Sam Galizia (@sgalizia)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #if os(iOS) || os(tvOS)
26 |
27 | import UIKit
28 | import ReactiveKit
29 |
30 | extension UIGestureRecognizer: BindingExecutionContextProvider {
31 | public var bindingExecutionContext: ExecutionContext { return .immediateOnMain }
32 | }
33 |
34 | public extension ReactiveExtensions where Base: UIGestureRecognizer {
35 |
36 | public var isEnabled: Bond {
37 | return bond { $0.isEnabled = $1 }
38 | }
39 | }
40 |
41 | #endif
42 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/UIKit/UIImageView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #if os(iOS) || os(tvOS)
26 |
27 | import UIKit
28 | import ReactiveKit
29 |
30 | public extension ReactiveExtensions where Base: UIImageView {
31 |
32 | public var image: Bond {
33 | return bond { $0.image = $1 }
34 | }
35 | }
36 |
37 | extension UIImageView: BindableProtocol {
38 |
39 | public func bind(signal: Signal) -> Disposable {
40 | return reactive.image.bind(signal: signal)
41 | }
42 | }
43 |
44 | #endif
45 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/UIKit/UINavigationBar.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #if os(iOS) || os(tvOS)
26 |
27 | import UIKit
28 | import ReactiveKit
29 |
30 | public extension ReactiveExtensions where Base: UINavigationBar {
31 |
32 | public var barTintColor: Bond {
33 | return bond { $0.barTintColor = $1 }
34 | }
35 | }
36 |
37 | #endif
38 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/UIKit/UINavigationItem.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #if os(iOS) || os(tvOS)
26 |
27 | import UIKit
28 | import ReactiveKit
29 |
30 | extension UINavigationItem: BindingExecutionContextProvider {
31 | public var bindingExecutionContext: ExecutionContext { return .immediateOnMain }
32 | }
33 |
34 | public extension ReactiveExtensions where Base: UINavigationItem {
35 |
36 | public var title: Bond {
37 | return bond { $0.title = $1 }
38 | }
39 | }
40 |
41 | #endif
42 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/UIKit/UIProgressView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #if os(iOS) || os(tvOS)
26 |
27 | import ReactiveKit
28 | import UIKit
29 |
30 | public extension ReactiveExtensions where Base: UIProgressView {
31 |
32 | public var progress: Bond {
33 | return bond { $0.progress = $1 }
34 | }
35 | }
36 |
37 | extension UIProgressView: BindableProtocol {
38 |
39 | public func bind(signal: Signal) -> Disposable {
40 | return reactive.progress.bind(signal: signal)
41 | }
42 | }
43 |
44 | #endif
45 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/UIKit/UISlider.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #if os(iOS)
26 |
27 | import UIKit
28 | import ReactiveKit
29 |
30 | public extension ReactiveExtensions where Base: UISlider {
31 |
32 | public var value: DynamicSubject {
33 | return dynamicSubject(
34 | signal: controlEvents(.valueChanged).eraseType(),
35 | get: { $0.value },
36 | set: { $0.value = $1 }
37 | )
38 | }
39 | }
40 |
41 | extension UISlider: BindableProtocol {
42 |
43 | public func bind(signal: Signal) -> Disposable {
44 | return reactive.value.bind(signal: signal)
45 | }
46 | }
47 |
48 | #endif
49 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/UIKit/UIStepper.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #if os(iOS)
26 |
27 | import UIKit
28 | import ReactiveKit
29 |
30 | public extension ReactiveExtensions where Base: UIStepper {
31 |
32 | public var value: DynamicSubject {
33 | return dynamicSubject(
34 | signal: controlEvents(.valueChanged).eraseType(),
35 | get: { $0.value },
36 | set: { $0.value = $1 }
37 | )
38 | }
39 | }
40 |
41 | extension UIStepper: BindableProtocol {
42 |
43 | public func bind(signal: Signal) -> Disposable {
44 | return reactive.value.bind(signal: signal)
45 | }
46 | }
47 |
48 | #endif
49 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Sources/Bond/UIKit/UISwitch.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #if os(iOS)
26 |
27 | import UIKit
28 | import ReactiveKit
29 |
30 | public extension ReactiveExtensions where Base: UISwitch {
31 |
32 | public var isOn: DynamicSubject {
33 | return dynamicSubject(
34 | signal: controlEvents(.valueChanged).eraseType(),
35 | get: { $0.isOn },
36 | set: { $0.isOn = $1 }
37 | )
38 | }
39 | }
40 |
41 | extension UISwitch: BindableProtocol {
42 |
43 | public func bind(signal: Signal) -> Disposable {
44 | return reactive.isOn.bind(signal: signal)
45 | }
46 | }
47 |
48 | #endif
49 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Supporting Files/Bond-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 6.2.5
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Supporting Files/Bond.h:
--------------------------------------------------------------------------------
1 | //
2 | // Bond.h
3 | // Bond
4 | //
5 | // Created by Srdan Rasic on 19/07/16.
6 | // Copyright © 2016 Swift Bond. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | //! Project version number for Bond.
13 | FOUNDATION_EXPORT double BondVersionNumber;
14 |
15 | //! Project version string for Bond.
16 | FOUNDATION_EXPORT const unsigned char BondVersionString[];
17 |
18 | // In this header, you should import all the public headers of your framework using statements like #import
19 |
20 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Supporting Files/BondTests-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Bond/Tests/BondTests/BondTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BondTests.swift
3 | // Bond
4 | //
5 | // Created by Srdan Rasic on 19/09/16.
6 | // Copyright © 2016 Swift Bond. All rights reserved.
7 | //
8 |
9 | import XCTest
10 | import ReactiveKit
11 | @testable import Bond
12 |
13 | private class DummyTarget: NSObject {
14 | var recordedElements: [Int] = []
15 | }
16 |
17 | class BondTypeTests: XCTestCase {
18 |
19 | // Update closure is called on each next element
20 | func testExecutes() {
21 | let target = DummyTarget()
22 | let bond = Bond(target: target, context: .immediate) { target, element in
23 | target.recordedElements.append(element)
24 | }
25 |
26 | SafeSignal.sequence([1, 2, 3]).bind(to: bond)
27 | XCTAssert(target.recordedElements == [1, 2, 3])
28 | }
29 |
30 | // Target is weakly referenced
31 | // Disposable is disposed when target is deallocated
32 | func testDisposesOnTargetDeallocation() {
33 | var target: DummyTarget! = DummyTarget()
34 | weak var weakTarget = target
35 |
36 | let bond = Bond(target: target, context: .immediate) { target, element in
37 | target.recordedElements.append(element)
38 | }
39 |
40 | let subject = PublishSubject1()
41 |
42 | let disposable = subject.bind(to: bond)
43 |
44 | subject.next(1)
45 | XCTAssert(weakTarget != nil)
46 | XCTAssert(disposable.isDisposed == false)
47 | XCTAssert(target.recordedElements == [1])
48 |
49 | target = nil
50 | subject.next(2)
51 | XCTAssert(weakTarget == nil)
52 | XCTAssert(disposable.isDisposed == true)
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | build/
4 | *.pbxuser
5 | !default.pbxuser
6 | *.mode1v3
7 | !default.mode1v3
8 | *.mode2v3
9 | !default.mode2v3
10 | *.perspectivev3
11 | !default.perspectivev3
12 | xcuserdata
13 | *.xccheckout
14 | *.moved-aside
15 | DerivedData
16 | *.hmap
17 | *.ipa
18 | *.xcuserstate
19 |
20 | **/Carthage/Checkouts
21 | **/Carthage/Build
22 |
23 | #SPM
24 | .build/
25 | .DS_Store
26 |
27 | #Vim
28 | *.swp
29 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Configurations/Deployment-Targets.xcconfig:
--------------------------------------------------------------------------------
1 | IPHONEOS_DEPLOYMENT_TARGET = 8.0
2 | MACOSX_DEPLOYMENT_TARGET = 10.10
3 | TVOS_DEPLOYMENT_TARGET = 9.0
4 | WATCHOS_DEPLOYMENT_TARGET = 3.0
5 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Configurations/Universal-Framework-Target.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Universal-Target-Base.xcconfig"
2 |
3 | // OSX-specific default settings
4 | FRAMEWORK_VERSION[sdk=macosx*] = A
5 | COMBINE_HIDPI_IMAGES[sdk=macosx*] = YES
6 |
7 | // iOS-specific default settings
8 | TARGETED_DEVICE_FAMILY[sdk=iphonesimulator*] = 1,2
9 | TARGETED_DEVICE_FAMILY[sdk=iphone*] = 1,2
10 |
11 | // TV-specific default settings
12 | TARGETED_DEVICE_FAMILY[sdk=appletvsimulator*] = 3
13 | TARGETED_DEVICE_FAMILY[sdk=appletv*] = 3
14 |
15 | // Watch-specific default settings
16 | TARGETED_DEVICE_FAMILY[sdk=watchsimulator*] = 4
17 | TARGETED_DEVICE_FAMILY[sdk=watch*] = 4
18 |
19 | ENABLE_BITCODE[sdk=macosx*] = NO
20 | ENABLE_BITCODE[sdk=watchsimulator*] = YES
21 | ENABLE_BITCODE[sdk=watch*] = YES
22 | ENABLE_BITCODE[sdk=iphonesimulator*] = NO
23 | ENABLE_BITCODE[sdk=iphone*] = YES
24 | ENABLE_BITCODE[sdk=appletvsimulator*] = YES
25 | ENABLE_BITCODE[sdk=appletv*] = YES
26 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Configurations/Universal-Target-Base.xcconfig:
--------------------------------------------------------------------------------
1 | SUPPORTED_PLATFORMS = macosx iphonesimulator iphoneos watchos watchsimulator appletvos appletvsimulator
2 | VALID_ARCHS[sdk=macosx*] = i386 x86_64
3 | VALID_ARCHS[sdk=iphoneos*] = arm64 armv7 armv7s
4 | VALID_ARCHS[sdk=iphonesimulator*] = i386 x86_64
5 | VALID_ARCHS[sdk=watchos*] = armv7k
6 | VALID_ARCHS[sdk=watchsimulator*] = i386
7 | VALID_ARCHS[sdk=appletv*] = arm64
8 | VALID_ARCHS[sdk=appletvsimulator*] = x86_64
9 |
10 | // Dynamic linking uses different default copy paths
11 | LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) '@executable_path/../Frameworks' '@loader_path/../Frameworks'
12 | LD_RUNPATH_SEARCH_PATHS[sdk=iphoneos*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
13 | LD_RUNPATH_SEARCH_PATHS[sdk=iphonesimulator*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
14 | LD_RUNPATH_SEARCH_PATHS[sdk=watchos*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
15 | LD_RUNPATH_SEARCH_PATHS[sdk=watchsimulator*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
16 | LD_RUNPATH_SEARCH_PATHS[sdk=appletvos*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
17 | LD_RUNPATH_SEARCH_PATHS[sdk=appletvsimulator*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
18 |
19 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Diff.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = "Diff"
3 | s.version = "0.5.3"
4 | s.summary = "The fastest Diff library in Swift. Includes UICollectionView/UITableView utils."
5 | s.homepage = "https://github.com/wokalski/Diff.swift"
6 | s.description = <<-DESC
7 | This library generates differences between any two Collections (and Strings). It uses a fast algorithm (O((N+M)*D)). It also includes utilities for UICollectionView/UITableView.
8 | DESC
9 |
10 | s.license = { :type => "MIT", :file => "LICENSE" }
11 |
12 | s.author = { "Wojtek Czekalski" => "me@wczekalski.com" }
13 | s.social_media_url = "https://twitter.com/wokalski"
14 |
15 | s.platforms = { :ios => "8.0", :osx => "10.10", :tvos => "9.0", :watchos => "3.0" }
16 | s.osx.exclude_files = "Sources/Diff+UIKit.swift"
17 | s.watchos.exclude_files = "Sources/Diff+UIKit.swift"
18 |
19 | s.source = { :git => "https://github.com/wokalski/Diff.swift.git", :tag => "0.5.3" }
20 |
21 | s.source_files = "Sources"
22 | end
23 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Diff.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Diff.xcodeproj/xcshareddata/xcbaselines/C9838FF01D29571000691BE8.xcbaseline/5ACB3D1B-D608-4861-BD7C-4E5E202E879C.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | classNames
6 |
7 | BatchUpdateTests
8 |
9 | testCellsPerformance()
10 |
11 | com.apple.XCTPerformanceMetric_WallClockTime
12 |
13 | baselineAverage
14 | 0.14952
15 | baselineIntegrationDisplayName
16 | Local Baseline
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Diff.xcodeproj/xcshareddata/xcbaselines/C9838FF01D29571000691BE8.xcbaseline/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | runDestinationsByUUID
6 |
7 | 5ACB3D1B-D608-4861-BD7C-4E5E202E879C
8 |
9 | localComputer
10 |
11 | busSpeedInMHz
12 | 100
13 | cpuCount
14 | 1
15 | cpuKind
16 | Intel Core i5
17 | cpuSpeedInMHz
18 | 2900
19 | logicalCPUCoresPerPackage
20 | 4
21 | modelCode
22 | MacBookPro12,1
23 | physicalCPUCoresPerPackage
24 | 2
25 | platformIdentifier
26 | com.apple.platform.macosx
27 |
28 | targetArchitecture
29 | i386
30 | targetDevice
31 |
32 | modelCode
33 | iPhone5,1
34 | platformIdentifier
35 | com.apple.platform.iphonesimulator
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/DiffTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Examples/TableViewExample/TableViewExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Examples/TableViewExample/TableViewExample/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | }
43 | ],
44 | "info" : {
45 | "version" : 1,
46 | "author" : "xcode"
47 | }
48 | }
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Examples/TableViewExample/TableViewExample/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UIStatusBarTintParameters
32 |
33 | UINavigationBar
34 |
35 | Style
36 | UIBarStyleDefault
37 | Translucent
38 |
39 |
40 |
41 | UISupportedInterfaceOrientations
42 |
43 | UIInterfaceOrientationPortrait
44 | UIInterfaceOrientationLandscapeLeft
45 | UIInterfaceOrientationLandscapeRight
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Framework/Diff.h:
--------------------------------------------------------------------------------
1 | //
2 | // Diff.swift.h
3 | // Diff.swift
4 | //
5 | // Created by Wojciech Czekalski on 26.04.2016.
6 | // Copyright © 2016 wczekalski. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for Diff.swift.
12 | FOUNDATION_EXPORT double Diff_swiftVersionNumber;
13 |
14 | //! Project version string for Diff.swift.
15 | FOUNDATION_EXPORT const unsigned char Diff_swiftVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Framework/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 0.5.3
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSHumanReadableCopyright
24 | Copyright © 2016 wczekalski. All rights reserved.
25 | NSPrincipalClass
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Graph.playground/Contents.swift:
--------------------------------------------------------------------------------
1 | //: Playground - noun: a place where people can play
2 |
3 | import UIKit
4 | import PlaygroundSupport
5 |
6 | let viewController = GraphViewController(string1: "kitten", string2: "sitting")
7 | viewController.view.frame = CGRect(x: 0, y: 0, width: 500, height: 500)
8 | PlaygroundPage.current.liveView = viewController.view
9 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Graph.playground/Sources/CharacterLabels.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CharacterLabels.swift
3 | // Graph
4 | //
5 | // Created by Wojciech Czekalski on 25.03.2016.
6 | // Copyright © 2016 wczekalski. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public extension String {
12 | func length() -> Int {
13 | return lengthOfBytes(using: String.Encoding.utf8)
14 | }
15 |
16 | func characterLabels(withFrames frames: [CGRect]) -> [UILabel] {
17 | let characters = self.characters
18 |
19 | guard characters.count == frames.count else {
20 | return []
21 | }
22 |
23 | let labels = characters.map { $0.label() }
24 | let sizes = labels.map { $0.frame.size }
25 | let frames = inset(rects: frames, to: sizes)
26 | zip(labels, frames).forEach { label, frame in label.frame = frame }
27 | return labels
28 | }
29 | }
30 |
31 | extension Character {
32 | func label() -> UILabel {
33 | let l = UILabel()
34 | l.textColor = .white
35 | l.text = String(self)
36 | l.sizeToFit()
37 | return l
38 | }
39 | }
40 |
41 | func inset(rects: [CGRect], to: [CGSize]) -> [CGRect] {
42 | return zip(to, rects).map { size, rect -> CGRect in
43 | return rect.inset(to: size)
44 | }
45 | }
46 |
47 | extension CGRect {
48 | func inset(to size: CGSize) -> CGRect {
49 | return self.insetBy(dx: (self.width - size.width) / 2, dy: (self.height - size.height) / 2).standardized
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Graph.playground/Sources/Diff.swift:
--------------------------------------------------------------------------------
1 | ../../Sources/Diff.swift
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Graph.playground/Sources/Patch.swift:
--------------------------------------------------------------------------------
1 | ../../Sources/Patch.swift
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Graph.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 Wojtek Czekalski
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Package.swift:
--------------------------------------------------------------------------------
1 | import PackageDescription
2 |
3 | let package = Package(
4 | name: "Diff",
5 | dependencies: []
6 | )
7 |
8 | products.append(Product(name: "Diff", type: .Library(.Dynamic), modules: ["Diff"]))
9 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark.xcodeproj/Benchmark.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "29x29",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "40x40",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "40x40",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "60x60",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "60x60",
31 | "scale" : "3x"
32 | }
33 | ],
34 | "info" : {
35 | "version" : 1,
36 | "author" : "xcode"
37 | }
38 | }
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Dwifft.swift:
--------------------------------------------------------------------------------
1 |
2 | import Dwifft
3 |
4 | func performDwifft(_ a: [Character], b: [Character]) {
5 | _ = dwifft(a, b: b)
6 | }
7 |
8 | private func dwifft(_ a: [Character], b: [Character]) -> Dwifft.Diff {
9 | return a.diff(b)
10 | }
11 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // Benchmark
4 | //
5 | // Created by Wojciech Czekalski on 26.04.2016.
6 | // Copyright © 2016 wczekalski. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ViewController: UIViewController {
12 |
13 | override func viewDidAppear(_ animated: Bool) {
14 | super.viewDidAppear(animated)
15 |
16 | let from = pathForFile(fileName: "Diff-old")
17 | let to = pathForFile(fileName: "Diff-new")
18 |
19 | let dwifft = performDiff(from, toFilePath: to, diffFunc: performDwifft)
20 | let diff = performDiff(from, toFilePath: to, diffFunc: diffSwift)
21 |
22 | print("Both libraries are compiled with -O -whole-module-optimization\n")
23 | print(" | Diff.swift | Dwifft ")
24 | print("---------|------------|--------")
25 | print(" same | \(diff.same) | \(dwifft.same)")
26 | print(" created | \(diff.created) | \(dwifft.created)")
27 | print(" deleted | \(diff.deleted) | \(dwifft.deleted)")
28 | print(" diff | \(diff.changed) | \(dwifft.changed)")
29 | }
30 | }
31 |
32 | func pathForFile(fileName: String) -> String {
33 | return Bundle.main.path(forResource: fileName, ofType: "swift")!
34 | }
35 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Cartfile:
--------------------------------------------------------------------------------
1 | github "jflinter/Dwifft"
2 |
3 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Cartfile.resolved:
--------------------------------------------------------------------------------
1 | github "jflinter/Dwifft" "0.5"
2 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/PerfTests/PerfTests/build-script:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | mkdir -p build/lib
4 | mkdir -p build/Resources
5 |
6 | swiftc -emit-library -emit-module -module-name Diff ../../Sources/* -Xlinker -install_name -Xlinker @rpath/libDiff.dylib -o ./build/lib/libDiff.dylib -g
7 | swiftc ./main.swift ../Utils/PerformanceTestUtils.swift -o ./build/main -module-link-name Diff -I "./build/lib/" -L "./build/lib" -Xlinker -rpath -Xlinker @loader_path/lib -Xlinker -lDiff -g
8 |
9 | cp ../Utils/Resources/* ./build/Resources/
10 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/PerfTests/PerfTests/main.swift:
--------------------------------------------------------------------------------
1 | //
2 | // main.swift
3 | // PerfTests
4 | //
5 | // Created by Wojciech Czekalski on 27.04.2016.
6 | // Copyright © 2016 wczekalski. All rights reserved.
7 | //
8 |
9 | /**
10 | This is a test file
11 | */
12 |
13 | let resourcesPath = proccessPath().appending("/Resources/")
14 | let from = resourcesPath.appending("Diff-old.swift")
15 | let to = resourcesPath.appending("Diff-new.swift")
16 | let diff = performDiff(fromFilePath: from, toFilePath: to, repeatCount: 5, diffFunc: diffSwift)
17 |
18 | print(" | Diff.swift |")
19 | print("-----------------------")
20 | print(" same | \(diff.same) |")
21 | print(" created | \(diff.created) |")
22 | print(" deleted | \(diff.deleted) |")
23 | print(" diff | \(diff.changed) |")
24 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/Sources/Patch+Apply.swift:
--------------------------------------------------------------------------------
1 |
2 | public extension RangeReplaceableCollection where Self.Iterator.Element: Equatable {
3 |
4 | public func apply(_ patch: [Patch]) -> Self {
5 | var mutableSelf = self
6 |
7 | for change in patch {
8 | switch change {
9 | case let .insertion(i, element):
10 | let target = mutableSelf.index(mutableSelf.startIndex, offsetBy: IndexDistance(IntMax(i)))
11 | mutableSelf.insert(element, at: target)
12 | case let .deletion(i):
13 | let target = mutableSelf.index(mutableSelf.startIndex, offsetBy: IndexDistance(IntMax(i)))
14 | mutableSelf.remove(at: target)
15 | }
16 | }
17 |
18 | return mutableSelf
19 | }
20 | }
21 |
22 | public extension String {
23 |
24 | public func apply(_ patch: [Patch]) -> String {
25 | var mutableSelf = self
26 |
27 | for change in patch {
28 | switch change {
29 | case let .insertion(i, element):
30 | let target = mutableSelf.index(mutableSelf.startIndex, offsetBy: IndexDistance(IntMax(i)))
31 | mutableSelf.insert(element, at: target)
32 | case let .deletion(i):
33 | let target = mutableSelf.index(mutableSelf.startIndex, offsetBy: IndexDistance(IntMax(i)))
34 | mutableSelf.remove(at: target)
35 | }
36 | }
37 |
38 | return mutableSelf
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Diff.swift/codecov.yml:
--------------------------------------------------------------------------------
1 | codecov:
2 | notify:
3 | require_ci_to_pass: true
4 | comment:
5 | behavior: default
6 | layout: header, diff
7 | require_changes: false
8 | coverage:
9 | precision: 2
10 | range:
11 | - 70.0
12 | - 100.0
13 | round: down
14 | status:
15 | changes: false
16 | patch: false
17 | project: false
18 | parsers:
19 | gcov:
20 | branch_detection:
21 | conditional: true
22 | loop: true
23 | macro: false
24 | method: false
25 | javascript:
26 | enable_partials: false
27 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/.cocoadocs.yml:
--------------------------------------------------------------------------------
1 | highlight-font: '"Cabrito", "Lucida Bright", "Georgia", serif'
2 | body: '"Cabrito Sans", "Lucida Grande", "Helvetica", sans-serif'
3 |
4 | highlight-color: "#F4B028"
5 | highlight-dark-color: "#E15829"
6 | darker-color: "#6A8136"
7 | darker-dark-color: "#444440"
8 | background-color: "#F5F4F1"
9 | alt-link-color: "#E15829"
10 | warning-color: "#E15829"
11 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | build/
4 | *.pbxuser
5 | !default.pbxuser
6 | *.mode1v3
7 | !default.mode1v3
8 | *.mode2v3
9 | !default.mode2v3
10 | *.perspectivev3
11 | !default.perspectivev3
12 | xcuserdata
13 | *.xccheckout
14 | *.moved-aside
15 | DerivedData
16 | *.hmap
17 | *.ipa
18 | *.xcuserstate
19 | .DS_Store
20 |
21 | # CocoaPods
22 | #
23 | # We recommend against adding the Pods directory to your .gitignore. However
24 | # you should judge for yourself, the pros and cons are mentioned at:
25 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
26 | #
27 | # Pods/
28 |
29 | docs/
30 |
31 | # Swift Package Manager
32 | #
33 | .build/
34 | Packages/
35 |
36 | # Carthage
37 | Carthage/Build
38 | report.xml
39 | fastlane/test_output
40 | fastlane/build_output
41 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/.ruby-version:
--------------------------------------------------------------------------------
1 | 2.2.1
2 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/.swift-version:
--------------------------------------------------------------------------------
1 | swift-2.2-SNAPSHOT-2015-12-22-a
2 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/.travis.yml:
--------------------------------------------------------------------------------
1 | language: objective-c
2 | osx_image: xcode8
3 | cache: bundler
4 | rvm: 2.2.1
5 | install:
6 | - bundle install
7 | - brew outdated carthage || brew upgrade carthage
8 | script:
9 | - bundle exec fastlane travis
10 | notifications:
11 | slack:
12 | secure: VHcEZcTuVR3gfHIcM9jcxrXgE3tkVIT4gWDLpnK7O4em86dCpaVkLDwr0UcQYxvqGS1J8pQqGZCwyOBsdgaItX52eRDMIez/384B56Vl6eufdLAcwWELIEtHyFkJ6XUjmASICaeeb8SpF/rj89/AXoHU6c8shY13NKtoBBZCGq8=
13 | env:
14 | global:
15 | secure: fgx97DOi3+wTHwfyo1LhsXtQolZltBmZFKCfyeq9IWqvJ0wCvFXE3QllD66369LzC5Fz/ipPRwqsd0nH393Nq1xFLAjdZkOhVAc65GjNjKfBQsaKcsIn0/AXd0RIKimzmvBAMHSh0jy3tBKrEQVCJtR6dF6nRoQNC80TxLoDrKg=
16 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | Pull requests are very welcome!
2 |
3 | Any new code or feature that is added should be tested.
4 |
5 | In general, we like these [guidelines](https://swift.org/contributing/#contributing-code) for contributing to an open source project.
6 | Though, we will be honest in saying that these rules will not be tirelessly defended.
7 |
8 | If you run into bugs, design problems, or have a suggestion, please create a Github issue.
9 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Configurations/Base.xcconfig:
--------------------------------------------------------------------------------
1 | COPY_PHASE_STRIP = NO
2 | ALWAYS_SEARCH_USER_PATHS = NO
3 | GCC_DYNAMIC_NO_PIC = NO
4 | GCC_NO_COMMON_BLOCKS = YES
5 | GCC_C_LANGUAGE_STANDARD = gnu11
6 | CLANG_CXX_LANGUAGE_STANDARD = gnu++0x
7 | CLANG_CXX_LIBRARY = libc++
8 | CLANG_ENABLE_MODULES = YES
9 | CLANG_ENABLE_OBJC_ARC = YES
10 | ENABLE_STRICT_OBJC_MSGSEND = YES
11 | CLANG_WARN_EMPTY_BODY = YES
12 | CLANG_WARN_BOOL_CONVERSION = YES
13 | CLANG_WARN_CONSTANT_CONVERSION = YES
14 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES
15 | CLANG_WARN_ENUM_CONVERSION = YES
16 | CLANG_WARN_INT_CONVERSION = YES
17 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR
18 | GCC_WARN_SIGN_COMPARE = YES
19 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE
20 | CLANG_WARN_UNREACHABLE_CODE = YES
21 | GCC_WARN_UNUSED_FUNCTION = YES
22 | GCC_WARN_UNUSED_VARIABLE = YES
23 | CLANG_ENABLE_MODULES = YES
24 | CLANG_ENABLE_OBJC_ARC = YES
25 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR
26 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
27 | GCC_WARN_UNDECLARED_SELECTOR = YES
28 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR
29 | CLANG_WARN_INFINITE_RECURSION = YES
30 | CLANG_WARN_SUSPICIOUS_MOVE = YES
31 |
32 | CURRENT_PROJECT_VERSION = 3.0.0
33 | VERSION_INFO_PREFIX =
34 | VERSIONING_SYSTEM = apple-generic
35 |
36 | MACOSX_DEPLOYMENT_TARGET = 10.9
37 | IPHONEOS_DEPLOYMENT_TARGET = 8.0
38 | WATCHOS_DEPLOYMENT_TARGET = 2.0
39 | TVOS_DEPLOYMENT_TARGET = 9.0
40 |
41 | ENABLE_BITCODE = YES
42 | ENABLE_BITCODE[sdk=macosx*] = NO
43 |
44 | CODE_SIGN_IDENTITY[sdk=macosx*] =
45 | CODE_SIGN_IDENTITY[sdk=iphoneos*] =
46 | CODE_SIGN_IDENTITY[sdk=appletvos*] =
47 | CODE_SIGN_IDENTITY[sdk=watchos*] =
48 |
49 | SWIFT_VERSION = 3.0
50 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Configurations/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Base.xcconfig"
2 |
3 | ONLY_ACTIVE_ARCH = YES
4 | DEBUG_INFORMATION_FORMAT = dwarf
5 | ENABLE_TESTABILITY = YES
6 | VALIDATE_PRODUCT = NO
7 | GCC_OPTIMIZATION_LEVEL = 0
8 | ENABLE_NS_ASSERTIONS = YES
9 | GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1
10 | SWIFT_OPTIMIZATION_LEVEL = -Onone
11 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Configurations/Framework.xcconfig:
--------------------------------------------------------------------------------
1 | APPLICATION_EXTENSION_API_ONLY = YES
2 | COMBINE_HIDPI_IMAGES = YES
3 |
4 | INSTALL_PATH = $(LOCAL_LIBRARY_DIR)/Frameworks
5 | SKIP_INSTALL = YES
6 |
7 | DYLIB_COMPATIBILITY_VERSION = 1
8 | DYLIB_CURRENT_VERSION = 1
9 | DYLIB_INSTALL_NAME_BASE = @rpath
10 |
11 | LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) @executable_path/../Frameworks @loader_path/Frameworks
12 | LD_RUNPATH_SEARCH_PATHS[sdk=iphoneos*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks
13 | LD_RUNPATH_SEARCH_PATHS[sdk=iphonesimulator*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks
14 | LD_RUNPATH_SEARCH_PATHS[sdk=appletvos*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks
15 | LD_RUNPATH_SEARCH_PATHS[sdk=appletvsimulator*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks
16 | LD_RUNPATH_SEARCH_PATHS[sdk=watchos*] = $(inherited) @executable_path/Frameworks
17 | LD_RUNPATH_SEARCH_PATHS[sdk=watchsimulator*] = $(inherited) @executable_path/Frameworks
18 |
19 | DEFINES_MODULE = YES
20 | FRAMEWORK_VERSION = A
21 | INFOPLIST_FILE = Sources/Info.plist
22 | PRODUCT_BUNDLE_IDENTIFIER = com.bignerdranch.$(TARGET_NAME)
23 | PRODUCT_NAME = Freddy
24 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Configurations/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Base.xcconfig"
2 |
3 | ONLY_ACTIVE_ARCH = NO
4 | DEBUG_INFORMATION_FORMAT = dwarf-with-dsym
5 | ENABLE_TESTABILITY = NO
6 | VALIDATE_PRODUCT = YES
7 | GCC_OPTIMIZATION_LEVEL = s
8 | ENABLE_NS_ASSERTIONS = NO
9 | GCC_PREPROCESSOR_DEFINITIONS =
10 | SWIFT_OPTIMIZATION_LEVEL = -Owholemodule
11 | COPY_PHASE_STRIP = YES
12 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Configurations/Tests.xcconfig:
--------------------------------------------------------------------------------
1 | COMBINE_HIDPI_IMAGES = YES
2 |
3 | LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) @executable_path/../Frameworks @loader_path/../Frameworks
4 | LD_RUNPATH_SEARCH_PATHS[sdk=iphoneos*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks
5 | LD_RUNPATH_SEARCH_PATHS[sdk=iphonesimulator*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks
6 | LD_RUNPATH_SEARCH_PATHS[sdk=appletvos*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks
7 | LD_RUNPATH_SEARCH_PATHS[sdk=appletvsimulator*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks
8 |
9 | INFOPLIST_FILE = Tests/Info.plist
10 | PRODUCT_BUNDLE_IDENTIFIER = com.bignerdranch.$(TARGET_NAME)
11 | PRODUCT_NAME = $(TARGET_NAME)
12 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Freddy.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 |
3 | s.name = "Freddy"
4 | s.version = "3.0.0"
5 | s.summary = "A JSON parsing library written in Swift"
6 |
7 | s.description = <<-DESC
8 | Freddy is a reusable framework for parsing JSON in Swift.
9 | Its primary goal is to faciliate the safe parsing of JSON,
10 | while also preserving the ease of use presented by parsing
11 | JSON in Objective-C.
12 | DESC
13 |
14 | s.homepage = "https://github.com/bignerdranch/Freddy"
15 |
16 | s.license = { :type => "MIT", :file => "LICENSE" }
17 |
18 | s.authors = {"Matt Mathias" => "mattm@bignerdranch.com",
19 | "John Gallagher" => "jgallagher@bignerdranch.com",
20 | "Zachary Waldowski" => "zachary@bignerdranch.com" }
21 |
22 | s.ios.deployment_target = "8.0"
23 | s.osx.deployment_target = "10.10"
24 | s.watchos.deployment_target = "2.0"
25 | s.tvos.deployment_target = "9.0"
26 |
27 | s.source = {:git => "https://github.com/bignerdranch/Freddy.git", :tag => "#{s.version}"}
28 | s.source_files = "Sources/**/*.{h,swift}"
29 |
30 | s.requires_arc = true
31 | s.pod_target_xcconfig = { 'SWIFT_VERSION' => '3.0' }
32 | end
33 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Freddy.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 | ruby '2.2.1'
3 |
4 | gem 'fastlane'
5 | gem 'cocoapods'
6 | gem 'xcpretty'
7 | gem 'jazzy'
8 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Big Nerd Ranch Inc
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Package.swift:
--------------------------------------------------------------------------------
1 | import PackageDescription
2 |
3 | let package = Package(
4 | name: "Freddy"
5 | )
6 |
7 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/README_Images/addErrorBreakpoint.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ReactiveKit/ReactiveGitter/3064285e567aa6489414d7fe2b7fade81ae785bf/Carthage/Checkouts/Freddy/README_Images/addErrorBreakpoint.png
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/README_Images/addType.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ReactiveKit/ReactiveGitter/3064285e567aa6489414d7fe2b7fade81ae785bf/Carthage/Checkouts/Freddy/README_Images/addType.png
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/README_Images/editBreakpoint.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ReactiveKit/ReactiveGitter/3064285e567aa6489414d7fe2b7fade81ae785bf/Carthage/Checkouts/Freddy/README_Images/editBreakpoint.png
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/README_Images/projectNav_addBreakpoint.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ReactiveKit/ReactiveGitter/3064285e567aa6489414d7fe2b7fade81ae785bf/Carthage/Checkouts/Freddy/README_Images/projectNav_addBreakpoint.png
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Resources/scripts/publish_docs.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | if [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_BRANCH" == "master" ]; then
4 | echo -e "Generating Jazzy output \n"
5 | jazzy --swift-version 3.0 -m Freddy -g "https://github.com/bignerdranch/Freddy" -a "Big Nerd Ranch" -u "https://github.com/bignerdranch" --module-version=3.0.0 -r "http://bignerdranch.github.io/Freddy/"
6 |
7 | echo -e "Moving into docs directory \n"
8 | pushd docs
9 |
10 | echo -e "Creating gh-pages repo \n"
11 | git init
12 | git config user.email "travis@travis-ci.org"
13 | git config user.name "travis-ci"
14 |
15 | echo -e "Adding new docs \n"
16 | git add -A
17 | git commit -m "Publish docs from successful Travis build of $TRAVIS_COMMIT"
18 | git push --force --quiet "https://${GITHUB_ACCESS_TOKEN}@github.com/bignerdranch/Freddy" master:gh-pages > /dev/null 2>&1
19 | echo -e "Published latest docs.\n"
20 |
21 | echo -e "Moving out of docs clone and cleaning up"
22 | popd
23 | fi
24 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Resources/scripts/validate_carthage.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # Bootstraps Carthage to validate that everything builds as expected.
4 | # thanks to abbeycode/UnzipKit for example
5 | #
6 |
7 | EXIT_CODE=0
8 |
9 | clone_project() {
10 | local BRANCH_NAME BUILD_DIR
11 | if [[ $CIRCLECI ]]; then
12 | BRANCH_NAME=$CIRCLE_BRANCH
13 | BUILD_DIR=$(pwd)
14 | elif [[ $TRAVIS ]]; then
15 | BRANCH_NAME=$TRAVIS_BRANCH
16 | BUILD_DIR=$TRAVIS_BUILD_DIR
17 | else
18 | BUILD_DIR="$HOME/workspace/CoreDataStack"
19 | BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)
20 | echo "=================Not Running in CI================="
21 | fi
22 |
23 | echo "=================Creating Cartfile================="
24 | echo "git \"$BUILD_DIR\" \"$BRANCH_NAME\"" > ./Cartfile
25 | }
26 |
27 | bootstrap() {
28 | echo "=================Bootstrapping Carthage================="
29 | carthage bootstrap --configuration Debug
30 | EXIT_CODE=$?
31 | }
32 |
33 | validate() {
34 | echo "=================Checking for build products================="
35 |
36 | if [ ! -d "Carthage/Build/iOS/CoreDataStack.framework" ]; then
37 | echo "=================iOS Library failed to build with Carthage================="
38 | EXIT_CODE=1
39 | fi
40 |
41 | if [ ! -d "Carthage/Build/tvOS/CoreDataStack.framework" ]; then
42 | echo "=================iOS Library failed to build with Carthage================="
43 | EXIT_CODE=1
44 | fi
45 | }
46 |
47 | clean_up() {
48 | echo "=================Cleaning Up================="
49 | rm ./Cartfile
50 | rm ./Cartfile.resolved
51 | rm -rf ./Carthage
52 | }
53 |
54 | clone_project
55 | bootstrap
56 | validate
57 | clean_up
58 | exit $EXIT_CODE
59 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Sources/Freddy.h:
--------------------------------------------------------------------------------
1 | //
2 | // Freddy.h
3 | // Freddy
4 | //
5 | // Created by Matthew D. Mathias on 3/25/15.
6 | // Copyright © 2015 Big Nerd Ranch. Licensed under MIT.
7 | //
8 |
9 | //! Project version number for Freddy.
10 | extern double FreddyVersionNumber;
11 |
12 | //! Project version string for Freddy.
13 | extern const unsigned char FreddyVersionString[];
14 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Sources/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSHumanReadableCopyright
24 | Copyright © 2015 Big Nerd Ranch. All rights reserved.
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Tests/FreddyTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Tests/FreddyTests/Person.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Person.swift
3 | // FreddyTests
4 | //
5 | // Created by Matthew D. Mathias on 3/21/15.
6 | // Copyright © 2015 Big Nerd Ranch. Licensed under MIT.
7 | //
8 |
9 | import Freddy
10 |
11 | public struct Person: CustomStringConvertible {
12 | public enum EyeColor: String {
13 | case Brown = "brown"
14 | case Blue = "blue"
15 | case Green = "green"
16 | }
17 |
18 | public let name: String
19 | public var age: Int
20 | public let eyeColor: EyeColor
21 | public let spouse: Bool
22 |
23 | public var description: String {
24 | return "Name: \(name), age: \(age), married: \(spouse)"
25 | }
26 | }
27 |
28 | extension Person.EyeColor: JSONDecodable {}
29 | extension Person.EyeColor: JSONEncodable {}
30 |
31 | extension Person: JSONDecodable {
32 | public init(json value: JSON) throws {
33 | name = try value.getString(at: "name")
34 | age = try value.getInt(at: "age")
35 | eyeColor = try value.decode(at: "eyeColor")
36 | spouse = try value.getBool(at: "spouse")
37 | }
38 | }
39 |
40 | extension Person: JSONEncodable {
41 | public func toJSON() -> JSON {
42 | return .dictionary(["name": .string(name), "age": .int(age), "eyeColor": eyeColor.toJSON(), "spouse": .bool(spouse)])
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Tests/FreddyTests/sample.JSON:
--------------------------------------------------------------------------------
1 | {
2 | "success" : true,
3 | "key" : null,
4 | "people" : [
5 | {
6 | "name" : "Matt Mathias",
7 | "spouse" : true,
8 | "eyeColor" : "brown",
9 | "age" : 32
10 | },
11 | {
12 | "spouse" : true,
13 | "name" : "Drew Mathias",
14 | "eyeColor" : "blue",
15 | "age" : 33
16 | },
17 | {
18 | "eyeColor" : "green",
19 | "age" : 25,
20 | "name" : "Sergeant Pepper",
21 | "spouse" : false
22 | }
23 | ],
24 | "jobs" : [
25 | "teacher",
26 | "programmer",
27 | "judge"
28 | ],
29 | "states" : {
30 | "Georgia" : [
31 | 30301,
32 | 30302,
33 | 30303
34 | ],
35 | "Wisconsin" : [
36 | 53000,
37 | 53001,
38 | 53002
39 | ]
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/Tests/FreddyTests/sampleNoWhiteSpace.JSON:
--------------------------------------------------------------------------------
1 | {"success":true,"key":null,"people":[{"name":"Matt Mathias","spouse":true,"eyeColor":"brown","age":32},{"spouse":true,"name":"Drew Mathias","eyeColor":"blue","age":33},{"eyeColor":"green","age":25,"name":"Sergeant Pepper","spouse":false}],"jobs":["teacher","programmer","judge"],"states":{"Georgia":[30301,30302,30303],"Wisconsin":[53000,53001,53002]}}
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/fastlane/Fastfile:
--------------------------------------------------------------------------------
1 | opt_out_usage
2 |
3 | #######################################################################
4 | # Lifecycle Hooks
5 | #######################################################################
6 |
7 | before_all do
8 | reset_simulators
9 | end
10 |
11 | after_all do |lane|
12 | # This block is called, only if the executed lane was successful
13 | end
14 |
15 | error do |lane, exception|
16 | end
17 |
18 | #######################################################################
19 | # Lanes
20 | #######################################################################
21 |
22 | desc "Perform the build steps on travis CI"
23 | lane :travis do
24 | macOS
25 | iOS
26 | tvOS
27 | validate_cocoapods
28 | validate_carthage
29 | end
30 |
31 | desc "Build Freddy for macOS"
32 | lane :macOS do
33 | scan(scheme: "Freddy")
34 | end
35 |
36 | desc "Build Freddy for iOS"
37 | lane :iOS do
38 | scan(scheme: "MobileFreddy", device: "iPhone 7 (10.0)")
39 | end
40 |
41 | desc "Build Freddy for tvOS"
42 | lane :tvOS do
43 | scan(scheme: "TVFreddy")
44 | end
45 |
46 | desc "Validate cocoapods podspec file"
47 | lane :validate_cocoapods do
48 | pod_lib_lint(quick: true)
49 | end
50 |
51 | desc "Validate carthage build"
52 | lane :validate_carthage do
53 | if is_ci?
54 | system("./Resources/scripts/validate_carthage.sh")
55 | else
56 | puts "This is a CI only lane, skipping"
57 | end
58 | end
59 |
60 | desc "Create docs"
61 | lane :create_docs do
62 | ## TODO: Implement once jazzy is working well for Xcode 8
63 | if is_ci?
64 | #system("./Resources/scripts/publish_docs.sh")
65 | puts "Would be creating docs here"
66 | else
67 | puts "This is a CI only lane, skipping"
68 | end
69 | end
70 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/Freddy/fastlane/README.md:
--------------------------------------------------------------------------------
1 | fastlane documentation
2 | ================
3 | # Installation
4 | ```
5 | sudo gem install fastlane
6 | ```
7 | # Available Actions
8 | ### travis
9 | ```
10 | fastlane travis
11 | ```
12 | Perform the build steps on travis CI
13 | ### macOS
14 | ```
15 | fastlane macOS
16 | ```
17 | Build Freddy for macOS
18 | ### iOS
19 | ```
20 | fastlane iOS
21 | ```
22 | Build Freddy for iOS
23 | ### tvOS
24 | ```
25 | fastlane tvOS
26 | ```
27 | Build Freddy for tvOS
28 | ### validate_cocoapods
29 | ```
30 | fastlane validate_cocoapods
31 | ```
32 | Validate cocoapods podspec file
33 | ### validate_carthage
34 | ```
35 | fastlane validate_carthage
36 | ```
37 | Validate carthage build
38 | ### create_docs
39 | ```
40 | fastlane create_docs
41 | ```
42 | Create docs
43 |
44 | ----
45 |
46 | This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run.
47 | More information about fastlane can be found on [https://fastlane.tools](https://fastlane.tools).
48 | The documentation of fastlane can be found on [GitHub](https://github.com/fastlane/fastlane/tree/master/fastlane).
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | build/
4 | *.pbxuser
5 | !default.pbxuser
6 | *.mode1v3
7 | !default.mode1v3
8 | *.mode2v3
9 | !default.mode2v3
10 | *.perspectivev3
11 | !default.perspectivev3
12 | xcuserdata
13 | *.xccheckout
14 | *.moved-aside
15 | DerivedData
16 | *.hmap
17 | *.ipa
18 | *.xcuserstate
19 | .DS_Store
20 |
21 | # CocoaPods
22 | #
23 | # We recommend against adding the Pods directory to your .gitignore. However
24 | # you should judge for yourself, the pros and cons are mentioned at:
25 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
26 | #
27 | # Pods/
28 |
29 | # Carthage
30 | #
31 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
32 | # Carthage/Checkouts
33 |
34 | Carthage/Build
35 |
36 | # Swift Package Manager
37 |
38 | .build
39 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/.gitmodules:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ReactiveKit/ReactiveGitter/3064285e567aa6489414d7fe2b7fade81ae785bf/Carthage/Checkouts/ReactiveKit/.gitmodules
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/.swift-version:
--------------------------------------------------------------------------------
1 | 3.0-GM-CANDIDATE
2 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/.travis.yml:
--------------------------------------------------------------------------------
1 | language: objective-c
2 | osx_image: xcode8.2
3 |
4 | script:
5 | - set -o pipefail && xcodebuild -project ReactiveKit.xcodeproj -scheme ReactiveKit-iOS -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6s,OS=10.0' test | xcpretty
6 | - set -o pipefail && swift build
7 | - set -o pipefail && swift test
8 |
9 | after_success:
10 | - bash <(curl -s https://codecov.io/bash)
11 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/Assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ReactiveKit/ReactiveGitter/3064285e567aa6489414d7fe2b7fade81ae785bf/Carthage/Checkouts/ReactiveKit/Assets/logo.png
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 ReactiveKit
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/Package.swift:
--------------------------------------------------------------------------------
1 | import PackageDescription
2 |
3 | let package = Package(
4 | name: "ReactiveKit"
5 | )
6 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/Playground.playground/Contents.swift:
--------------------------------------------------------------------------------
1 | //: Playground - noun: a place where people can play
2 |
3 | import ReactiveKit
4 | import PlaygroundSupport
5 |
6 | var p: Property! = Property(1)
7 | weak var wp: Property? = p
8 |
9 | SafeSignal.interval(1, queue: .main).map { $0 }.debug("test signal").bind(to: p)
10 |
11 | DispatchQueue.main.after(when: 3.3) {
12 | p = nil
13 | wp
14 | }
15 |
16 | PlaygroundPage.current.needsIndefiniteExecution = true
17 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/Playground.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/ReactiveKit.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = "ReactiveKit"
3 | s.version = "3.5.3"
4 | s.summary = "A Swift Reactive Programming Framework"
5 | s.description = "ReactiveKit is a Swift framework for reactive and functional reactive programming."
6 | s.homepage = "https://github.com/ReactiveKit/ReactiveKit"
7 | s.license = 'MIT'
8 | s.author = { "Srdan Rasic" => "srdan.rasic@gmail.com" }
9 | s.source = { :git => "https://github.com/ReactiveKit/ReactiveKit.git", :tag => "v3.5.3" }
10 |
11 | s.ios.deployment_target = '8.0'
12 | s.osx.deployment_target = '10.9'
13 | s.watchos.deployment_target = '2.0'
14 | s.tvos.deployment_target = '9.0'
15 |
16 | s.source_files = 'Sources/*.swift', 'ReactiveKit/*.{h,m}'
17 | s.requires_arc = true
18 | end
19 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/ReactiveKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/ReactiveKit.xcodeproj/xcshareddata/xcbaselines/ECBCCDD91BEB6B9B00723476.xcbaseline/15721443-CEB9-478C-919D-711F1A7CCA56.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | classNames
6 |
7 | SignalTests
8 |
9 | testPerformance()
10 |
11 | com.apple.XCTPerformanceMetric_WallClockTime
12 |
13 | baselineAverage
14 | 0.077
15 | baselineIntegrationDisplayName
16 | Local Baseline
17 | maxPercentRelativeStandardDeviation
18 | 20
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/ReactiveKit.xcodeproj/xcshareddata/xcbaselines/ECBCCDD91BEB6B9B00723476.xcbaseline/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | runDestinationsByUUID
6 |
7 | 15721443-CEB9-478C-919D-711F1A7CCA56
8 |
9 | localComputer
10 |
11 | busSpeedInMHz
12 | 100
13 | cpuCount
14 | 1
15 | cpuKind
16 | Intel Core i5
17 | cpuSpeedInMHz
18 | 2700
19 | logicalCPUCoresPerPackage
20 | 4
21 | modelCode
22 | MacBookPro12,1
23 | physicalCPUCoresPerPackage
24 | 2
25 | platformIdentifier
26 | com.apple.platform.macosx
27 |
28 | targetArchitecture
29 | x86_64
30 | targetDevice
31 |
32 | modelCode
33 | iPhone9,2
34 | platformIdentifier
35 | com.apple.platform.iphonesimulator
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/ReactiveKit.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/ReactiveKit/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 3.5.3
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/ReactiveKit/ReactiveKit.h:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2015 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | #import
26 |
27 | //! Project version number for ReactiveKit.
28 | FOUNDATION_EXPORT double ReactiveKitVersionNumber;
29 |
30 | //! Project version string for ReactiveKit.
31 | FOUNDATION_EXPORT const unsigned char ReactiveKitVersionString[];
32 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/ReactiveKitTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/Sources/NoError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | /// An error type that cannot be instantiated. Used to make signals non-failable.
26 | public enum NoError: Error {
27 | }
28 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/Sources/Optional.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | public protocol OptionalProtocol {
26 | associatedtype Wrapped
27 | var _unbox: Optional { get }
28 | init(nilLiteral: ())
29 | init(_ some: Wrapped)
30 | }
31 |
32 | extension Optional: OptionalProtocol {
33 | public var _unbox: Optional {
34 | return self
35 | }
36 | }
37 |
38 | func ==(lhs: O, rhs: O) -> Bool
39 | where O.Wrapped: Equatable {
40 | return lhs._unbox == rhs._unbox
41 | }
42 |
43 | func !=(lhs: O, rhs: O) -> Bool
44 | where O.Wrapped: Equatable {
45 | return !(lhs == rhs)
46 | }
47 |
--------------------------------------------------------------------------------
/Carthage/Checkouts/ReactiveKit/Tests/ReactiveKitTests/ResultTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ResultTests.swift
3 | // ReactiveKit
4 | //
5 | // Created by Srdan Rasic on 22/10/2016.
6 | // Copyright © 2016 Srdan Rasic. All rights reserved.
7 | //
8 |
9 | import XCTest
10 | import ReactiveKit
11 |
12 | class ResultTests: XCTestCase {
13 |
14 | func testSuccess() {
15 | let result = Result(5)
16 |
17 | XCTAssert(result.error == nil)
18 | XCTAssert(result.value != nil && result.value! == 5)
19 | }
20 |
21 | func testFailured() {
22 | let result = Result(.Error)
23 |
24 | XCTAssert(result.error != nil && result.error! == .Error)
25 | XCTAssert(result.value == nil)
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Client/Client.h:
--------------------------------------------------------------------------------
1 | //
2 | // Client.h
3 | // Client
4 | //
5 | // Created by Srdan Rasic on 07/05/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for Client.
12 | FOUNDATION_EXPORT double ClientVersionNumber;
13 |
14 | //! Project version string for Client.
15 | FOUNDATION_EXPORT const unsigned char ClientVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Client/HTTPMethod.swift:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2017 Srdan Rasic (@srdanrasic)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | public enum HTTPMethod: String {
26 | case get = "GET"
27 | case put = "PUT"
28 | case post = "POST"
29 | case patch = "PATCH"
30 | case delete = "DELETE"
31 | case head = "HEAD"
32 | }
33 |
--------------------------------------------------------------------------------
/Client/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Entities/Entities.h:
--------------------------------------------------------------------------------
1 | //
2 | // Entities.h
3 | // Entities
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for Entities.
12 | FOUNDATION_EXPORT double EntitiesVersionNumber;
13 |
14 | //! Project version string for Entities.
15 | FOUNDATION_EXPORT const unsigned char EntitiesVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Entities/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Entities/Message.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Message.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 14/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import Freddy
10 | import Foundation
11 |
12 | public struct Message {
13 | public let id: String // ID of the message.
14 | public let text: String // Original message in plain-text/markdown.
15 | public let html: String // HTML formatted message.
16 | public let sent: Date // ISO formatted date of the message.
17 | public let editedAt: Date? // ISO formatted date of the message if edited.
18 | public let fromUser: User // (User)[user-resource] that sent the message.
19 | public let unread: Bool // Boolean that indicates if the current user has read the message.
20 | public let readBy: Int // Number of users that have read the message.
21 | public let urls: [Url] // List of URLs present in the message.
22 |
23 | public struct Url {
24 | let url: String
25 | }
26 | }
27 |
28 | extension Message: JSONDecodable {
29 |
30 | public init(json: JSON) throws {
31 | id = try json.decode(at: "id")
32 | text = try json.decode(at: "text")
33 | html = try json.decode(at: "html")
34 | sent = try json.getString(at: "sent").to8601Date()
35 | editedAt = try json.getString(at: "editedAt", alongPath: [.missingKeyBecomesNil, .nullBecomesNil])?.to8601Date()
36 | fromUser = try json.decode(at: "fromUser")
37 | unread = try json.decode(at: "unread")
38 | readBy = try json.decode(at: "readBy")
39 | urls = try json.decodedArray(at: "urls")
40 | }
41 | }
42 |
43 | extension Message.Url: JSONDecodable {
44 |
45 | public init(json: JSON) throws {
46 | url = try json.decode(at: "url")
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/Entities/Token.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Token.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 14/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Freddy
11 |
12 | public struct Token {
13 | public let accessToken: String // The token that can be used to access the Gitter API.
14 | public let tokenType: String // The type of token received. At this time, this field will always have the value Bearer.
15 | public let expiresIn: String? // The remaining lifetime on the access token.
16 |
17 | public init(accessToken: String, tokenType: String, expiresIn: String? = nil) {
18 | self.accessToken = accessToken
19 | self.tokenType = tokenType
20 | self.expiresIn = expiresIn
21 | }
22 | }
23 |
24 | extension Token: JSONDecodable {
25 |
26 | public init(json: JSON) throws {
27 | accessToken = try json.decode(at: "access_token")
28 | expiresIn = try json.decode(at: "expires_in", alongPath: [.missingKeyBecomesNil, .nullBecomesNil])
29 | tokenType = try json.decode(at: "token_type")
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Entities/User.swift:
--------------------------------------------------------------------------------
1 | //
2 | // User.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 14/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Freddy
11 |
12 | public struct User {
13 | public let id: String // Gitter User ID.
14 | public let username: String // Gitter/GitHub username.
15 | public let displayName: String // Gitter/GitHub user real name.
16 | public let url: String // Path to the user on Gitter.
17 | public let avatarUrlSmall: String // User avatar URI (small).
18 | public let avatarUrlMedium: String // User avatar URI (medium).
19 | }
20 |
21 | extension User: JSONDecodable {
22 |
23 | public init(json: JSON) throws {
24 | id = try json.decode(at: "id")
25 | username = try json.decode(at: "username")
26 | displayName = try json.decode(at: "displayName")
27 | url = try json.decode(at: "url")
28 | avatarUrlSmall = try json.decode(at: "avatarUrlSmall")
29 | avatarUrlMedium = try json.decode(at: "avatarUrlMedium")
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Entities/Utilities.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Utilities.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 14/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Freddy
11 |
12 | private let dateTimeFormatter: DateFormatter = {
13 | let formatter = DateFormatter()
14 | formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"
15 | formatter.timeZone = TimeZone(secondsFromGMT: 0)
16 | formatter.locale = Locale(identifier: "en_US_POSIX")
17 | return formatter
18 | }()
19 |
20 | extension String {
21 | public func to8601Date() throws -> Date {
22 | if let date = dateTimeFormatter.date(from: self) {
23 | return date
24 | } else {
25 | throw JSON.Error.valueNotConvertible(value: .string(self), to: Date.self)
26 | }
27 | }
28 | }
29 |
30 | extension Date {
31 | public func to8601String() -> String {
32 | return dateTimeFormatter.string(from: self)
33 | }
34 | }
35 |
36 | extension String {
37 |
38 | public func toURL() throws -> URL {
39 | if let url = URL(string: self) {
40 | return url
41 | } else {
42 | throw JSON.Error.valueNotConvertible(value: .string(self), to: URL.self)
43 | }
44 | }
45 | }
46 |
47 | extension JSONDecodable {
48 |
49 | public init(data: Data) throws {
50 | let json = try JSON(data: data)
51 | try self.init(json: json)
52 | }
53 | }
54 |
55 | extension Array where Element: JSONDecodable {
56 |
57 | public init(data: Data) throws {
58 | let json = try JSON(data: data)
59 | switch json {
60 | case .array(let array):
61 | try self.init(array.map(Element.init))
62 | default:
63 | throw JSON.Error.valueNotConvertible(value: json, to: [Element].self)
64 | }
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/Interactors/Authentication.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Authentication.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import Entities
10 | import Networking
11 | import ReactiveKit
12 |
13 | private let clientID = "31625d251b64ec0f01b19577c150f8bcb8c5f6a3"
14 | private let secret = "e629e37430a3a37905f642972caf3e6dce28d819"
15 | private let redirectURI = "reactive-gitter://token"
16 |
17 | public class Authentication {
18 |
19 | public enum AuthorizationResponse {
20 | case authorized(String)
21 | case unauthorized(String)
22 | }
23 |
24 | public let token: SafeSignal
25 |
26 | public init(client: SafeClient, authorizationCode: SafeSignal) {
27 |
28 | token = authorizationCode
29 | .flatMapLatest { code -> SafeSignal in
30 | if case .authorized(let code) = code {
31 | return Token
32 | .get(clientID: clientID, secret: secret, code: code, redirectURI: redirectURI)
33 | .response(using: client)
34 | .debug()
35 | } else {
36 | return .never()
37 | }
38 | }
39 | }
40 |
41 | public var authorizationURL: URL {
42 | return AuthenticationAPIClient.authorizationURL(clientID: clientID, redirectURI: redirectURI)
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/Interactors/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Interactors/Interactors.h:
--------------------------------------------------------------------------------
1 | //
2 | // Interactors.h
3 | // Interactors
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for Interactors.
12 | FOUNDATION_EXPORT double InteractorsVersionNumber;
13 |
14 | //! Project version string for Interactors.
15 | FOUNDATION_EXPORT const unsigned char InteractorsVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Interactors/RoomList.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RoomList.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import Entities
10 | import Networking
11 | import ReactiveKit
12 |
13 | public class RoomList {
14 |
15 | public let client: SafeClient
16 | public let rooms: SafeSignal<[Room]>
17 | public let leaveRoom: SafeObserver
18 |
19 | public init(client: SafeClient) {
20 |
21 | let leaveRoom = SafePublishSubject()
22 |
23 | let leftRoom = leaveRoom
24 | .flatMapLatest { room -> SafeSignal in
25 | return room.leave().response(using: client)
26 | }
27 |
28 | let user = User.me()
29 | .response(using: client)
30 | .shareReplay(limit: 1)
31 |
32 | let rooms = leftRoom.start(with: ())
33 | .flatMapLatest { () -> SafeSignal<[Room]> in
34 | return user.flatMapLatest { user -> SafeSignal<[Room]> in
35 | user.getRooms().response(using: client)
36 | }
37 | }
38 | .shareReplay(limit: 1)
39 |
40 | self.client = client
41 | self.rooms = rooms
42 | self.leaveRoom = leaveRoom.on
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/Interactors/RoomMessages.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RoomMessages.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import Entities
10 | import Networking
11 | import ReactiveKit
12 |
13 | public class RoomMessages {
14 |
15 | public let messages: SafeSignal<[Message]>
16 | public let sendMessage: SafeObserver
17 |
18 | public init(client: SafeClient, room: Room) {
19 |
20 | let sendMessage = SafePublishSubject()
21 |
22 | let messageSent = sendMessage
23 | .flatMapLatest { text -> SafeSignal in
24 | return room.sendMessage(text).response(using: client)
25 | }
26 |
27 | let messages = messageSent.eraseType().start(with: ())
28 | .flatMapLatest { () -> SafeSignal<[Message]> in
29 | return room.getMessages(limit: 50).response(using: client)
30 | }
31 | .shareReplay(limit: 1)
32 |
33 | self.messages = messages
34 | self.sendMessage = sendMessage.on
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Networking/APIError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Error.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 14/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import Freddy
10 |
11 | public struct APIError: Error {
12 | public let message: String
13 |
14 | public init(message: String) {
15 | self.message = message
16 | }
17 | }
18 |
19 | extension APIError: JSONDecodable {
20 |
21 | public init(json: JSON) throws {
22 | message = try json.decode(at: "error")
23 | }
24 | }
25 |
26 | extension APIError {
27 |
28 | public var localizedDescription: String {
29 | return message
30 | }
31 | }
32 |
33 | extension JSON.Error {
34 |
35 | public var localizedDescription: String {
36 | return "nja"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Networking/Activity.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Activity.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 07/05/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import ReactiveKit
10 | import UIKit
11 |
12 | public class Activity {
13 |
14 | fileprivate let _isActive = Property(false)
15 |
16 | private var count = 0 {
17 | didSet {
18 | if oldValue == 1, count == 0 {
19 | _isActive.value = false
20 | } else if oldValue == 0, count == 1 {
21 | _isActive.value = true
22 | }
23 | }
24 | }
25 |
26 | public var isActive: Bool {
27 | return _isActive.value
28 | }
29 |
30 | public init(updateNetworkActivityIndicator: Bool = true) {
31 | if updateNetworkActivityIndicator {
32 | _ = _isActive.observeNext { isActive in
33 | UIApplication.shared.isNetworkActivityIndicatorVisible = isActive
34 | }
35 | }
36 | }
37 |
38 | public func increase() {
39 | count += 1
40 | }
41 |
42 | public func decrease() {
43 | count -= 1
44 | }
45 | }
46 |
47 | extension Activity: SubjectProtocol {
48 |
49 | public func on(_ event: Event) {
50 | switch event {
51 | case .next(let active):
52 | if active {
53 | increase()
54 | } else {
55 | decrease()
56 | }
57 | default:
58 | break
59 | }
60 | }
61 |
62 | public func observe(with observer: @escaping (Event) -> Void) -> Disposable {
63 | return _isActive.observeIn(.immediateOnMain).observe(with: observer)
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/Networking/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Networking/Message.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Message.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 14/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import Entities
10 | import Client
11 |
12 | extension Message {
13 |
14 | public func update(text: String, roomId: String) -> Request {
15 | return Request(
16 | path: "rooms/\(roomId)/chatMessages/\(id)",
17 | method: .put,
18 | parameters: JSONParameters(["text": text]),
19 | resource: Message.init,
20 | error: APIError.init,
21 | needsAuthorization: true
22 | )
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Networking/Networking.h:
--------------------------------------------------------------------------------
1 | //
2 | // Networking.h
3 | // Networking
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for Networking.
12 | FOUNDATION_EXPORT double NetworkingVersionNumber;
13 |
14 | //! Project version string for Networking.
15 | FOUNDATION_EXPORT const unsigned char NetworkingVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Networking/Token.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Token.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 14/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import Entities
10 | import Client
11 |
12 | extension Token {
13 |
14 | public static func get(clientID: String, secret: String, code: String, redirectURI: String) -> Request {
15 | let params: [String: String] = [
16 | "client_id": clientID,
17 | "client_secret": secret,
18 | "code": code,
19 | "redirect_uri": redirectURI,
20 | "grant_type": "authorization_code"
21 | ]
22 | return Request(
23 | path: "token",
24 | method: .post,
25 | parameters: JSONParameters(params),
26 | resource: Token.init,
27 | error: APIError.init,
28 | needsAuthorization: true
29 | )
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Networking/User.swift:
--------------------------------------------------------------------------------
1 | //
2 | // User.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 14/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import Entities
10 | import Client
11 |
12 | extension User {
13 |
14 | public static func me() -> Request {
15 | return Request(
16 | path: "user/me",
17 | method: .get,
18 | resource: User.init,
19 | error: APIError.init,
20 | needsAuthorization: true
21 | )
22 | }
23 |
24 | public static func get(limit: Int? = nil, skip: Int? = nil) -> Request<[User], APIError> {
25 | return Request(
26 | path: "user",
27 | method: .get,
28 | parameters: JSONParameters(nonNil: ["limit": limit, "skip": skip]),
29 | resource: [User].init,
30 | error: APIError.init,
31 | needsAuthorization: true
32 | )
33 | }
34 |
35 | public static func query(_ q: String, limit: Int? = nil, skip: Int? = nil) -> Request<[User], APIError> {
36 | return Request(
37 | path: "user",
38 | method: .get,
39 | parameters: JSONParameters(nonNil: ["q": q, "limit": limit, "skip": skip]),
40 | resource: [User].init,
41 | error: APIError.init,
42 | needsAuthorization: true
43 | )
44 | }
45 |
46 | public func getRooms() -> Request<[Room], APIError> {
47 | return Request(
48 | path: "user/\(id)/rooms",
49 | method: .get,
50 | resource: [Room].init,
51 | error: APIError.init,
52 | needsAuthorization: true
53 | )
54 | }
55 |
56 | public func getChannels() -> Request<[Room], APIError> {
57 | return Request(
58 | path: "user/\(id)/channels",
59 | method: .get,
60 | resource: [Room].init,
61 | error: APIError.init,
62 | needsAuthorization: true
63 | )
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/Networking/Utilities.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Utilities.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 14/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Freddy
11 | import Client
12 | import ReactiveKit
13 |
14 | extension JSONParameters {
15 |
16 | public init(nonNil jsonOfOptionals: [String: Any?]) {
17 | self.init(jsonOfOptionals.nonNils)
18 | }
19 | }
20 |
21 | extension QueryParameters {
22 |
23 | public init(nonNil dictionaryOfOptionals: [String: String?]) {
24 | self.init(dictionaryOfOptionals.nonNils)
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Reactive Gitter
2 |
3 | A ReactiveKit and Bond demo app.
4 |
5 | Check out the architecture guide [here](https://medium.com/hacker-daily/a-pragmatic-functional-reactive-architecture-with-swift-1e564cdbb1a4).
6 |
--------------------------------------------------------------------------------
/ReactiveGitter.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ReactiveGitter/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/ReactiveGitter/Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Extensions.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import Networking
11 | import ReactiveKit
12 | import Bond
13 |
14 | extension ReactiveExtensions where Base: UIViewController {
15 |
16 | public var userErrors: Bond {
17 | return bond { vc, error in
18 | let alert = UIAlertController(title: "Error occurred", message: error.message, preferredStyle: .actionSheet)
19 | if let retry = error.retry {
20 | let action = UIAlertAction(title: "Retry", style: .default) { _ in
21 | retry.next()
22 | }
23 | alert.addAction(action)
24 | }
25 | let dismissAction = UIAlertAction(title: "Dismiss", style: .cancel)
26 | alert.addAction(dismissAction)
27 | vc.present(alert, animated: true)
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Scenes/Authentication.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Authentication.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import Entities
10 | import Interactors
11 | import Views
12 | import Bond
13 | import ReactiveKit
14 |
15 | extension Authentication {
16 |
17 | public typealias Scene = (
18 | viewController: UIViewController,
19 | tokenAcquired: SafeSignal
20 | )
21 |
22 | public func createScene() -> Scene {
23 | let vc = ViewController.Authentication()
24 |
25 | vc.loginButton.reactive.tap
26 | .bind(to: UIApplication.shared) { application, _ in
27 | application.open(self.authorizationURL, options: [:])
28 | }
29 |
30 | return (vc, token)
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Scenes/Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Extensions.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 16/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | extension NSAttributedString {
12 |
13 | convenience init(html: String) throws {
14 | guard let data = NSAttributedString.styledHTMLwithHTML(html).data(using: String.Encoding.utf8) else {
15 | throw NSError(domain: "Invalid HTML", code: -500, userInfo: nil)
16 | }
17 |
18 | let options = [NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue] as [String : Any]
19 | try self.init(data: data, options: options, documentAttributes: nil)
20 | }
21 |
22 | static func styledHTMLwithHTML(_ html: String) -> String {
23 | return "" + html + "";
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Scenes/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Scenes/RoomList.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RoomList.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import Entities
10 | import Interactors
11 | import Views
12 | import Bond
13 | import ReactiveKit
14 |
15 | extension RoomList {
16 |
17 | public typealias Scene = (
18 | viewController: UIViewController,
19 | logOut: SafeSignal
20 | )
21 |
22 | public func createScene() -> Scene {
23 | let vc = ViewController.RoomList()
24 |
25 | rooms.bind(to: vc.tableView) { (rooms, indexPath, tableView) -> UITableViewCell in
26 | let cell = tableView.dequeueReusableCell(withIdentifier: RoomCell.classReuseIdentifier, for: indexPath) as! RoomCell
27 | cell.textLabel?.text = rooms[indexPath.row].name
28 | return cell
29 | }
30 |
31 | vc.tableView.reactive.selectedRow
32 | .with(latestFrom: rooms) { $1[$0] }
33 | .bind(to: vc) { vc, room in
34 | let scene = RoomMessages(client: self.client, room: room).createScene()
35 | vc.navigationController?.pushViewController(scene, animated: true)
36 | }
37 |
38 | return (vc, vc.logOutButton.reactive.tap)
39 | }
40 | }
41 |
42 | extension ReactiveExtensions where Base: UITableView {
43 |
44 | var selectedRow: SafeSignal {
45 | return delegate.signal(
46 | for: #selector(UITableViewDelegate.tableView(_:didSelectRowAt:))
47 | ) { (subject: SafePublishSubject, _: UITableView, indexPath: NSIndexPath) in
48 | subject.next(indexPath.row)
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/Scenes/RoomMessages.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RoomMessages.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import Entities
10 | import Interactors
11 | import Views
12 | import Bond
13 | import ReactiveKit
14 |
15 | extension RoomMessages {
16 |
17 | public func createScene() -> UIViewController {
18 | let vc = ViewController.RoomMessages()
19 |
20 | messages
21 | .flatMap { try? NSAttributedString(html: $0.html) }
22 | .bind(to: vc.tableView) { (messages, indexPath, tableView) -> UITableViewCell in
23 | let cell = tableView.dequeueReusableCell(withIdentifier: MessageCell.classReuseIdentifier, for: indexPath) as! MessageCell
24 | cell.textLabel?.attributedText = messages[indexPath.row]
25 | return cell
26 | }
27 |
28 | return vc
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Scenes/Scenes.h:
--------------------------------------------------------------------------------
1 | //
2 | // Scenes.h
3 | // Scenes
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for Scenes.
12 | FOUNDATION_EXPORT double ScenesVersionNumber;
13 |
14 | //! Project version string for Scenes.
15 | FOUNDATION_EXPORT const unsigned char ScenesVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Views/Cells/MessageCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MessageCell.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public class MessageCell: UITableViewCell {
12 |
13 | public override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
14 | super.init(style: style, reuseIdentifier: reuseIdentifier)
15 | textLabel?.numberOfLines = 0
16 | }
17 |
18 | public required init?(coder aDecoder: NSCoder) {
19 | fatalError("init(coder:) has not been implemented")
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Views/Cells/RoomCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RoomCell.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public class RoomCell: UITableViewCell {
12 | }
13 |
--------------------------------------------------------------------------------
/Views/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Views/View Controllers/Authentication.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AuthenticationViewController.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension ViewController {
12 |
13 | public class Authentication: UIViewController {
14 |
15 | public private(set) lazy var titleLabel = UILabel().setup {
16 | $0.text = "Reactive Gitter"
17 | $0.font = .preferredFont(forTextStyle: .title1)
18 | }
19 |
20 | public private(set) lazy var loginButton = UIButton(type: .system).setup {
21 | $0.setTitle("Log in", for: .normal)
22 | }
23 |
24 | public init() {
25 | super.init(nibName: nil, bundle: nil)
26 | view.backgroundColor = .white
27 |
28 | view.addSubview(titleLabel)
29 | titleLabel.center(in: view)
30 |
31 | view.addSubview(loginButton)
32 | loginButton.center(in: view, offset: .init(x: 0, y: 60))
33 | }
34 |
35 | public required init?(coder aDecoder: NSCoder) {
36 | fatalError("init(coder:) has not been implemented")
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/Views/View Controllers/RoomList.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RoomList.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension ViewController {
12 |
13 | public class RoomList: UIViewController {
14 |
15 | public private(set) var tableView = UITableView().setup {
16 | $0.tableFooterView = UIView()
17 | $0.rowHeight = 50
18 | }
19 |
20 | public private(set) var logOutButton = UIBarButtonItem(title: "Log out", style: .plain, target: nil, action: nil)
21 |
22 | public init() {
23 | super.init(nibName: nil, bundle: nil)
24 |
25 | tableView.register(RoomCell.self, forCellReuseIdentifier: RoomCell.classReuseIdentifier)
26 | navigationItem.title = "Rooms"
27 | navigationItem.rightBarButtonItem = logOutButton
28 |
29 | view.addSubview(tableView)
30 | tableView.anchor(in: view)
31 | }
32 |
33 | public required init?(coder aDecoder: NSCoder) {
34 | fatalError("init(coder:) has not been implemented")
35 | }
36 |
37 | public override func viewWillAppear(_ animated: Bool) {
38 | super.viewWillAppear(animated)
39 | if let indexPath = tableView.indexPathForSelectedRow {
40 | tableView.deselectRow(at: indexPath, animated: animated)
41 | }
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/Views/View Controllers/RoomMessages.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RoomMessages.swift
3 | // ReactiveGitter
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension ViewController {
12 |
13 | public class RoomMessages: UIViewController {
14 |
15 | public private(set) var tableView = UITableView().setup {
16 | $0.tableFooterView = UIView()
17 | $0.rowHeight = UITableViewAutomaticDimension
18 | $0.estimatedRowHeight = 200
19 | $0.allowsSelection = false
20 | }
21 |
22 | public init() {
23 | super.init(nibName: nil, bundle: nil)
24 |
25 | tableView.register(MessageCell.self, forCellReuseIdentifier: MessageCell.classReuseIdentifier)
26 |
27 | view.addSubview(tableView)
28 | tableView.anchor(in: view)
29 | }
30 |
31 | public required init?(coder aDecoder: NSCoder) {
32 | fatalError("init(coder:) has not been implemented")
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Views/Views.h:
--------------------------------------------------------------------------------
1 | //
2 | // Views.h
3 | // Views
4 | //
5 | // Created by Srdan Rasic on 15/01/2017.
6 | // Copyright © 2017 ReactiveKit. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for Views.
12 | FOUNDATION_EXPORT double ViewsVersionNumber;
13 |
14 | //! Project version string for Views.
15 | FOUNDATION_EXPORT const unsigned char ViewsVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------