generamba 1.0.0 → 1.1.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: 40260eafddc1f86ef6b3583e592e0fe6f0716efe
4
- data.tar.gz: 525027d7e7ab9a936c4d5843da3903ffc30a3d1f
3
+ metadata.gz: 50fbd6916f61f027113fed9afaa21334582e1487
4
+ data.tar.gz: 3f1d2d9aa01233d3ac1eb9502ca8acb01c1eab35
5
5
  SHA512:
6
- metadata.gz: a135a4822acac9d8524d94b18a986252d700826ba464369979ac46d5066bf603b4aba54c50b88a381bb665a1244b4a8076803fa0abd1d252671307d5aa5d4ae7
7
- data.tar.gz: 911f34694191b513c6bf47f8bacccbfc1559b39dea7d298dfcd38080fa6f2348da8fcc6abac898fae1ab1e62a64e1f3ed7af13f77db1e81363dc524f192d11f7
6
+ metadata.gz: f6b424caf3eb315a22af4aa06b1204feb32ed60d05f01810c577156259b961f13b6753c00825d3515bf43f80d6ccf3ecf5ca14218b24da11b83cb52dea5466dc
7
+ data.tar.gz: bafea13e2d3abe422cb824d82fbee0d0884f0844aa540978dcd36c6e2fdb6e076b66ece4a780d6d4095794393d3e19b7d1e5c16454a52d22f4f79429995d38c1
data/.codeclimate.yml ADDED
@@ -0,0 +1,10 @@
1
+ engines:
2
+ rubocop:
3
+ enabled: true
4
+
5
+ ratings:
6
+ paths:
7
+ - "**.rb"
8
+
9
+ exclude_paths:
10
+ - spec/**/*
data/.gitignore CHANGED
@@ -6,3 +6,4 @@
6
6
  .idea/workspace.xml
7
7
  .rakeTasks
8
8
  encodings.xml
9
+ Gemfile.lock
data/.travis.yml CHANGED
@@ -1,5 +1,17 @@
1
- os:
2
- - osx
3
- language: ruby
1
+ language: objective-c
2
+ osx_image: xcode7.3
3
+
4
+ cache:
5
+ bundler: true
6
+
7
+ bundler_args: --jobs 3 --retry 3
8
+
4
9
  rvm:
5
10
  - 2.2.1
11
+ - 2.3.1
12
+
13
+ before_install:
14
+ - gem update --system --no-doc --no-ri
15
+ - gem install bundler --no-doc --no-ri
16
+
17
+ script: bundle exec rake
data/CHANGELOG.md CHANGED
@@ -1,5 +1,45 @@
1
1
  # Change Log
2
2
 
