gena 0.0.3

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1132a8708af7af16d2e20dd1114e2e253277a6e8
4
+ data.tar.gz: 9ee0807c7381450695de01afea5a35e0e9935746
5
+ SHA512:
6
+ metadata.gz: c7cfc967fc49c2c6e31fd4a9e4bd6c0b5c67dccf4f510413ea764ddbf0f27c88d8106357029f8478712ed09bacfce634ecc7aa577193a2dbfed5bd4e3dc9fc91
7
+ data.tar.gz: 4149b9b7be195a736f2c43e9079bb84b1387bfee3c54b136e3b109e515facb1f95187db9e39364584434f1b8b87e6043f8a73ad904c084ded7ae5d5b77197106
data/bin/gena ADDED
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'gena'
4
+
5
+ unless system "which xc-resave >> /dev/null"
6
+ raise "\nPlease install xc-resave utility first. Run: \n\nbrew install alexgarbarev/core/xc-resave\n\n"
7
+ end
8
+
9
+ TEMPLATES_FOLDER = "Templates"
10
+
11
+
12
+ # Include all template code files
13
+ Dir["#{TEMPLATES_FOLDER}/**/*.rb"].each do |file|
14
+ require "./#{file}"
15
+ end
16
+
17
+ cli = GenerateCli.new
18
+ options = cli.parse_arguments
19
+
20
+ if options[:cleanup]
21
+ ramba_adapter = RambaAdapter.new(nil, nil)
22
+ ramba_adapter.delete_default_template
23
+ ramba_adapter.delete_rambafile
24
+ exit
25
+ end
26
+
27
+ config = Generate::Config.new
28
+ config.load_plist_config
29
+
30
+ template = Generate::BaseTemplate.new_from_options(options, config)
31
+
32
+ unless template.class.generamba?
33
+ template.run
34
+ exit
35
+ end
36
+
37
+ ramba_adapter = RambaAdapter.new(template, config)
38
+ ramba_adapter.create_rambafile
39
+ ramba_adapter.regenerate_default_template
40
+
41
+ cli_command = ramba_adapter.generamba_gen_command(options)
42
+ cli_command << " && #{__FILE__} --cleanup"
43
+ cli_command << " && xc-resave #{config.xcode_project_path}"
44
+
45
+
46
+ if options[:verbose]
47
+ puts "#{cli_command}"
48
+ end
49
+
50
+ exec "#{cli_command}"
51
+
@@ -0,0 +1,91 @@
1
+ module Generate
2
+
3
+ class BaseTemplate
4
+
5
+ def initialize(options, config)
6
+ @options = options
7
+ @config = config
8
+ end
9
+
10
+ def options
11
+ @options
12
+ end
13
+
14
+ def config
15
+ @config
16
+ end
17
+
18
+ def type_config
19
+ @config['template_options'][self.class.template_name.downcase]
20
+ end
21
+
22
+ def self.template_name
23
+ self.name.split('::').last || ''
24
+ end
25
+
26
+ def sources_absolute_path
27
+ "#{@config['sources_dir']}/#{sources_path}"
28
+ end
29
+
30
+ def tests_absolute_path
31
+ "#{@config['tests_dir']}/#{tests_path}"
32
+ end
33
+
34
+ def template_parameters_string
35
+ self.template_parameters.map{|k,v| "#{k}:#{v}"}.join(' ')
36
+ end
37
+
38
+ def self.descendants
39
+ ObjectSpace.each_object(Class).select { |klass| klass < self }
40
+ end
41
+
42
+ def self.new_from_options(options, config)
43
+ template_class = Object.const_get("Generate::#{options[:template_type].capitalize_first}")
44
+ template_class.new(options, config.config)
45
+ end
46
+
47
+ def self.name_required?(options)
48
+ template_class = Object.const_get("Generate::#{options[:template_type].capitalize_first}")
49
+ template_class.generamba?
50
+ end
51
+
52
+ ##############
53
+ ####### Methods to override in subclass
54
+ ##############
55
+
56
+ def self.register_options(opts, options)
57
+
58
+ end
59
+
60
+ def sources_path
61
+ ''
62
+ end
63
+
64
+ def tests_path
65
+ sources_path
66
+ end
67
+
68
+ def template_source_files
69
+ []
70
+ end
71
+
72
+ def template_test_files
73
+ []
74
+ end
75
+
76
+ # Custom parameters for generamba
77
+ def template_parameters
78
+ { }
79
+ end
80
+
81
+ def self.generamba?
82
+ true
83
+ end
84
+
85
+ def run
86
+
87
+ end
88
+
89
+ end
90
+
91
+ end
data/lib/config.rb ADDED
@@ -0,0 +1,38 @@
1
+
2
+ require 'plist'
3
+ require 'yaml'
4
+ require 'generamba'
5
+
6
+ module Generate
7
+
8
+ class Config
9
+
10
+ @config = {}
11
+
12
+ def load_plist_config()
13
+ @config = Plist::parse_xml('generate.plist')
14
+ end
15
+
16
+ def to_rambafile()
17
+ rambafile_content = {}
18
+ rambafile_content['project_name'] = @config['project_name']
19
+ rambafile_content['xcodeproj_path'] = "#{@config['project_name']}.xcodeproj"
20
+ rambafile_content['company'] = @config['company']
21
+ rambafile_content['prefix'] = @config['prefix']
22
+ rambafile_content['project_target'] = @config['project_target']
23
+ rambafile_content['test_target'] = @config['test_target']
24
+ rambafile_content['templates'] = [ { name: 'default'}]
25
+ rambafile_content.to_yaml
26
+ end
27
+
28
+ def config()
29
+ @config
30
+ end
31
+
32
+ def xcode_project_path()
33
+ "#{@config['project_name']}.xcodeproj"
34
+ end
35
+
36
+ end
37
+
38
+ end
data/lib/gena.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'optparse'
2
+ require 'yaml'
3
+ require 'generamba'
4
+
5
+
6
+ require_relative 'config'
7
+ require_relative 'base_template'
8
+ require_relative 'ramba_adapter'
9
+ require_relative 'string_utils'
10
+ require_relative 'generate_cli'
@@ -0,0 +1,59 @@
1
+ require 'optparse'
2
+ require_relative 'base_template'
3
+
4
+ class GenerateCli
5
+
6
+ def all_types
7
+ Generate::BaseTemplate.descendants.map { |clazz| clazz.template_name.downcase }.join(', ')
8
+ end
9
+
10
+
11
+ def parse_arguments
12
+ options = {}
13
+
14
+ parser = OptionParser.new do |opts|
15
+ opts.banner = "Usage: gena TEMPLATE MODULE_NAME [options]"
16
+ opts.separator ""
17
+ opts.separator "TEMPLATE is be one of [#{all_types}]"
18
+ opts.separator ""
19
+ opts.separator "Options are:"
20
+
21
+ Generate::BaseTemplate.descendants.each do |clazz|
22
+ clazz.register_options(opts, options)
23
+ end
24
+ opts.on('-h', '--help', 'Prints help') { puts opts; exit }
25
+ opts.on('-v', '--verbose') { options[:verbose] = true }
26
+ opts.on('--tests', 'Generate tests if possible') { options[:generate_tests] = true }
27
+ opts.on('--cleanup', 'Removes temporary data instead of generation') { options[:cleanup] = true; return options; }
28
+ end
29
+
30
+ parser.parse!
31
+
32
+ type = ARGV[0]
33
+ unless type
34
+ puts "\n- You should specify TEMPLATE to proceed\n\n----\n\n"
35
+ puts parser
36
+ exit
37
+ end
38
+ ARGV.delete_at(0)
39
+ options[:template_type] = type
40
+
41
+ name = ARGV.pop
42
+
43
+ name_required = Generate::BaseTemplate.name_required?(options)
44
+
45
+ if !name && name_required
46
+ puts "\n- You should specify MODULE_NAME to proceed with #{type} template\n\n----\n\n"
47
+ puts parser
48
+ exit
49
+ end
50
+
51
+ if name
52
+ name = name.capitalize_first
53
+ options[:name] = name
54
+ end
55
+
56
+ options
57
+ end
58
+
59
+ end
@@ -0,0 +1,94 @@
1
+
2
+ require_relative 'config'
3
+
4
+ class RambaAdapter
5
+
6
+ RAMBAFILE_NAME = 'Rambafile'
7
+ RAMBA_TEMPLATES_FOLDER = 'Templates'
8
+
9
+ @template
10
+ @config
11
+
12
+ def initialize(template, config)
13
+ @template = template
14
+ @config = config
15
+ end
16
+
17
+ def create_rambafile
18
+ File.open("./#{RAMBAFILE_NAME}", 'w') {|f| f.write @config.to_rambafile }
19
+ end
20
+
21
+ def delete_rambafile
22
+ FileUtils.rm("./#{RAMBAFILE_NAME}")
23
+ end
24
+
25
+ def regenerate_default_template
26
+ delete_default_template
27
+ create_default_template
28
+ end
29
+
30
+ def delete_default_template
31
+ FileUtils.rm_rf "#{RAMBA_TEMPLATES_FOLDER}/default"
32
+ end
33
+
34
+ def create_default_template
35
+ #Create folders
36
+ dst_dir = "#{RAMBA_TEMPLATES_FOLDER}/default"
37
+ FileUtils.mkdir_p dst_dir
38
+ type_dir = template_directory(@template)
39
+
40
+ #Copy files..
41
+ copy_if_needed "#{type_dir}/Code", "#{dst_dir}/Code"
42
+ copy_if_needed "#{type_dir}/Tests", "#{dst_dir}/Tests"
43
+ copy_if_needed "#{type_dir}/snippets", "#{dst_dir}/snippets"
44
+
45
+ #Generate rambaspec
46
+ generate_rambaspec("#{dst_dir}/default.rambaspec", @template.options)
47
+ end
48
+
49
+ def generate_rambaspec(output, options)
50
+ rambaspec = {}
51
+
52
+ rambaspec['name'] = 'default'
53
+ rambaspec['summary'] = "Template generated from #{@template} template class"
54
+ rambaspec['author'] = 'generate.rb'
55
+ rambaspec['version'] = '1.0.0'
56
+ rambaspec['license'] = 'MIT'
57
+
58
+ rambaspec['code_files'] = @template.template_source_files
59
+ rambaspec['test_files'] = @template.template_test_files if options[:generate_tests]
60
+
61
+ File.open(output, 'w') {|f| f.write rambaspec.to_yaml( :UseFold => true) }
62
+ end
63
+
64
+ def template_directory(template)
65
+ "#{TEMPLATES_FOLDER}/#{template.class.template_name}"
66
+ end
67
+
68
+ def copy_if_needed(src, dst)
69
+ FileUtils.cp_r src, dst if File.exists? src
70
+ puts "copied #{src} #{dst} (#{File.exists? src})"
71
+ end
72
+
73
+ def generamba_gen_command(options)
74
+ sources_path = @template.sources_absolute_path
75
+ test_path = @template.tests_absolute_path
76
+ custom_params = @template.template_parameters_string
77
+
78
+ cli_command = "generamba gen #{options[:name]} default"
79
+
80
+ if sources_path.length > 0
81
+ cli_command << " --module_path #{sources_path}"
82
+ end
83
+
84
+ if test_path.length > 0
85
+ cli_command << " --test_path #{test_path}"
86
+ end
87
+
88
+ if custom_params.length > 0
89
+ cli_command << " --custom_parameters #{custom_params}"
90
+ end
91
+
92
+ end
93
+
94
+ end
@@ -0,0 +1,18 @@
1
+ class String
2
+ def include_one_of?(*array)
3
+ array.flatten.each do |str|
4
+ return true if self.include?(str)
5
+ end
6
+ return false
7
+ end
8
+ def capitalize_first
9
+ self.slice(0,1).capitalize + self.slice(1..-1)
10
+ end
11
+ def capitalize_first!
12
+ self.replace(self.capitalize_first)
13
+ end
14
+ def lowercase_first
15
+ str = to_s
16
+ str[0,1].downcase + str[1..-1]
17
+ end
18
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gena
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Aleksey Garbarev
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-12-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: generamba
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.3.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.3.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: plist
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.2'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 3.2.0
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '3.2'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 3.2.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: ttfunk
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '1.4'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 1.4.0
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.4'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 1.4.0
73
+ description: Depends on Generamba it generates templates for generamba :)
74
+ email: alex.garbarev@gmail.com
75
+ executables:
76
+ - gena
77
+ extensions: []
78
+ extra_rdoc_files: []
79
+ files:
80
+ - bin/gena
81
+ - lib/base_template.rb
82
+ - lib/config.rb
83
+ - lib/gena.rb
84
+ - lib/generate_cli.rb
85
+ - lib/ramba_adapter.rb
86
+ - lib/string_utils.rb
87
+ homepage: http://rubygems.org/gems/cc_generate
88
+ licenses:
89
+ - MIT
90
+ metadata: {}
91
+ post_install_message:
92
+ rdoc_options: []
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ requirements: []
106
+ rubyforge_project:
107
+ rubygems_version: 2.6.8
108
+ signing_key:
109
+ specification_version: 4
110
+ summary: iOS code generation tool
111
+ test_files: []