vipergen-roche 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.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +134 -0
  4. data/bin/vipergen +9 -0
  5. data/lib/templates/default/objc/DataManager/API/VIPERAPIDataManager.h +12 -0
  6. data/lib/templates/default/objc/DataManager/API/VIPERAPIDataManager.m +10 -0
  7. data/lib/templates/default/objc/DataManager/Local/VIPERLocalDataManager.h +12 -0
  8. data/lib/templates/default/objc/DataManager/Local/VIPERLocalDataManager.m +10 -0
  9. data/lib/templates/default/objc/Interactor/VIPERInteractor.h +16 -0
  10. data/lib/templates/default/objc/Interactor/VIPERInteractor.m +10 -0
  11. data/lib/templates/default/objc/Interactor/VIPERItem.h +10 -0
  12. data/lib/templates/default/objc/Interactor/VIPERItem.m +10 -0
  13. data/lib/templates/default/objc/Presenter/VIPERPresenter.h +17 -0
  14. data/lib/templates/default/objc/Presenter/VIPERPresenter.m +11 -0
  15. data/lib/templates/default/objc/Protocols/VIPERProtocols.h +80 -0
  16. data/lib/templates/default/objc/View/VIPERView.h +13 -0
  17. data/lib/templates/default/objc/View/VIPERView.m +32 -0
  18. data/lib/templates/default/objc/WireFrame/VIPERWireFrame.h +18 -0
  19. data/lib/templates/default/objc/WireFrame/VIPERWireFrame.m +32 -0
  20. data/lib/templates/default/swift/DataManager/API/VIPERAPIDataManager.swift +11 -0
  21. data/lib/templates/default/swift/DataManager/Local/VIPERLocalDataManager.swift +11 -0
  22. data/lib/templates/default/swift/Interactor/VIPERInteractor.swift +15 -0
  23. data/lib/templates/default/swift/Interactor/VIPERItem.swift +13 -0
  24. data/lib/templates/default/swift/Presenter/VIPERPresenter.swift +15 -0
  25. data/lib/templates/default/swift/Protocols/VIPERProtocols.swift +70 -0
  26. data/lib/templates/default/swift/View/VIPERView.swift +12 -0
  27. data/lib/templates/default/swift/WireFrame/VIPERWireFrame.swift +29 -0
  28. data/lib/templates/default/viperspec.yml +4 -0
  29. data/lib/templates/testable/objc/DataManager/VIPERDataManager.h +15 -0
  30. data/lib/templates/testable/objc/DataManager/VIPERDataManager.m +11 -0
  31. data/lib/templates/testable/objc/Interactor/VIPERInteractor.h +16 -0
  32. data/lib/templates/testable/objc/Interactor/VIPERInteractor.m +10 -0
  33. data/lib/templates/testable/objc/Interactor/VIPERInteractorSpec.m +31 -0
  34. data/lib/templates/testable/objc/Presenter/VIPERPresenter.h +18 -0
  35. data/lib/templates/testable/objc/Presenter/VIPERPresenter.m +11 -0
  36. data/lib/templates/testable/objc/Presenter/VIPERPresenterSpec.m +31 -0
  37. data/lib/templates/testable/objc/Protocols/VIPERProtocols.h +64 -0
  38. data/lib/templates/testable/objc/ViewController/VIPERViewController.h +13 -0
  39. data/lib/templates/testable/objc/ViewController/VIPERViewController.m +32 -0
  40. data/lib/templates/testable/objc/ViewController/VIPERViewControllerSpec.m +31 -0
  41. data/lib/templates/testable/objc/WireFrame/VIPERWireFrame.h +19 -0
  42. data/lib/templates/testable/objc/WireFrame/VIPERWireFrame.m +31 -0
  43. data/lib/templates/testable/swift/DataManager/API/VIPERAPIDataManager.swift +11 -0
  44. data/lib/templates/testable/swift/DataManager/Local/VIPERLocalDataManager.swift +11 -0
  45. data/lib/templates/testable/swift/Interactor/VIPERInteractor.swift +15 -0
  46. data/lib/templates/testable/swift/Interactor/VIPERInteractorSpec.swift +22 -0
  47. data/lib/templates/testable/swift/Interactor/VIPERItem.swift +13 -0
  48. data/lib/templates/testable/swift/Presenter/VIPERPresenter.swift +15 -0
  49. data/lib/templates/testable/swift/Presenter/VIPERPresenterSpec.swift +22 -0
  50. data/lib/templates/testable/swift/Protocols/VIPERProtocols.swift +70 -0
  51. data/lib/templates/testable/swift/View/VIPERView.swift +12 -0
  52. data/lib/templates/testable/swift/View/VIPERViewSpec.swift +22 -0
  53. data/lib/templates/testable/swift/WireFrame/VIPERWireFrame.swift +29 -0
  54. data/lib/templates/testable/viperspec.yml +4 -0
  55. data/lib/vipergen.rb +6 -0
  56. data/lib/vipergen/dirutils.rb +17 -0
  57. data/lib/vipergen/filemanager.rb +51 -0
  58. data/lib/vipergen/generator.rb +66 -0
  59. data/lib/vipergen/templatemanager.rb +53 -0
  60. data/lib/vipergen/version.rb +4 -0
  61. data/lib/vipergen/viperthor.rb +21 -0
  62. data/spec/spec_helper.rb +4 -0
  63. data/spec/vipergen/vipergen_spec.rb +133 -0
  64. metadata +181 -0
