origen_app_generators 0.4.0 → 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: c72ec7c295367269fb14603d3d5e0685e27c1302
4
- data.tar.gz: 2b017360b1a782945a2bd950c07667eb4f12951f
3
+ metadata.gz: 6bd751932ba648a39c5f1b2d8cd61d1cc224d739
4
+ data.tar.gz: a71ffc595f1da44df412126be1bcaf68e5f369e7
5
5
  SHA512:
6
- metadata.gz: 4b8a4fafa1c1f106b10dcc34311277e7fe986dcc5d65c485e4e0a9135b69bd0d41a5ee2e54a20619687b23fbb68be0047c8e599d97402ad096c7024dc6fa5463
7
- data.tar.gz: 7575ca6ad90c50c62fc4561cf608f2c7c36423dd3d8d29a73a8206ab064346a4ab55d01c2ef205002a7b6da5f8c0b8952e2dd717535b5a9a64600292f23eac58
6
+ metadata.gz: 3990cdbb27929fb3fe39665776ddd6ad2d559ff8ba65c158e9761fe47aa8f004b1bd9ba8142a8721d4103c4e4e6c0f492ed23671a3cd105e5ae03d479160699b
7
+ data.tar.gz: 442e825f3e580a2edb99c5c32584f69c6665fc5db5015812ed5ece72bf7353ce7a10576554ecb6fef7c8f6f5440ac4402ce0d36b3f46024d07cf018b4b9db3e5
@@ -5,34 +5,34 @@
5
5
  # that any unintended dependencies on a real app environment will
6
6
  # be highlighted during test.
7
7
 
8
- # Path to Origen lib dir must be supplied as first arg
9
- $LOAD_PATH.unshift ARGV[0]
10
- $LOAD_PATH.unshift "#{File.expand_path(File.dirname(__FILE__))}/../"
8
+ $LOAD_PATH.unshift ARGV.shift
9
+ $LOAD_PATH.unshift ARGV.shift
10
+ $LOAD_PATH.unshift ARGV.shift
11
11
 
12
12
  require 'fileutils'
13
+ require 'origen'
13
14
 
14
15
  # Prevent the bundle from loading by running this outside of the
15
- if RUBY_PLATFORM == 'i386-mingw32'
16
- tmp_dir = 'C:/tmp/origen_app_generators/new_app'
16
+ if Origen.os.windows?
17
+ tmp_dir = 'C:/tmp/my_app_generators/new_app'
17
18
  else
18
- tmp_dir = '/tmp/origen_app_generators/new_app'
19
+ tmp_dir = '/tmp/my_app_generators/new_app'
19
20
  end
20
21
  FileUtils.rm_rf tmp_dir if File.exist?(tmp_dir)
21
22
  FileUtils.mkdir_p tmp_dir
22
23
 
23
24
  begin
24
- require 'origen'
25
25
  Dir.chdir tmp_dir do
26
- # For some reason this is not being defined by required origen anymore
26
+ # For some reason this is not being defined by require origen anymore
27
27
  User = Origen::Users::User unless defined? User
28
- gem 'byebug'
28
+ require 'byebug'
29
29
  require 'origen_app_generators'
30
- if ARGV[1] == 'invoke'
31
- OrigenAppGenerators.invoke('tmp')
32
- else
33
- eval(ARGV[1]).start ['tmp']
34
- end
30
+ load_generators = ARGV.shift
31
+ OrigenAppGenerators.unload_generators unless ARGV[0]
32
+ require load_generators if File.exist?(load_generators)
33
+
34
+ OrigenAppGenerators.invoke('tmp')
35
35
  end
36
36
  ensure
37
- system "mv #{tmp_dir}/tmp tmp"
37
+ FileUtils.mv "#{tmp_dir}/tmp", 'tmp' if File.exist?("#{tmp_dir}/tmp")
38
38
  end
data/bin/fix_my_workspace CHANGED
@@ -2,9 +2,17 @@
2
2
  $VERBOSE = nil # Don't care about world writable dir warnings and the like
3
3
 
4
4
  if $_fix_my_workspace_version_check
5
- $_fix_my_workspace_version = '0.6.0'
5
+ $_fix_my_workspace_version = '0.7.0'
6
6
  else
7
- require 'origen'
7
+ if File.exist?(File.expand_path('../../lib/origen.rb', __FILE__))
8
+ # If this script is being run from within an origen-core workspace, use that Origen-core,
9
+ # not the system-installed origen-core version.
10
+ $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
11
+ require 'origen'
12
+ else
13
+ # Use system-installed Origen (the gem in system Ruby)
14
+ require 'origen'
15
+ end
8
16
 
9
17
  if !Origen.site_config.gem_manage_bundler
10
18
  puts 'Sorry but you have opted to manage Bundler yourself via your Origen site config, and this means'
@@ -37,6 +37,13 @@ class OrigenAppGeneratorsApplication < Origen::Application
37
37
  # In parallel go and edit config/version.rb to enable the semantic version code.
38
38
  config.semantically_version = true
39
39
 
40
+ config.shared = {
41
+ #patterns: "pattern",
42
+ #templates: "templates",
43
+ #programs: "program",
44
+ command_launcher: "config/shared_commands.rb"
45
+ }
46
+
40
47
  # An example of how to set application specific LSF parameters
41
48
  #config.lsf.project = "msg.te"
42
49
 
