viperaptor 2.0.2 → 2.2.1
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/lib/viperaptor/cli/gen_command.rb +31 -34
- data/lib/viperaptor/code_generation/content_generator.rb +6 -1
- data/lib/viperaptor/code_generation/module_template.rb +101 -3
- data/lib/viperaptor/constants/rambaspec_constants.rb +15 -13
- data/lib/viperaptor/module_generator.rb +1 -0
- data/lib/viperaptor/version.rb +2 -2
- data/viperaptor.gemspec +7 -7
- metadata +17 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd05a070a0f35fb5c85b83430e309bbc0c849f4d03b1b38a6967cbd2dc31552f
|
4
|
+
data.tar.gz: 146089e69493d6e98fabe7cac5a21c900a48802d5b909c5ab5544a3bc84f217d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ae0cfa9f2d4f0c9c7f1895f8f59b0f71cbdaa73f67c2776d58f4c3d72c88e734214cabfc66a95213c89bba5911d803d86b3c1d771926ff0a9335cc2289f03a2
|
7
|
+
data.tar.gz: 8438da43ccb0b05b12c0598ca64818161752cc1bfe6eb139f1096ed188716830ca12c2112dbae18f1b31e8f93c79290cea4db26ffaace4357dd1b9f57d4b75f8
|
@@ -1,40 +1,39 @@
|
|
1
|
-
require
|
1
|
+
require "thor"
|
2
2
|
require "tty-prompt"
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
3
|
+
require "set"
|
4
|
+
require "viperaptor/helpers/print_table.rb"
|
5
|
+
require "viperaptor/helpers/rambafile.rb"
|
6
|
+
require "viperaptor/helpers/xcodeproj_helper.rb"
|
7
|
+
require "viperaptor/helpers/dependency_checker.rb"
|
8
|
+
require "viperaptor/helpers/gen_command_table_parameters_formatter.rb"
|
9
|
+
require "viperaptor/helpers/module_validator.rb"
|
10
|
+
require "viperaptor/helpers/module_info_generator.rb"
|
11
11
|
|
12
12
|
module Viperaptor::CLI
|
13
13
|
class Application < Thor
|
14
|
-
|
15
14
|
include Viperaptor
|
16
15
|
|
17
|
-
desc
|
18
|
-
method_option :description, :aliases =>
|
19
|
-
method_option :author, :desc =>
|
20
|
-
method_option :rambafile, :desc =>
|
21
|
-
method_option :project_targets, :desc =>
|
22
|
-
method_option :project_file_path, :desc =>
|
23
|
-
method_option :project_group_path, :desc =>
|
24
|
-
method_option :module_path, :desc =>
|
25
|
-
method_option :test_targets, :desc =>
|
26
|
-
method_option :test_file_path, :desc =>
|
27
|
-
method_option :test_group_path, :desc =>
|
28
|
-
method_option :test_path, :desc =>
|
29
|
-
method_option :custom_parameters, :type => :hash, :default => {}, :desc =>
|
30
|
-
def gen(module_name = nil, template_name = nil)
|
16
|
+
desc "gen [MODULE_NAME] [TEMPLATE_NAME]", "Creates a new VIPER module with a given name from a specific template"
|
17
|
+
method_option :description, :aliases => "-d", :desc => "Provides a full description to the module"
|
18
|
+
method_option :author, :desc => "Specifies the author name for generated module"
|
19
|
+
method_option :rambafile, :desc => "Specifies Rambafile to use"
|
20
|
+
method_option :project_targets, :desc => "Specifies project targets for adding new module files"
|
21
|
+
method_option :project_file_path, :desc => "Specifies a location in the filesystem for new files"
|
22
|
+
method_option :project_group_path, :desc => "Specifies a location in Xcode groups for new files"
|
23
|
+
method_option :module_path, :desc => "Specifies a location (both in the filesystem and Xcode) for new files"
|
24
|
+
method_option :test_targets, :desc => "Specifies project targets for adding new test files"
|
25
|
+
method_option :test_file_path, :desc => "Specifies a location in the filesystem for new test files"
|
26
|
+
method_option :test_group_path, :desc => "Specifies a location in Xcode groups for new test files"
|
27
|
+
method_option :test_path, :desc => "Specifies a location (both in the filesystem and Xcode) for new test files"
|
28
|
+
method_option :custom_parameters, :type => :hash, :default => {}, :desc => "Specifies extra parameters in format `key1:value1 key2:value2` for usage during code generation"
|
31
29
|
|
30
|
+
def gen(module_name = nil, template_name = nil)
|
32
31
|
Rambafile.use(options[:rambafile])
|
33
32
|
|
34
33
|
does_rambafile_exist = Rambafile.exist
|
35
34
|
|
36
35
|
unless does_rambafile_exist
|
37
|
-
puts(
|
36
|
+
puts("Rambafile not found! Run `viperaptor setup` in the working directory instead!".red)
|
38
37
|
return
|
39
38
|
end
|
40
39
|
|
@@ -55,15 +54,15 @@ module Viperaptor::CLI
|
|
55
54
|
templates_as_set = Set.new(templates.map { |t| t["name"] })
|
56
55
|
templates = templates.concat(TemplateHelper.global_templates.select { |t| !templates_as_set.include?(t) }.map { |name| { "name" => name } }).sort_by { |t| t["name"] }
|
57
56
|
|
58
|
-
filter = rambafile[TEMPLATES_FILTER_KEY] ||
|
57
|
+
filter = rambafile[TEMPLATES_FILTER_KEY] || ""
|
59
58
|
|
60
59
|
if !filter.kind_of?(Array)
|
61
60
|
filter = [filter]
|
62
61
|
end
|
63
62
|
|
64
63
|
filter = filter.map { |f| f.strip }.select { |f| !f.empty? }
|
65
|
-
negative_filters = filter.select { |f| f.start_with?(
|
66
|
-
positive_filters = filter.select { |f| !f.start_with?(
|
64
|
+
negative_filters = filter.select { |f| f.start_with?("!") }.map { |f| f[1...] }.map { |f| Regexp.new(f, Regexp::IGNORECASE) }
|
65
|
+
positive_filters = filter.select { |f| !f.start_with?("!") }.map { |f| Regexp.new(f, Regexp::IGNORECASE) }
|
67
66
|
original_templates = templates
|
68
67
|
|
69
68
|
if original_templates.count == 0
|
@@ -72,7 +71,6 @@ module Viperaptor::CLI
|
|
72
71
|
end
|
73
72
|
|
74
73
|
templates = templates.select do |t|
|
75
|
-
|
76
74
|
if filter.count == 0
|
77
75
|
next true
|
78
76
|
end
|
@@ -110,8 +108,8 @@ module Viperaptor::CLI
|
|
110
108
|
|
111
109
|
parameters = GenCommandTableParametersFormatter.prepare_parameters_for_displaying(code_module, template_name)
|
112
110
|
PrintTable.print_values(
|
113
|
-
|
114
|
-
|
111
|
+
values: parameters,
|
112
|
+
title: "Summary for gen #{module_name}",
|
115
113
|
)
|
116
114
|
|
117
115
|
DependencyChecker.check_all_required_dependencies_has_in_podfile(template.dependencies, code_module.podfile_path)
|
@@ -122,7 +120,7 @@ module Viperaptor::CLI
|
|
122
120
|
|
123
121
|
if module_group_already_exists
|
124
122
|
replace_exists_module = yes?("#{module_name} module already exists. Replace? (yes/no)")
|
125
|
-
|
123
|
+
|
126
124
|
unless replace_exists_module
|
127
125
|
return
|
128
126
|
end
|
@@ -131,6 +129,5 @@ module Viperaptor::CLI
|
|
131
129
|
generator = Viperaptor::ModuleGenerator.new
|
132
130
|
generator.generate_module(module_name, code_module, template)
|
133
131
|
end
|
134
|
-
|
135
132
|
end
|
136
|
-
end
|
133
|
+
end
|
@@ -9,9 +9,14 @@ module Viperaptor
|
|
9
9
|
# @param file [Hash<String,String>] A hashmap with template's filename and filepath
|
10
10
|
# @param scope [Hash<String,String>] A hashmap with module info
|
11
11
|
# @param template [ModuleTemplate] The model describing a Viperaptor template used for code generation
|
12
|
+
# @param variables [Hash<String,String>] Custom variables of template
|
12
13
|
#
|
13
14
|
# @return [String], [String] The generated file_name and body
|
14
15
|
def self.create_file(file, scope, template)
|
16
|
+
|
17
|
+
custom_parameters = template.custom_parameters || {}
|
18
|
+
scope['custom_parameters'] = (scope['custom_parameters'] || {}).merge(custom_parameters)
|
19
|
+
|
15
20
|
file_source = IO.read(template.template_path.join(file[TEMPLATE_FILE_PATH_KEY]))
|
16
21
|
Liquid::Template.file_system = Liquid::LocalFileSystem.new(template.template_path.join('snippets'), '%s.liquid')
|
17
22
|
|
@@ -21,7 +26,7 @@ module Viperaptor
|
|
21
26
|
file_basename = File.basename(file[TEMPLATE_FILE_NAME_KEY])
|
22
27
|
|
23
28
|
module_info = scope['module_info']
|
24
|
-
|
29
|
+
|
25
30
|
module_info['file_basename'] = file_basename
|
26
31
|
|
27
32
|
file_name = filename_template.render(scope)
|
@@ -1,10 +1,81 @@
|
|
1
|
-
require
|
1
|
+
require "viperaptor/helpers/template_helper.rb"
|
2
|
+
require "tty-prompt"
|
2
3
|
|
3
4
|
module Viperaptor
|
4
5
|
|
5
6
|
# Represents a single Viperaptor module template
|
6
7
|
class ModuleTemplate
|
7
|
-
attr_reader :template_name, :template_path, :code_files, :test_files, :dependencies
|
8
|
+
attr_reader :template_name, :template_path, :code_files, :test_files, :dependencies, :custom_parameters
|
9
|
+
|
10
|
+
def load_custom_parameters_from_spec(spec)
|
11
|
+
custom_parameters = spec[TEMPLATE_CUSTOM_PARAMETERS_KEY]
|
12
|
+
result = {}
|
13
|
+
unless custom_parameters.nil?
|
14
|
+
custom_parameters.sort_by { |a| (a["order"] || 0) }.each do |desc|
|
15
|
+
skip = false
|
16
|
+
|
17
|
+
if !desc["only_if"].nil? && desc["only_if"].is_a?(Hash)
|
18
|
+
desc["only_if"].each do |key, value|
|
19
|
+
if value.is_a?(Array)
|
20
|
+
if result[key].nil?
|
21
|
+
puts("ERROR: Required custom_parameter '#{key}' not defined".red)
|
22
|
+
exit(1)
|
23
|
+
end
|
24
|
+
|
25
|
+
if !value.include?(result[key])
|
26
|
+
skip = true
|
27
|
+
break
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
if !skip
|
34
|
+
if !desc["only_if"].nil? && desc["only_if_not"].is_a?(Hash)
|
35
|
+
desc["only_if"].each do |key, value|
|
36
|
+
if value.is_a?(Array)
|
37
|
+
if result[key].nil?
|
38
|
+
break
|
39
|
+
end
|
40
|
+
|
41
|
+
if value.include?(result[key])
|
42
|
+
skip = true
|
43
|
+
break
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
if !skip
|
51
|
+
if desc["options"].instance_of?(Array)
|
52
|
+
prompt = TTY::Prompt.new
|
53
|
+
choices = desc["options"]
|
54
|
+
value = prompt.select("#{desc["description"]}?", choices, per_page: choices.count)
|
55
|
+
|
56
|
+
case value
|
57
|
+
when "yes"
|
58
|
+
value = "true"
|
59
|
+
when "no"
|
60
|
+
value = "false"
|
61
|
+
else
|
62
|
+
#
|
63
|
+
end
|
64
|
+
|
65
|
+
result[desc["name"]] = value
|
66
|
+
elsif desc["options"].nil?
|
67
|
+
prompt = TTY::Prompt.new
|
68
|
+
value = prompt.ask("#{desc["description"]}?")
|
69
|
+
result[desc["name"]] = value
|
70
|
+
else
|
71
|
+
puts("ERROR: Invalid variable 'options' of template custom parameter '#{desc["name"]}'".red)
|
72
|
+
exit(1)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
return result
|
78
|
+
end
|
8
79
|
|
9
80
|
def initialize(name, options = nil)
|
10
81
|
spec_path = TemplateHelper.obtain_spec(name)
|
@@ -18,6 +89,33 @@ module Viperaptor
|
|
18
89
|
spec = YAML.load(spec_content)
|
19
90
|
end
|
20
91
|
|
92
|
+
viperaptor = spec[TEMPLATE_VIPERAPTOR_KEY]
|
93
|
+
if !viperaptor.nil? && Gem::Version.new(Viperaptor::VERSION) < Gem::Version.new(viperaptor)
|
94
|
+
puts("ERROR: Your viperaptor version is '#{Viperaptor::VERSION}' template requires '#{viperaptor}'. Please update it.".red)
|
95
|
+
exit(1)
|
96
|
+
end
|
97
|
+
|
98
|
+
custom_parameters = load_custom_parameters_from_spec(spec)
|
99
|
+
|
100
|
+
if !custom_parameters.empty? && !options.nil?
|
101
|
+
spec_source = IO.read(spec_path)
|
102
|
+
spec_template = Liquid::Template.parse(spec_source)
|
103
|
+
|
104
|
+
if options["custom_parameters"].nil?
|
105
|
+
options["custom_parameters"] = {}
|
106
|
+
end
|
107
|
+
|
108
|
+
new_options = options["custom_parameters"].merge(custom_parameters)
|
109
|
+
|
110
|
+
new_options.each_key do |k|
|
111
|
+
options["custom_parameters"][k] = new_options[k]
|
112
|
+
end
|
113
|
+
|
114
|
+
spec_content = spec_template.render(options)
|
115
|
+
spec = YAML.load(spec_content)
|
116
|
+
end
|
117
|
+
|
118
|
+
@custom_parameters = options["custom_parameters"]
|
21
119
|
@code_files = spec[TEMPLATE_CODE_FILES_KEY]
|
22
120
|
@test_files = spec[TEMPLATE_TEST_FILES_KEY]
|
23
121
|
@template_name = spec[TEMPLATE_NAME_KEY]
|
@@ -25,4 +123,4 @@ module Viperaptor
|
|
25
123
|
@dependencies = spec[TEMPLATE_DEPENDENCIES_KEY]
|
26
124
|
end
|
27
125
|
end
|
28
|
-
end
|
126
|
+
end
|
@@ -1,18 +1,20 @@
|
|
1
1
|
module Viperaptor
|
2
2
|
|
3
3
|
# Keys of .rambaspec files
|
4
|
-
TEMPLATE_NAME_KEY =
|
5
|
-
TEMPLATE_SUMMARY_KEY =
|
6
|
-
TEMPLATE_AUTHOR_KEY =
|
7
|
-
TEMPLATE_VERSION_KEY =
|
8
|
-
TEMPLATE_LICENSE_KEY =
|
4
|
+
TEMPLATE_NAME_KEY = "name"
|
5
|
+
TEMPLATE_SUMMARY_KEY = "summary"
|
6
|
+
TEMPLATE_AUTHOR_KEY = "author"
|
7
|
+
TEMPLATE_VERSION_KEY = "version"
|
8
|
+
TEMPLATE_LICENSE_KEY = "license"
|
9
9
|
|
10
|
-
TEMPLATE_CODE_FILES_KEY =
|
11
|
-
TEMPLATE_TEST_FILES_KEY =
|
12
|
-
TEMPLATE_FILE_NAME_KEY =
|
13
|
-
TEMPLATE_FILE_CUSTOM_NAME_KEY =
|
14
|
-
TEMPLATE_FILE_PATH_KEY =
|
15
|
-
TEMPLATE_FILE_IS_RESOURCE_KEY =
|
10
|
+
TEMPLATE_CODE_FILES_KEY = "code_files"
|
11
|
+
TEMPLATE_TEST_FILES_KEY = "test_files"
|
12
|
+
TEMPLATE_FILE_NAME_KEY = "name"
|
13
|
+
TEMPLATE_FILE_CUSTOM_NAME_KEY = "custom_name"
|
14
|
+
TEMPLATE_FILE_PATH_KEY = "path"
|
15
|
+
TEMPLATE_FILE_IS_RESOURCE_KEY = "is_resource"
|
16
|
+
TEMPLATE_CUSTOM_PARAMETERS_KEY = "custom_parameters"
|
16
17
|
|
17
|
-
TEMPLATE_DEPENDENCIES_KEY =
|
18
|
-
|
18
|
+
TEMPLATE_DEPENDENCIES_KEY = "dependencies"
|
19
|
+
TEMPLATE_VIPERAPTOR_KEY = "viperaptor"
|
20
|
+
end
|
data/lib/viperaptor/version.rb
CHANGED
data/viperaptor.gemspec
CHANGED
@@ -20,13 +20,13 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.required_ruby_version = '>= 2.3'
|
22
22
|
|
23
|
-
spec.add_runtime_dependency 'thor', '1.
|
24
|
-
spec.add_runtime_dependency 'xcodeproj', '1.
|
25
|
-
spec.add_runtime_dependency 'liquid', '
|
26
|
-
spec.add_runtime_dependency 'git', '1.
|
27
|
-
spec.add_runtime_dependency 'cocoapods-core', '1.
|
28
|
-
spec.add_runtime_dependency 'terminal-table', '
|
29
|
-
spec.add_runtime_dependency 'tty-prompt', '~> 0.23.
|
23
|
+
spec.add_runtime_dependency 'thor', '1.2.1'
|
24
|
+
spec.add_runtime_dependency 'xcodeproj', '1.21.0'
|
25
|
+
spec.add_runtime_dependency 'liquid', '5.1.0'
|
26
|
+
spec.add_runtime_dependency 'git', '1.10.2'
|
27
|
+
spec.add_runtime_dependency 'cocoapods-core', '1.11.2'
|
28
|
+
spec.add_runtime_dependency 'terminal-table', '3.0.2'
|
29
|
+
spec.add_runtime_dependency 'tty-prompt', '~> 0.23.1'
|
30
30
|
|
31
31
|
spec.add_development_dependency 'bundler', '>= 1.16'
|
32
32
|
spec.add_development_dependency 'rake', '~> 13.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: viperaptor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Siarhei Ladzeika
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -16,98 +16,98 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: 1.2.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
26
|
+
version: 1.2.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: xcodeproj
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
33
|
+
version: 1.21.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.
|
40
|
+
version: 1.21.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: liquid
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 5.1.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 5.1.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: git
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.
|
61
|
+
version: 1.10.2
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.
|
68
|
+
version: 1.10.2
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: cocoapods-core
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - '='
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.
|
75
|
+
version: 1.11.2
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.
|
82
|
+
version: 1.11.2
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: terminal-table
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - '='
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 3.0.2
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - '='
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 3.0.2
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: tty-prompt
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.23.
|
103
|
+
version: 0.23.1
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.23.
|
110
|
+
version: 0.23.1
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: bundler
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -266,7 +266,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
266
266
|
- !ruby/object:Gem::Version
|
267
267
|
version: '0'
|
268
268
|
requirements: []
|
269
|
-
rubygems_version: 3.
|
269
|
+
rubygems_version: 3.2.22
|
270
270
|
signing_key:
|
271
271
|
specification_version: 4
|
272
272
|
summary: Advanced code generator for Xcode projects with a nice and flexible template
|