generamba 0.7.8 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8b7d38bed5812d081bc9af321e8f0b42b05315ad
4
- data.tar.gz: 1bf9e9e8721031880b58a854028a8769e34ad31b
3
+ metadata.gz: 40260eafddc1f86ef6b3583e592e0fe6f0716efe
4
+ data.tar.gz: 525027d7e7ab9a936c4d5843da3903ffc30a3d1f
5
5
  SHA512:
6
- metadata.gz: 5cff9119fe6f9329a0d9bbd008568396dac8c6b91c2e4004d0933684b47df98744ad9fbc5d798549a4a5fbef455363c5cd82cb347e517c4ca6e03e69d28ae2be
7
- data.tar.gz: 669f7d7e3979766e6b68837ec2720390ec9722b4318c2b7d960df4be2402d8899daa8091f26b4b1018a201e8e1fdb147a202c712dfd10ff727a362cb3da0bf65
6
+ metadata.gz: a135a4822acac9d8524d94b18a986252d700826ba464369979ac46d5066bf603b4aba54c50b88a381bb665a1244b4a8076803fa0abd1d252671307d5aa5d4ae7
7
+ data.tar.gz: 911f34694191b513c6bf47f8bacccbfc1559b39dea7d298dfcd38080fa6f2348da8fcc6abac898fae1ab1e62a64e1f3ed7af13f77db1e81363dc524f192d11f7
data/generamba.gemspec CHANGED
@@ -21,14 +21,18 @@ Gem::Specification.new do |spec|
21
21
  spec.required_ruby_version = '>= 2.2'
22
22
 
23
23
  spec.add_runtime_dependency 'thor', '0.19.1'
24
- spec.add_runtime_dependency 'xcodeproj', '0.28.2'
24
+ spec.add_runtime_dependency 'xcodeproj', '1.2.0'
25
25
  spec.add_runtime_dependency 'liquid', '3.0.6'
26
26
  spec.add_runtime_dependency 'git', '1.2.9.1'
27
- spec.add_runtime_dependency 'cocoapods-core', '0.39.0'
27
+ spec.add_runtime_dependency 'cocoapods-core', '1.0.1'
28
28
  spec.add_runtime_dependency 'terminal-table', '1.4.5'
29
29
 
30
30
  spec.add_development_dependency 'bundler', '~> 1.10'
31
31
  spec.add_development_dependency 'rake', '~> 10.0'
32
32
  spec.add_development_dependency 'rspec', '~> 3.4'
33
33
  spec.add_development_dependency 'fakefs', '~> 0.6.1'
34
+ # ActiveSupport dependency is not used by dashramba; instead some other dependency
35
+ # requires it. We lock it to 4.2.7 so as to avoid using 5.0, which is
36
+ # not compatible with older versions of Ruby.
37
+ spec.add_development_dependency 'activesupport', '~> 4.2.7'
34
38
  end
@@ -21,6 +21,7 @@ module Generamba::CLI
21
21
  method_option :test_file_path, :desc => 'Specifies a location in the filesystem for new test files'
22
22
  method_option :test_group_path, :desc => 'Specifies a location in Xcode groups for new test files'
23
23
  method_option :test_path, :desc => 'Specifies a location (both in the filesystem and Xcode) for new test files'
24
+ method_option :custom_parameters, :type => :hash, :default => {}, :desc => 'Specifies extra parameters in format `key1:value1 key2:value2` for usage during code generation'
24
25
  def gen(module_name, template_name)
25
26
 
26
27
  does_rambafile_exist = Dir[RAMBAFILE_NAME].count > 0
@@ -51,6 +52,7 @@ module Generamba::CLI
51
52
  code_module = CodeModule.new(module_name, module_description, rambafile, options)
52
53
 
53
54
  DependencyChecker.check_all_required_dependencies_has_in_podfile(template.dependencies, code_module.podfile_path)
55
+ DependencyChecker.check_all_required_dependencies_has_in_cartfile(template.dependencies, code_module.cartfile_path)
54
56
 
55
57
  project = XcodeprojHelper.obtain_project(code_module.xcodeproj_path)
56
58
  module_group_already_exists = XcodeprojHelper.module_with_group_path_already_exists(project, code_module.module_group_path)
@@ -7,7 +7,19 @@ module Generamba::CLI
7
7
 
8
8
  desc 'version', 'Prints out Generamba current version'
9
9
  def version
