mvcgen 0.1.20 → 0.1.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -15
  3. data/lib/mvcgen/generator.rb +61 -1
  4. data/lib/mvcgen/version.rb +1 -1
  5. data/lib/templates/default/swift/Controllers/Login/ForgetPasswordVC.swift +32 -39
  6. data/lib/templates/default/swift/Controllers/Login/LoginVC.swift +21 -11
  7. data/lib/templates/default/swift/Controllers/Login/RegisterVC.swift +69 -59
  8. data/lib/templates/default/swift/Controllers/Notifications/Cells/NotificationCell.swift +28 -1
  9. data/lib/templates/default/swift/Controllers/Notifications/NotificationsVC.swift +17 -27
  10. data/lib/templates/default/swift/Controllers/OtherLogin/ForgetPasswordTVC.swift +9 -10
  11. data/lib/templates/default/swift/Controllers/OtherLogin/LoginTVC.swift +1 -1
  12. data/lib/templates/default/swift/Controllers/OtherLogin/OtherRegisterVC.swift +11 -10
  13. data/lib/templates/default/swift/Controllers/OtherLogin/SelectLanguageVC.swift +22 -21
  14. data/lib/templates/default/swift/Controllers/OtherLogin/TermsAndConditionsVC.swift +8 -7
  15. data/lib/templates/default/swift/Controllers/Profile/AboutUsVC.swift +23 -11
  16. data/lib/templates/default/swift/Controllers/Profile/Cells/AboutUsImageCell.swift +21 -5
  17. data/lib/templates/default/swift/Controllers/Profile/Cells/DescriptionCell.swift +10 -0
  18. data/lib/templates/default/swift/Controllers/Profile/Cells/DestinationCell.swift +5 -0
  19. data/lib/templates/default/swift/Controllers/Profile/Cells/FavoriteCollectionCell.swift +2 -0
  20. data/lib/templates/default/swift/Controllers/Profile/Cells/ImagesCollectionViewCell.swift +12 -0
  21. data/lib/templates/default/swift/Controllers/Profile/ProfileContainerVC.swift +18 -14
  22. data/lib/templates/default/swift/Controllers/Profile/ProfileTVC.swift +65 -85
  23. data/lib/templates/default/swift/Controllers/Tutorial/TutorialVC.swift +12 -9
  24. data/lib/templates/default/swift/Extensions/Buttons.swift +0 -12
  25. data/lib/templates/default/swift/Extensions/{ArrayDuplicates.swift → Utils+Array.swift} +1 -1
  26. data/lib/templates/default/swift/Extensions/{Images.swift → Utils+Images.swift} +8 -7
  27. data/lib/templates/default/swift/Extensions/Utils+String.swift +34 -0
  28. data/lib/templates/default/swift/Extensions/Utils+UIButton.swift +21 -0
  29. data/lib/templates/default/swift/Extensions/{UIColorExtensions.swift → Utils+UIColor.swift} +1 -1
  30. data/lib/templates/default/swift/Extensions/{TableViewEmptyView.swift → Utils+UITableView.swift} +1 -2
  31. data/lib/templates/default/swift/Extensions/Utils+UITextField.swift +22 -0
  32. data/lib/templates/default/swift/Extensions/{GradientView.swift → Utils+UIView.swift} +82 -2
  33. data/lib/templates/default/swift/Extensions/{TapEffectExtension.swift → Utils+UIViewController.swift} +18 -1
  34. data/lib/templates/default/swift/Helper/Utils.swift +1 -1
  35. data/lib/templates/default/swift/UI/Storyboards/Home.storyboard +4 -4
  36. data/lib/templates/default/swift/UI/Views/EmptyTableView/Xibs/EmptyTableLabelView.xib +1 -1
  37. metadata +11 -18
  38. data/lib/templates/default/swift/Assets.xcassets/alert_beach.imageset/Contents.json +0 -21
  39. data/lib/templates/default/swift/Assets.xcassets/alert_beach.imageset/icons8-beach-64.png +0 -0
  40. data/lib/templates/default/swift/Assets.xcassets/alert_nobaggage.imageset/Contents.json +0 -21
  41. data/lib/templates/default/swift/Assets.xcassets/alert_nobaggage.imageset/icons8-no-baggage-100.png +0 -0
  42. data/lib/templates/default/swift/Assets.xcassets/alert_signpost.imageset/Contents.json +0 -21
  43. data/lib/templates/default/swift/Assets.xcassets/alert_signpost.imageset/icons8-signpost-64.png +0 -0
  44. data/lib/templates/default/swift/Assets.xcassets/alert_sunbed.imageset/Contents.json +0 -21
  45. data/lib/templates/default/swift/Assets.xcassets/alert_sunbed.imageset/sunbed.png +0 -0
  46. data/lib/templates/default/swift/Extensions/HideKeyboard.swift +0 -22
  47. data/lib/templates/default/swift/Extensions/InnerShadowExtension.swift +0 -83
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c6d2b0188f0092f35c61de28a1f6c3dba6612432
4
- data.tar.gz: 68adf84e24be94e067c4a70112540293e9b02858
3
+ metadata.gz: fd00291f4c2e3b1d3b3da10080f0df0a4cd0df4d
4
+ data.tar.gz: 36b8b66d0fc2a889b29d18dae82ccffa2ec97a9d
5
5
  SHA512:
