generamba 0.7.8 → 1.0.0

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 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.