10
- puts(Generamba::VERSION.green)
10
+ options = {}
11
+ options['Version'] = Generamba::VERSION.green
12
+ options['Release date'] = Generamba::RELEASE_DATE.green
13
+ options['Change notes'] = Generamba::RELEASE_LINK.green
14
+
15
+ values = []
16
+
17
+ options.each do |title, value|
18
+ values.push("#{title}: #{value}")
19
+ end
20
+
21
+ output = values.join("\n")
22
+ puts(output)
11
23
  end
12
24
  end
13
25
  end
@@ -1,5 +1,7 @@
1
1
  module Generamba
2
2
 
3
+ SLASH_REGEX = /^\/|\/$/
4
+
3
5
  # Represents currently generating code module
4
6
  class CodeModule
5
7
  attr_reader :name,
@@ -16,7 +18,9 @@ module Generamba
16
18
  :test_group_path,
17
19
  :project_targets,
18
20
  :test_targets,
19
- :podfile_path
21
+ :podfile_path,
22
+ :cartfile_path,
23
+ :custom_parameters
20
24
 
21
25
  def initialize(name, description, rambafile, options)
22
26
  # Base initialization
@@ -48,23 +52,49 @@ module Generamba
48
52
  @test_targets = [rambafile[TEST_TARGET_KEY]] if rambafile[TEST_TARGET_KEY] != nil
49
53
  @test_targets = rambafile[TEST_TARGETS_KEY] if rambafile[TEST_TARGETS_KEY] != nil
50
54
 
55
+ # Custom parameters
56
+ @custom_parameters = options[:custom_parameters]
57
+
51
58
  # Options adaptation
52
59
  @author = options[:author] if options[:author]
53
60
  @project_targets = options[:module_targets].split(',') if options[:module_targets]
54
61
  @test_targets = options[:test_targets].split(',') if options[:test_targets]
55
62
 
56
- @module_file_path = Pathname.new(options[:module_file_path]).join(@name) if options[:module_file_path]
57
- @module_group_path = Pathname.new(options[:module_group_path]).join(@name) if options[:module_group_path]
58
- @test_file_path = Pathname.new(options[:test_file_path]).join(@name) if options[:test_file_path]
59
- @test_group_path = Pathname.new(options[:test_group_path]).join(@name) if options[:test_group_path]
63
+ if options[:module_file_path]
64
+ @module_file_path = options[:module_file_path].gsub(SLASH_REGEX, '')
65
+ @module_file_path = Pathname.new(@module_file_path).join(@name)
66
+ end
67
+
68
+ if options[:module_group_path]
69
+ @module_group_path = options[:module_group_path].gsub(SLASH_REGEX, '')
70
+ @module_group_path = Pathname.new(@module_group_path).join(@name)
71
+ end
72
+
73
+ if options[:test_file_path]
74
+ @test_file_path = options[:test_file_path].gsub(SLASH_REGEX, '')
75
+ @test_file_path = Pathname.new(@test_file_path).join(@name)
76
+ end
77
+
78
+ if options[:test_group_path]
79
+ @test_group_path = options[:test_group_path].gsub(SLASH_REGEX, '')
80
+ @test_group_path = Pathname.new(@test_group_path).join(@name)
81
+ end
60
82
 
61
83
  # The priority is given to `module_path` and 'test_path' options
62
- @module_file_path = Pathname.new(options[:module_path]).join(@name) if options[:module_path]
63
- @module_group_path = Pathname.new(options[:module_path]).join(@name) if options[:module_path]
64
- @test_file_path = Pathname.new(options[:test_path]).join(@name) if options[:test_path]
65
- @test_group_path = Pathname.new(options[:test_path]).join(@name) if options[:test_path]
84
+ if options[:module_path]
85
+ @module_path = options[:module_path].gsub(SLASH_REGEX, '')
86
+ @module_file_path = Pathname.new(@module_path).join(@name)
87
+ @module_group_path = Pathname.new(@module_path).join(@name)
88
+ end
89
+
90
+ if options[:test_path]
91
+ @test_path = options[:test_path].gsub(SLASH_REGEX, '')
92
+ @test_file_path = Pathname.new(@test_path).join(@name)
93
+ @test_group_path = Pathname.new(@test_path).join(@name)
94
+ end
66
95
 
67
96
  @podfile_path = rambafile[PODFILE_PATH_KEY] if rambafile[PODFILE_PATH_KEY] != nil
97
+ @cartfile_path = rambafile[CARTFILE_PATH_KEY] if rambafile[CARTFILE_PATH_KEY] != nil
68
98
  end
69
99
  end
70
100
  end
@@ -38,7 +38,8 @@ module Generamba
38
38
  'date' => Time.now.strftime('%d/%m/%Y'),
39
39
  'developer' => developer,