6
- metadata.gz: 34d5ac13e410067e630c9193478685d411f6fcb0fd2bfcc51b61494b36c7321cb105122c6d8c1049a4424b561947c8c6f04a35e76449948bffa4b97e01893407
7
- data.tar.gz: 3b2a068d12d78cd888f7f69d23dce9ac9e49aacc8fcb4b1b944255558ea39bc5e9a3df0bc30d126983f3c4c30bcb0b4ce620ebcd37f4012035150fec29edd721
6
+ metadata.gz: '089345d9299dc54561c612152eef2aae89768ed5af101f124ba2a1673b877003be6825b3213fe3d8e35a56a3e337a40c22f0718c2e833de99a2b8c80f4f47605'
7
+ data.tar.gz: 79090f4ae74d29cc0cb075b7becd65fc6454543637cab070a7449bdffa93111e1d905aafee10b9b133b92fe9edf52b45a7a02eb5b93bedc545784db3c5d2e3c6
data/README.md CHANGED
@@ -7,11 +7,9 @@ Gem to generate MVC starting modules to use them in your Swift projects
7
7
  The implementation scheme returned by this generator is hardly inspired in the example and post of vipergen, https://rubygems.org/gems/vipergen/versions/0.2.6 .
8
8
 
9
9
  - [Features](#features)
10
- - [Changelog](#changelog-0.1)
11
- - [Expected in version 0.2](#expected-in-version-0.2)
12
10
  - [MVC files structure](#mvc-files-structure)
13
- - [How to install mvcgen](#how-to-install-vipergen)
14
- - [How to generate a MVC module with a given name?](#how-to-generate-viper-module-with-a-given-name?)
11
+ - [How to install mvcgen](#how-to-install-mvcgen)
12
+ - [How to generate a MVC module with a given name?](#how-to-generate-a-MVC-module-with-a-given-name?)
15
13
  - [Developer tips](#developer-tips)
16
14
  - [Update the gem](#update-the-gem)
17
15
  - [Add a new template](#add-a-new-template)
@@ -117,7 +115,7 @@ sudo gem install mvcgen
117
115
  If everything were right, you should have now the mvcgen command available in your system console
118
116
 
119
117
  ## How to generate a MVC module with a given name?
120
- You have just to execute the following command standing on your project main folder
118
+ You have just to execute the following command standing on your project root folder
121
119
  ```bash
122
120
  mvcgen generate YourProjectName --path=./
123
121
  ```
@@ -127,28 +125,28 @@ And then the files structure will be automatically created and added to the proj
127
125
  ### Update the gem
128
126
  When the gem is updated it has to be reported to the gem repository. I followed this tutorial http://amaras-tech.co.uk/article/43/Creating_executable_gems that basically says that once you have your gem ready execute:
129
127
  ```bash
130
- gem build vipergen.gemspec
131
- gem install vipergen-0.1.gem
132
- gem push vipergen-0.1.gem
128
+ gem build mvcgen.gemspec
129
+ gem install mvcgen-0.1.gem
130
+ gem push mvcgen-0.1.gem
133
131
  ```
134
132
  Then you'll be asked for your credentials in order to make the update in the repo (http://guides.rubygems.org/publishing/)
135
133
 
136
- <!-- ### Add a new template
137
- Are you interested in MVC and you would like to contribute with this gem adding new templates? Feel free to do it. It's pretty easy. You've just to:
134
+ ### Add a new template
135
+ Are you interested in this project and you would like to contribute by adding new templates? Feel free to do it. It's pretty easy. You've just to:
138
136
  - Create a folder inside `templates` with the name of your template
139
137
  - You'll have to create inside the templates a swift folder with your files (get inspired from existing templates)
140
138
  - Use the word MVCGEN where you want the name to be replaced in.
141
139
  - Remember to add the file mvcspec.yml with the description of your template as below:
142
140
  ```yaml
143
- author: pepi
144
- author_email: daniel.martinezcg@gmail.com
145
- template_description: Default template with the simplest structure using MVC
141
+ author: pepito
142
+ author_email: pepito@test.com
143
+ template_description: Default template with..
146
144
  updated_at: 2018-08-01
147
145
  ```
148
- - Report it as a PR in this repo updating the gem version in Gemspec. -->
146
+ - Report it as a PR in this repo updating the gem version in Gemspec.
149
147
 
150
148
  ## Resources
151
149
  - Rspec documentation: http://rubydoc.info/gems/rspec-expectations/frames
152
150
  - XCode Plugins: http://nshipster.com/xcode-plugins/
153
151
  - XCodeProj gem (to modify project groups structure): https://github.com/CocoaPods/Xcodeproj
154
- - Thor, powerful Ruby library for command line: http://whatisthor.com/ -->
152
+ - Thor, powerful Ruby library for command line: http://whatisthor.com/
@@ -18,12 +18,72 @@ module MVCgen
18
18
  proj = Xcodeproj::Project.open(project_file)
19
19
 
20
20
  # TODO: view this to improve path files: allowable_project_paths
21
- self.addxcodefiles(filespath,proj.main_group,proj.targets.first)
21
+ self.add_files_togroup(proj, proj.main_group, proj.targets.first)
22
+ # self.addxcodefiles(filespath,proj.main_group,proj.targets.first)
22
23
 
23
24
  proj.save
24
25
  puts "Finish adding files"
25
26
  end
26
27
 
28
+ def is_resource_group(file)
29
+ extname= file[/\.[^\.]+$/]
30
+ if extname == '.bundle' || extname == '.xcassets' then
31
+ return true
32
+ end
33
+ return false
34
+ end
35
+
36
+ def self.add_files_togroup(project, group, target)
37
+
38
+ if File.exist?(group.real_path)
39
+
40
+ Dir.foreach(group.real_path) do |entry|
41
+ filePath = File.join(group.real_path, entry)
42
+
43
+ # puts filePath
44
+
45
+ if filePath.to_s.end_with?(".DS_Store", ".xcconfig") then
46
+ # ignore
47
+
48
+ elsif filePath.to_s.end_with?(".lproj") then
49
+ if @variant_group.nil?
50
+ @variant_group = group.new_variant_group("Localizable.strings");
51
+ end
52
+ string_file = File.join(filePath, "Localizable.strings")
53
+ fileReference = @variant_group.new_reference(string_file)
54
+ target.add_resources([fileReference])
55
+
56
+ elsif is_resource_group(entry) then
57
+ fileReference = group.new_reference(filePath)
58
+ target.add_resources([fileReference])
59
+ elsif !File.directory?(filePath) then
60
+
61
+ fileReference = group.new_reference(filePath)
62
+ if filePath.to_s.end_with?(".swift", ".mm", ".m", ".cpp") then
63
+ target.add_file_references([fileReference])
64
+ elsif filePath.to_s.end_with?(".pch") then
65
+
66
+ elsif filePath.to_s.end_with?("Info.plist") && entry == "Info.plist" then
67
+
68
+ elsif filePath.to_s.end_with?(".h") then
69
+ # target.headers_build_phase.add_file_reference(fileReference)
70
+ elsif filePath.to_s.end_with?(".framework") || filePath.to_s.end_with?(".a") then
71
+ target.frameworks_build_phases.add_file_reference(fileReference)
72
+ elsif
73
+ target.add_resources([fileReference])
74
+ end
75
+ elsif File.directory?(filePath) && entry != '.' && entry != '..' then
76
+
77
+ subGroup = group.find_subpath(entry, true)
78
+ subGroup.set_source_tree(group.source_tree)
79
+ subGroup.set_path(File.join(group.real_path, entry))
80
+ add_files_togroup(project, target, subGroup)
81
+
82
+ end
83
+ end
84
+ end
85
+ end
86
+
27
87
  def self.addxcodefiles(direc, current_group, main_target)
28
88
  Dir.glob(direc) do |item|
29
89
  next if item == '.' or item == '.DS_Store'
@@ -1,4 +1,4 @@
1
1
  module MVCgen
2
2
  NAME = "mvcgen"
3
- VERSION = "0.1.20"
3
+ VERSION = "0.1.21"
4
4
  end
@@ -13,11 +13,11 @@ import UIKit
13
13
  protocol ForgetPasswordVCDelegate: class {
14
14
  func removeBlurredBackgroundView()
15
15
  }
16
+
16
17
  class ForgetPasswordVC: UIViewController, UIGestureRecognizerDelegate {
17
18
 
18
- weak var delegate: ForgetPasswordVCDelegate?
19
- private var keybaordIsShowing: Bool = false
20
-
19
+ // MARK: - Outlets
20
+
21
21
  @IBOutlet weak var cancelButton: UIButton!
22
22
  @IBOutlet weak var bottomConstraint: NSLayoutConstraint!
23
23
  @IBOutlet weak var topConstraint: NSLayoutConstraint!
@@ -25,7 +25,14 @@ class ForgetPasswordVC: UIViewController, UIGestureRecognizerDelegate {
25
25
  @IBOutlet weak var recoverView: UIView!
26
26
  @IBOutlet weak var emailTextField: UITextField!
27
27
  @IBOutlet weak var sendButton: LoadingButton!
28
+
29
+ // MARK: - Properties
30
+
31
+ weak var delegate: ForgetPasswordVCDelegate?
32
+ private var keyboardIsShowing: Bool = false
28
33
 
34
+ // MARK: - Life cycle
35
+
29
36
  override func viewDidLoad() {
30
37
  super.viewDidLoad()
31
38
 
@@ -39,21 +46,26 @@ class ForgetPasswordVC: UIViewController, UIGestureRecognizerDelegate {
39
46
 
40
47
  NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWasShown), name: .UIKeyboardWillShow, object: nil);
41
48
  NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWasHidden), name: .UIKeyboardWillHide, object: nil);
49
+
50
+ }
51
+
52
+ override func viewDidLayoutSubviews() {
53
+ view.backgroundColor = UIColor.clear
42
54
 
43
-
55
+ //ensure that the icon embeded in the cancel button fits in nicely
56
+ cancelButton.imageView?.contentMode = .scaleAspectFit
44
57
  }
45
58
 
59
+ // MARK: - UIGestureRecognizerDelegate
60
+
46
61
  func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
47
- if keybaordIsShowing {
48
- return false
49
- }
50
- if touch.view?.restorationIdentifier == "backViewID" {
51
- return true
52
- }
53
- return false
62
+
63
+ let result = (keyboardIsShowing || touch.view?.restorationIdentifier != "backViewID") ? false : true
64
+ return result
54
65
  }
55
66
 
56
67
  @objc func dismissView(){
68
+
57
69
  dismiss(animated: true, completion: nil)
58
70
  delegate?.removeBlurredBackgroundView()
59
71
  }
@@ -61,7 +73,7 @@ class ForgetPasswordVC: UIViewController, UIGestureRecognizerDelegate {
61
73
 
62
74
  @objc func keyboardWasShown(notification: NSNotification) {
63
75
 
64
- self.keybaordIsShowing = true
76
+ self.keyboardIsShowing = true
65
77
 
66
78
  UIView.animate(withDuration: 0.5, animations: { () -> Void in
67
79
  self.bottomConstraint.constant = 287
@@ -71,7 +83,7 @@ class ForgetPasswordVC: UIViewController, UIGestureRecognizerDelegate {
71
83
 
72
84
  @objc func keyboardWasHidden(notification: NSNotification) {
73
85
 
74
- self.keybaordIsShowing = false
86
+ self.keyboardIsShowing = false
75
87
 
76
88
  UIView.animate(withDuration: 0.5, animations: { () -> Void in
77
89
  self.topConstraint.constant = 148.5
@@ -79,47 +91,28 @@ class ForgetPasswordVC: UIViewController, UIGestureRecognizerDelegate {
79
91
  })
80
92
  }
81
93
 
82
- override func viewDidLayoutSubviews() {
83
- view.backgroundColor = UIColor.clear
84
-
85
- //ensure that the icon embeded in the cancel button fits in nicely
86
- cancelButton.imageView?.contentMode = .scaleAspectFit
87
-
88
- //add a white tint color for the Cancel button image
89
- // let cancelImage = UIImage(named: "Cancel")
90
-
91
- // let tintedCancelImage = cancelImage?.withRenderingMode(.alwaysTemplate)
92
- // cancelButton.setImage(tintedCancelImage, for: .normal)
93
- // cancelButton.tintColor = .white
94
- }
95
-
96
94
  // MARK: - Actions
95
+
97
96
  @IBAction func cancelTapped(_ sender: UIButton) {
97
+
98
98
  self.dismissView()
99
99
  }
100
100
 
101
101
  @IBAction func sendTapped(_ sender: UIButton) {
102
- if let email = self.emailTextField.text, isValidEmail(email) {
102
+
103
+ if self.emailTextField.isEmail() {
104
+ if let email = self.emailTextField.text {
103
105
  self.sendButton.showLoading()
104
106
  APIManager.sharedInstance.forgotPwd(withParameters: APIRequestBody.forgotPwd(withEmail: email), completion: {
105
107
  result in
106
108
  self.sendButton.hideLoading()
107
109
  if result == .success {
108
- APIHelper.sharedInstance.showSuccesMessage(with: NSLocalizedString("Email sent!", comment: ""), and: "")
110
+ APIHelper.sharedInstance.showSuccesMessage(with: "Email sent!", and: "")
109
111
  }
110
112
  })
111
113
  } else {
112
- APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Invalid email", comment: ""), and: "")
114
+ APIHelper.sharedInstance.showErrorMessage(with: "Invalid email", and: "")
113
115
  }
114
116
  }
115
117
 
116
- // MARK: - Private
117
-
118
- private func isValidEmail(_ testStr:String) -> Bool {
119
- let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
120
- let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
121
- return emailTest.evaluate(with: testStr)
122
- }
123
-
124
-
125
118
  }
@@ -23,8 +23,6 @@ class LoginVC: UITableViewController, UITextFieldDelegate, ForgetPasswordVCDeleg
23
23
  }
24
24
  }
25
25
 
26
- private let homeStoryboard = UIStoryboard(name: "Home", bundle: Bundle.main)
27
-
28
26
  @IBOutlet weak var registerButton: UIButton!{
29
27
  didSet{
30
28
  registerButton.addShadow()
@@ -37,14 +35,18 @@ class LoginVC: UITableViewController, UITextFieldDelegate, ForgetPasswordVCDeleg
37
35
  }
38
36
  }
39
37
 
38
+ // MARK: - Properties
39
+
40
+ private static let homeStoryboard = UIStoryboard(name: "Home", bundle: Bundle.main)
41
+
40
42
  private var pastelView: PastelView!
41
43
 
44
+ // MARK: - Life cycle
45
+
42
46
  override func viewDidLoad() {
43
47
  super.viewDidLoad()
44
48
 
45
-
46
- self.emailTextField.delegate = self
47
- self.passwordTextField.delegate = self
49
+ setupTextFieldsDelegate()
48
50
 
49
51
  configureText()
50
52
 
@@ -95,12 +97,14 @@ class LoginVC: UITableViewController, UITextFieldDelegate, ForgetPasswordVCDeleg
95
97
  }
96
98
 
97
99
  @IBAction func forgetPasswordTapped(_ sender: UIButton) {
100
+
98
101
  self.definesPresentationContext = true
99
102
  self.providesPresentationContextTransitionStyle = true
100
-
101
103
  self.overlayBlurredBackgroundView()
102
104
  }
103
105
 
106
+ // MARK: - Navigation
107
+
104
108
  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
105
109
  if let identifier = segue.identifier {
106
110
  if identifier == "ShowForgetPassword" {
@@ -113,6 +117,7 @@ class LoginVC: UITableViewController, UITextFieldDelegate, ForgetPasswordVCDeleg
113
117
  }
114
118
 
115
119
  // MARK: - UITextFieldDelegate
120
+
116
121
  func textFieldShouldReturn(_ textField: UITextField) -> Bool {
117
122
 
118
123
  if textField.tag == 1 {
@@ -136,6 +141,12 @@ class LoginVC: UITableViewController, UITextFieldDelegate, ForgetPasswordVCDeleg
136
141
 
137
142
  // MARK: - Private
138
143
 
144
+ private func setupTextFieldsDelegate(){
145
+
146
+ self.emailTextField.delegate = self
147
+ self.passwordTextField.delegate = self
148
+ }
149
+
139
150
  private func configureText(){
140
151
 
141
152
  self.emailTextField.attributedPlaceholder = NSAttributedString(string: NSLocalizedString("Email", comment: ""),
@@ -193,7 +204,7 @@ class LoginVC: UITableViewController, UITextFieldDelegate, ForgetPasswordVCDeleg
193
204
 
194
205
  private func validateForm() -> Bool {
195
206
 
196
- if self.emailTextField.text == "" {
207
+ if !self.emailTextField.isEmail() {
197
208
  errorOnLogin(causeOfFailure: "email")
198
209
  return false
199
210
  }
@@ -210,13 +221,13 @@ class LoginVC: UITableViewController, UITextFieldDelegate, ForgetPasswordVCDeleg
210
221
 
211
222
  switch error {
212
223
  case "email":
213
- APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("You must enter an email", comment: ""), and: "")
224
+ APIHelper.sharedInstance.showErrorMessage(with: "You must enter an email", and: "")
214
225
  break
215
226
  case "password":
216
- APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("You must enter a password", comment: ""), and: "")
227
+ APIHelper.sharedInstance.showErrorMessage(with: "You must enter a password", and: "")
217
228
  break
218
229
  default:
219
- APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Check the entered data", comment: ""), and: "")
230
+ APIHelper.sharedInstance.showErrorMessage(with: "Check the entered data", and: "")
220
231
  break
221
232
  }
222
233
 
@@ -230,7 +241,6 @@ class LoginVC: UITableViewController, UITextFieldDelegate, ForgetPasswordVCDeleg
230
241
  blurredBackgroundView.effect = UIBlurEffect(style: .dark)
231
242
 
232
243
  self.tableView.addSubview(blurredBackgroundView)
233
-
234
244
  }
235
245
 
236
246
  @objc func removeBlurredBackgroundView() {
@@ -11,6 +11,8 @@ import Pastel
11
11
 
12
12
  class RegisterVC: UITableViewController, UITextFieldDelegate {
13
13
 
14
+ // MARK: - Outlets
15
+
14
16
  @IBOutlet weak var nameTextField: UITextField!
15
17
  @IBOutlet weak var lastnameTextField: UITextField!
16
18
  @IBOutlet weak var cellphoneTextField: UITextField!
@@ -24,19 +26,18 @@ class RegisterVC: UITableViewController, UITextFieldDelegate {
24
26
  }
25
27
  @IBOutlet weak var acceptTermsButton: UIButton!
26
28
 
29
+ // MARK: - Properties
30
+
27
31
  private var pastelView: PastelView!
28
32
 
29
33
  private var termsAndConditionsAccepted: Bool = false
30
34
 
35
+ // MARK: - Life cycle
36
+
31
37
  override func viewDidLoad() {
32
38
  super.viewDidLoad()
33
39
 
34
- self.nameTextField.delegate = self
35
- self.lastnameTextField.delegate = self
36
- self.cellphoneTextField.delegate = self
37
- self.emailTextField.delegate = self
38
- self.passwordTextField.delegate = self
39
- self.confirmPasswordTextField.delegate = self
40
+ setupTextFieldsDelegate()
40
41
 
41
42
  configureText()
42
43
 
@@ -52,8 +53,8 @@ class RegisterVC: UITableViewController, UITextFieldDelegate {
52
53
  self.pastelView.startAnimation()
53
54
  }
54
55
 
55
-
56
56
  // MARK: - UITextFieldDelegate
57
+
57
58
  func textFieldShouldReturn(_ textField: UITextField) -> Bool {
58
59
 
59
60
  let nextTage = textField.tag+1
@@ -72,6 +73,7 @@ class RegisterVC: UITableViewController, UITextFieldDelegate {
72
73
  // MARK: - Actions
73
74
 
74
75
  @IBAction func createTapped(_ sender: UIButton) {
76
+
75
77
  if self.validateForm(){
76
78
  if let email = self.emailTextField.text, let password = self.passwordTextField.text, let name = self.nameTextField.text, let lastname = self.lastnameTextField.text, let cellphone = self.cellphoneTextField.text {
77
79
  self.createAccountButton.showLoading()
@@ -94,6 +96,7 @@ class RegisterVC: UITableViewController, UITextFieldDelegate {
94
96
  }
95
97
 
96
98
  @IBAction func termsTapped(_ sender: UIButton) {
99
+
97
100
  if !termsAndConditionsAccepted {
98
101
  let tintedImage = Asset.tick.image.withRenderingMode(.alwaysTemplate)
99
102
  sender.setImage(tintedImage, for: .normal)
@@ -109,44 +112,70 @@ class RegisterVC: UITableViewController, UITextFieldDelegate {
109
112
  }
110
113
 
111
114
  @IBAction func termsAndConditionsTapped(_ sender: UIButton) {
112
- // TODO: View url
113
- if let url = URL(string: "http://dils.com/terms-and-conditions") {
115
+ // TODO: URL
116
+ if let url = URL(string: "/terms-and-conditions") {
114
117
  UIApplication.shared.open(url, options: [:], completionHandler: nil)
115
118
  }
116
119
  }
117
120
 
118
121
  @IBAction func alreadyHaveAccountTapped(_ sender: UIButton) {
122
+
119
123
  self.dismiss(animated: true, completion: nil)
120
124
  }
121
125
 
122
-
123
-
124
126
  // MARK: - Private
127
+
128
+ private func setupTextFieldsDelegate(){
129
+
130
+ self.nameTextField.delegate = self
131
+ self.lastnameTextField.delegate = self
132
+ self.cellphoneTextField.delegate = self
133
+ self.emailTextField.delegate = self
134
+ self.passwordTextField.delegate = self
135
+ self.confirmPasswordTextField.delegate = self
136
+ }
125
137
 
126
138
  private func configureText(){
127
139
 
128
- self.emailTextField.attributedPlaceholder = NSAttributedString(string: NSLocalizedString("Email", comment: ""),
129
- attributes: [NSAttributedStringKey.foregroundColor: UIColor.lightGray, NSAttributedStringKey.font: Fonts.roboto(type: 1, fontSize: 17)])
130
-
131
- self.nameTextField.attributedPlaceholder = NSAttributedString(string: NSLocalizedString("Name", comment: ""),
132
- attributes: [NSAttributedStringKey.foregroundColor: UIColor.lightGray, NSAttributedStringKey.font: Fonts.roboto(type: 1, fontSize: 17)])
133
-
134
- self.lastnameTextField.attributedPlaceholder = NSAttributedString(string: NSLocalizedString("Lastname", comment: ""),
135
- attributes: [NSAttributedStringKey.foregroundColor: UIColor.lightGray, NSAttributedStringKey.font: Fonts.roboto(type: 1, fontSize: 17)])
136
-
137
- self.cellphoneTextField.attributedPlaceholder = NSAttributedString(string: NSLocalizedString("Cellphone (optional)", comment: ""),
138
- attributes: [NSAttributedStringKey.foregroundColor: UIColor.lightGray, NSAttributedStringKey.font: Fonts.roboto(type: 1, fontSize: 17)])
139
-
140
- self.passwordTextField.attributedPlaceholder = NSAttributedString(string: NSLocalizedString("Password", comment: ""),
141
- attributes: [NSAttributedStringKey.foregroundColor: UIColor.lightGray, NSAttributedStringKey.font: Fonts.roboto(type: 1, fontSize: 17)])
142
-
143
- self.confirmPasswordTextField.attributedPlaceholder = NSAttributedString(string: NSLocalizedString("Confirm password", comment: ""),
144
- attributes: [NSAttributedStringKey.foregroundColor: UIColor.lightGray, NSAttributedStringKey.font: Fonts.roboto(type: 1, fontSize: 17)])
145
-
146
-
140
+ self.emailTextField.attributedPlaceholder = NSAttributedString(string: "Email",
141
+ attributes: [
142
+ NSAttributedStringKey.foregroundColor: UIColor.lightGray,
143
+ NSAttributedStringKey.font: Fonts.roboto(type: 1, fontSize: 17)
144
+ ])
145
+
146
+ self.nameTextField.attributedPlaceholder = NSAttributedString(string: "Name",
147
+ attributes: [
148
+ NSAttributedStringKey.foregroundColor: UIColor.lightGray,
149
+ NSAttributedStringKey.font: Fonts.roboto(type: 1, fontSize: 17)
150
+ ])
151
+
152
+ self.lastnameTextField.attributedPlaceholder = NSAttributedString(string: "Lastname",
153
+ attributes: [
154
+ NSAttributedStringKey.foregroundColor: UIColor.lightGray,
155
+ NSAttributedStringKey.font: Fonts.roboto(type: 1, fontSize: 17)
156
+ ])
157
+
158
+ self.cellphoneTextField.attributedPlaceholder = NSAttributedString(string: "Cellphone (optional)",
159
+ attributes: [
160
+ NSAttributedStringKey.foregroundColor: UIColor.lightGray,
161
+ NSAttributedStringKey.font: Fonts.roboto(type: 1, fontSize: 17)
162
+ ])
163
+
164
+ self.passwordTextField.attributedPlaceholder = NSAttributedString(string: "Password",
165
+ attributes: [
166
+ NSAttributedStringKey.foregroundColor: UIColor.lightGray,
167
+ NSAttributedStringKey.font: Fonts.roboto(type: 1, fontSize: 17)
168
+ ])
169
+
170
+ self.confirmPasswordTextField.attributedPlaceholder = NSAttributedString(string: "Confirm password",
171
+ attributes: [
172
+ NSAttributedStringKey.foregroundColor: UIColor.lightGray,
173
+ NSAttributedStringKey.font: Fonts.roboto(type: 1, fontSize: 17)
174
+ ])
147
175
  }
148
176
 
149
177
  private func configureViews(){
178
+
150
179
  self.pastelView = PastelView(frame: self.tableView.bounds)
151
180
 
152
181
  // Custom Direction
@@ -167,47 +196,28 @@ class RegisterVC: UITableViewController, UITextFieldDelegate {
167
196
 
168
197
  if let password = self.passwordTextField.text, let confirmPassword = self.confirmPasswordTextField.text {
169
198
  if password != confirmPassword {
170
- APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Passwords don't match", comment: ""), and: "")
199
+ APIHelper.sharedInstance.showErrorMessage(with: "Passwords don't match", and: "")
171
200
  return false
172
201
  }
173
202
  }
174
- if let name = self.nameTextField.text, name.isEmpty {
175
- APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Check the entered data", comment: ""), and: "")
203
+ if !self.nameTextField.isName() {
204
+ APIHelper.sharedInstance.showErrorMessage(with: "Check the entered data", and: "")
176
205
  return false
177
206
  }
178
- if let lastname = self.lastnameTextField.text, lastname.isEmpty {
179
- APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Check the entered data", comment: ""), and: "")
207
+ if !self.lastnameTextField.isName() {
208
+ APIHelper.sharedInstance.showErrorMessage(with: "Check the entered data", and: "")
180
209
  return false
181
210
  }
182
- if let email = self.emailTextField.text{
183
- if !isValidEmail(email.trimmingCharacters(in: .whitespacesAndNewlines)) {
184
- APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Invalid email", comment: ""), and: "")
185
- return false
186
- }
211
+
212
+ if !self.emailTextField.isEmail(){
213
+ APIHelper.sharedInstance.showErrorMessage(with: "Invalid email", and: "")
214
+ return false
187
215
  }
188
216
  if !termsAndConditionsAccepted{
189
- APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Check the entered data", comment: ""), and: NSLocalizedString("You have to accept terms & conditions", comment: ""))
217
+ APIHelper.sharedInstance.showErrorMessage(with: "Check the entered data", and: "You have to accept terms & conditions")
190
218
  return false
191
219
  }
192
220
  return true
193
221
  }
194
222
 
195
- private func isValidEmail(_ testStr:String) -> Bool {
196
- let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
197
- let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
198
- return emailTest.evaluate(with: testStr)
199
- }
200
-
201
- private func isValidName(_ testStr:String) -> Bool {
202
- let nameRegEx = "[A-Za-z\\s]+"
203
- let nameTest = NSPredicate(format:"SELF MATCHES %@", nameRegEx)
204
- return nameTest.evaluate(with: testStr)
205
- }
206
-
207
- private func isValidPhone(_ testStr:String) -> Bool {
208
- let phoneRegEx = "[0-9]*"
209
- let phoneTest = NSPredicate(format:"SELF MATCHES %@", phoneRegEx)
210
- return phoneTest.evaluate(with: testStr)
211
- }
212
-
213
223
  }