vipergen 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +9 -1
- data/lib/templates/naja/swift/Interactor/VIPERInteractor.swift +17 -0
- data/lib/templates/naja/swift/Presenter/VIPERPresenter.swift +21 -0
- data/lib/templates/naja/swift/Protocols/VIPERProtocols.swift +28 -0
- data/lib/templates/naja/swift/Views/VIPERView.swift +24 -0
- data/lib/templates/naja/swift/WireFrame/VIPERWireFrame.swift +41 -0
- data/lib/templates/naja/viperspec.yml +4 -0
- data/lib/vipergen/generator.rb +11 -8
- data/lib/vipergen/templatemanager.rb +1 -1
- data/lib/vipergen/version.rb +1 -1
- data/lib/vipergen/viperthor.rb +5 -4
- data/spec/vipergen/vipergen_spec.rb +9 -7
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1808e7fb8e6e8f67adc01355dedd9097304dd52
|
4
|
+
data.tar.gz: 7bdf7932d7f3e2a686891cb1efc4b1e8d69d63be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d15353e2e591ad34ce129acd3df2f853e18c85bbea5bce31a90688dbe1ec6a637867fd7e12c84fe8a1bf70ab668d7c7bee887446773cb9867ac1c868975d89db
|
7
|
+
data.tar.gz: 81cef6cd1053b84421cb017a7e066fc9a2f4a407b9eeb4827125f810bb0d0826bc099bafc40691c99602213d02ec06021b896d1f4b8ebe31f8a9179deac12dd7
|
data/README.md
CHANGED
@@ -37,7 +37,10 @@ The implementation scheme returned by this generator is hardly inspired in the e
|
|
37
37
|
### Changelog 0.2.3
|
38
38
|
- VIPER Example using the Twitter API
|
39
39
|
- Default template implemented in Swift
|
40
|
-
|
40
|
+
|
41
|
+
### Changelog 0.2.5
|
42
|
+
- Add `COMPANY` parameter to set the company name on the files header
|
43
|
+
- Set Swift as the default language
|
41
44
|
|
42
45
|
### Expected in version 0.3
|
43
46
|
- Integrate with XCode as a plugin (http://nshipster.com/xcode-plugins/)
|
@@ -88,6 +91,11 @@ You have just to execute the following command
|
|
88
91
|
```bash
|
89
92
|
vipergen generate MyFirstViperModule --path=~/myproject/shared
|
90
93
|
```
|
94
|
+
Another example:
|
95
|
+
```bash
|
96
|
+
vipergen generate MySecondViperModule --path=~/myproject/shared --author='My Name' --company='My Company' --template='existing_template' --language=swift
|
97
|
+
```
|
98
|
+
|
91
99
|
And then the files structure will be automatically created. Don't forget to add this folder to your project dragging it into the XCode/Appcode inspector
|
92
100
|
|
93
101
|
## How can I try the demo project?
|
@@ -0,0 +1,17 @@
|
|
1
|
+
//
|
2
|
+
// VIPERInteractor.swift
|
3
|
+
//
|
4
|
+
// Created by AUTHOR.
|
5
|
+
// Copyright © YEAR COMPANY. All rights reserved.
|
6
|
+
//
|
7
|
+
|
8
|
+
import Foundation
|
9
|
+
|
10
|
+
class VIPERInteractor: VIPERInteractorInputProtocol {
|
11
|
+
|
12
|
+
// MARK: Properties
|
13
|
+
|
14
|
+
weak var presenter: VIPERInteractorOutputProtocol?
|
15
|
+
|
16
|
+
// MARK: VIPERInteractorInputProtocol
|
17
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
//
|
2
|
+
// VIPERPresenter.swift
|
3
|
+
//
|
4
|
+
// Created by AUTHOR.
|
5
|
+
// Copyright © YEAR COMPANY. All rights reserved.
|
6
|
+
//
|
7
|
+
|
8
|
+
import Foundation
|
9
|
+
|
10
|
+
class VIPERPresenter: VIPERPresenterProtocol, VIPERInteractorOutputProtocol {
|
11
|
+
|
12
|
+
// MARK: Properties
|
13
|
+
|
14
|
+
weak var view: VIPERViewProtocol?
|
15
|
+
var interactor: VIPERInteractorInputProtocol?
|
16
|
+
var wireFrame: VIPERWireFrameProtocol?
|
17
|
+
|
18
|
+
// MARK: VIPERPresenterProtocol
|
19
|
+
|
20
|
+
// MARK: VIPERInteractorOutputProtocol
|
21
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
//
|
2
|
+
// VIPERProtocols.swift
|
3
|
+
//
|
4
|
+
// Created by AUTHOR.
|
5
|
+
// Copyright © YEAR COMPANY. All rights reserved.
|
6
|
+
//
|
7
|
+
|
8
|
+
import Foundation
|
9
|
+
|
10
|
+
protocol VIPERViewProtocol: class {
|
11
|
+
|
12
|
+
}
|
13
|
+
|
14
|
+
protocol VIPERPresenterProtocol: class {
|
15
|
+
|
16
|
+
}
|
17
|
+
|
18
|
+
protocol VIPERInteractorInputProtocol {
|
19
|
+
|
20
|
+
}
|
21
|
+
|
22
|
+
protocol VIPERInteractorOutputProtocol: class {
|
23
|
+
|
24
|
+
}
|
25
|
+
|
26
|
+
protocol VIPERWireFrameProtocol {
|
27
|
+
|
28
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
//
|
2
|
+
// VIPERView.swift
|
3
|
+
//
|
4
|
+
// Created by AUTHOR.
|
5
|
+
// Copyright © YEAR COMPANY. All rights reserved.
|
6
|
+
//
|
7
|
+
|
8
|
+
import Foundation
|
9
|
+
import UIKit
|
10
|
+
|
11
|
+
class VIPERView: UIViewController, VIPERViewProtocol {
|
12
|
+
|
13
|
+
// MARK: Properties
|
14
|
+
|
15
|
+
var presenter: VIPERPresenterProtocol?
|
16
|
+
|
17
|
+
// MARK: UIViewController
|
18
|
+
|
19
|
+
override func viewDidLoad() {
|
20
|
+
super.viewDidLoad()
|
21
|
+
}
|
22
|
+
|
23
|
+
// MARK: VIPERViewProtocol
|
24
|
+
}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
//
|
2
|
+
// VIPERWireFrame.swift
|
3
|
+
//
|
4
|
+
// Created by AUTHOR.
|
5
|
+
// Copyright © YEAR COMPANY. All rights reserved.
|
6
|
+
//
|
7
|
+
|
8
|
+
import UIKit
|
9
|
+
|
10
|
+
public class VIPERWireFrame: VIPERWireFrameProtocol {
|
11
|
+
|
12
|
+
// MARK: Properties
|
13
|
+
|
14
|
+
weak var navigationController: UINavigationController?
|
15
|
+
|
16
|
+
// MARK: Factory
|
17
|
+
|
18
|
+
public class func presentVIPERFromViewController(source: UIViewController) {
|
19
|
+
let presenter = VIPERPresenter()
|
20
|
+
let view = VIPERView()
|
21
|
+
/*
|
22
|
+
If using UIStoryboard use:
|
23
|
+
let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
|
24
|
+
view = storyboard.instantiateViewControllerWithIdentifier("VIPERView") as! VIPERView
|
25
|
+
*/
|
26
|
+
let interactor = VIPERInteractor()
|
27
|
+
let wireFrame = VIPERWireFrame()
|
28
|
+
|
29
|
+
view.presenter = presenter
|
30
|
+
interactor.presenter = presenter
|
31
|
+
presenter.view = view
|
32
|
+
presenter.interactor = interactor
|
33
|
+
presenter.wireFrame = wireFrame
|
34
|
+
|
35
|
+
let navigationController = UINavigationController(rootViewController: view)
|
36
|
+
wireFrame.navigationController = navigationController
|
37
|
+
source.presentViewController(navigationController, animated: true, completion: nil)
|
38
|
+
}
|
39
|
+
|
40
|
+
// MARK: VIPERWireFrameProtocol
|
41
|
+
}
|
data/lib/vipergen/generator.rb
CHANGED
@@ -6,44 +6,46 @@ module Vipergen
|
|
6
6
|
REPLACEMENT_KEY = "VIPER"
|
7
7
|
AUTHOR_REPLACEMENT_KEY = "AUTHOR"
|
8
8
|
YEAR_REPLACEMENT_KEY = "YEAR"
|
9
|
+
COMPANY_REPLACEMENT_KEY = "COMPANY"
|
9
10
|
|
10
11
|
# Main method that generate the VIPER files structure
|
11
|
-
def self.generate_viper(template, language, name, path, author)
|
12
|
+
def self.generate_viper(template, language, name, path, author, company)
|
12
13
|
puts "Generating VIPER-Module"
|
13
14
|
puts "Template: #{template}"
|
14
15
|
puts "Language: #{language}"
|
15
16
|
puts "Name: #{name}"
|
16
17
|
puts "Path: #{path}"
|
17
18
|
puts "Author: #{author}"
|
19
|
+
puts "Company: #{company}"
|
18
20
|
path_from = Vipergen::FileManager.path_from(template, language)
|
19
21
|
path_to = Vipergen::FileManager.destination_viper_path(path, name)
|
20
22
|
Vipergen::FileManager.copy(path_from, path_to)
|
21
23
|
files = Vipergen::FileManager.files_in_path(path_to)
|
22
|
-
rename_files(files, name, author)
|
24
|
+
rename_files(files, name, author, company)
|
23
25
|
end
|
24
26
|
|
25
27
|
# Rename all the files in the files array
|
26
28
|
# - It renames the name of the file
|
27
29
|
# - It renames the content of the file
|
28
|
-
def self.rename_files(files, name, author)
|
30
|
+
def self.rename_files(files, name, author, company)
|
29
31
|
files.each do |file|
|
30
32
|
raise SyntaxError unless file.include? (Vipergen::Generator::REPLACEMENT_KEY)
|
31
|
-
rename_file(file, name, author)
|
33
|
+
rename_file(file, name, author, company)
|
32
34
|
end
|
33
35
|
end
|
34
36
|
|
35
37
|
# Rename a given file
|
36
38
|
# - It renames the name of the file
|
37
39
|
# - It renames the content of the file
|
38
|
-
def self.rename_file(file, name, author)
|
40
|
+
def self.rename_file(file, name, author, company)
|
39
41
|
new_path = file.gsub((Vipergen::Generator::REPLACEMENT_KEY), name)
|
40
42
|
Vipergen::FileManager.move(file, new_path)
|
41
|
-
rename_file_content(new_path, name, author)
|
43
|
+
rename_file_content(new_path, name, author, company)
|
42
44
|
end
|
43
45
|
|
44
46
|
# Rename the file content
|
45
47
|
# @return: An String with the every VIPER replaced by 'name'
|
46
|
-
def self.rename_file_content(filename, name, author)
|
48
|
+
def self.rename_file_content(filename, name, author, company)
|
47
49
|
# Reading content
|
48
50
|
file = File.open(filename, "rb")
|
49
51
|
content = file.read
|
@@ -53,6 +55,7 @@ module Vipergen
|
|
53
55
|
content = content.gsub((Vipergen::Generator::REPLACEMENT_KEY), name)
|
54
56
|
content = content.gsub((Vipergen::Generator::AUTHOR_REPLACEMENT_KEY), author)
|
55
57
|
content = content.gsub((Vipergen::Generator::YEAR_REPLACEMENT_KEY), "#{Time.new.year}")
|
58
|
+
content = content.gsub((Vipergen::Generator::COMPANY_REPLACEMENT_KEY), company)
|
56
59
|
|
57
60
|
# Saving content with replaced string
|
58
61
|
File.open(filename, "w+") do |file|
|
@@ -60,4 +63,4 @@ module Vipergen
|
|
60
63
|
end
|
61
64
|
end
|
62
65
|
end
|
63
|
-
end
|
66
|
+
end
|
data/lib/vipergen/version.rb
CHANGED
data/lib/vipergen/viperthor.rb
CHANGED
@@ -3,13 +3,14 @@ require 'vipergen'
|
|
3
3
|
|
4
4
|
module Vipergen
|
5
5
|
class ViperThor < Thor
|
6
|
-
desc "generate", "Generate a VIPER module"
|
7
|
-
option :language, :required => false, :default => '
|
6
|
+
desc "generate MODULE", "Generate a VIPER module"
|
7
|
+
option :language, :required => false, :default => 'swift', :type => :string, :desc => "The language of the generated module (swift, objc)"
|
8
8
|
option :template, :required => false, :default => 'default', :type => :string , :desc => "Template for the generation"
|
9
9
|
option :path, :required => true, :type => :string , :desc => "Path where the output module is going to be saved"
|
10
10
|
option :author, :required => false, :default => 'VIPER', :type => :string , :desc => "Author to be specified on the file's header. Otherwise VIPER will be used"
|
11
|
+
option :company, :required => false, :default => 'Company', :type => :string, :desc => "Company to be specified on the file's header. Otherwise Company will be used"
|
11
12
|
def generate(name)
|
12
|
-
Vipergen::Generator.generate_viper(options[:template], options[:language], name, options[:path], options[:author])
|
13
|
+
Vipergen::Generator.generate_viper(options[:template], options[:language], name, options[:path], options[:author], options[:company])
|
13
14
|
end
|
14
15
|
|
15
16
|
desc "templates", "Get a list of available templates"
|
@@ -17,4 +18,4 @@ module Vipergen
|
|
17
18
|
puts Vipergen::TemplateManager.templates_description()
|
18
19
|
end
|
19
20
|
end
|
20
|
-
end
|
21
|
+
end
|
@@ -44,14 +44,14 @@ end
|
|
44
44
|
describe Vipergen::Generator do
|
45
45
|
context "when renaming file content" do
|
46
46
|
before (:each) do
|
47
|
-
File.open("test.txt", 'w') {|f| f.write("I'm a #{Vipergen::Generator::REPLACEMENT_KEY} file by #{Vipergen::Generator::AUTHOR_REPLACEMENT_KEY} on #{Vipergen::Generator::YEAR_REPLACEMENT_KEY}") }
|
47
|
+
File.open("test.txt", 'w') {|f| f.write("I'm a #{Vipergen::Generator::REPLACEMENT_KEY} file by #{Vipergen::Generator::AUTHOR_REPLACEMENT_KEY} @ #{Vipergen::Generator::COMPANY_REPLACEMENT_KEY} on #{Vipergen::Generator::YEAR_REPLACEMENT_KEY}") }
|
48
48
|
end
|
49
49
|
|
50
50
|
it "should rename every VIPER word to the given name" do
|
51
|
-
Vipergen::Generator.rename_file_content("test.txt","RENAMED", "pepito")
|
51
|
+
Vipergen::Generator.rename_file_content("test.txt","RENAMED", "pepito", "ViperGen")
|
52
52
|
file = File.open("test.txt", "rb")
|
53
53
|
content = file.read
|
54
|
-
expect(content).to eq("I'm a RENAMED file by pepito on #{Time.new.year}")
|
54
|
+
expect(content).to eq("I'm a RENAMED file by pepito @ ViperGen on #{Time.new.year}")
|
55
55
|
end
|
56
56
|
|
57
57
|
after (:each) do
|
@@ -66,18 +66,19 @@ describe Vipergen::Generator do
|
|
66
66
|
|
67
67
|
it "every file should be renamed in rename_files" do
|
68
68
|
expect(Vipergen::Generator).to receive(:rename_file)
|
69
|
-
Vipergen::Generator.rename_files(["#{Vipergen::Generator::REPLACEMENT_KEY}file.txt"], "MyModule", "Pepi")
|
69
|
+
Vipergen::Generator.rename_files(["#{Vipergen::Generator::REPLACEMENT_KEY}file.txt"], "MyModule", "Pepi", "ViperGen")
|
70
70
|
end
|
71
71
|
|
72
72
|
it "should raise a SyntaxError exeption if there's a file in the template without the proper name" do
|
73
|
-
expect{Vipergen::Generator.rename_files(["asgasgs.txt"], "MyModule", "Pepi")}.to raise_error
|
73
|
+
expect{Vipergen::Generator.rename_files(["asgasgs.txt"], "MyModule", "Pepi", "ViperGen")}.to raise_error
|
74
74
|
end
|
75
75
|
|
76
76
|
it "should rename the VIPER in name to the given name" do
|
77
77
|
file = "#{Vipergen::Generator::REPLACEMENT_KEY}test.txt"
|
78
78
|
name = "RENAMED"
|
79
79
|
author = "PEPI"
|
80
|
-
|
80
|
+
company = "ViperGen"
|
81
|
+
Vipergen::Generator.rename_file(file, name, author, company)
|
81
82
|
expect(File.exist? "RENAMEDtest.txt").to eq(true)
|
82
83
|
end
|
83
84
|
|
@@ -85,8 +86,9 @@ describe Vipergen::Generator do
|
|
85
86
|
file = "#{Vipergen::Generator::REPLACEMENT_KEY}test.txt"
|
86
87
|
name = "RENAMED"
|
87
88
|
author = "PEPI"
|
89
|
+
company = "ViperGen"
|
88
90
|
expect(Vipergen::Generator).to receive(:rename_file_content)
|
89
|
-
Vipergen::Generator.rename_file(file, name, author)
|
91
|
+
Vipergen::Generator.rename_file(file, name, author, company)
|
90
92
|
end
|
91
93
|
|
92
94
|
after (:each) do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vipergen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pedro Piñera
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-12-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -116,6 +116,12 @@ files:
|
|
116
116
|
- lib/templates/default/swift/View/VIPERView.swift
|
117
117
|
- lib/templates/default/swift/WireFrame/VIPERWireFrame.swift
|
118
118
|
- lib/templates/default/viperspec.yml
|
119
|
+
- lib/templates/naja/swift/Interactor/VIPERInteractor.swift
|
120
|
+
- lib/templates/naja/swift/Presenter/VIPERPresenter.swift
|
121
|
+
- lib/templates/naja/swift/Protocols/VIPERProtocols.swift
|
122
|
+
- lib/templates/naja/swift/Views/VIPERView.swift
|
123
|
+
- lib/templates/naja/swift/WireFrame/VIPERWireFrame.swift
|
124
|
+
- lib/templates/naja/viperspec.yml
|
119
125
|
- lib/vipergen.rb
|
120
126
|
- lib/vipergen/dirutils.rb
|
121
127
|
- lib/vipergen/filemanager.rb
|
@@ -146,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
152
|
version: '0'
|
147
153
|
requirements: []
|
148
154
|
rubyforge_project:
|
149
|
-
rubygems_version: 2.
|
155
|
+
rubygems_version: 2.4.5.1
|
150
156
|
signing_key:
|
151
157
|
specification_version: 4
|
152
158
|
summary: Generates XCode VIPER module controllers structure
|