40
40
  'module_info' => module_info,
41
- 'prefix' => code_module.prefix
41
+ 'prefix' => code_module.prefix,
42
+ 'custom_parameters' => code_module.custom_parameters
42
43
  }
43
44
 
44
45
  module_info['file_basename'] = file_basename
@@ -5,7 +5,7 @@ module Generamba
5
5
  # Provides methods for check dependencies from rambaspec in podfile
6
6
  class DependencyChecker
7
7
 
8
- # Check podfile for dependencies
8
+ # Check Podfile for dependencies
9
9
  # @param dependencies [Array] Array of dependencies name
10
10
  # @param podfile_path [String] String of Podfile path
11
11
  #
@@ -31,6 +31,28 @@ module Generamba
31
31
  end
32
32
  end
33
33
 
34
+ # Check Cartfile for dependencies
35
+ # @param dependencies [Array] Array of dependencies name
36
+ # @param cartfile_path [String] String of Podfile path
37
+ #
38
+ # @return [void]
39
+ def self.check_all_required_dependencies_has_in_cartfile(dependencies, cartfile_path)
40
+ return if !dependencies or dependencies.count == 0 or !cartfile_path
41
+
42
+ cartfile_string = File.read(cartfile_path)
43
+
44
+ not_existing_dependency = []
45
+ dependencies.each do |dependency_name|
46
+ unless cartfile_string.include?(dependency_name)
47
+ not_existing_dependency.push(dependency_name)
48
+ end
49
+ end
50
+
51
+ if not_existing_dependency.count > 0
52
+ puts "[Warning] Dependencies #{not_existing_dependency} missed in Cartfile".yellow
53
+ end
54
+ end
55
+
34
56
  end
35
57
 
36
58
  end
@@ -20,7 +20,7 @@ module Generamba
20
20
  #
21
21
  # @return [void]
22
22
  def self.add_file_to_project_and_targets(project, targets_name, group_path, file_path, file_type = nil)
23
- module_group = self.retreive_group_or_create_if_needed(group_path, project, true)
23
+ module_group = self.retrieve_group_or_create_if_needed(group_path, project, true)
24
24
  xcode_file = module_group.new_file(File.absolute_path(file_path))
25
25
 
26
26
  file_name = File.basename(file_path)
@@ -34,10 +34,21 @@ module Generamba
34
34
  file_type = 'resource'
35
35
  end
36
36
  end
37
-
38
- self.add_file_to_target(xcode_target, xcode_file, file_type)
37
+
38
+ if file_type != nil
39
+ self.add_file_to_target(xcode_target, xcode_file, file_type)
40
+ end
39
41
  end
40
42
  end
43
+
44
+ # Adds a provided directory to a specific Project
45
+ # @param project [Xcodeproj::Project] The target xcodeproj file
46
+ # @param group_path [Pathname] The Xcode group path for current directory
47
+ #
48
+ # @return [void]
49
+ def self.add_group_to_project(project, group_path)
50
+ self.retrieve_group_or_create_if_needed(group_path, project, true)
51
+ end
41
52
 
42
53
  # Adds xcode file to target based on it's type
43
54
  # @param target [Xcodeproj::AbstractTarget] xcode target to use
@@ -77,7 +88,7 @@ module Generamba
77
88
  #
78
89
  # @return [Void]
79
90
  def self.clear_group(project, targets_name, group_path)
80
- module_group = self.retreive_group_or_create_if_needed(group_path, project, false)
91
+ module_group = self.retrieve_group_or_create_if_needed(group_path, project, false)
81
92
  return unless module_group
82
93
 
83
94
  files_path = self.files_path_from_group(module_group, project)
@@ -96,7 +107,7 @@ module Generamba
96
107
  #
97
108
  # @return [TrueClass or FalseClass]
98
109
  def self.module_with_group_path_already_exists(project, group_path)
99
- module_group = self.retreive_group_or_create_if_needed(group_path, project, false)
110
+ module_group = self.retrieve_group_or_create_if_needed(group_path, project, false)
100
111
  return module_group == nil ? false : true
101
112
  end
102
113
 
@@ -108,18 +119,19 @@ module Generamba
108
119
  # @param create_group_if_not_exists [TrueClass or FalseClass] If true notexistent group will be created
109
120
  #
110
121
  # @return [PBXGroup]
111
- def self.retreive_group_or_create_if_needed(group_path, project, create_group_if_not_exists)
122
+ def self.retrieve_group_or_create_if_needed(group_path, project, create_group_if_not_exists)
112
123
  group_names = path_names_from_path(group_path)
113
124
 
114
125
  final_group = project