@@ -0,0 +1,66 @@
1
+ module Vipergen
2
+ # Cosntants
3
+ class Generator
4
+ # Constants
5
+ LANGUAGES = ["swift", "objc"]
6
+ REPLACEMENT_KEY = "VIPER"
7
+ AUTHOR_REPLACEMENT_KEY = "AUTHOR"
8
+ YEAR_REPLACEMENT_KEY = "YEAR"
9
+ SWIFT_MODULE_REPLACEMENT_KEY = "SWIFT_MODULE"
10
+
11
+ # Main method that generate the VIPER files structure
12
+ def self.generate_viper(template, language, name, path, author, swift_module)
13
+ puts "Generating VIPER-Module"
14
+ puts "Template: #{template}"
15
+ puts "Language: #{language}"
16
+ puts "Name: #{name}"
17
+ puts "Path: #{path}"
18
+ puts "Author: #{author}"
19
+ puts "Module: #{swift_module}"
20
+ path_from = Vipergen::FileManager.path_from(template, language)
21
+ path_to = Vipergen::FileManager.destination_viper_path(path, name)
22
+ Vipergen::FileManager.copy(path_from, path_to)
23
+ files = Vipergen::FileManager.files_in_path(path_to)
24
+ rename_files(files, name, author, swift_module)
25
+ end
26
+
27
+ # Rename all the files in the files array
28
+ # - It renames the name of the file
29
+ # - It renames the content of the file
30
+ def self.rename_files(files, name, author, swift_module)
31
+ files.each do |file|
32
+ raise SyntaxError unless file.include? (Vipergen::Generator::REPLACEMENT_KEY)
33
+ rename_file(file, name, author, swift_module)
34
+ end
35
+ end
36
+
37
+ # Rename a given file
38
+ # - It renames the name of the file
39
+ # - It renames the content of the file
40
+ def self.rename_file(file, name, author, swift_module)
41
+ new_path = file.gsub((Vipergen::Generator::REPLACEMENT_KEY), name)
42
+ Vipergen::FileManager.move(file, new_path)
43
+ rename_file_content(new_path, name, author, swift_module)
44
+ end
45
+
46
+ # Rename the file content
47
+ # @return: An String with the every VIPER replaced by 'name'
48
+ def self.rename_file_content(filename, name, author, swift_module)
49
+ # Reading content
50
+ file = File.open(filename, "rb")
51
+ content = file.read
52
+ file.close
53
+
54
+ # Replacing content
55
+ content = content.gsub((Vipergen::Generator::REPLACEMENT_KEY), name)
56
+ content = content.gsub((Vipergen::Generator::AUTHOR_REPLACEMENT_KEY), author)
57
+ content = content.gsub((Vipergen::Generator::SWIFT_MODULE_REPLACEMENT_KEY), swift_module)
58
+ content = content.gsub((Vipergen::Generator::YEAR_REPLACEMENT_KEY), "#{Time.new.year}")
59
+
60
+ # Saving content with replaced string
61
+ File.open(filename, "w+") do |file|
62
+ file.write(content)
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,53 @@
1
+ require 'yaml'
2
+ module Vipergen
3
+ class TemplateManager
4
+
5
+ # Returns the templates dir
6
+ def self.templates_dir
7
+ t = "#{File.expand_path File.dirname(__FILE__)}/../templates"
8
+ end
9
+
10
+ # Get the available templates paths
11
+ # @return Array[String] with available templates paths
12
+ def self.templates_paths()
13
+ template_dir = Vipergen::TemplateManager.templates_dir
14
+ return Vipergen::DirUtils.directories_in(template_dir)
15
+ end
16
+
17
+ # Get the templates names
18
+ # @return Array[String] with templates names (got from the folder)
19
+ def self.templates()
20
+ templates_paths.map{|template_path| template_name_from_path(template_path)}
21
+ end
22
+
23
+ # Returns the template name from a given template_path
24
+ # @return String with the template name
25
+ def self.template_name_from_path(template_path)
26
+ return template_path.split("/").last
27
+ end
28
+
29
+ # Returns the description of all the templates available
30
+ # @return String with the entire description
31
+ def self.templates_description()
32
+ description = "\nAvailable templates \n"
33
+ description += "------------------- \n"
34
+ self.templates_paths.each do |template_path|
35
+ description += "> #{template_description(template_path)} \n"
36
+ end
37
+ return description
38
+ end
39
+
40
+ # Returns the description of a given template
41
+ # @param template String with the template path whose description is going to be returned
42
+ # @return String with the template description
43
+ def self.template_description(template_path)
44
+ template_description = ""
45
+
46
+ # Reading yaml
47
+ template_content = YAML.load_file(File.join(template_path,'viperspec.yml'))
48
+
49
+ # Generating string
50
+ template_description+= "| #{template_name_from_path(template_path)} by #{template_content["author"]} |: #{template_content["template_description"]}"
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,4 @@
1
+ module Vipergen
2
+ NAME = "vipergen"
3
+ VERSION = "0.2.5"
4
+ end
@@ -0,0 +1,21 @@
1
+ require 'thor'
2
+ require 'vipergen'
3
+
4
+ module Vipergen
5
+ class ViperThor < Thor
6
+ desc "generate", "Generate a VIPER module"
7
+ option :language, :required => false, :default => 'objc', :type => :string, :desc => "The language of the generated module (swift, objc)"
8
+ option :template, :required => false, :default => 'default', :type => :string , :desc => "Template for the generation"
9
+ option :path, :required => true, :type => :string , :desc => "Path where the output module is going to be saved"
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 :swift_module, :required => false, :default => 'VIPER', :type => :string , :desc => "Swift module name to be specified on the @testable directive. Otherwise VIPER will be used"
12
+ def generate(name)
13
+ Vipergen::Generator.generate_viper(options[:template], options[:language], name, options[:path], options[:author], options[:swift_module])
14
+ end
15
+
16
+ desc "templates", "Get a list of available templates"
17
+ def templates()
18
+ puts Vipergen::TemplateManager.templates_description()
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,4 @@
1
+ require 'vipergen'
2
+ require "codeclimate-test-reporter"
3
+
4
+ CodeClimate::TestReporter.start
@@ -0,0 +1,133 @@
1
+ require 'spec_helper'
2
+
3
+ describe Vipergen do
4
+ context "when generating path" do
5
+ it "should return nil if no valid template" do
6
+ valid_template = Vipergen::FileManager.is_template_valid("asdgas")
7
+ expect(valid_template).to be(false)
8
+ end
9
+ it "should return nil if no valid language" do
10
+ valid_template = Vipergen::FileManager.is_template_valid("asdgas")
11
+ expect(valid_template).to be(false)
12
+ end
13
+ it "should return nil if no valid language when getting path" do
14
+ path = Vipergen::FileManager.path_from("default", "asgass")
15
+ expect(path).to be(nil)
16
+ end
17
+ it "should return nil if no valid template when getting path" do
18
+ path = Vipergen::FileManager.path_from("asga", "swift")
19
+ expect(path).to be(nil)
20
+ end
21
+ it "should append the name to the given user path" do
22
+ to_path = Vipergen::FileManager.destination_viper_path("path/", "pepito")
23
+ expect(to_path).to eq(File.join(File.expand_path("path/"),"pepito"))
24
+ end
25
+ end
26
+ context "copying a folder to a diferent place" do
27
+ before (:each) do
28
+ Dir.mkdir 'foo'
29
+ Dir.mkdir 'foo/subfoo'
30
+ end
31
+
32
+ it "should copy a given folder properly" do
33
+ Vipergen::FileManager.copy('foo','test_foo')
34
+ expect(File.directory?('test_foo/subfoo')).to eq(true)
35
+ end
36
+
37
+ after (:each) do
38
+ FileUtils.rm_rf('foo')
39
+ FileUtils.rm_rf('test_foo')
40
+ end
41
+ end
42
+ end
43
+
44
+ describe Vipergen::Generator do
45
+ context "when renaming file content" do
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}") }
48
+ end
49
+
50
+ it "should rename every VIPER word to the given name" do
51
+ Vipergen::Generator.rename_file_content("test.txt","RENAMED", "pepito")
52
+ file = File.open("test.txt", "rb")
53
+ content = file.read
54
+ expect(content).to eq("I'm a RENAMED file by pepito on #{Time.new.year}")
55
+ end
56
+
57
+ after (:each) do
58
+ FileUtils.rm('test.txt')
59
+ end
60
+ end
61
+
62
+ context "when renaming file" do
63
+ before (:each) do
64
+ File.open("#{Vipergen::Generator::REPLACEMENT_KEY}test.txt", 'w') {|f| f.write("I'm a #{Vipergen::Generator::REPLACEMENT_KEY} file") }
65
+ end
66
+
67
+ it "every file should be renamed in rename_files" do
68
+ expect(Vipergen::Generator).to receive(:rename_file)
69
+ Vipergen::Generator.rename_files(["#{Vipergen::Generator::REPLACEMENT_KEY}file.txt"], "MyModule", "Pepi")
70
+ end
71
+
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
74
+ end
75
+
76
+ it "should rename the VIPER in name to the given name" do
77
+ file = "#{Vipergen::Generator::REPLACEMENT_KEY}test.txt"
78
+ name = "RENAMED"
79
+ author = "PEPI"
80
+ Vipergen::Generator.rename_file(file, name, author)
81
+ expect(File.exist? "RENAMEDtest.txt").to eq(true)
82
+ end
83
+
84
+ it "should rename the file content after the file name rename" do
85
+ file = "#{Vipergen::Generator::REPLACEMENT_KEY}test.txt"
86
+ name = "RENAMED"
87
+ author = "PEPI"
88
+ expect(Vipergen::Generator).to receive(:rename_file_content)
89
+ Vipergen::Generator.rename_file(file, name, author)
90
+ end
91
+
92
+ after (:each) do
93
+ File.delete "#{Vipergen::Generator::REPLACEMENT_KEY}test.txt" if File.exist? "#{Vipergen::Generator::REPLACEMENT_KEY}test.txt"
94
+ File.delete "RENAMEDtest.txt" if File.exist? "RENAMEDtest.txt"
95
+ end
96
+ end
97
+ end
98
+
99
+ describe Vipergen::DirUtils do
100
+ context "getting directories" do
101
+ before (:each) do
102
+ Dir.mkdir 'foo'
103
+ Dir.mkdir 'foo/subfoo'
104
+ end
105
+
106
+ it "should return the directories inside a given one" do
107
+ expect(Vipergen::DirUtils.directories_in('foo').count).to eq(1)
108
+ end
109
+
110
+ after (:each) do
111
+ FileUtils.rm_rf('foo')
112
+ end
113
+ end
114
+ end
115
+
116
+ describe Vipergen::TemplateManager do
117
+ context "getting templates" do
118
+ before (:each) do
119
+ Dir.mkdir 'foo'
120
+ Dir.mkdir 'foo/subfoo'
121
+ Dir.mkdir 'foo/subfoo2'
122
+ end
123
+
124
+ it "should return the proper templates in templates directory" do
125
+ Vipergen::TemplateManager.stub(:templates_dir).and_return('foo/')
126
+ expect(Vipergen::TemplateManager.templates_paths.count).to eq(2)
127
+ end
128
+
129
+ after (:each) do
130
+ FileUtils.rm_rf('foo')
131
+ end
132
+ end
133
+ end
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vipergen-roche
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.5
5
+ platform: ruby
6
+ authors:
7
+ - Pedro Piñera
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-09-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: thor
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Based on the objc.io post about VIPER. It saves time in the implementation
84
+ generating the controllers and adding interactions between them (in Swift or Objective-C)
85
+ email: pedro@redbooth.com
86
+ executables:
87
+ - vipergen
88
+ extensions: []
89
+ extra_rdoc_files:
90
+ - README.md
91
+ files:
92
+ - LICENSE
93
+ - README.md
94
+ - lib/templates/default/objc/DataManager/API/VIPERAPIDataManager.h
95
+ - lib/templates/default/objc/DataManager/API/VIPERAPIDataManager.m
96
+ - lib/templates/default/objc/DataManager/Local/VIPERLocalDataManager.h
97
+ - lib/templates/default/objc/DataManager/Local/VIPERLocalDataManager.m
98
+ - lib/templates/default/objc/Interactor/VIPERInteractor.h
99
+ - lib/templates/default/objc/Interactor/VIPERInteractor.m
100
+ - lib/templates/default/objc/Interactor/VIPERItem.h
101
+ - lib/templates/default/objc/Interactor/VIPERItem.m
102
+ - lib/templates/default/objc/Presenter/VIPERPresenter.h
103
+ - lib/templates/default/objc/Presenter/VIPERPresenter.m
104
+ - lib/templates/default/objc/Protocols/VIPERProtocols.h
105
+ - lib/templates/default/objc/View/VIPERView.h
106
+ - lib/templates/default/objc/View/VIPERView.m
107
+ - lib/templates/default/objc/WireFrame/VIPERWireFrame.h
108
+ - lib/templates/default/objc/WireFrame/VIPERWireFrame.m
109
+ - lib/templates/default/swift/DataManager/API/VIPERAPIDataManager.swift
110
+ - lib/templates/default/swift/DataManager/Local/VIPERLocalDataManager.swift
111
+ - lib/templates/default/swift/Interactor/VIPERInteractor.swift
112
+ - lib/templates/default/swift/Interactor/VIPERItem.swift
113
+ - lib/templates/default/swift/Presenter/VIPERPresenter.swift
114
+ - lib/templates/default/swift/Protocols/VIPERProtocols.swift
115
+ - lib/templates/default/swift/View/VIPERView.swift
116
+ - lib/templates/default/swift/WireFrame/VIPERWireFrame.swift
117
+ - lib/templates/default/viperspec.yml
118
+ - lib/templates/testable/objc/DataManager/VIPERDataManager.h
119
+ - lib/templates/testable/objc/DataManager/VIPERDataManager.m
120
+ - lib/templates/testable/objc/Interactor/VIPERInteractor.h
121
+ - lib/templates/testable/objc/Interactor/VIPERInteractor.m
122
+ - lib/templates/testable/objc/Interactor/VIPERInteractorSpec.m
123
+ - lib/templates/testable/objc/Presenter/VIPERPresenter.h
124
+ - lib/templates/testable/objc/Presenter/VIPERPresenter.m
125
+ - lib/templates/testable/objc/Presenter/VIPERPresenterSpec.m
126
+ - lib/templates/testable/objc/Protocols/VIPERProtocols.h
127
+ - lib/templates/testable/objc/ViewController/VIPERViewController.h
128
+ - lib/templates/testable/objc/ViewController/VIPERViewController.m
129
+ - lib/templates/testable/objc/ViewController/VIPERViewControllerSpec.m
130
+ - lib/templates/testable/objc/WireFrame/VIPERWireFrame.h
131
+ - lib/templates/testable/objc/WireFrame/VIPERWireFrame.m
132
+ - lib/templates/testable/swift/DataManager/API/VIPERAPIDataManager.swift
133
+ - lib/templates/testable/swift/DataManager/Local/VIPERLocalDataManager.swift
134
+ - lib/templates/testable/swift/Interactor/VIPERInteractor.swift
135
+ - lib/templates/testable/swift/Interactor/VIPERInteractorSpec.swift
136
+ - lib/templates/testable/swift/Interactor/VIPERItem.swift
137
+ - lib/templates/testable/swift/Presenter/VIPERPresenter.swift
138
+ - lib/templates/testable/swift/Presenter/VIPERPresenterSpec.swift
139
+ - lib/templates/testable/swift/Protocols/VIPERProtocols.swift
140
+ - lib/templates/testable/swift/View/VIPERView.swift
141
+ - lib/templates/testable/swift/View/VIPERViewSpec.swift
142
+ - lib/templates/testable/swift/WireFrame/VIPERWireFrame.swift
143
+ - lib/templates/testable/viperspec.yml
144
+ - lib/vipergen/dirutils.rb
145
+ - lib/vipergen/filemanager.rb
146
+ - lib/vipergen/generator.rb
147
+ - lib/vipergen/templatemanager.rb
148
+ - lib/vipergen/version.rb
149
+ - lib/vipergen/viperthor.rb
150
+ - lib/vipergen.rb
151
+ - spec/spec_helper.rb
152
+ - spec/vipergen/vipergen_spec.rb
153
+ - bin/vipergen
154
+ homepage: http://github.com/teambox/viper-module-generator
155
+ licenses:
156
+ - MIT
157
+ metadata: {}
158
+ post_install_message:
159
+ rdoc_options:
160
+ - --charset=UTF-8
161
+ require_paths:
162
+ - lib
163
+ required_ruby_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - '>='
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - '>='
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ requirements: []
174
+ rubyforge_project:
175
+ rubygems_version: 2.0.14
176
+ signing_key:
177
+ specification_version: 4
178
+ summary: Generates XCode VIPER module controllers structure
179
+ test_files:
180
+ - spec/spec_helper.rb
181
+ - spec/vipergen/vipergen_spec.rb