@@ -0,0 +1,170 @@
1
+ # The requested command is passed in here as @command
2
+ case @command
3
+
4
+ when "app_gen:test"
5
+ options = {}
6
+
7
+ opt_parser = OptionParser.new do |opts|
8
+ opts.banner = <<-END
9
+ Test the generators by emulating the 'origen new' command execution and building the new
10
+ application into the tmp directory.
11
+
12
+ Usage: origen app_gen:test [options]
13
+ END
14
+ opts.on('-d', '--debugger', 'Enable the debugger') { options[:debugger] = true }
15
+ opts.on('-i', '--inputs INDEX', Integer, "Apply the set of test inputs defined in #{Origen.app.namespace}::TEST_INPUTS[INDEX]") { |f| options[:inputs] = f }
16
+ opts.on('-r', '--regression', "Run all sets of test inputs defined in #{Origen.app.namespace}::TEST_INPUTS[INDEX]") { options[:regression] = true }
17
+ opts.on('-a', '--all_generators', "Include the generators from Origen core") { options[:all_generators] = true }
18
+ opts.separator ''
19
+ opts.on('-h', '--help', 'Show this message') { puts opts; exit }
20
+ end
21
+
22
+ opt_parser.orig_parse! ARGV
23
+
24
+ FileUtils.rm_rf "#{Origen.root}/tmp" if File.exist?("#{Origen.root}/tmp")
25
+
26
+ if options[:inputs] || options[:regression]
27
+ if options[:regression]
28
+ inputs = Origen.app.namespace.constantize::TEST_INPUTS
29
+ else
30
+ inputs = [Origen.app.namespace.constantize::TEST_INPUTS[options[:inputs].to_i]]
31
+ end
32
+
33
+ prefix = 'bundle exec ' unless Origen.site_config.gem_manage_bundler
34
+
35
+ overall_fail = false
36
+
37
+ inputs.each do |vals|
38
+ test_failed = false
39
+ post_build_operations = Array(vals.pop)
40
+ target_load_test_required = false
41
+ post_build_operations = post_build_operations.map do |op|
42
+ if op.to_s == 'default'
43
+ target_load_test_required = true
44
+ ['origen -v',
45
+ 'origen lint --no-correct',
46
+ 'bundle exec rake new_app_tests:load_target',
47
+ 'origen web compile --no-serve'
48
+ ]
49
+ elsif op.to_s == 'load_target'
50
+ target_load_test_required = true
51
+ 'rake new_app_tests:load_target'
52
+ else
53
+ op
54
+ end
55
+ end.flatten
56
+
57
+ str = vals.map { |i| i == :default ? "\n" : "#{i}\n" }.join('')
58
+ cmd = "#{prefix} origen app_gen:test"
59
+ cmd += ' --debugger' if options[:debugger]
60
+ cmd += ' --all_generators' if options[:all_generators]
61
+ passed = false
62
+ Bundler.with_clean_env do
63
+ passed = system "echo '#{str}' | #{cmd}"
64
+ end
65
+
66
+ if passed
67
+ # The app is successfully built, now see if it works...
68
+ unless post_build_operations.empty?
69
+ if target_load_test_required
70
+ FileUtils.cp "#{Origen.root!}/lib/tasks/new_app_tests.rake", 'tmp/lib/tasks'
71
+ end
72
+
73
+ operation_failed = false
74
+ Bundler.with_clean_env do
75
+ Dir.chdir "#{Origen.root}/tmp" do
76
+ post_build_operations.each_with_index do |op, i|
77
+ if i == 0 && !Origen.site_config.gem_manage_bundler
78
+ system('bundle')
79
+ end
80
+ Origen.log.info "Running command: #{op}"
81
+ if system("#{prefix}#{op}")
82
+ Origen.log.success "Command passed: #{op}"
83
+ else
84
+ Origen.log.error "Command failed: #{op}"
85
+ operation_failed = true
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ if operation_failed
92
+ if options[:regression]
93
+ overall_fail = true
94
+ else
95
+ Origen.app.stats.report_fail
96
+ exit 1
97
+ end
98
+ end
99
+ end
100
+ else
101
+ Origen.log.error "The generator failed to build!"
102
+ if options[:regression]
103
+ overall_fail = true
104
+ else
105
+ Origen.app.stats.report_fail
106
+ exit 1
107
+ end
108
+ end
109
+ end
110
+
111
+ if options[:regression] && overall_fail
112
+ Origen.app.stats.report_fail
113
+ exit 1
114
+ else
115
+ Origen.app.stats.report_pass
116
+ exit 0
117
+ end
118
+
119
+ else
120
+
121
+ # Launch the generator in a standalone shell,
122
+ # this is to emulate how it will run in real life and cause it to fail if there are
123
+ # any dependencies on running within an Origen app environment
124
+ boot = "#{Origen.root!}/bin/boot.rb"
125
+ origen_lib = "#{Origen.top}/lib"
126
+ app_gen_lib = "#{Origen.root!}/lib"
127
+ app_lib = "#{Origen.root}/lib"
128
+ load_generators = "#{Origen.root}/config/load_generators.rb"
129
+ cmd = "#{boot} #{origen_lib} #{app_gen_lib} #{app_lib} #{load_generators}"
130
+ cmd = "#{cmd} true" if options[:all_generators] || Origen.app.name == :origen_app_generators
131
+ cmd = "ruby #{cmd}" if Origen.os.windows?
132
+ cmd = "bundle exec #{cmd}" unless Origen.site_config.gem_manage_bundler
133
+ # puts cmd
134
+ passed = false
135
+ Bundler.with_clean_env do
136
+ passed = system cmd
137
+ end
138
+ exit passed ? 0 : 1
139
+ end
140
+
141
+ when "app_gen:new"
142
+ options = {}
143
+
144
+ opt_parser = OptionParser.new do |opts|
145
+ opts.banner = <<-END
146
+ Create a new application generator.
147
+
148
+ Usage: origen app_gen:new [options]
149
+ END
150
+ opts.on('-d', '--debugger', 'Enable the debugger') { options[:debugger] = true }
151
+ opts.separator ''
152
+ opts.on('-h', '--help', 'Show this message') { puts opts; exit }
153
+ end
154
+
155
+ opt_parser.orig_parse! ARGV
156
+
157
+ OrigenAppGenerators::New.start []
158
+ exit 0
159
+
160
+ # Always leave an else clause to allow control to fall back through to the Origen command handler.
161
+ # You probably want to also add the command details to the help shown via 'origen -h',
162
+ # you can do this bb adding the required text to @plugin_commands before handing control back to
163
+ # Origen.
164
+ else
165
+ @plugin_commands << <<-EOT
166
+ app_gen:test Test run the 'origen new' command operation using your latest generators
167
+ app_gen:new Create a new application or plugin generator
168
+ EOT
169
+
170
+ end
data/config/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module OrigenAppGenerators
2
- MAJOR = 0
3
- MINOR = 4
2
+ MAJOR = 1
3
+ MINOR = 0
4
4
  BUGFIX = 0
5
5
  DEV = nil
6
6
 
@@ -1,4 +1,5 @@
1
1
  require 'origen'
2
+ require_relative '../config/application.rb'
2
3
  require 'colored'
3
4
  require 'origen_app_generators/base'
4
5
  require 'origen_app_generators/application'
@@ -8,40 +9,71 @@ require 'origen_app_generators/empty_plugin'
8
9
  require 'origen_app_generators/new'
9
10
  require 'origen_app_generators/test_engineering/test_block'
10
11
  require 'origen_app_generators/test_engineering/stand_alone_application'
12
+ require 'origen_app_generators/origen_infrastructure/app_generator_plugin'
11
13
 
12
14
  module OrigenAppGenerators
13
15
  extend Origen::Utility::InputCapture
14
16
 