115
126
 
116
127
  group_names.each do |group_name|
117
128
  next_group = final_group[group_name]
129
+
118
130
  unless next_group
119
131
  unless create_group_if_not_exists
120
132
  return nil
121
133
  end
122
-
134
+
123
135
  new_group_path = group_name
124
136
  next_group = final_group.new_group(group_name, new_group_path)
125
137
  end
@@ -67,24 +67,30 @@ module Generamba
67
67
 
68
68
  XcodeprojHelper.clear_group(project, targets, group_path)
69
69
  files.each do |file|
70
-
71
- file_group = File.dirname(file[TEMPLATE_NAME_KEY])
72
-
73
- # Generating the content of the code file and it's name
74
- file_name, file_content = ContentGenerator.create_file(file, code_module, template)
75
- file_path = dir_path.join(file_group)
76
- .join(file_name)
77
-
78
- # Creating the file in the filesystem
79
- FileUtils.mkdir_p File.dirname(file_path)
80
- File.open(file_path, 'w+') do |f|
81
- f.write(file_content)
82
- end
83
-
84
- file_type = file[TEMPLATE_FILE_FILETYPE_KEY]
70
+ unless file[TEMPLATE_FILE_PATH_KEY]
71
+ directory_name = file[TEMPLATE_NAME_KEY].gsub(/^\/|\/$/, '')
72
+ file_group = dir_path.join(directory_name)
73
+
74
+ FileUtils.mkdir_p file_group
75
+ XcodeprojHelper.add_group_to_project(project, file_group)
76
+ else
77
+ file_group = File.dirname(file[TEMPLATE_NAME_KEY])
78
+
79
+ # Generating the content of the code file and it's name
80
+ file_name, file_content = ContentGenerator.create_file(file, code_module, template)
81
+ file_path = dir_path.join(file_group).join(file_name)
85
82
 
86
- # Creating the file in the Xcode project
87
- XcodeprojHelper.add_file_to_project_and_targets(project, targets, group_path.join(file_group), file_path, file_type)
83
+ # Creating the file in the filesystem
84
+ FileUtils.mkdir_p File.dirname(file_path)
85
+ File.open(file_path, 'w+') do |f|
86
+ f.write(file_content)
87
+ end
88
+
89
+ file_type = file[TEMPLATE_FILE_FILETYPE_KEY]
90
+
91
+ # Creating the file in the Xcode project
92
+ XcodeprojHelper.add_file_to_project_and_targets(project, targets, group_path.join(file_group), file_path, file_type)
93
+ end
88
94
  end
89
95
  end
90
96
  end
@@ -1,3 +1,5 @@
1
1
  module Generamba
2
- VERSION = '0.7.8'
2
+ VERSION = '1.0.0'
3
+ RELEASE_DATE = '23.07.2016'
4
+ RELEASE_LINK = "https://github.com/rambler-ios/Generamba/releases/tag/#{VERSION}"
3
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: generamba
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.8
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Egor Tolstoy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-05-16 00:00:00.000000000 Z
13
+ date: 2016-07-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: thor
@@ -32,14 +32,14 @@ dependencies:
32
32
  requirements:
33
33
  - - '='
34
34
  - !ruby/object:Gem::Version
35
- version: 0.28.2
35
+ version: 1.2.0
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - '='
41
41
  - !ruby/object:Gem::Version
42
- version: 0.28.2
42
+ version: 1.2.0
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: liquid
45
45
  requirement: !ruby/object:Gem::Requirement
@@ -74,14 +74,14 @@ dependencies:
74
74
  requirements:
75
75
  - - '='
76
76
  - !ruby/object:Gem::Version
77
- version: 0.39.0
77
+ version: 1.0.1
78
78
  type: :runtime
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - '='
83
83
  - !ruby/object:Gem::Version
84
- version: 0.39.0
84
+ version: 1.0.1
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: terminal-table
87
87
  requirement: !ruby/object:Gem::Requirement
@@ -152,6 +152,20 @@ dependencies:
152
152
  - - "~>"
153
153
  - !ruby/object:Gem::Version
154
154
  version: 0.6.1
155
+ - !ruby/object:Gem::Dependency
156
+ name: activesupport
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - "~>"
160
+ - !ruby/object:Gem::Version
161
+ version: 4.2.7
162
+ type: :development
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - "~>"
167
+ - !ruby/object:Gem::Version
168
+ version: 4.2.7
155
169
  description: Generamba is a powerful and easy-to-use Xcode code generator. It provides
156
170
  a project-based configuration, flexible templates system, the ability to generate
157
171
  code and tests simultaneously.