molt 0.1.2
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 +7 -0
- data/.circleci/config.yml +56 -0
- data/.gitignore +13 -0
- data/.rspec +3 -0
- data/.travis.yml +6 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +55 -0
- data/LICENSE.txt +21 -0
- data/README.md +210 -0
- data/Rakefile +6 -0
- data/bin/console +7 -0
- data/bin/molt +6 -0
- data/bin/setup +7 -0
- data/bundled/models/Entity+CoreData.swift.liquid +15 -0
- data/bundled/models/Entity.swift.liquid +7 -0
- data/bundled/models/Model.swift.liquid +20 -0
- data/bundled/partials/_header.liquid +5 -0
- data/bundled/swift_helpers/ErrorTypes/APIError.swift +28 -0
- data/bundled/swift_helpers/ErrorTypes/ErrorTypes.swift +12 -0
- data/bundled/swift_helpers/ErrorTypes/PersistenceError.swift +28 -0
- data/bundled/swift_helpers/ISODateTransform.swift +26 -0
- data/bundled/swift_helpers/Identifiable.swift +29 -0
- data/bundled/swift_helpers/Loadable.swift +37 -0
- data/bundled/swift_helpers/Networking/APIRouter.swift +54 -0
- data/bundled/swift_helpers/StoryboardExtensions.swift +49 -0
- data/bundled/template_sets/viper_detail/Presenter.swift.liquid +17 -0
- data/bundled/template_sets/viper_detail/Protocols.swift.liquid +23 -0
- data/bundled/template_sets/viper_detail/View.swift.liquid +25 -0
- data/bundled/template_sets/viper_detail/WireFrame.swift.liquid +21 -0
- data/bundled/template_sets/viper_table/DataManagers/LocalDataManager.swift.liquid +45 -0
- data/bundled/template_sets/viper_table/DataManagers/RemoteDataManager.swift.liquid +26 -0
- data/bundled/template_sets/viper_table/Interactor.swift.liquid +48 -0
- data/bundled/template_sets/viper_table/Presenter.swift.liquid +49 -0
- data/bundled/template_sets/viper_table/Protocols.swift.liquid +58 -0
- data/bundled/template_sets/viper_table/View.swift.liquid +60 -0
- data/bundled/template_sets/viper_table/WireFrame.swift.liquid +43 -0
- data/lib/generamba/string-colorize.rb +31 -0
- data/lib/molt/cli/create_module.rb +76 -0
- data/lib/molt/cli/main.rb +74 -0
- data/lib/molt/cli/setup.rb +23 -0
- data/lib/molt/cli/template_sets.rb +18 -0
- data/lib/molt/configuration.rb +43 -0
- data/lib/molt/template.rb +9 -0
- data/lib/molt/version.rb +3 -0
- data/lib/molt.rb +22 -0
- data/molt.gemspec +32 -0
- data/sample_configs/global_config.yml.erb +7 -0
- metadata +218 -0
@@ -0,0 +1,76 @@
|
|
1
|
+
module Molt::CLI
|
2
|
+
class Generator
|
3
|
+
|
4
|
+
def self.create_module(module_name, template_set, options)
|
5
|
+
puts "OPTIONS #{options.inspect}".blue
|
6
|
+
config = Molt::Configuration.load_or_initialize
|
7
|
+
config = Molt::Configuration.apply_cli_overrides config, options, module_name, template_set
|
8
|
+
rows = table_rows_for config
|
9
|
+
|
10
|
+
sets = ""
|
11
|
+
models = ""
|
12
|
+
|
13
|
+
[Molt::MOLT_GLOBAL, Molt::MOLT_PROJECT ].each do |path|
|
14
|
+
if Dir.exist? "#{path}/template_sets/#{template_set}"
|
15
|
+
sets = "#{path}/template_sets"
|
16
|
+
models = "#{path}/models"
|
17
|
+
Liquid::Template.file_system = Liquid::LocalFileSystem.new("#{path}/partials/", '_%s.liquid')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
Dir["#{sets}/#{template_set}/**/*swift.liquid"].each do |template_file|
|
22
|
+
template_base_folder = File.dirname(template_file).gsub(/#{sets}\/#{template_set}/, "")
|
23
|
+
destination_folder = "#{options.output_folder}/#{module_name}#{template_base_folder}"
|
24
|
+
|
25
|
+
base_file = File.basename(template_file.gsub(/.liquid$/, ""))
|
26
|
+
output_file = "#{destination_folder}/#{module_name}#{base_file}"
|
27
|
+
rows << [template_file.gsub(/#{sets}\//, ""), output_file.blue]
|
28
|
+
|
29
|
+
if options.do_it
|
30
|
+
FileUtils.mkdir_p destination_folder
|
31
|
+
Molt::Template.liquify(template: template_file, output_file: output_file, config: config)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
if options.create_model && options.model
|
36
|
+
Dir["#{models}/**/*swift.liquid"].each do |template_file|
|
37
|
+
destination_folder = "#{options.output_folder}/#{module_name}/Models"
|
38
|
+
|
39
|
+
base_file = File.basename(template_file.gsub(/.liquid$/, ""))
|
40
|
+
base_file = base_file.gsub(/Entity/, options.model)
|
41
|
+
base_file = base_file.gsub(/Model/, "#{options.model}Model")
|
42
|
+
output_file = "#{destination_folder}/#{base_file}"
|
43
|
+
rows << [template_file.gsub(/#{models}\//, ""), output_file.blue]
|
44
|
+
|
45
|
+
if options.do_it
|
46
|
+
FileUtils.mkdir_p destination_folder
|
47
|
+
Molt::Template.liquify(template: template_file, output_file: output_file, config: config)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
output_table_with rows
|
52
|
+
if !options.do_it
|
53
|
+
puts "\nThat was just a dry-run. If this looks good to you, don't forget to add --do-it".green
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
def self.table_rows_for config
|
59
|
+
rows = []
|
60
|
+
rows << ["Developer", config["developer"]["name"].blue]
|
61
|
+
rows << ["Email", config["developer"]["email"].blue]
|
62
|
+
rows << ["Company", config["developer"]["company"].blue]
|
63
|
+
rows << ["Project", config["project"]["name"].blue]
|
64
|
+
|
65
|
+
rows << [" ", " "]
|
66
|
+
rows << ["Template Set", config["template_set"].yellow]
|
67
|
+
rows << [" ", " "]
|
68
|
+
rows << ["Source".green, "Destination".green]
|
69
|
+
rows
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.output_table_with rows
|
73
|
+
puts Terminal::Table.new rows: rows
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require "commander"
|
2
|
+
require "fileutils"
|
3
|
+
require "liquid"
|
4
|
+
require "terminal-table"
|
5
|
+
require "yaml"
|
6
|
+
|
7
|
+
require "molt/cli/setup"
|
8
|
+
require "molt/cli/template_sets"
|
9
|
+
require "molt/cli/create_module"
|
10
|
+
|
11
|
+
module Molt::CLI
|
12
|
+
class Main
|
13
|
+
def self.start
|
14
|
+
Commander.configure do
|
15
|
+
program :name, "Molt".yellow
|
16
|
+
program :version, Molt::VERSION.green
|
17
|
+
program :description, "Molt is a simple VIPER module generator for Swift apps.".blue
|
18
|
+
program :help, "Author", "@MarcoCabazal"
|
19
|
+
program :help, "Source", "https://github.com/MarcoCabazal/Molt".blue
|
20
|
+
program :help, "Version", Molt::VERSION
|
21
|
+
|
22
|
+
default_command :help
|
23
|
+
global_option("-vv", "--verbose", "Add verbosity where applicable") { $verbose = false }
|
24
|
+
|
25
|
+
command :setup do |c|
|
26
|
+
c.syntax = 'molt setup'
|
27
|
+
c.description = 'Setup global config and templates in ~/.molt (HOME)'
|
28
|
+
c.action do |args, options|
|
29
|
+
Molt::CLI::Setup.start(["perform", Molt::MOLT_GLOBAL, Molt::CONFIG_GLOBAL])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
command :'setup:project' do |c|
|
34
|
+
c.syntax = "molt setup:project"
|
35
|
+
c.summary = "Setup project-level config and templates in ./.molt (current directory)"
|
36
|
+
c.description = "#{c.summary}\n\nIf you're working with other developers on this project, it's best to agree on the templates and have this commited to git. Now everyone gets to be lazy. 🍺"
|
37
|
+
c.action do |args, options|
|
38
|
+
Molt::CLI::Setup.start(["perform", Molt::MOLT_PROJECT, Molt::CONFIG_PROJECT])
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
command :template_sets do |c|
|
43
|
+
c.syntax = 'molt template_sets'
|
44
|
+
c.description = "List templates sets (add --verbose to see list of files)"
|
45
|
+
c.action do |args, options|
|
46
|
+
Molt::CLI::Template.sets(options.verbose)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
alias_command :'t', :template_sets
|
50
|
+
|
51
|
+
command :create_module do |c|
|
52
|
+
c.syntax = 'molt create_module MODULE_NAME TEMPLATE_SET'
|
53
|
+
c.summary = "Generate component files for a VIPER module"
|
54
|
+
c.description = Molt::LONG_DESC
|
55
|
+
c.option '--name NAME', String, "Author name"
|
56
|
+
c.option '--email EMAIL', String, "Author email"
|
57
|
+
c.option '--company COMPANY', String, "Author company"
|
58
|
+
c.option '--project PROJECT', String, "Project name"
|
59
|
+
c.option '--output-folder DIRECTORY', String, "Create module folder in this directory. Defaults to \"./\""
|
60
|
+
c.option '--model MODEL', String, "Model name. If unspecified, Xcode placeholders will be used instead"
|
61
|
+
c.option '--create-model', false, "If specified, it creates corresponding Mappable struct (ObjectMapper) and Core Data entity; requires --model to be set"
|
62
|
+
c.option '--do-it', false, "Release the Kraken and write the files"
|
63
|
+
c.action do |args, options|
|
64
|
+
options.default :output_folder => "."
|
65
|
+
puts "ARGS #{args}\nOPTS #{options.inspect}"
|
66
|
+
Molt::CLI::Generator.create_module(args[0], args[1], options)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
alias_command :'c', :create_module
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "thor"
|
2
|
+
|
3
|
+
module Molt::CLI
|
4
|
+
class Setup < Thor
|
5
|
+
include Thor::Actions
|
6
|
+
|
7
|
+
def self.source_root
|
8
|
+
File.dirname(".")
|
9
|
+
end
|
10
|
+
|
11
|
+
desc "perform", "perform"
|
12
|
+
def perform(molt_path, config_path)
|
13
|
+
config = molt_path == Molt::MOLT_GLOBAL ? Molt::Configuration.defaults_from_git_config : Molt::Configuration.load_or_initialize
|
14
|
+
|
15
|
+
if !Dir.exist? molt_path
|
16
|
+
directory "bundled", molt_path
|
17
|
+
template "sample_configs/global_config.yml.erb", config_path, config
|
18
|
+
else
|
19
|
+
puts "Doing nothing. #{molt_path} is already existing.".yellow
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Molt::CLI
|
2
|
+
class Template
|
3
|
+
|
4
|
+
def self.sets verbose = false
|
5
|
+
[ Molt::MOLT_PROJECT, Molt::MOLT_GLOBAL].each do |path|
|
6
|
+
puts "#{path.yellow}:"
|
7
|
+
if verbose
|
8
|
+
Dir["#{path}/**/*swift.liquid"].each { |template_file| puts template_file.blue }
|
9
|
+
else
|
10
|
+
Dir.glob("#{path}/template_sets/*").each { |entry| puts entry.blue if File.directory? entry }
|
11
|
+
end
|
12
|
+
puts
|
13
|
+
end
|
14
|
+
|
15
|
+
puts "Add --verbose to list all files in each template set".green if !verbose
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Molt
|
2
|
+
class Configuration
|
3
|
+
def self.load_or_initialize
|
4
|
+
config_path = nil
|
5
|
+
[ Molt::CONFIG_PROJECT, Molt::CONFIG_GLOBAL ].each do |path|
|
6
|
+
if File.exist? path
|
7
|
+
config_path = path
|
8
|
+
break
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
return YAML.load_file(config_path) if config_path
|
13
|
+
puts 'Please run "molt setup" first'.red
|
14
|
+
exit
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.defaults_from_git_config
|
18
|
+
user = { }
|
19
|
+
name = `git config --get user.name`.chomp
|
20
|
+
email = `git config --get user.email`.chomp
|
21
|
+
user["name"] = name.length > 0 ? name : "REPLACE_ME_IN_CONFIG"
|
22
|
+
user["email"] = email.length > 0 ? email : "REPLACE_ME_IN_CONFIG"
|
23
|
+
return { "developer" => user }
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.apply_cli_overrides config, options, module_name, template_set
|
27
|
+
config["developer"]["company"] = options.company if options.company
|
28
|
+
config["developer"]["name"] = options.name if options.name
|
29
|
+
config["developer"]["email"] = options.email if options.email
|
30
|
+
config["developer"]["name"] = options.name if options.name
|
31
|
+
config["project"]["name"] = options.project if options.project
|
32
|
+
config["model"] = "#{options.model}Model" || "<# Model #>"
|
33
|
+
config["entity"] = options.model || "<# Entity #>"
|
34
|
+
|
35
|
+
# meta
|
36
|
+
config["module_name"] = module_name
|
37
|
+
config["template_set"] = template_set
|
38
|
+
config["year"] = Time.now.strftime("%Y")
|
39
|
+
config["date"] = Time.now.strftime("%d/%m/%Y")
|
40
|
+
config
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module Molt
|
2
|
+
class Template
|
3
|
+
def self.liquify(template: String, output_file: String, config: {})
|
4
|
+
unparsed_template = IO.read(template)
|
5
|
+
liquified = Liquid::Template.parse(unparsed_template).render(config)
|
6
|
+
File.write(output_file, liquified)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
data/lib/molt/version.rb
ADDED
data/lib/molt.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require "molt/version"
|
2
|
+
require "molt/configuration"
|
3
|
+
require "molt/template"
|
4
|
+
require "molt/cli/main"
|
5
|
+
require "generamba/string-colorize"
|
6
|
+
|
7
|
+
module Molt
|
8
|
+
MOLT_GLOBAL = "#{Dir.home}/.molt"
|
9
|
+
MOLT_PROJECT = "./.molt"
|
10
|
+
CONFIG_GLOBAL = "#{MOLT_GLOBAL}/config.yml"
|
11
|
+
CONFIG_PROJECT = "#{MOLT_PROJECT}/config.yml"
|
12
|
+
LONG_DESC = <<-TAG
|
13
|
+
This generates a scaffold for a new VIPER module all contained in a folder. You will then have onto drag this folder onto Xcode.
|
14
|
+
|
15
|
+
This command runs in dry-run mode by default (without using -f). That means this will only print the project/module configuration, list of templates, and eventual output files.
|
16
|
+
|
17
|
+
When you're happy with what you see, just add --do-it or -f to exit dry-run mode.
|
18
|
+
|
19
|
+
* Note that the default template set "viper_table" uses several Swift helper extensions all of which could be found in either ~/.molt or your project's ./.molt folder. These were all copied when you ran "molt setup" or "molt setup_project". Feel free to copy them or modify the template files to suit your preference.
|
20
|
+
TAG
|
21
|
+
end
|
22
|
+
|
data/molt.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "molt/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "molt"
|
8
|
+
spec.version = Molt::VERSION
|
9
|
+
spec.authors = ["Marco Cabazal"]
|
10
|
+
spec.email = ["marco.cabazal@chillmill.mobi"]
|
11
|
+
|
12
|
+
spec.summary = "VIPER module generator for Swift projects."
|
13
|
+
spec.homepage = "https://github.com/MarcoCabazal/Molt"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.required_ruby_version = ">= 2.2"
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|sample_output)/}) }
|
18
|
+
spec.bindir = "bin"
|
19
|
+
spec.executables = ["molt"]
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_runtime_dependency "commander"
|
23
|
+
spec.add_runtime_dependency "liquid", "~> 4.0.0"
|
24
|
+
spec.add_runtime_dependency 'terminal-table'
|
25
|
+
spec.add_runtime_dependency "thor", "~> 0.20"
|
26
|
+
|
27
|
+
spec.add_development_dependency "awesome_print"
|
28
|
+
spec.add_development_dependency "bundler", "~> 1.16"
|
29
|
+
spec.add_development_dependency "pry"
|
30
|
+
spec.add_development_dependency "rake"
|
31
|
+
spec.add_development_dependency "rspec", "~> 3.4"
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,218 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: molt
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Marco Cabazal
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-02-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: commander
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
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: liquid
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 4.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 4.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: terminal-table
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: thor
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.20'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.20'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: awesome_print
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bundler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.16'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.16'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rake
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rspec
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '3.4'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '3.4'
|
139
|
+
description:
|
140
|
+
email:
|
141
|
+
- marco.cabazal@chillmill.mobi
|
142
|
+
executables:
|
143
|
+
- molt
|
144
|
+
extensions: []
|
145
|
+
extra_rdoc_files: []
|
146
|
+
files:
|
147
|
+
- ".circleci/config.yml"
|
148
|
+
- ".gitignore"
|
149
|
+
- ".rspec"
|
150
|
+
- ".travis.yml"
|
151
|
+
- CODE_OF_CONDUCT.md
|
152
|
+
- Gemfile
|
153
|
+
- Gemfile.lock
|
154
|
+
- LICENSE.txt
|
155
|
+
- README.md
|
156
|
+
- Rakefile
|
157
|
+
- bin/console
|
158
|
+
- bin/molt
|
159
|
+
- bin/setup
|
160
|
+
- bundled/models/Entity+CoreData.swift.liquid
|
161
|
+
- bundled/models/Entity.swift.liquid
|
162
|
+
- bundled/models/Model.swift.liquid
|
163
|
+
- bundled/partials/_header.liquid
|
164
|
+
- bundled/swift_helpers/ErrorTypes/APIError.swift
|
165
|
+
- bundled/swift_helpers/ErrorTypes/ErrorTypes.swift
|
166
|
+
- bundled/swift_helpers/ErrorTypes/PersistenceError.swift
|
167
|
+
- bundled/swift_helpers/ISODateTransform.swift
|
168
|
+
- bundled/swift_helpers/Identifiable.swift
|
169
|
+
- bundled/swift_helpers/Loadable.swift
|
170
|
+
- bundled/swift_helpers/Networking/APIRouter.swift
|
171
|
+
- bundled/swift_helpers/StoryboardExtensions.swift
|
172
|
+
- bundled/template_sets/viper_detail/Presenter.swift.liquid
|
173
|
+
- bundled/template_sets/viper_detail/Protocols.swift.liquid
|
174
|
+
- bundled/template_sets/viper_detail/View.swift.liquid
|
175
|
+
- bundled/template_sets/viper_detail/WireFrame.swift.liquid
|
176
|
+
- bundled/template_sets/viper_table/DataManagers/LocalDataManager.swift.liquid
|
177
|
+
- bundled/template_sets/viper_table/DataManagers/RemoteDataManager.swift.liquid
|
178
|
+
- bundled/template_sets/viper_table/Interactor.swift.liquid
|
179
|
+
- bundled/template_sets/viper_table/Presenter.swift.liquid
|
180
|
+
- bundled/template_sets/viper_table/Protocols.swift.liquid
|
181
|
+
- bundled/template_sets/viper_table/View.swift.liquid
|
182
|
+
- bundled/template_sets/viper_table/WireFrame.swift.liquid
|
183
|
+
- lib/generamba/string-colorize.rb
|
184
|
+
- lib/molt.rb
|
185
|
+
- lib/molt/cli/create_module.rb
|
186
|
+
- lib/molt/cli/main.rb
|
187
|
+
- lib/molt/cli/setup.rb
|
188
|
+
- lib/molt/cli/template_sets.rb
|
189
|
+
- lib/molt/configuration.rb
|
190
|
+
- lib/molt/template.rb
|
191
|
+
- lib/molt/version.rb
|
192
|
+
- molt.gemspec
|
193
|
+
- sample_configs/global_config.yml.erb
|
194
|
+
homepage: https://github.com/MarcoCabazal/Molt
|
195
|
+
licenses:
|
196
|
+
- MIT
|
197
|
+
metadata: {}
|
198
|
+
post_install_message:
|
199
|
+
rdoc_options: []
|
200
|
+
require_paths:
|
201
|
+
- lib
|
202
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
203
|
+
requirements:
|
204
|
+
- - ">="
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '2.2'
|
207
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
208
|
+
requirements:
|
209
|
+
- - ">="
|
210
|
+
- !ruby/object:Gem::Version
|
211
|
+
version: '0'
|
212
|
+
requirements: []
|
213
|
+
rubyforge_project:
|
214
|
+
rubygems_version: 2.6.14
|
215
|
+
signing_key:
|
216
|
+
specification_version: 4
|
217
|
+
summary: VIPER module generator for Swift projects.
|
218
|
+
test_files: []
|