15
17
  TEST_INPUTS = [
16
- # Empty app
17
- ['0', '0', :default, :default, []],
18
- # Empty plugin
19
- ['0', '1', :default, :default, 'A test block', 'yes', []],
20
- # Stand alone test engineering app
21
- ['1', '0', :default, :default, 'Falcon, Eagle', 'Falcon[ram, atd(2), comm[ram(2), osc](3)], Eagle[ram(2), atd(4)]', ['origen g example']],
22
- # Test module
23
- ['1', '1', :default, :default, 'Test module for all flash IPs', 'FLASH_512K, FLASH_1024K', 'flash', ['origen g example']]
24
- ]
18
+ # 0 - Empty app
19
+ ['0', '0', :default, :default, :default],
20
+ # 1 - Empty plugin
21
+ ['0', '1', :default, :default, 'A test block', 'yes', :default],
22
+ # 2 - Stand alone test engineering app
23
+ ['2', '0', :default, :default, 'Falcon, Eagle', 'Falcon[ram, atd(2), comm[ram(2), osc](3)], Eagle[ram(2), atd(4)]', [:default, 'origen g example']],
24
+ # 3 - Test module
25
+ ['2', '1', :default, :default, 'Test module for all flash IPs', 'FLASH_512K, FLASH_1024K', 'flash', [:default, 'origen g example']],
26
+ # 4 - An app generators plugin
27
+ ['1', '0', :default, :default, 'My application generators', :default]
28
+ ] # END_OF_TEST_INPUTS Don't remove this comment, it is used by the app_gen:new command!
25
29
 