3
+ ## [1.0.0](https://github.com/rambler-ios/Generamba/tree/1.0.0) (2016-07-23)
4
+ [Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.7.8...1.0.0)
5
+
6
+ **Implemented enhancements:**
7
+
8
+ - Add more info to `generamba version` command [\#122](https://github.com/rambler-ios/Generamba/issues/122)
9
+ - Empty group in Xcode structure [\#118](https://github.com/rambler-ios/Generamba/issues/118)
10
+ - Gem dependency of cocoapods-core-0.39.0 [\#114](https://github.com/rambler-ios/Generamba/issues/114)
11
+ - Remove adding module name in module\_group\_path if it set from cli [\#98](https://github.com/rambler-ios/Generamba/issues/98)
12
+ - Check for missing Carthage dependencies [\#83](https://github.com/rambler-ios/Generamba/issues/83)
13
+ - Additional template parameters [\#46](https://github.com/rambler-ios/Generamba/issues/46)
14
+
15
+ **Fixed bugs:**
16
+
17
+ - Can't add file with type . Only 'source' and 'resource' are acceptable [\#116](https://github.com/rambler-ios/Generamba/issues/116)
18
+ - If option --module-group-path starts with '/' Generamba add folder with empty name in root folder [\#99](https://github.com/rambler-ios/Generamba/issues/99)
19
+
20
+ **Closed issues:**
21
+
22
+ - Generamba as file converter [\#41](https://github.com/rambler-ios/Generamba/issues/41)
23
+
24
+ ## [0.7.8](https://github.com/rambler-ios/Generamba/tree/0.7.8) (2016-05-16)
25
+ [Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.7.7...0.7.8)
26
+
27
+ ## [0.7.7](https://github.com/rambler-ios/Generamba/tree/0.7.7) (2016-05-10)
28
+ [Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.7.6...0.7.7)
29
+
30
+ **Implemented enhancements:**
31
+
32
+ - Project target name in module\_info [\#110](https://github.com/rambler-ios/Generamba/issues/110)
33
+ - Author setting setup [\#107](https://github.com/rambler-ios/Generamba/issues/107)
34
+ - Give a user more information about templates during `generamba setup` [\#86](https://github.com/rambler-ios/Generamba/issues/86)
35
+
36
+ ## [0.7.6](https://github.com/rambler-ios/Generamba/tree/0.7.6) (2016-04-30)
37
+ [Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.7.5...0.7.6)
38
+
39
+ **Fixed bugs:**
40
+
41
+ - Failed adding files to project [\#96](https://github.com/rambler-ios/Generamba/issues/96)
42
+
3
43
  ## [0.7.5](https://github.com/rambler-ios/Generamba/tree/0.7.5) (2016-04-24)
4
44
  [Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.7.4...0.7.5)
5
45
 
@@ -11,24 +51,21 @@
11
51
 
12
52
  - Generamba generator: Could not find 'generamba' [\#103](https://github.com/rambler-ios/Generamba/issues/103)
13
53
  - Layout issue in "Summary for gen module" [\#95](https://github.com/rambler-ios/Generamba/issues/95)
54
+ - Non human exception when wrong template name or catalog [\#77](https://github.com/rambler-ios/Generamba/issues/77)
55
+ - Error on empty template folder [\#76](https://github.com/rambler-ios/Generamba/issues/76)
14
56
 
15
57
  **Closed issues:**
16
58
 
17
59
  - Module Name in .rambaspec support [\#102](https://github.com/rambler-ios/Generamba/issues/102)
60
+ - \[WIP\] fix module\_group\_path option [\#100](https://github.com/rambler-ios/Generamba/issues/100)
18
61
  - Generate with project and tests targets in command line [\#97](https://github.com/rambler-ios/Generamba/issues/97)
19
62
  - Easy setup template path to local templates in Rambafile [\#94](https://github.com/rambler-ios/Generamba/issues/94)
20
63
 
21
- **Merged pull requests:**
22
-
23
- - Fixed \#104 [\#106](https://github.com/rambler-ios/Generamba/pull/106) ([Beniamiiin](https://github.com/Beniamiiin))
24
- - Fixed \#95 [\#105](https://github.com/rambler-ios/Generamba/pull/105) ([Beniamiiin](https://github.com/Beniamiiin))
25
-
26
64
  ## [0.7.4](https://github.com/rambler-ios/Generamba/tree/0.7.4) (2016-02-21)
27
65
  [Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.7.3...0.7.4)
28
66
 
29
67
  **Implemented enhancements:**
30
68
 
31
- - Asks the user if he needed tests in `generamba setup` command [\#85](https://github.com/rambler-ios/Generamba/issues/85)
32
69
  - Improve the visualization of commands with parameters [\#69](https://github.com/rambler-ios/Generamba/issues/69)
33
70
  - Can we introduce something similar to view partials in rails \(for duplicated parts of views\) [\#62](https://github.com/rambler-ios/Generamba/issues/62)
34
71
 
@@ -51,7 +88,6 @@
51
88
  **Closed issues:**
52
89
 
53
90
  - Can we use constants from rambafile in templates? [\#81](https://github.com/rambler-ios/Generamba/issues/81)
54
- - Arguments for `generamba gen Name modulename` [\#80](https://github.com/rambler-ios/Generamba/issues/80)
55
91
 
56
92
  ## [0.7.2](https://github.com/rambler-ios/Generamba/tree/0.7.2) (2016-01-10)
57
93
  [Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.7.1...0.7.2)
@@ -60,12 +96,10 @@
60
96
 
61
97
  - --version command [\#54](https://github.com/rambler-ios/Generamba/issues/54)
62
98
  - Incorrect behavior when generate module which already exists [\#52](https://github.com/rambler-ios/Generamba/issues/52)
63
- - Add the ability to specify custom template catalogs in Rambafile [\#44](https://github.com/rambler-ios/Generamba/issues/44)
64
99
 
65
100
  **Fixed bugs:**
66
101
 
67
102
  - Don't set target in swift projects [\#65](https://github.com/rambler-ios/Generamba/issues/65)
68
- - Errors if default path is empty [\#64](https://github.com/rambler-ios/Generamba/issues/64)
69
103
  - Default template set can not be used [\#60](https://github.com/rambler-ios/Generamba/issues/60)
70
104
  - Incorrect behavior when generate module which already exists [\#52](https://github.com/rambler-ios/Generamba/issues/52)
71
105
 
@@ -74,14 +108,12 @@
74
108
  - Can generamba be used to generate swift modules? [\#61](https://github.com/rambler-ios/Generamba/issues/61)
75
109
  - Git 1.2.9.1 [\#57](https://github.com/rambler-ios/Generamba/issues/57)
76
110
  - Clarify generamba parameters usage [\#51](https://github.com/rambler-ios/Generamba/issues/51)
77
- - Add documentation for liquid templates [\#48](https://github.com/rambler-ios/Generamba/issues/48)
78
111
 
79
112
  ## [0.7.1](https://github.com/rambler-ios/Generamba/tree/0.7.1) (2015-12-20)
80
113
  [Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.7.0...0.7.1)
81
114
 
82
115
  **Implemented enhancements:**
83
116
 
84
- - Podfile path setup during generamba setup needs clarification [\#50](https://github.com/rambler-ios/Generamba/issues/50)
85
117
  - Remove the Settingslogic dependency [\#42](https://github.com/rambler-ios/Generamba/issues/42)
86
118
 
87
119
  **Fixed bugs:**
@@ -95,17 +127,8 @@
95
127
  ## [0.7.0](https://github.com/rambler-ios/Generamba/tree/0.7.0) (2015-12-13)
96
128
  [Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.6.2...0.7.0)
97
129
 
98
- **Implemented enhancements:**
99
-
100
- - Add coloured output [\#28](https://github.com/rambler-ios/Generamba/issues/28)
101
- - Add -filepath and -grouppath options for `generamba gen` command [\#27](https://github.com/rambler-ios/Generamba/issues/27)
102
- - Add a `generamba template search` command [\#26](https://github.com/rambler-ios/Generamba/issues/26)
103
- - Add a `generamba template list` command [\#25](https://github.com/rambler-ios/Generamba/issues/25)
104
- - Add the if statements to the Rambafile.liquid [\#22](https://github.com/rambler-ios/Generamba/issues/22)
105
-
106
130
  **Fixed bugs:**
107
131
 
108
- - Non-informative error message when running `generamba template install` in the wrong directory [\#39](https://github.com/rambler-ios/Generamba/issues/39)
109
132
  - undefined method `each' for nil:NilClass \(NoMethodError\) [\#37](https://github.com/rambler-ios/Generamba/issues/37)
110
133
 
111
134
  ## [0.6.2](https://github.com/rambler-ios/Generamba/tree/0.6.2) (2015-11-25)
@@ -114,37 +137,13 @@
114
137
  **Fixed bugs:**
115
138
 
116
139
  - Can't install template from git repo [\#36](https://github.com/rambler-ios/Generamba/issues/36)
117
- - Can't find template by local fullpath [\#35](https://github.com/rambler-ios/Generamba/issues/35)
118
-
119
- **Closed issues:**
120
-
121
- - Need more information about dependencies [\#34](https://github.com/rambler-ios/Generamba/issues/34)
122
140
 
123
141
  ## [0.6.1](https://github.com/rambler-ios/Generamba/tree/0.6.1) (2015-11-21)
124
142
  [Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.6.0...0.6.1)
125
143
 
126
- **Fixed bugs:**
127
-
128
- - The author name should be configured without `generamba setup` [\#31](https://github.com/rambler-ios/Generamba/issues/31)
129
- - Sometimes Generamba fills in the wrong test target in the Rambafile [\#30](https://github.com/rambler-ios/Generamba/issues/30)
130
- - Seems that Generamba doesn't add project name to the headers [\#29](https://github.com/rambler-ios/Generamba/issues/29)
131
-
132
- **Closed issues:**
133
-
134
- - Add a documentation for a .rambaspec file and overall template structure [\#24](https://github.com/rambler-ios/Generamba/issues/24)
135
-
136
144
  ## [0.6.0](https://github.com/rambler-ios/Generamba/tree/0.6.0) (2015-11-15)
137
145
  [Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.5.0...0.6.0)
138
146
 
139
- **Implemented enhancements:**
140
-
141
- - Add a podfile\_path/cartfile\_path fields to a Rambafile [\#19](https://github.com/rambler-ios/Generamba/issues/19)
142
- - Add a dependencies field to the .rambaspec [\#18](https://github.com/rambler-ios/Generamba/issues/18)
143
-
144
- **Fixed bugs:**
145
-
146
- - Duplicate file reference in project.pbxproj [\#20](https://github.com/rambler-ios/Generamba/issues/20)
147
-
148
147
  ## [0.5.0](https://github.com/rambler-ios/Generamba/tree/0.5.0) (2015-11-01)
149
148
 
150
149
 
data/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  *We keep evolving Generamba:* [changelog](https://github.com/rambler-ios/Generamba/blob/develop/CHANGELOG.md), [release notes](https://github.com/rambler-ios/Generamba/releases).
10
10
 
11
- ![Generamba Screenshot](http://s24.postimg.org/gej9cg1cl/generamba.jpg)
11
+ ![Generamba Screenshot](https://habrastorage.org/files/b98/770/b37/b98770b37dc54de98daf0e22fea38478.gif)
12
12
 
13
13
  ### Key features
14
14
 
@@ -4,6 +4,8 @@ require 'generamba/helpers/rambafile_validator.rb'
4
4
  require 'generamba/helpers/xcodeproj_helper.rb'
5
5
  require 'generamba/helpers/dependency_checker.rb'
6
6
  require 'generamba/helpers/gen_command_table_parameters_formatter.rb'
7
+ require 'generamba/helpers/module_validator.rb'
8
+ require 'generamba/helpers/module_info_generator.rb'
7
9
 
8
10
  module Generamba::CLI
9
11
  class Application < Thor
@@ -13,7 +15,7 @@ module Generamba::CLI
13
15
  desc 'gen [MODULE_NAME] [TEMPLATE_NAME]', 'Creates a new VIPER module with a given name from a specific template'
14
16
  method_option :description, :aliases => '-d', :desc => 'Provides a full description to the module'
15
17
  method_option :author, :desc => 'Specifies the author name for generated module'
16
- method_option :module_targets, :desc => 'Specifies project targets for adding new module files'
18
+ method_option :project_targets, :desc => 'Specifies project targets for adding new module files'
17
19
  method_option :module_file_path, :desc => 'Specifies a location in the filesystem for new files'
18
20
  method_option :module_group_path, :desc => 'Specifies a location in Xcode groups for new files'
19
21
  method_option :module_path, :desc => 'Specifies a location (both in the filesystem and Xcode) for new files'
@@ -37,20 +39,21 @@ module Generamba::CLI
37
39
  setup_username_command = Generamba::CLI::SetupUsernameCommand.new
38
40
  setup_username_command.setup_username
39
41
 
40
- default_module_description = "#{module_name} module"
41
- module_description = options[:description] ? options[:description] : default_module_description
42
-
43
42
  rambafile = YAML.load_file(RAMBAFILE_NAME)
44
43
 
45
- parameters = GenCommandTableParametersFormatter.prepare_parameters_for_displaying(rambafile)
44
+ code_module = CodeModule.new(module_name, rambafile, options)
45
+
46
+ module_validator = ModuleValidator.new
47
+ module_validator.validate(code_module)
48
+
49
+ template = ModuleTemplate.new(template_name)
50
+
51
+ parameters = GenCommandTableParametersFormatter.prepare_parameters_for_displaying(code_module, template_name)
46
52
  PrintTable.print_values(
47
53
  values: parameters,
48
54
  title: "Summary for gen #{module_name}"
49
55
  )
50
56
 
51
- template = ModuleTemplate.new(template_name)
52
- code_module = CodeModule.new(module_name, module_description, rambafile, options)
53
-
54
57
  DependencyChecker.check_all_required_dependencies_has_in_podfile(template.dependencies, code_module.podfile_path)
55
58
  DependencyChecker.check_all_required_dependencies_has_in_cartfile(template.dependencies, code_module.cartfile_path)
56
59
 
@@ -65,7 +68,7 @@ module Generamba::CLI
65
68
  end
66
69
  end
67
70
 
68
- generator = Generamba::ModuleGenerator.new()
71
+ generator = Generamba::ModuleGenerator.new
69
72
  generator.generate_module(module_name, code_module, template)
70
73
  end
71
74
 
@@ -35,39 +35,58 @@ module Generamba::CLI
35
35
  project_target = ask_index("Select the appropriate target for adding your MODULES (type the index):\n" + targets_prompt,project.targets)
36
36
  include_tests = yes?('Are you using unit-tests in this project? (yes/no)')
37
37
 
38
+ test_target = nil
39
+
38
40
  if include_tests
39
41
  test_target = ask_index("Select the appropriate target for adding your TESTS (type the index):\n" + targets_prompt,project.targets)
40
42
  end
41
43
 
42
- should_use_same_paths = yes?('Do you want to use the same paths for your files both in Xcode and the filesystem? (yes/no)')
43
- if should_use_same_paths
44
- project_group_path = ask('The default path for creating new modules:')
45
- project_file_path = project_group_path
44
+ should_add_all_modules_by_one_path = yes?('Do you want to add all your modules by one path? (yes/no)')
45
+
46
+ project_file_path = nil
47
+ project_group_path = nil
48
+
49
+ test_file_path = nil
50
+ test_group_path = nil
46
51
 
47
- if include_tests
48
- test_group_path = ask('The default path for creating tests:')
49
- test_file_path = test_group_path
52
+ if should_add_all_modules_by_one_path || include_tests
53
+ should_use_same_paths = false
54
+
55
+ if should_add_all_modules_by_one_path
56
+ should_use_same_paths = yes?('Do you want to use the same paths for your files both in Xcode and the filesystem? (yes/no)')
50
57
  end
51
- else
52
- project_group_path = ask('The default path for creating new modules (in Xcode groups):')
53
- project_file_path = ask('The default path for creating new modules (in the filesystem):')
54
58
 
55
- if include_tests
56
- test_group_path = ask('The default path for creating tests (in Xcode groups):')
57
- test_file_path = ask('The default path for creating tests (in the filesystem):')
59
+ if should_use_same_paths
60
+ if should_add_all_modules_by_one_path
61
+ project_group_path = ask('The default path for creating new modules:')
62
+ project_file_path = project_group_path
63
+ end
64
+
65
+ if include_tests
66
+ test_group_path = ask('The default path for creating tests:')
67
+ test_file_path = test_group_path
68
+ end
69
+ else
70
+ if should_add_all_modules_by_one_path
71
+ project_group_path = ask('The default path for creating new modules (in Xcode groups):')
72
+ project_file_path = ask('The default path for creating new modules (in the filesystem):')
73
+ end
74
+
75
+ if include_tests
76
+ test_group_path = ask('The default path for creating tests (in Xcode groups):')
77
+ test_file_path = ask('The default path for creating tests (in the filesystem):')
78
+ end
58
79
  end
59
80
  end
60
81
 
61
82
  using_pods = yes?('Are you using Cocoapods? (yes/no)')
62
83
  if using_pods
63
- properties[PODFILE_PATH_KEY] = ask_file_with_path('Podfile',
64
- 'Podfile')
84
+ properties[PODFILE_PATH_KEY] = ask_file_with_path('Podfile', 'Podfile')
65
85
  end
66
86
 
67
87
  using_carthage = yes?('Are you using Carthage? (yes/no)')
68
88
  if using_carthage
69
- properties[CARTFILE_PATH_KEY] = ask_file_with_path('Cartfile',
70
- 'Cartfile')
89
+ properties[CARTFILE_PATH_KEY] = ask_file_with_path('Cartfile', 'Cartfile')
71
90
  end
72
91
 
73
92
  should_add_templates = yes?('Do you want to add some well known templates to the Rambafile? (yes/no)')
@@ -79,21 +98,12 @@ module Generamba::CLI
79
98
  ]
80
99
  end
81
100
 
82
- properties[PROJECT_TARGET_KEY] = project_target.name
83
- properties[PROJECT_FILE_PATH_KEY] = project_file_path
84
- properties[PROJECT_GROUP_PATH_KEY] = project_group_path
85
-
86
- if test_target
87
- properties[TEST_TARGET_KEY] = test_target.name
88
- end
89
-
90
- if test_file_path
91
- properties[TEST_FILE_PATH_KEY] = test_file_path
92
- end
93
-
94
- if test_group_path
95
- properties[TEST_GROUP_PATH_KEY] = test_group_path
96
- end
101
+ properties[PROJECT_TARGET_KEY] = project_target.name if project_target
102
+ properties[PROJECT_FILE_PATH_KEY] = project_file_path if project_file_path
103
+ properties[PROJECT_GROUP_PATH_KEY] = project_group_path if project_group_path
104
+ properties[TEST_TARGET_KEY] = test_target.name if test_target
105
+ properties[TEST_FILE_PATH_KEY] = test_file_path if test_file_path
106
+ properties[TEST_GROUP_PATH_KEY] = test_group_path if test_group_path
97
107
 
98
108
  PrintTable.print_values(
99
109
  values: properties,
@@ -6,15 +6,16 @@ project_name: {{ project_name }}
6
6
  xcodeproj_path: {{ xcodeproj_path }}
7
7
  {% if prefix != "" %}prefix: {{ prefix }}{% endif %}
8
8
 
9
- ### Code generation settings section
10
- # The main project target name
11
- project_target: {{ project_target }}
9
+ {% if (project_target != nil and project_target != "") or (project_file_path != nil and project_file_path != "") or (project_group_path != nil and project_group_path != "") %}### Code generation settings section
10
+ {% if project_target != nil and project_target != "" %}# The main project target name
11
+ project_target: {{ project_target }}{% endif %}
12
12
 
13
- # The file path for new modules
14
- project_file_path: {{ project_file_path }}
13
+ {% if project_file_path != nil and project_file_path != "" %}# The file path for new modules
14
+ project_file_path: {{ project_file_path }}{% endif %}
15
15
 
16
- # The Xcode group path to new modules
17
- project_group_path: {{ project_group_path }}
16
+ {% if project_group_path != nil and project_group_path != "" %}# The Xcode group path to new modules
17
+ project_group_path: {{ project_group_path }}{% endif %}
18
+ {% endif %}
18
19
 
19
20
  {% if (test_target != nil and test_target != "") or (test_file_path != nil and test_file_path != "") or (test_group_path != nil and test_group_path != "") %}### Tests generation settings section
20
21
  {% if test_target != nil and test_target != "" %}# The tests target name
@@ -1,6 +1,10 @@
1
1
  module Generamba
2
2
 
3
3
  SLASH_REGEX = /^\/|\/$/
4
+ C99IDENTIFIER = /[^\w]/
5
+
6
+ PATH_TYPE_MODULE = 'module'
7
+ PATH_TYPE_TEST = 'test'
4
8
 
5
9
  # Represents currently generating code module
6
10
  class CodeModule
@@ -11,6 +15,7 @@ module Generamba
11
15
  :year,
12
16
  :prefix,
13
17
  :project_name,
18
+ :product_module_name,
14
19
  :xcodeproj_path,
15
20
  :module_file_path,
16
21
  :module_group_path,
@@ -22,79 +27,69 @@ module Generamba
22
27
  :cartfile_path,
23
28
  :custom_parameters
24
29
 
25
- def initialize(name, description, rambafile, options)
30
+ def initialize(name, rambafile, options)
26
31
  # Base initialization
27
32
  @name = name
28
- @description = description
29
-
30
- if rambafile[AUTHOR_NAME_KEY] != nil
31
- @author = rambafile[AUTHOR_NAME_KEY]
32
- else
33
- @author = UserPreferences.obtain_username
34
- end
35
-
33
+ @description = options[:description] ? options[:description] : "#{name} module"
34
+ @author = rambafile[AUTHOR_NAME_KEY] ? rambafile[AUTHOR_NAME_KEY] : UserPreferences.obtain_username
36
35
  @company = rambafile[COMPANY_KEY]
37
36
  @year = Time.now.year.to_s
38
37
 
39
38
  @prefix = rambafile[PROJECT_PREFIX_KEY]
40
39
  @project_name = rambafile[PROJECT_NAME_KEY]
40
+ @product_module_name = rambafile[PRODUCT_MODULE_NAME_KEY] || @project_name.gsub(C99IDENTIFIER, '_')
41
41
  @xcodeproj_path = rambafile[XCODEPROJ_PATH_KEY]
42
42
 
43
- @module_file_path = Pathname.new(rambafile[PROJECT_FILE_PATH_KEY]).join(@name)
44
- @module_group_path = Pathname.new(rambafile[PROJECT_GROUP_PATH_KEY]).join(@name)
43
+ setup_file_and_group_paths(rambafile[PROJECT_FILE_PATH_KEY], rambafile[PROJECT_GROUP_PATH_KEY], PATH_TYPE_MODULE)
44
+ setup_file_and_group_paths(rambafile[TEST_FILE_PATH_KEY], rambafile[TEST_GROUP_PATH_KEY], PATH_TYPE_TEST)
45
45
 
46
- @test_file_path = Pathname.new(rambafile[TEST_FILE_PATH_KEY]).join(@name) if rambafile[TEST_FILE_PATH_KEY] != nil
47
- @test_group_path = Pathname.new(rambafile[TEST_GROUP_PATH_KEY]).join(@name) if rambafile[TEST_GROUP_PATH_KEY] != nil
46
+ @project_targets = [rambafile[PROJECT_TARGET_KEY]] if rambafile[PROJECT_TARGET_KEY]
47
+ @project_targets = rambafile[PROJECT_TARGETS_KEY] if rambafile[PROJECT_TARGETS_KEY]
48
48
 
49
- @project_targets = [rambafile[PROJECT_TARGET_KEY]] if rambafile[PROJECT_TARGET_KEY] != nil
50
- @project_targets = rambafile[PROJECT_TARGETS_KEY] if rambafile[PROJECT_TARGETS_KEY] != nil
51
-
52
- @test_targets = [rambafile[TEST_TARGET_KEY]] if rambafile[TEST_TARGET_KEY] != nil
53
- @test_targets = rambafile[TEST_TARGETS_KEY] if rambafile[TEST_TARGETS_KEY] != nil
49
+ @test_targets = [rambafile[TEST_TARGET_KEY]] if rambafile[TEST_TARGET_KEY]
50
+ @test_targets = rambafile[TEST_TARGETS_KEY] if rambafile[TEST_TARGETS_KEY]
54
51
 
55
52
  # Custom parameters
56
53
  @custom_parameters = options[:custom_parameters]
57
54
 
58
55
  # Options adaptation
59
56
  @author = options[:author] if options[:author]
60
- @project_targets = options[:module_targets].split(',') if options[:module_targets]
57
+ @project_targets = options[:project_targets].split(',') if options[:project_targets]
61
58
  @test_targets = options[:test_targets].split(',') if options[:test_targets]
59
+
60
+ setup_file_and_group_paths(options[:module_file_path], options[:module_group_path], PATH_TYPE_MODULE)
61
+ setup_file_and_group_paths(options[:test_file_path], options[:test_group_path], PATH_TYPE_TEST)
62
62
 
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
63
+ # The priority is given to `module_path` and 'test_path' options
64
+ setup_file_and_group_paths(options[:module_path], options[:module_path], PATH_TYPE_MODULE)
65
+ setup_file_and_group_paths(options[:test_path], options[:test_path], PATH_TYPE_TEST)
67
66
 
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
67
+ @podfile_path = rambafile[PODFILE_PATH_KEY] if rambafile[PODFILE_PATH_KEY]
68
+ @cartfile_path = rambafile[CARTFILE_PATH_KEY] if rambafile[CARTFILE_PATH_KEY]
69
+ end
72
70
 
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
71
+ def setup_file_and_group_paths(file_path, group_path, path_type)
72
+ if file_path || group_path
73
+ variable_name = "#{path_type}_file_path"
77
74
 
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
75
+ if file_path || !instance_variable_get("@#{variable_name}")
76
+ file_path = group_path unless file_path
82
77
 
83
- # The priority is given to `module_path` and 'test_path' options
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
78
+ variable_value = file_path.gsub(SLASH_REGEX, '')
79
+ variable_value = Pathname.new(variable_value).join(@name)
80
+ instance_variable_set("@#{variable_name}", variable_value)
81
+ end
89
82
 
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
83
+ variable_name = "#{path_type}_group_path"
95
84
 
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
85
+ if group_path || !instance_variable_get("@#{variable_name}")
86
+ group_path = file_path unless group_path
87
+
88
+ variable_value = group_path.gsub(SLASH_REGEX, '')
89
+ variable_value = Pathname.new(variable_value).join(@name)
90
+ instance_variable_set("@#{variable_name}", variable_value)
91
+ end
92
+ end
98
93
  end
99
94
  end
100
- end
95
+ end
@@ -6,12 +6,12 @@ module Generamba
6
6
  class ContentGenerator
7
7
 
8
8
  # Generates and returns a filename and a body of a specific code file.
9
- # @param file []Hash<String,String>] A hashmap with template's filename and filepath
10
- # @param code_module [CodeModule] The model describing a generating module
9
+ # @param file [Hash<String,String>] A hashmap with template's filename and filepath
10
+ # @param scope [Hash<String,String>] A hashmap with module info
11
11
  # @param template [ModuleTemplate] The model describing a Generamba template used for code generation
12
12
  #
13
13
  # @return [String], [String] The generated file_name and body
14
- def self.create_file(file, code_module, template)
14
+ def self.create_file(file, scope, template)
15
15
  file_source = IO.read(template.template_path.join(file[TEMPLATE_FILE_PATH_KEY]))
16
16
  Liquid::Template.file_system = Liquid::LocalFileSystem.new(template.template_path.join('snippets'), '%s.liquid')
17
17
 
@@ -20,28 +20,8 @@ module Generamba
20
20
 
21
21
  file_basename = File.basename(file[TEMPLATE_FILE_NAME_KEY])
22
22
 
23
- module_info = {
24
- 'name' => code_module.name,
25
- 'description' => code_module.description,
26
- 'project_name' => code_module.project_name,
27
- 'project_targets' => code_module.project_targets,
28
- 'test_targets' => code_module.test_targets
29
- }
30
-
31
- developer = {
32
- 'name' => code_module.author,
33
- 'company' => code_module.company
34
- }
35
-
36
- scope = {
37
- 'year' => code_module.year,
38
- 'date' => Time.now.strftime('%d/%m/%Y'),
39
- 'developer' => developer,
40
- 'module_info' => module_info,
41
- 'prefix' => code_module.prefix,
42
- 'custom_parameters' => code_module.custom_parameters
43
- }
44
-
23
+ module_info = scope['module_info']
24
+
45
25
  module_info['file_basename'] = file_basename
46
26
 
47
27
  file_name = filename_template.render(scope)
@@ -55,9 +35,9 @@ module Generamba
55
35
  end
56
36
 
57
37
  def self.file_name_template(file)
58
- template_default_text = "{{ prefix }}{{ module_info.name }}{{ module_info.file_basename }}"
59
- template_text = file[TEMPLATE_FILE_FILENAME_KEY] || template_default_text
38
+ template_default_text = '{{ prefix }}{{ module_info.name }}{{ module_info.file_basename }}'
39
+ template_text = file[TEMPLATE_FILE_CUSTOM_NAME_KEY] || template_default_text
60
40
  return Liquid::Template.parse(template_text)
61
41
  end
62
42
  end
63
- end
43
+ end
@@ -6,10 +6,18 @@ module Generamba
6
6
  class ModuleTemplate
7
7
  attr_reader :template_name, :template_path, :code_files, :test_files, :dependencies
8
8
 
9
- def initialize(name)
9
+ def initialize(name, options = nil)
10
10
  spec_path = TemplateHelper.obtain_spec(name)
11
- spec = YAML.load_file(spec_path)
12
-
11
+
12
+ unless options
13
+ spec = YAML.load_file(spec_path)
14
+ else
15
+ spec_source = IO.read(spec_path)
16
+ spec_template = Liquid::Template.parse(spec_source)
17
+ spec_content = spec_template.render(options)
18
+ spec = YAML.load(spec_content)
19
+ end
20
+
13
21
  @code_files = spec[TEMPLATE_CODE_FILES_KEY]
14
22
  @test_files = spec[TEMPLATE_TEST_FILES_KEY]
15
23
  @template_name = spec[TEMPLATE_NAME_KEY]
@@ -12,6 +12,8 @@ module Generamba
12
12
  PROJECT_FILE_PATH_KEY = 'project_file_path'
13
13
  PROJECT_GROUP_PATH_KEY = 'project_group_path'
14
14
 
15
+ PRODUCT_MODULE_NAME_KEY = 'product_module_name'
16
+
15
17
  TEST_TARGET_KEY = 'test_target'
16
18
  TEST_TARGETS_KEY = 'test_targets'
17
19
  TEST_FILE_PATH_KEY = 'test_file_path'
@@ -26,4 +28,4 @@ module Generamba
26
28
  TEMPLATE_DECLARATION_LOCAL_KEY = 'local'
27
29
  TEMPLATE_DECLARATION_GIT_KEY = 'git'
28
30
  TEMPLATE_DECLARATION_BRANCH_KEY = 'branch'
29
- end
31
+ end