Merge pull request #144 from TouchInstinct/feature/newflow

Feature/newflow
This commit is contained in:
Igor Kislyuk 2018-05-22 17:08:50 +03:00 committed by GitHub
commit a65a55bd35
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 98 additions and 45 deletions

View File

@ -1,5 +1,11 @@
# Changelog
### 0.7.16
- **[Breaking Change]**: Remove `ModuleConfigurator`, change type of `ConfigurableController.viewModel` property from `IUO` to plain `ViewModelT`.
- **Add**: `InitializableView` protocol with default implementation.
- **Update**: `ConfigurableController` protocol now inherit `InitializableView`.
- **[Breaking Change]**: `setAppearance` of `ConfigurableController` replaced with `configureAppearance` of `InitializableView`.
### 0.7.15
- **Fix**: `Double.roundValue(withPrecision:)` rounding issue
- **Add**: `Double+Rounding` test case

View File

@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "LeadKit"
s.version = "0.7.15"
s.version = "0.7.16"
s.summary = "iOS framework with a bunch of tools for rapid development"
s.homepage = "https://github.com/TouchInstinct/LeadKit"
s.license = "Apache License, Version 2.0"

View File

@ -159,10 +159,6 @@
6714633C1EB3396E00EAB194 /* LoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 671462281EB3396E00EAB194 /* LoadingIndicator.swift */; };
6714633D1EB3396E00EAB194 /* LoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 671462281EB3396E00EAB194 /* LoadingIndicator.swift */; };
6714633F1EB3396E00EAB194 /* LoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 671462281EB3396E00EAB194 /* LoadingIndicator.swift */; };
671463401EB3396E00EAB194 /* ModuleConfigurator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 671462291EB3396E00EAB194 /* ModuleConfigurator.swift */; };
671463411EB3396E00EAB194 /* ModuleConfigurator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 671462291EB3396E00EAB194 /* ModuleConfigurator.swift */; };
671463421EB3396E00EAB194 /* ModuleConfigurator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 671462291EB3396E00EAB194 /* ModuleConfigurator.swift */; };
671463431EB3396E00EAB194 /* ModuleConfigurator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 671462291EB3396E00EAB194 /* ModuleConfigurator.swift */; };
671463481EB3396E00EAB194 /* ResettableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6714622B1EB3396E00EAB194 /* ResettableType.swift */; };
671463491EB3396E00EAB194 /* ResettableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6714622B1EB3396E00EAB194 /* ResettableType.swift */; };
6714634A1EB3396E00EAB194 /* ResettableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6714622B1EB3396E00EAB194 /* ResettableType.swift */; };
@ -493,6 +489,14 @@
67EB7FFE206176C900BDD9FB /* AnyPaginationWrappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EB7FFC206176C900BDD9FB /* AnyPaginationWrappable.swift */; };
67EB7FFF206176C900BDD9FB /* AnyPaginationWrappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EB7FFC206176C900BDD9FB /* AnyPaginationWrappable.swift */; };
67EB8001206177D600BDD9FB /* PaginationWrapperDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EB8000206177D600BDD9FB /* PaginationWrapperDelegate.swift */; };
67ED2BDE20B44DEB00508B3E /* InitializableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67ED2BDD20B44DEB00508B3E /* InitializableView.swift */; };
67ED2BDF20B44DEB00508B3E /* InitializableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67ED2BDD20B44DEB00508B3E /* InitializableView.swift */; };
67ED2BE020B44DEB00508B3E /* InitializableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67ED2BDD20B44DEB00508B3E /* InitializableView.swift */; };
67ED2BE120B44DEB00508B3E /* InitializableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67ED2BDD20B44DEB00508B3E /* InitializableView.swift */; };
67ED2BE520B44F4300508B3E /* InitializableView+DefaultImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67ED2BE420B44F4300508B3E /* InitializableView+DefaultImplementation.swift */; };
67ED2BE620B44F4300508B3E /* InitializableView+DefaultImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67ED2BE420B44F4300508B3E /* InitializableView+DefaultImplementation.swift */; };
67ED2BE720B44F4300508B3E /* InitializableView+DefaultImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67ED2BE420B44F4300508B3E /* InitializableView+DefaultImplementation.swift */; };
67ED2BE820B44F4300508B3E /* InitializableView+DefaultImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67ED2BE420B44F4300508B3E /* InitializableView+DefaultImplementation.swift */; };
67FD4382206BD24B005B0C64 /* EqutableOptionalArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67FD4381206BD24B005B0C64 /* EqutableOptionalArray.swift */; };
67FD4383206BD24B005B0C64 /* EqutableOptionalArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67FD4381206BD24B005B0C64 /* EqutableOptionalArray.swift */; };
67FD4384206BD24B005B0C64 /* EqutableOptionalArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67FD4381206BD24B005B0C64 /* EqutableOptionalArray.swift */; };
@ -654,7 +658,6 @@
671462251EB3396E00EAB194 /* CursorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CursorType.swift; sourceTree = "<group>"; };
671462261EB3396E00EAB194 /* DrawingOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DrawingOperation.swift; sourceTree = "<group>"; };
671462281EB3396E00EAB194 /* LoadingIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadingIndicator.swift; sourceTree = "<group>"; };
671462291EB3396E00EAB194 /* ModuleConfigurator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ModuleConfigurator.swift; sourceTree = "<group>"; };
6714622B1EB3396E00EAB194 /* ResettableType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResettableType.swift; sourceTree = "<group>"; };
6714622C1EB3396E00EAB194 /* ReuseIdentifierProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReuseIdentifierProtocol.swift; sourceTree = "<group>"; };
6714622E1EB3396E00EAB194 /* StaticViewHeightProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StaticViewHeightProtocol.swift; sourceTree = "<group>"; };
@ -764,6 +767,8 @@
67EB7FF7206175F700BDD9FB /* PaginationWrappable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaginationWrappable.swift; sourceTree = "<group>"; };
67EB7FFC206176C900BDD9FB /* AnyPaginationWrappable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyPaginationWrappable.swift; sourceTree = "<group>"; };
67EB8000206177D600BDD9FB /* PaginationWrapperDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaginationWrapperDelegate.swift; sourceTree = "<group>"; };
67ED2BDD20B44DEB00508B3E /* InitializableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitializableView.swift; sourceTree = "<group>"; };
67ED2BE420B44F4300508B3E /* InitializableView+DefaultImplementation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "InitializableView+DefaultImplementation.swift"; sourceTree = "<group>"; };
67FD4381206BD24B005B0C64 /* EqutableOptionalArray.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EqutableOptionalArray.swift; sourceTree = "<group>"; };
67FDC25E1FA310EA00C76A77 /* RequestError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestError.swift; sourceTree = "<group>"; };
78405D3B3D3C3E17456877FF /* Pods_LeadKit_iOSTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LeadKit_iOSTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@ -1155,7 +1160,6 @@
67274783206CD7E500725163 /* DateFormatingService */,
672947E3206EA63200AC6B6B /* Drawing */,
671462281EB3396E00EAB194 /* LoadingIndicator.swift */,
671462291EB3396E00EAB194 /* ModuleConfigurator.swift */,
67C7B1772068BADA00C9EDA3 /* NumberFormattingService */,
A676AE541F981121001F9214 /* ObservableMappable.swift */,
6714622B1EB3396E00EAB194 /* ResettableType.swift */,
@ -1314,6 +1318,7 @@
isa = PBXGroup;
children = (
6792623A206EB0D800308E62 /* SeparatorCell */,
67ED2BE420B44F4300508B3E /* InitializableView+DefaultImplementation.swift */,
6727476D206CCDDB00725163 /* ViewBackground+Configuration.swift */,
6727477E206CD3BD00725163 /* ViewText+Extensions.swift */,
);
@ -1566,6 +1571,7 @@
children = (
67926234206EB08400308E62 /* SeparatorCell */,
678D269D20692BFF00B05B93 /* TextField */,
67ED2BDD20B44DEB00508B3E /* InitializableView.swift */,
);
path = Views;
sourceTree = "<group>";
@ -2605,6 +2611,7 @@
671463541EB3396E00EAB194 /* StaticViewHeightProtocol.swift in Sources */,
673CF4112063ABD100C329F6 /* GeneralDataLoadingState+Extensions.swift in Sources */,
673CF42C2063DE5900C329F6 /* TextPlaceholderView.swift in Sources */,
67ED2BDE20B44DEB00508B3E /* InitializableView.swift in Sources */,
671463601EB3396E00EAB194 /* SupportProtocol.swift in Sources */,
671462841EB3396E00EAB194 /* CGContext+Initializers.swift in Sources */,
EFBE57DB1EC361620040E00A /* UIView+Layout.swift in Sources */,
@ -2616,7 +2623,6 @@
671463101EB3396E00EAB194 /* UIViewController+DefaultXibName.swift in Sources */,
67386A8C206CF3F6004EDA6C /* DateFormattingService+DefaultImplementation.swift in Sources */,
674AF55C1EC45B1600038A8F /* UIActivityIndicatorView+LoadingIndicator.swift in Sources */,
671463401EB3396E00EAB194 /* ModuleConfigurator.swift in Sources */,
67A1FF8F1EBCA09B00D6C89F /* UIImage+Spinner.swift in Sources */,
673564F62068C68D00F0CBED /* NumberFormat.swift in Sources */,
EFA4C66420864F9C008C4DD8 /* UniversalMappable.swift in Sources */,
@ -2687,6 +2693,7 @@
671463081EB3396E00EAB194 /* UIView+Rotation.swift in Sources */,
6714626C1EB3396E00EAB194 /* XibView.swift in Sources */,
67274778206CD0B500725163 /* UILabel+ViewTextConfiguration.swift in Sources */,
67ED2BE520B44F4300508B3E /* InitializableView+DefaultImplementation.swift in Sources */,
6774529220625D170024EEEF /* GeneralDataLoadingModel.swift in Sources */,
6714637C1EB3396E00EAB194 /* ImageDrawingOperation.swift in Sources */,
671463341EB3396E00EAB194 /* DrawingOperation.swift in Sources */,
@ -2787,7 +2794,6 @@
6714626A1EB3396E00EAB194 /* NetworkService.swift in Sources */,
671AD26E206A3E8500EAF887 /* Array+TotalCountCursorListingResult.swift in Sources */,
673CF4132063ABD100C329F6 /* GeneralDataLoadingState+Extensions.swift in Sources */,
671463421EB3396E00EAB194 /* ModuleConfigurator.swift in Sources */,
671462921EB3396E00EAB194 /* CGImage+Crop.swift in Sources */,
671463861EB3396E00EAB194 /* ResizeDrawingOperation.swift in Sources */,
671463921EB3396E00EAB194 /* TemplateDrawingOperation.swift in Sources */,
@ -2802,6 +2808,7 @@
6714638A1EB3396E00EAB194 /* RoundDrawingOperation.swift in Sources */,
67153E3C207DFADA0049D8C0 /* RotateDrawingOperation.swift in Sources */,
6774529C20625E5B0024EEEF /* PaginationDataLoadingState.swift in Sources */,
67ED2BE020B44DEB00508B3E /* InitializableView.swift in Sources */,
671463821EB3396E00EAB194 /* PaddingDrawingOperation.swift in Sources */,
6714632A1EB3396E00EAB194 /* BaseViewModel.swift in Sources */,
671462AE1EB3396E00EAB194 /* Observable+DeferredJust.swift in Sources */,
@ -2860,6 +2867,7 @@
67FDC2611FA310EA00C76A77 /* RequestError.swift in Sources */,
671AD25E206A343300EAF887 /* VoidBlock.swift in Sources */,
671462521EB3396E00EAB194 /* StaticCursor.swift in Sources */,
67ED2BE720B44F4300508B3E /* InitializableView+DefaultImplementation.swift in Sources */,
6714629E1EB3396E00EAB194 /* CursorType+Slice.swift in Sources */,
6714636A1EB3396E00EAB194 /* ConfigurableView.swift in Sources */,
);
@ -2871,9 +2879,11 @@
files = (
6714634B1EB3396E00EAB194 /* ResettableType.swift in Sources */,
671462E71EB3396E00EAB194 /* UIColor+Hex.swift in Sources */,
67ED2BE120B44DEB00508B3E /* InitializableView.swift in Sources */,
67274775206CCF1200725163 /* ViewText.swift in Sources */,
6727476B206CCCA500725163 /* ViewBackground.swift in Sources */,
671462831EB3396E00EAB194 /* AlamofireRequest+Extensions.swift in Sources */,
67ED2BE820B44F4300508B3E /* InitializableView+DefaultImplementation.swift in Sources */,
677452B820627FE00024EEEF /* PaginationWrappable.swift in Sources */,
673CF40E2063AB7C00C329F6 /* GeneralDataLoadingViewModel.swift in Sources */,
67274770206CCDDB00725163 /* ViewBackground+Configuration.swift in Sources */,
@ -2888,7 +2898,6 @@
6714626B1EB3396E00EAB194 /* NetworkService.swift in Sources */,
673CF43A2063E7CE00C329F6 /* GeneralDataLoadingController+DefaultImplementation.swift in Sources */,
671463131EB3396E00EAB194 /* UIViewController+DefaultXibName.swift in Sources */,
671463431EB3396E00EAB194 /* ModuleConfigurator.swift in Sources */,
671462931EB3396E00EAB194 /* CGImage+Crop.swift in Sources */,
6727477A206CD0B500725163 /* UILabel+ViewTextConfiguration.swift in Sources */,
67EB7FE720615DE000BDD9FB /* DataSource.swift in Sources */,
@ -3051,7 +3060,6 @@
671462F11EB3396E00EAB194 /* UIImage+SupportExtensions.swift in Sources */,
671462691EB3396E00EAB194 /* NetworkService.swift in Sources */,
671463111EB3396E00EAB194 /* UIViewController+DefaultXibName.swift in Sources */,
671463411EB3396E00EAB194 /* ModuleConfigurator.swift in Sources */,
EFA4C67020865126008C4DD8 /* UniversalMappable+SwiftStandard.swift in Sources */,
67153E41207DFBA80049D8C0 /* FloatingPoint+DegreesRadiansConvertion.swift in Sources */,
671462911EB3396E00EAB194 /* CGImage+Crop.swift in Sources */,
@ -3069,6 +3077,7 @@
67EB7FEC2061667900BDD9FB /* DefaultTotalCountCursorListingResult.swift in Sources */,
671462991EB3396E00EAB194 /* CGSize+Resize.swift in Sources */,
67274780206CD3BD00725163 /* ViewText+Extensions.swift in Sources */,
67ED2BE620B44F4300508B3E /* InitializableView+DefaultImplementation.swift in Sources */,
671463311EB3396E00EAB194 /* CursorType.swift in Sources */,
6714624D1EB3396E00EAB194 /* MapCursor.swift in Sources */,
67EB7FD520615D1700BDD9FB /* ResettableCursorType.swift in Sources */,
@ -3096,6 +3105,7 @@
673CF42D2063DE5900C329F6 /* TextPlaceholderView.swift in Sources */,
671462A11EB3396E00EAB194 /* Double+Rounding.swift in Sources */,
671463091EB3396E00EAB194 /* UIView+Rotation.swift in Sources */,
67ED2BDF20B44DEB00508B3E /* InitializableView.swift in Sources */,
6714626D1EB3396E00EAB194 /* XibView.swift in Sources */,
6714637D1EB3396E00EAB194 /* ImageDrawingOperation.swift in Sources */,
671463351EB3396E00EAB194 /* DrawingOperation.swift in Sources */,

View File

@ -41,7 +41,7 @@ public extension GeneralDataLoadingController where Self: UIViewController {
func initialLoadDataLoadingView() {
addViews()
setAppearance()
configureAppearance()
setupStateViews()
configureBarButtons()
localize()

View File

@ -24,29 +24,13 @@ import UIKit
public extension ConfigurableController where Self: UIViewController {
func bindViews() {
// nothing
}
func addViews() {
// nothing
}
func setAppearance() {
// nothing
}
func configureBarButtons() {
// nothing
}
func localize() {
// nothing
}
func initialLoadView() {
addViews()
setAppearance()
configureAppearance()
configureBarButtons()
localize()
bindViews()

View File

@ -1,8 +1,8 @@
//
// Copyright (c) 2017 Touch Instinct
// Copyright (c) 2018 Touch Instinct
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// of this software and associated documentation files (the Software), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
@ -11,7 +11,7 @@
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
@ -20,9 +20,29 @@
// THE SOFTWARE.
//
public protocol ModuleConfigurator {
public extension InitializableView {
associatedtype ViewControllerT
func initializeView() {
addViews()
bindViews()
configureAppearance()
localize()
}
func addViews() {
//
}
func bindViews() {
//
}
func configureAppearance() {
//
}
func localize() {
//
}
func configure(input: ViewControllerT)
}

View File

@ -22,22 +22,14 @@
import Foundation
public protocol ConfigurableController {
public protocol ConfigurableController: InitializableView {
associatedtype ViewModelT
var viewModel: ViewModelT! { get }
func bindViews()
func addViews()
func setAppearance()
var viewModel: ViewModelT { get }
func configureBarButtons()
func localize()
func initialLoadView()
}

View File

@ -0,0 +1,41 @@
//
// Copyright (c) 2018 Touch Instinct
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the Software), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
/// Protocol with methods that should be called in constructor methods of view.
public protocol InitializableView {
/// Main method that should call other in particular order.
func initializeView()
/// Method for adding views to current view.
func addViews()
/// Method for binding to data or user actions.
func bindViews()
/// Appearance configuration method.
func configureAppearance()
/// Localization method.
func localize()
}