26
- # If adding any new generators manually always add them at the top, but
27
- # generally speaking don't, use 'rake new' to create a new generator instead
30
+ # As you add new generators to this app they will be entered here, this enables the
31
+ # mechanism to register them with the 'origen new' command.
32
+ # You should generally not modify this by hand, instead use the 'origen app_gen:new'
33
+ # command every time you want to create a new generator, and this will be filled in
34
+ # for you.
28
35
  AVAILABLE = {
29
- 'Test Engineering' => [
36
+ 'Test Engineering' => [
30
37
  OrigenAppGenerators::TestEngineering::TestBlock,
31
38
  OrigenAppGenerators::TestEngineering::StandAloneApplication
39
+ ],
40
+ 'Origen Infrastructure' => [
41
+ OrigenAppGenerators::OrigenInfrastructure::AppGeneratorPlugin
32
42
  ]
33
43
  }
34
44
 
45
+ # @api private
46
+ def self.add_generators(new_generators)
47
+ new_generators.each do |domain, gens|
48
+ if generators[domain]
49
+ gens.each { |g| generators[domain].unshift(g) }
50
+ new_generators.delete(domain)
51
+ end
52
+ end
53
+ @generators = new_generators.merge(generators)
54
+ end
55
+
56
+ # @api private
57
+ def self.unload_generators
58
+ @generators = {}
59
+ end
60
+
61
+ # @api private
62
+ def self.generators
63
+ @generators ||= AVAILABLE
64
+ end
65
+
66
+ # @api private
35
67
  def self.invoke(path)
36
68
  puts
37
- puts 'CHOOSE AN ENGINEERING DOMAIN'
69
+ puts 'CHOOSE AN APPLICATION DOMAIN'
38
70
  puts
39
71
  puts "Domain-specific application templates are available for the following areas (enter '0' to build an empty generic one)"
40
72
  puts
41
73
  i = 0
42
74
  accept = [0]
43
75
  puts '0 - Empty / Not listed'
44
- AVAILABLE.reverse_each do |domain, _generators|
76
+ generators.reverse_each do |domain, _generators|
45
77
  i += 1
46
78
  accept << i
47
79
  puts "#{i} - #{domain}"
@@ -65,7 +97,7 @@ module OrigenAppGenerators
65
97
  OrigenAppGenerators::EmptyPlugin.start [path]
66
98
  end
67
99
  else
68
- domain = AVAILABLE.to_a
100
+ domain = generators.to_a
69
101
  domain = domain[domain.size - selection]
70
102
  puts
71
103
  puts "CHOOSE FROM THE FOLLOWING #{domain[0].upcase} APPLICATION TEMPLATES"
@@ -11,6 +11,7 @@ module OrigenAppGenerators
11
11
  get_name
12
12
  get_type
13
13
  get_summary
14
+ @namespace = Origen.app.namespace
14
15
  end
15
16
 
16
17
  def set_type
@@ -22,56 +23,73 @@ module OrigenAppGenerators
22
23
  end
23
24
 
24
25
  def enable
25
- # Add require line
26
- module_declaration = /\nmodule OrigenAppGenerators/
27
- inject_into_file 'lib/origen_app_generators.rb', "require 'origen_app_generators/#{@domain_namespace.underscore}/#{@classname.underscore}'\n",
26
+ available = Origen.app.namespace.constantize::AVAILABLE
27
+ test_inputs = Origen.app.namespace.constantize::TEST_INPUTS
28
+
29
+ # **** Add require line ****
30
+ module_declaration = /\nmodule #{Origen.app.namespace}/
31
+ inject_into_file "lib/#{Origen.app.name}.rb", "require '#{Origen.app.name}/#{@domain_namespace.underscore}/#{@classname.underscore}'\n",
28
32
  before: module_declaration
29
33
 
30
- # Add to the AVAILABLE hash
31
- if OrigenAppGenerators::AVAILABLE[@domain_summary]
34
+ # **** Add to the AVAILABLE hash ****
35
+ if available[@domain_summary]
32
36
  existing_domain = /\s*('|")#{@domain_summary}('|") => \[\s*\n/
33
- inject_into_file 'lib/origen_app_generators.rb', " OrigenAppGenerators::#{@domain_namespace}::#{@classname},\n",
37
+ inject_into_file "lib/#{Origen.app.name}.rb", " #{Origen.app.namespace}::#{@domain_namespace}::#{@classname},\n",
34
38
  after: existing_domain
35
39
  else
36
40
  new_domain = <<-END
37
41
  '#{@domain_summary}' => [
38
- OrigenAppGenerators::#{@domain_namespace}::#{@classname},
42
+ #{Origen.app.namespace}::#{@domain_namespace}::#{@classname},
39
43
  ],
40
44
  END
41
45
  available_hash = /AVAILABLE = {\s*\n/
42
- inject_into_file 'lib/origen_app_generators.rb', new_domain, after: available_hash
46
+ inject_into_file "lib/#{Origen.app.name}.rb", new_domain, after: available_hash
43
47
  end
44
- end
45
48
 
46
- # Can't compile this as contains some final ERB, so substitute instead
47
- def customize_doc_page
48
- file = filelist[:doc_info][:dest]
49
- gsub_file file, 'TITLE_GOES_HERE', @title
50
- if @type == :plugin
51
- gsub_file file, 'INTRO_GOES_HERE', "This generates a customized version of the [Generic Plugin](<%= path 'origen_app_generators/plugin' %>)."
49
+ # **** Add a starter set of test inputs ****
50
+ # First work out what the selection numbers will be for the new generator
51
+ if available[@domain_summary]
52
+ first = available.size - available.find_index { |k, _| k == @domain_summary }
53
+ second = available[@domain_summary].size
52
54
  else
53
- gsub_file file, 'INTRO_GOES_HERE', "This generates a customized version of the [Generic Application](<%= path 'origen_app_generators/application' %>)."
55
+ first = available.size + 1
56
+ second = 0
54
57
  end
58
+ inputs = "\n # #{test_inputs.size} - #{@domain_namespace}::#{@classname}\n"
59
+ if @parentclass == 'Plugin'
60
+ inputs += " ['#{first}', '#{second}', :default, :default, 'A cool plugin', 'yes', :default]"
61
+ else
62
+ inputs += " ['#{first}', '#{second}', :default, :default, :default]"
63
+ end
64
+ inputs = ",#{inputs}" unless test_inputs.empty?
65
+ end_of_test_inputs = /\n\s*]\s*#\s*END_OF_TEST_INPUTS/
66
+ inject_into_file "lib/#{Origen.app.name}.rb", inputs, before: end_of_test_inputs
55
67
  end
56
68
 
69
+ # Can't compile this as contains some final ERB, so substitute instead
70
+ # def customize_doc_page
71
+ # file = filelist[:doc_info][:dest]
72
+ # gsub_file file, 'TITLE_GOES_HERE', @title
73
+ # if @type == :plugin
74
+ # gsub_file file, 'INTRO_GOES_HERE', "This generates a customized version of the [Generic Plugin](<%= path 'origen_app_generators/plugin' %>)."
75
+ # else
76
+ # gsub_file file, 'INTRO_GOES_HERE', "This generates a customized version of the [Generic Application](<%= path 'origen_app_generators/application' %>)."
77
+ # end
78
+ # end
79
+
57
80
  def conclude
81
+ system "origen lint #{Origen.root}/lib/#{Origen.app.name}.rb"
58
82
  puts
59
83
  puts "New generator created at: #{filelist[:generator][:dest]}"
60
84
  puts
61
85
  puts "Create any template files you need for this generator in: #{filelist[:templates_dir][:dest]}"
62
86
  puts
63
- puts "Before you go add some documentation about what this generates to: templates/web/origen_app_generators/origen_app_generators/#{@domain_namespace.underscore}/#{@classname.underscore}.md.erb"
64
- puts
87
+ # puts "Before you go add some documentation about what this generates to: templates/web/origen_app_generators/origen_app_generators/#{@domain_namespace.underscore}/#{@classname.underscore}.md.erb"
88
+ # puts
65
89
  end
66
90
 
67
91
  protected
68
92
 
69
- def existing_domains
70
- OrigenAppGenerators::AVAILABLE.keys.map do |key|
71
- key.sub(/ Engineering$/, '')
72
- end
73
- end
74
-
75
93
  def get_summary
76
94
  puts
77
95
  puts 'DESCRIBE YOUR NEW GENERATOR IN A FEW WORDS'
@@ -100,7 +118,7 @@ module OrigenAppGenerators
100
118
  @classname = get_text(single: true).split('::').last
101
119
  unless @classname.empty?
102
120
  if @classname.length >= 3
103
- valid = valid_constant?("OrigenAppGenerators::#{@domain_namespace}::#{@classname}")
121
+ valid = valid_constant?("#{Origen.app.namespace}::#{@domain_namespace}::#{@classname}")
104
122
  end
105
123
  unless valid
106
124
  puts 'That class name is not valid :-('
@@ -113,24 +131,24 @@ module OrigenAppGenerators
113
131
 
114
132
  def get_domain
115
133
  puts
116
- puts 'WHAT ENGINEERING DOMAIN WILL YOUR NEW APP TEMPLATE APPLY TO?'
134
+ puts 'WHAT APPLICATION DOMAIN WILL YOUR NEW APP TEMPLATE APPLY TO?'
117
135
  puts
118
- puts "Enter something like 'Test', 'Design', 'Product', etc."
136
+ puts "Enter something like 'Test Engineering', 'Design', etc."
119
137
  puts
120
138
  domain = get_text(single: true)
121
- domain = domain.sub(/ Engineering$/i, '').titleize
122
- @domain_summary = "#{domain} Engineering"
139
+ domain = domain.titleize
140
+ @domain_summary = domain
123
141
  @domain_namespace = @domain_summary.gsub(' ', '')
124
142
  end
125
143
 
126
144
  def filelist
127
145
  @filelist ||= {
128
146
  generator: { source: 'generator.rb',
129
- dest: "lib/origen_app_generators/#{@domain_namespace.underscore}/#{@classname.underscore}.rb" },
147
+ dest: "lib/#{Origen.app.name}/#{@domain_namespace.underscore}/#{@classname.underscore}.rb" },
130
148
  templates_dir: { dest: "templates/app_generators/#{@domain_namespace.underscore}/#{@classname.underscore}",
131
149
  type: :directory },
132
- doc_info: { source: 'info.md.erb',
133
- dest: "templates/web/origen_app_generators/#{@domain_namespace.underscore}/#{@classname.underscore}.md.erb" }
150
+ # doc_info: { source: 'info.md.erb',
151
+ # dest: "templates/web/#{Origen.app.name}/#{@domain_namespace.underscore}/#{@classname.underscore}.md.erb" }
134
152
  }
135
153
  end
136
154
  end
@@ -0,0 +1,103 @@
1
+ module OrigenAppGenerators
2
+ module OrigenInfrastructure
3
+ # Generates a generic application shell
4
+ class AppGeneratorPlugin < Plugin
5
+ desc "A plugin to make your own application templates available through the 'origen new' command"
6
+
7
+ def initialize(*args)
8
+ @audience = :internal
9
+ @validate_release_tests = ['origen app_gen:test --regression']
10
+ super
11
+ end
12
+
13
+ # Any methods that are not protected will get invoked in the order that they are
14
+ # defined when the generator is run, method naming is irrelevant unless you want
15
+ # to override a method that is defined by the parent class
16
+
17
+ def get_user_input
18
+ # The methods to get the common user input that applies to all applications will
19
+ # get called at the start automatically, you have a chance here to ask any additional
20
+ # questions that are specific to the type of application being generated
21
+ end
22
+
23
+ def generate_files
24
+ @runtime_dependencies = [
25
+ ['origen_app_generators', ">= #{Origen.app!.version}"]
26
+ ]
27
+ @post_runtime_dependency_comments = [
28
+ 'DO NOT ADD ANY ADDITIONAL RUNTIME DEPENDENCIES HERE, WHEN THESE GENERATORS',
29
+ 'ARE INVOKED TO GENERATE A NEW APPLICATION IT WILL NOT BE LAUNCHED FROM WITHIN',
30
+ 'A BUNDLED ENVIRONMENT.',
31
+ '',
32
+ 'THEREFORE GENERATORS MUST NOT RELY ON ANY 3RD PARTY GEMS THAT ARE NOT',
33
+ 'PRESENT AS PART OF A STANDARD ORIGEN INSTALLATION - I.E. YOU CAN ONLY RELY',
34
+ 'ON THE GEMS THAT ORIGEN ITSELF DEPENDS ON.'
35
+ ]
36
+ # Calling this will build all files, directories and symlinks contained in the
37
+ # hash returned by the filelist method
38
+ build_filelist
39
+ end
40
+
41
+ def modify_files
42
+ # If you want to modify any of the generated files you can do so now, you have access
43
+ # to all of the Thor Action methods described here:
44
+ # http://www.rubydoc.info/github/wycats/thor/Thor/Actions
45
+ # See the enable method in lib/app_generators/new.rb for some examples of using these.
46
+ end
47
+
48
+ def conclude
49
+ # Print out anything you think the user should know about their new application at the end
50
+ puts "New app created at: #{destination_root}"
51
+ puts
52
+ puts 'Create your first generator by running this command within your new app:'
53
+ puts ' origen app_gen:new'
54
+ puts
55
+ end
56
+
57
+ protected
58
+
59
+ # Defines the filelist for the generator, the default list is inherited from the
60
+ # parent class (Plugin).
61
+ # The filelist can contain references to generate files, directories or symlinks in the
62
+ # new application.
63
+ #
64
+ # Generally to make your generator more maintainable try and re-use as much as possible
65
+ # from the parent generator, this means that your generator will automatically stay up
66
+ # to date with the latest conventions
67
+ #
68
+ # The master templates live in templates/app_generators/plugin, but
69
+ # DO NOT MODIFY THESE FILES DIRECTLY.
70
+ # Either add or remove things post-generation in the modify_files method or copy the
71
+ # master file to the equivalent sub-directory of templates/app_generators/origen_infrastructure_engineering/app_generator_plugin
72
+ # which will override the version in the master directory.
73
+ #
74
+ # Additional files can be added or removed from the filelist as shown below.
75
+ def filelist
76
+ @filelist ||= begin
77
+ list = super # Always pick up the parent list
78
+ # Example of how to remove a file from the parent list
79
+ # list.delete(:web_doc_layout)
80
+ list.delete(:lib_readme)
81
+ list.delete(:lib_readme_dev)
82
+ # Example of how to add a file, in this case the file will be compiled and copied to
83
+ # the same location in the new app
84
+ # list[:config_shared_commands] = { source: 'config/shared_commands.rb' }
85
+ list[:config_load_generators] = { source: 'config/load_generators.rb' }
86
+ list[:lib_plugin] = { source: 'lib/plugin.rb', dest: "lib/#{@name}/plugin.rb" }
87
+ list[:lib_application] = { source: 'lib/application.rb', dest: "lib/#{@name}/application.rb" }
88
+ # Alternatively specifying a different destination, typically you would do this when
89
+ # the final location is dynamic
90
+ # list[:gemspec] = { source: 'gemspec.rb', dest: "#{@name}.gemspec" }
91
+ # Example of how to create a directory
92
+ # list[:pattern_dir] = { dest: "pattern", type: :directory }
93
+ # Example of how to create a symlink
94
+ # list[:target_default] = { source: 'debug.rb', # Relative to the file being linked to
95
+ # dest: 'target/default.rb', # Relative to destination_root
96
+ # type: :symlink }
97
+ # Remember to return the final list
98
+ list
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
@@ -27,7 +27,7 @@ module OrigenAppGenerators
27
27
  list[:web_navbar] = { source: 'templates/web/partials/_navbar_internal.html.erb', dest: 'templates/web/partials/_navbar.html.erb' }
28
28
  end
29
29
  list[:lib_readme] = { source: 'lib/README', dest: "lib/#{@name}/README" }
30
- list[:lib_reame_dev] = { source: 'lib_dev/README', dest: "lib/#{@name}_dev/README" }
30
+ list[:lib_readme_dev] = { source: 'lib_dev/README', dest: "lib/#{@name}_dev/README" }
31
31
  list
32
32
  end
33
33
  end
@@ -1,98 +1,6 @@
1
- desc 'Create an application generator'
2
- task :new do
3
- OrigenAppGenerators::New.start []
4
- end
5
-
6
- desc 'Test run the new app process'
7
- task :test, [:set] do |t, args|
8
- _delete_tmp_dir
9
- if args[:set]
10
- vals = OrigenAppGenerators::TEST_INPUTS[args[:set].to_i]
11
- vals.pop # Throw away the test commands
12
- str = vals.map { |i| i == :default ? "\n" : "#{i}\n" }.join('')
13
- result = system "echo '#{str}' | rake test"
14
- else
15
- result = _execute_generator(:invoke)
16
- end
17
- exit 1 unless result
18
- end
19
-
20
- desc "Test run a specific generator: rake 'run[TestEngineering::GenericTestBlock]'"
21
- task :run, [:generator_class] do |_t, args|
22
- _delete_tmp_dir
23
- begin
24
- klass = eval(args[:generator_class])
25
- rescue
26
- klass = eval("OrigenAppGenerators::#{args[:generator_class]}")
27
- end
28
- _execute_generator(klass)
29
- end
30
-
31
- desc 'Test that all generators build'
32
- task :regression do
33
- OrigenAppGenerators::TEST_INPUTS.each do |inputs|
34
- # Default test that are run for all app builds
35
- commands = ['origen -v',
36
- 'origen lint',
37
- 'rake new_app_tests:load_target',
38
- 'origen web compile --no-serve'
39
- ] + inputs.pop
40
- if ENV['TRAVIS'] && ENV['CONTINUOUS_INTEGRATION']
41
- prefix = 'bundle && bundle exec '
42
- end
43
- str = inputs.map { |i| i == :default ? "\n" : "#{i}\n" }.join('')
44
- # Test the app can build
45
- unless system "echo '#{str}' | rake test"
46
- Origen.app.stats.report_fail
47
- exit 1
48
- end
49
- # Copy the new app test rake tasks to the new app
50
- t = File.expand_path('../new_app_tests.rake', Pathname.new(__FILE__).realpath)
51
- FileUtils.cp t, 'tmp/lib/tasks'
52
- # Test the app can boot
53
- Bundler.with_clean_env do
54
- Dir.chdir 'tmp' do
55
- commands.each do |command|
56
- Origen.log.info "Running command: #{command}"
57
- unless system("#{prefix}#{command}")
58
- Origen.app.stats.report_fail
59
- exit 1
60
- end
61
- Origen.log.success "Command passed: #{command}"
62
- end
63
- end
64
- end
65
- end
66
- Origen.app.stats.report_pass
67
- end
68
-
69
- def _execute_generator(klass)
70
- # With the generator identified this now launches it in a standalone shell
71
- # This is to emulate how it will run in real life and cause it to fail if there are
72
- # any dependencies on running within an Origen app environment
73
- boot = "#{File.expand_path(File.dirname(__FILE__))}/boot.rb"
74
- origen_lib = "#{Origen.top}/lib"
75
- origen_lib = '/proj/mem_c40tfs_testeng/r49409/origen/lib'
76
- cmd = "#{boot} #{origen_lib} #{klass}"
77
- cmd = "ruby #{cmd}" if Origen.running_on_windows?
78
- # puts cmd
79
- result = false
80
- Bundler.with_clean_env do
81
- result = system cmd
82
- end
83
- result
84
- end
85
-
86
- def _delete_tmp_dir
87
- sh "rm -rf #{Origen.root}/tmp", verbose: false do |ok, _res|
88
- # Sometimes vim can lock a dir if the file is being viewed, trying again will
89
- # usually finish the job
90
- unless ok
91
- sh "rm -rf #{Origen.root}/tmp", verbose: false do |ok, _res|
92
- unless ok
93
- # I did my best!
94
- end
95
- end
96
- end
97
- end
98
- end
1
+ # You can define any Rake tasks to support your application here (or in any file
2
+ # ending in .rake in this directory).
3
+ #
4
+ # Rake (Ruby Make) is very useful for creating build scripts, see this short video
5
+ # for a quick introduction:
6
+ # http://railscasts.com/episodes/66-custom-rake-tasks
@@ -1,5 +1,7 @@
1
+ # This file has been added by origen_app_generators to test that the target can be
2
+ # loaded within this application, it will not be included in your final application
3
+ # builds once your generator has been released.
1
4
  namespace :new_app_tests do
2
- desc 'Test that the app and default target can load'
3
5
  task :load_target do
4
6
  Origen.app.target.load!
5
7
  end
@@ -80,7 +80,17 @@ class <%= @namespace %>Application < Origen::Application
80
80
  # system command
81
81
  # end
82
82
  #end
83
-
83
+ <% if @validate_release_tests %>
84
+ # Ensure that all tests pass before allowing a release to continue
85
+ def validate_release
86
+ if <%= Array(@validate_release_tests).map { |t| "!system('#{t}')" }.join(' || ') %>
87
+ puts "Sorry but you can't release with failing tests, please fix them and try again."
88
+ exit 1
89
+ else
90
+ puts "All tests passing, proceeding with release process!"
91
+ end
92
+ end
93
+ <% else %>
84
94
  # Ensure that all tests pass before allowing a release to continue
85
95
  #def validate_release
86
96
  # if !system("origen specs") || !system("origen examples")
@@ -90,6 +100,7 @@ class <%= @namespace %>Application < Origen::Application
90
100
  # puts "All tests passing, proceeding with release process!"
91
101
  # end
92
102
  #end
103
+ <% end -%>
93
104
 
94
105
  # To enabled source-less pattern generation create a class (for example PatternDispatcher)
95
106
  # to generate the pattern. This should return false if the requested pattern has been
@@ -1,4 +1,4 @@
1
- module OrigenAppGenerators
1
+ module <%= @namespace %>
2
2
  module <%= @domain_namespace %>
3
3
  # Generates a generic application shell
4
4
  class <%= @classname %> < <%= @parentclass %>
@@ -12,20 +12,33 @@ module OrigenAppGenerators
12
12
  def get_user_input
13
13
  # The methods to get the common user input that applies to all applications will
14
14
  # get called at the start automatically, you have a chance here to ask any additional
15
- # questions that are specific to the type of application being generated
15
+ # questions that are specific to the type of application being generated.
16
+ # See the following links for some examples of how to ask questions:
17
+ # https://github.com/Origen-SDK/origen_app_generators/blob/master/lib/origen_app_generators/base.rb#L94
18
+ # https://github.com/Origen-SDK/origen_app_generators/blob/master/lib/origen_app_generators/plugin.rb#L44
16
19
  end
17
20
 
18
21
  def generate_files
19
22
  # Calling this will build all files, directories and symlinks contained in the
20
- # hash returned by the filelist method
23
+ # hash returned by the filelist method below
21
24
  build_filelist
22
25
  end
23
26
 
24
27
  def modify_files
25
- # If you want to modify any of the generated files you can do so now, you have access
26
- # to all of the Thor Action methods described here:
28
+ # Here you can add or remove things post-generation.
29
+ # Alternatively, you can copy any master file to the equivalent sub-directory of
30
+ # templates/app_generators/<%= @domain_namespace.underscore %>/<%= @classname.underscore %>
31
+ # and this will override the version in the master directory.
32
+ #
33
+ # However, post generation modification is recommended when possible since it means that your
34
+ # generated applications will automatically stay up to date with any improvements made to the
35
+ # master file.
36
+ # The downside is that creating a post-generation modification takes a bit more effort to create
37
+ # compared to simply copying and modifying the file manually.
38
+ # To help with creating modifications, you have access to all of the Thor Action methods described here:
27
39
  # http://www.rubydoc.info/github/wycats/thor/Thor/Actions
28
- # See the enable method in lib/app_generators/new.rb for some examples of using these.
40
+ # See the enable method for an example of using these here:
41
+ # https://github.com/Origen-SDK/origen_app_generators/blob/master/lib/origen_app_generators/new.rb#L25
29
42
  end
30
43
 
31
44
  def conclude
@@ -36,38 +49,47 @@ module OrigenAppGenerators
36
49
  protected
37
50
 
38
51
  # Defines the filelist for the generator, the default list is inherited from the
39
- # parent class (<%= @parentclass %>).
52
+ # parent class (<%= @namespace %>::<%= @parentclass %>).
53
+ # <% if @parentclass == 'Plugin' -%>
54
+ # Since this is a plugin generator, the default list of files comprises the application list,
55
+ # which you can see here:
56
+ # https://github.com/Origen-SDK/origen_app_generators/blob/master/lib/origen_app_generators/application.rb
57
+ # And this is then modified by the base plugin generator which you can see here:
58
+ # https://github.com/Origen-SDK/origen_app_generators/blob/master/lib/origen_app_generators/plugin.rb
59
+ # Additionally, this application could have made further modifications to the default list
60
+ # within lib/<%= @namespace.underscore %>/plugin.rb
61
+ <% else %>
62
+ # See here for the default list of files included in an application:
63
+ # https://github.com/Origen-SDK/origen_app_generators/blob/master/lib/origen_app_generators/application.rb
64
+ # Additionally, this application could have made further modifications to the default list
65
+ # within lib/<%= @namespace.underscore %>/application.rb
66
+ <% end -%>
67
+ #
40
68
  # The filelist can contain references to generate files, directories or symlinks in the
41
69
  # new application.
42
70
  #
43
- # Generally to make your generator more maintainable try and re-use as much as possible
44
- # from the parent generator, this means that your generator will automatically stay up
45
- # to date with the latest conventions
46
- #
47
- # The master templates live in templates/app_generators/<%= @parentclass.downcase %>, but
48
- # DO NOT MODIFY THESE FILES DIRECTLY.
49
- # Either add or remove things post-generation in the modify_files method or copy the
50
- # master file to the equivalent sub-directory of templates/app_generators/<%= @domain_namespace.underscore %>/<%= @classname.underscore %>
51
- # which will override the version in the master directory.
71
+ # To make your generator more maintainable, try and re-use as much as possible
72
+ # from the parent generator, this means that your generators will automatically stay up
73
+ # to date with the latest conventions.
52
74
  #
53
75
  # Additional files can be added or removed from the filelist as shown below.
54
76
  def filelist
55
77
  @filelist ||= begin
56
78
  list = super # Always pick up the parent list
57
79
  # Example of how to remove a file from the parent list
58
- #list.delete(:web_doc_layout)
80
+ # list.delete(:web_doc_layout)
59
81
  # Example of how to add a file, in this case the file will be compiled and copied to
60
82
  # the same location in the new app
61
- #list[:config_shared_commands] = { source: 'config/shared_commands.rb' }
83
+ # list[:config_shared_commands] = { source: 'config/shared_commands.rb' }
62
84
  # Alternatively specifying a different destination, typically you would do this when
63
85
  # the final location is dynamic
64
- #list[:gemspec] = { source: 'gemspec.rb', dest: "#{@name}.gemspec" }
86
+ # list[:gemspec] = { source: 'gemspec.rb', dest: "#{@name}.gemspec" }
65
87
  # Example of how to create a directory
66
- #list[:pattern_dir] = { dest: "pattern", type: :directory }
88
+ # list[:pattern_dir] = { dest: "pattern", type: :directory }
67
89
  # Example of how to create a symlink
68
- #list[:target_default] = { source: 'debug.rb', # Relative to the file being linked to
69
- # dest: 'target/default.rb', # Relative to destination_root
70
- # type: :symlink }
90
+ # list[:target_default] = { source: 'debug.rb', # Relative to the file being linked to
91
+ # dest: 'target/default.rb', # Relative to destination_root
92
+ # type: :symlink }
71
93
  # Remember to return the final list
72
94
  list
73
95
  end
@@ -0,0 +1,7 @@
1
+ # This file is used to hook the generators defined in this plugin into the
2
+ # 'origen new' command, it must not be removed or modified
3
+
4
+ require 'origen_app_generators'
5
+ require "<%= @name %>"
6
+
7
+ OrigenAppGenerators.add_generators(<%= @namespace %>::AVAILABLE)
@@ -0,0 +1,48 @@
1
+ module <%= @namespace %>
2
+ # This will be the parent class of all of your application generators, it provides a place
3
+ # to add anything that you want to be added to all of your applications
4
+ class Application < OrigenAppGenerators::Application
5
+ # Any methods added above the protected line will get automatically invoked
6
+ # at the start of *all* of your application generators.
7
+
8
+ protected
9
+
10
+ # You can add helper methods that you want to make available to all of your application
11
+ # generators here, these will not get called unless a child generator calls them.
12
+
13
+ # Here you can modify the default list of files that are included in all of your applications.
14
+ #
15
+ # See here for the default list of files:
16
+ # https://github.com/Origen-SDK/origen_app_generators/blob/master/lib/origen_app_generators/application.rb
17
+ #
18
+ # The filelist can contain references to generate files, directories or symlinks in the
19
+ # new application.
20
+ #
21
+ # To make your generators more maintainable, try and re-use as much as possible
22
+ # from the parent generator, this means that your generator will automatically stay up
23
+ # to date with the latest conventions.
24
+ #
25
+ # Additional files can be added or removed from the filelist as shown below.
26
+ def filelist
27
+ @filelist ||= begin
28
+ list = super # Always pick up the parent list
29
+ # Example of how to remove a file from the parent list
30
+ # list.delete(:web_doc_layout)
31
+ # Example of how to add a file, in this case the file will be compiled and copied to
32
+ # the same location in the new app
33
+ # list[:config_shared_commands] = { source: 'config/shared_commands.rb' }
34
+ # Alternatively specifying a different destination, typically you would do this when
35
+ # the final location is dynamic
36
+ # list[:gemspec] = { source: 'gemspec.rb', dest: "#{@name}.gemspec" }
37
+ # Example of how to create a directory
38
+ # list[:pattern_dir] = { dest: "pattern", type: :directory }
39
+ # Example of how to create a symlink
40
+ # list[:target_default] = { source: 'debug.rb', # Relative to the file being linked to
41
+ # dest: 'target/default.rb', # Relative to destination_root
42
+ # type: :symlink }
43
+ # Remember to return the final list
44
+ list
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,27 @@
1
+ require 'origen_app_generators'
2
+ require '<%= @name %>/application'
3
+ require '<%= @name %>/plugin'
4
+
5
+ module <%= @namespace %>
6
+ # Define test sets of inputs to test your generators. The last item in each array is
7
+ # required and always indicates what action should be taken once the application has
8
+ # been built. nil means take no action, :default means to run a default set of test
9
+ # operations, and an array of Origen command strings gives you control of exactly
10
+ # what to run.
11
+ #
12
+ # These inputs can be executed individually by running 'origen app_gen:test -i INDEX',
13
+ # where INDEX is the index number of the set you want to execute from the TEST_INPUTS
14
+ # array.
15
+ #
16
+ # You can also execute all sets of test inputs by running: 'origen app_gen:test -r'
17
+ TEST_INPUTS = [
18
+ ] # END_OF_TEST_INPUTS Don't remove this comment, it is used by the app_gen:new command!
19
+
20
+ # As you add new generators to this app they will be entered here, this enables the
21
+ # mechanism to register them with the 'origen new' command.
22
+ # You should generally not modify this by hand, instead use the 'origen app_gen:new'
23
+ # command every time you want to create a new generator, and this will be filled in
24
+ # for you.
25
+ AVAILABLE = {
26
+ }
27
+ end
@@ -0,0 +1,58 @@
1
+ module <%= @namespace %>
2
+ # This will be the parent class of all of your plugin generators, it provides a place
3
+ # to add anything that you want to be added to all of your plugins
4
+ class Plugin < OrigenAppGenerators::Plugin
5
+ def initialize(*args)
6
+ # This makes all of your plugins be configured for internal distribution, i.e. rather
7
+ # than via rubygems.org
8
+ @audience = :internal
9
+ super
10
+ end
11
+
12
+ # Any methods added above the protected line will get automatically invoked
13
+ # at the start of *all* of your plugin generators.
14
+
15
+ protected
16
+
17
+ # You can add helper methods that you want to make available to all of your plugin
18
+ # generators here, these will not get called unless a child generator calls them.
19
+
20
+ # Here you can modify the default list of files that are included in all of your plugins.
21
+ #
22
+ # Since this is a plugin genrator, the default list of files comprises the application list,
23
+ # which you can see here:
24
+ # https://github.com/Origen-SDK/origen_app_generators/blob/master/lib/origen_app_generators/application.rb
25
+ # And this is then modified by the base plugin generator which you can see here:
26
+ # https://github.com/Origen-SDK/origen_app_generators/blob/master/lib/origen_app_generators/plugin.rb
27
+ #
28
+ # The filelist can contain references to generate files, directories or symlinks in the
29
+ # new plugin.
30
+ #
31
+ # To make your generators more maintainable, try and re-use as much as possible
32
+ # from the parent generator, this means that your generators will automatically stay up
33
+ # to date with the latest conventions.
34
+ #
35
+ # Additional files can be added or removed from the filelist as shown below.
36
+ def filelist
37
+ @filelist ||= begin
38
+ list = super # Always pick up the parent list
39
+ # Example of how to remove a file from the parent list
40
+ # list.delete(:web_doc_layout)
41
+ # Example of how to add a file, in this case the file will be compiled and copied to
42
+ # the same location in the new app
43
+ # list[:config_shared_commands] = { source: 'config/shared_commands.rb' }
44
+ # Alternatively specifying a different destination, typically you would do this when
45
+ # the final location is dynamic
46
+ # list[:gemspec] = { source: 'gemspec.rb', dest: "#{@name}.gemspec" }
47
+ # Example of how to create a directory
48
+ # list[:pattern_dir] = { dest: "pattern", type: :directory }
49
+ # Example of how to create a symlink
50
+ # list[:target_default] = { source: 'debug.rb', # Relative to the file being linked to
51
+ # dest: 'target/default.rb', # Relative to destination_root
52
+ # type: :symlink }
53
+ # Remember to return the final list
54
+ list
55
+ end
56
+ end
57
+ end
58
+ end
@@ -3,8 +3,8 @@ source 'https://rubygems.org'
3
3
  source '<%= Origen.site_config.gem_server %>'
4
4
  <% end -%>
5
5
 
6
- # Only development dependencies (things your only plugin needs when running in its own workspace) should
7
- # be listed here in the Gemfile
6
+ # Only development dependencies (things your plugin needs only when it is running in its own workspace)
7
+ # should be listed here in the Gemfile
8
8
  <% if @audience == :external -%>
9
9
  # This gem provides integration with https://coveralls.io/ to monitor
10
10
  # your application's test coverage
@@ -31,7 +31,12 @@ Gem::Specification.new do |spec|
31
31
  spec.add_runtime_dependency "origen", ">= <%= @latest_origen_version %>"
32
32
  <% if @runtime_dependencies -%>
33
33
  <% @runtime_dependencies.each do |dep| -%>
34
- spec.add_runtime_dependency <%= dep.map{ |d| "\"#{d}\"" }.join(', ') %>
34
+ spec.add_runtime_dependency <%= dep.map{ |d| "\"#{d}\"" }.join(', ') %>
35
+ <% end -%>
36
+ <% end -%>
37
+ <% if @post_runtime_dependency_comments -%>
38
+ <% @post_runtime_dependency_comments.each do |line| -%>
39
+ # <%= line %>
35
40
  <% end -%>
36
41
  <% end -%>
37
42
  end
@@ -11,4 +11,10 @@ gem 'origen_debuggers'
11
11
 
12
12
  gem 'origen_doc_helpers'
13
13
 
14
- gem 'byebug', '~>3.5'
14
+ gem 'byebug'
15
+
16
+ gem 'origen_updater'
17
+
18
+ # Uncomment these if you want to use a visual debugger (e.g. Visual Studio Code) to debug your app
19
+ #gem 'ruby-debug-ide'
20
+ #gem 'debase'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: origen_app_generators
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen McGinty
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-24 00:00:00.000000000 Z
11
+ date: 2017-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: origen
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.4.1
19
+ version: 0.22.0
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: 0.4.1
26
+ version: 0.22.0
27
27
  description:
28
28
  email:
29
29
  - stephen.f.mcginty@gmail.com
@@ -31,10 +31,12 @@ executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
+ - bin/boot.rb
34
35
  - bin/fix_my_workspace
35
36
  - config/application.rb
36
37
  - config/boot.rb
37
38
  - config/commands.rb
39
+ - config/shared_commands.rb
38
40
  - config/version.rb
39
41
  - lib/origen_app_generators.rb
40
42
  - lib/origen_app_generators/application.rb
@@ -42,12 +44,12 @@ files:
42
44
  - lib/origen_app_generators/empty_application.rb
43
45
  - lib/origen_app_generators/empty_plugin.rb
44
46
  - lib/origen_app_generators/new.rb
47
+ - lib/origen_app_generators/origen_infrastructure/app_generator_plugin.rb
45
48
  - lib/origen_app_generators/plugin.rb
46
49
  - lib/origen_app_generators/sub_block_parser.rb
47
50
  - lib/origen_app_generators/test_engineering/stand_alone_application.rb
48
51
  - lib/origen_app_generators/test_engineering/test_block.rb
49
52
  - lib/tasks/app_generators.rake
50
- - lib/tasks/boot.rb
51
53
  - lib/tasks/new_app_tests.rake
52
54
  - templates/app_generators/application/.gitignore
53
55
  - templates/app_generators/application/.irbrc
@@ -76,6 +78,10 @@ files:
76
78
  - templates/app_generators/application/templates/web/release_notes.md.erb
77
79
  - templates/app_generators/new/generator.rb
78
80
  - templates/app_generators/new/info.md.erb
81
+ - templates/app_generators/origen_infrastructure/app_generator_plugin/config/load_generators.rb
82
+ - templates/app_generators/origen_infrastructure/app_generator_plugin/lib/application.rb
83
+ - templates/app_generators/origen_infrastructure/app_generator_plugin/lib/module.rb
84
+ - templates/app_generators/origen_infrastructure/app_generator_plugin/lib/plugin.rb
79
85
  - templates/app_generators/plugin/Gemfile
80
86
  - templates/app_generators/plugin/Rakefile
81
87
  - templates/app_generators/plugin/config/boot.rb
@@ -109,7 +115,7 @@ files:
109
115
  - templates/app_generators/test_engineering/test_block/target/default.rb
110
116
  homepage: http://origen-sdk.org/origen_app_generators
111
117
  licenses:
112
- - LGPL-3
118
+ - MIT
113
119
  metadata: {}
114
120
  post_install_message:
115
121
  rdoc_options: []