origen_app_generators 1.2.0 → 2.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.
Files changed (65) hide show
  1. checksums.yaml +5 -5
  2. data/bin/boot.rb +4 -2
  3. data/config/commands.rb +3 -3
  4. data/config/shared_commands.rb +11 -6
  5. data/config/version.rb +2 -2
  6. data/lib/origen_app_generators.rb +6 -4
  7. data/lib/origen_app_generators/application.rb +12 -12
  8. data/lib/origen_app_generators/base.rb +34 -8
  9. data/lib/origen_app_generators/new.rb +17 -9
  10. data/lib/{tasks/new_app_tests.rake → origen_app_generators/new_app_tests.rb} +1 -5
  11. data/lib/origen_app_generators/origen_infrastructure/app_generator_plugin.rb +6 -8
  12. data/lib/origen_app_generators/plugin.rb +4 -7
  13. data/lib/origen_app_generators/test_engineering/common.rb +29 -0
  14. data/lib/origen_app_generators/test_engineering/stand_alone_application.rb +9 -181
  15. data/lib/origen_app_generators/test_engineering/test_block.rb +4 -105
  16. data/templates/app_generators/application/Gemfile +12 -2
  17. data/templates/app_generators/application/{lib → app/blocks}/top_level.rb +1 -1
  18. data/templates/app_generators/application/app/lib/module.rb +6 -0
  19. data/templates/app_generators/application/{templates → app/templates}/web/index.md.erb +0 -0
  20. data/templates/app_generators/application/{templates → app/templates}/web/layouts/_basic.html.erb +0 -0
  21. data/templates/app_generators/application/{templates → app/templates}/web/partials/_navbar.html.erb +0 -0
  22. data/templates/app_generators/application/{templates → app/templates}/web/release_notes.md.erb +0 -0
  23. data/templates/app_generators/application/config/application.rb +51 -55
  24. data/templates/app_generators/origen_infrastructure/app_generator_plugin/{lib → app/lib}/application.rb +0 -0
  25. data/templates/app_generators/origen_infrastructure/app_generator_plugin/{lib → app/lib}/base.rb +0 -0
  26. data/templates/app_generators/origen_infrastructure/app_generator_plugin/{lib → app/lib}/module.rb +0 -0
  27. data/templates/app_generators/origen_infrastructure/app_generator_plugin/{lib → app/lib}/plugin.rb +0 -0
  28. data/templates/app_generators/origen_infrastructure/app_generator_plugin/config/load_generators.rb +1 -1
  29. data/templates/app_generators/plugin/Gemfile +3 -2
  30. data/templates/app_generators/plugin/{templates → app/templates}/web/index.md.erb +0 -0
  31. data/templates/app_generators/plugin/{templates → app/templates}/web/partials/_navbar_external.html.erb +0 -0
  32. data/templates/app_generators/plugin/{templates → app/templates}/web/partials/_navbar_internal.html.erb +0 -0
  33. data/templates/app_generators/plugin/gemspec.rb +4 -3
  34. data/templates/app_generators/test_engineering/{stand_alone_application/environment → environment}/j750.rb +0 -0
  35. data/templates/app_generators/test_engineering/{stand_alone_application/environment → environment}/uflex.rb +0 -0
  36. data/templates/app_generators/test_engineering/{stand_alone_application/environment → environment}/v93k.rb +0 -0
  37. data/templates/app_generators/test_engineering/stand_alone_application/.keep +0 -0
  38. data/templates/app_generators/test_engineering/test_block/.keep +0 -0
  39. metadata +25 -47
  40. data/bin/fix_my_workspace +0 -100
  41. data/lib/origen_app_generators/sub_block_parser.rb +0 -81
  42. data/lib/tasks/app_generators.rake +0 -6
  43. data/templates/app_generators/application/lib/app.rake +0 -6
  44. data/templates/app_generators/application/lib/module.rb +0 -22
  45. data/templates/app_generators/plugin/lib/README +0 -4
  46. data/templates/app_generators/plugin/lib_dev/README +0 -5
  47. data/templates/app_generators/test_engineering/stand_alone_application/Gemfile +0 -23
  48. data/templates/app_generators/test_engineering/stand_alone_application/environment/jlink.rb +0 -1
  49. data/templates/app_generators/test_engineering/stand_alone_application/lib/ip_block.rb +0 -23
  50. data/templates/app_generators/test_engineering/stand_alone_application/lib/ip_block_controller.rb +0 -5
  51. data/templates/app_generators/test_engineering/stand_alone_application/lib/top_level.rb +0 -33
  52. data/templates/app_generators/test_engineering/stand_alone_application/lib/top_level_controller.rb +0 -21
  53. data/templates/app_generators/test_engineering/stand_alone_application/pattern/example.rb +0 -4
  54. data/templates/app_generators/test_engineering/stand_alone_application/target/top_level.rb +0 -4
  55. data/templates/app_generators/test_engineering/test_block/environment/j750.rb +0 -2
  56. data/templates/app_generators/test_engineering/test_block/environment/ultraflex.rb +0 -2
  57. data/templates/app_generators/test_engineering/test_block/environment/v93k.rb +0 -2
  58. data/templates/app_generators/test_engineering/test_block/lib/controller.rb +0 -12
  59. data/templates/app_generators/test_engineering/test_block/lib/interface.rb +0 -21
  60. data/templates/app_generators/test_engineering/test_block/lib/model.rb +0 -18
  61. data/templates/app_generators/test_engineering/test_block/lib_dev/dut.rb +0 -27
  62. data/templates/app_generators/test_engineering/test_block/lib_dev/dut_controller.rb +0 -26
  63. data/templates/app_generators/test_engineering/test_block/pattern/example.rb +0 -5
  64. data/templates/app_generators/test_engineering/test_block/program/prb1.rb +0 -11
  65. data/templates/app_generators/test_engineering/test_block/target/default.rb +0 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 95bae33d256bebe0eff06b3bc302cff13ee7727b
4
- data.tar.gz: fea2484c1f4856809c5ca0a57c02882d30b4409d
2
+ SHA256:
3
+ metadata.gz: 975e090af5f2395ac6a1875189204b913c936cccd0b17922a2dfe308ef6d0230
4
+ data.tar.gz: c09a5e52d72b11249b858af6a71413becaef6515c25ad003d2cb6806f9e60f0c
5
5
  SHA512:
6
- metadata.gz: 0fb24b159af5a507c5f41917b77d6e56e47e75238c9a261cddb4870cf69078c9cbd1ea623212c27da63cdb9d7c6f9932c35dc4074dcfab8a4dd0bc3f666cf2e0
7
- data.tar.gz: 0b06ca6ae29007200ea68fe670d1333a3e3eaed0307cdefbf2ca3a3bec8e2bbc567c8e566ca262e96f7d80ac6e5a25f07e2de3a64d039d2107b0f2246489990c
6
+ metadata.gz: 56c60abf4528a4b18503b93abe04c54f9a78f878a0a91154c595790162b7983a6bfb534a1772382b80b44fff7d70702beee81b1c0da14420bc7d41c2e6c7bfe1
7
+ data.tar.gz: 3711966a4d4271c23aea76b9078947dfa2688162a7a19f57f292d414166b63d45ae26989cdabb56c41b55de3a17e5d6dc384aa5ef6174c81625d6e596abc314e
data/bin/boot.rb CHANGED
@@ -30,8 +30,10 @@ begin
30
30
  OrigenAppGenerators.unload_generators unless ARGV[0]
31
31
  require load_generators if File.exist?(load_generators)
32
32
 
33
- OrigenAppGenerators.invoke('tmp')
33
+ OrigenAppGenerators.invoke('my_app')
34
34
  end
35
35
  ensure
36
- FileUtils.mv "#{tmp_dir}/tmp", 'tmp' if File.exist?("#{tmp_dir}/tmp")
36
+ FileUtils.mv "#{tmp_dir}/my_app", 'output' if File.exist?("#{tmp_dir}/my_app")
37
+ puts
38
+ puts "Ignore the above, your new app is in: output/my_app"
37
39
  end
data/config/commands.rb CHANGED
@@ -56,8 +56,8 @@ when "specs"
56
56
  ## origen -h, you can do this be assigning the required text to @application_commands
57
57
  ## before handing control back to Origen. Un-comment the example below to get started.
58
58
  else
59
- @application_commands = <<-EOT
60
- specs Run the specs (tests), -c will enable coverage
61
- EOT
59
+ # @application_commands = <<-EOT
60
+ # specs Run the specs (tests), -c will enable coverage
61
+ # EOT
62
62
 
63
63
  end
@@ -7,9 +7,11 @@ when "app_gen:test"
7
7
  opt_parser = OptionParser.new do |opts|
8
8
  opts.banner = <<-END
9
9
  Test the generators by emulating the 'origen new' command execution and building the new
10
- application into the tmp directory.
10
+ application into the output/my_app directory.
11
11
 
12
12
  Usage: origen app_gen:test [options]
13
+ origen app_gen:test --regression # Test all generators
14
+ origen app_gen:test --inputs 0 # Test with user inputs set 0
13
15
  END
14
16
  opts.on('-d', '--debugger', 'Enable the debugger') { options[:debugger] = true }
15
17
  opts.on('-i', '--inputs INDEX', Integer, "Apply the set of test inputs defined in #{Origen.app.namespace}::TEST_INPUTS[INDEX]") { |f| options[:inputs] = f }
@@ -21,7 +23,9 @@ END
21
23
 
22
24
  opt_parser.orig_parse! ARGV
23
25
 
24
- FileUtils.rm_rf "#{Origen.root}/tmp" if File.exist?("#{Origen.root}/tmp")
26
+ output_dir = File.join(Origen.root, 'output')
27
+ FileUtils.rm_rf output_dir if File.exist?(output_dir)
28
+ FileUtils.mkdir_p output_dir
25
29
 
26
30
  if options[:inputs] || options[:regression]
27
31
  if options[:regression]
@@ -45,12 +49,12 @@ END
45
49
  # For some reason this command doesn't work in Travis CI, don't know why and
46
50
  # couldn't work out how to fix (looks like a Bundler-related issue)
47
51
  cmds << 'origen lint --no-correct' unless ENV['TRAVIS']
48
- cmds << 'bundle exec rake new_app_tests:load_target'
52
+ cmds << 'bundle exec origen exec tmp/new_app_tests.rb'
49
53
  cmds << 'origen web compile --no-serve'
50
54
  cmds
51
55
  elsif op.to_s == 'load_target'
52
56
  target_load_test_required = true
53
- 'rake new_app_tests:load_target'
57
+ 'origen exec tmp/new_app_tests.rb'
54
58
  else
55
59
  op
56
60
  end
@@ -69,12 +73,13 @@ END
69
73
  # The app is successfully built, now see if it works...
70
74
  unless post_build_operations.empty?
71
75
  if target_load_test_required
72
- FileUtils.cp "#{Origen.root!}/lib/tasks/new_app_tests.rake", 'tmp/lib/tasks'
76
+ FileUtils.mkdir_p('output/my_app/tmp')
77
+ FileUtils.cp "#{Origen.root!}/lib/origen_app_generators/new_app_tests.rb", 'output/my_app/tmp'
73
78
  end
74
79
 
75
80
  operation_failed = false
76
81
  Bundler.with_clean_env do
77
- Dir.chdir "#{Origen.root}/tmp" do
82
+ Dir.chdir "#{Origen.root}/output/my_app" do
78
83
  post_build_operations.each_with_index do |op, i|
79
84
  if i == 0 && !Origen.site_config.gem_manage_bundler
80
85
  system('bundle')
data/config/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module OrigenAppGenerators
2
- MAJOR = 1
3
- MINOR = 2
2
+ MAJOR = 2
3
+ MINOR = 0
4
4
  BUGFIX = 0
5
5
  DEV = nil
6
6
 
@@ -7,6 +7,7 @@ require 'origen_app_generators/plugin'
7
7
  require 'origen_app_generators/empty_application'
8
8
  require 'origen_app_generators/empty_plugin'
9
9
  require 'origen_app_generators/new'
10
+ require 'origen_app_generators/test_engineering/common'
10
11
  require 'origen_app_generators/test_engineering/test_block'
11
12
  require 'origen_app_generators/test_engineering/stand_alone_application'
12
13
  require 'origen_app_generators/origen_infrastructure/app_generator_plugin'
@@ -16,15 +17,16 @@ module OrigenAppGenerators
16
17
 
17
18
  TEST_INPUTS = [
18
19
  # 0 - Empty app
19
- ['0', '0', :default, :default, :default],
20
+ ['0', '0', :default],
20
21
  # 1 - Empty plugin
21
22
  ['0', '1', :default, :default, 'A test block', 'yes', :default],
22
23
  # 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
+ ['2', '0', [:default]],
24
25
  # 3 - Test module
25
- ['2', '1', :default, :default, 'Test module for all flash IPs', 'FLASH_512K, FLASH_1024K', 'flash', [:default, 'origen g example']],
26
+ # ['2', '1', 'Test module for all flash IPs', [:default, 'origen g example']],
27
+ ['2', '1', 'Test module for all flash IPs', :default],
26
28
  # 4 - An app generators plugin
27
- ['1', '0', :default, :default, 'My application generators', :default]
29
+ ['1', '0', 'My application generators', :default]
28
30
  ] # END_OF_TEST_INPUTS Don't remove this comment, it is used by the app_gen:new command!
29
31
 
30
32
  # As you add new generators to this app they will be entered here, this enables the
@@ -33,19 +33,19 @@ module OrigenAppGenerators
33
33
  config_prod: { source: 'config/maillist_prod.txt' },
34
34
  doc_history: { source: 'doc/history' },
35
35
  target_default: { source: 'target/default.rb' },
36
- # target_default: { source: 'debug.rb', # Relative to the file being linked to
37
- # dest: 'target/default.rb', # Relative to destination_root
38
- # type: :symlink },
36
+ # target_default: { source: 'debug.rb', # Relative to the file being linked to
37
+ # dest: 'target/default.rb', # Relative to destination_root
38
+ # type: :symlink },
39
39
  environment_dir: { dest: 'environment', type: :directory },
40
- lib_module: { source: 'lib/module.rb',
41
- dest: "lib/#{@name}.rb" },
42
- lib_tasks: { source: 'lib/app.rake',
43
- dest: "lib/tasks/#{@name}.rake" },
40
+ lib_module: { source: 'app/lib/module.rb',
41
+ dest: "app/lib/#{@name}.rb" },
42
+ lib_module_dir: { dest: "app/lib/#{@name}", type: :directory },
43
+ app_blocks_dir: { dest: 'app/blocks', type: :directory },
44
44
  spec_helper: { source: 'spec/spec_helper.rb' },
45
- web_index: { source: 'templates/web/index.md.erb' },
46
- web_basic_layout: { source: 'templates/web/layouts/_basic.html.erb' },
47
- web_navbar: { source: 'templates/web/partials/_navbar.html.erb' },
48
- web_release_notes: { source: 'templates/web/release_notes.md.erb' },
45
+ web_index: { source: 'app/templates/web/index.md.erb' },
46
+ web_basic_layout: { source: 'app/templates/web/layouts/_basic.html.erb' },
47
+ web_navbar: { source: 'app/templates/web/partials/_navbar.html.erb' },
48
+ web_release_notes: { source: 'app/templates/web/release_notes.md.erb' },
49
49
  rakefile: { source: 'Rakefile' },
50
50
  gemfile: { source: 'Gemfile' },
51
51
  gitignore: { source: '.gitignore' },
@@ -55,7 +55,7 @@ module OrigenAppGenerators
55
55
  session: { source: 'origen_core_session',
56
56
  dest: '.session/origen_core',
57
57
  copy: true
58
- }
58
+ }
59
59
  }
60
60
  end
61
61
  end
@@ -5,6 +5,21 @@ module OrigenAppGenerators
5
5
 
6
6
  require 'gems'
7
7
 
8
+ def validate_application_name
9
+ @name = args.first.to_s.strip
10
+ if @name == ''
11
+ puts
12
+ puts "You must supply a name for what you want to call your application: 'origen new my_name'"
13
+ puts
14
+ exit 1
15
+ elsif @name != @name.symbolize.to_s
16
+ puts
17
+ puts 'The name of your new app must be lowercased and underscored and contain no special characters'
18
+ puts
19
+ exit 1
20
+ end
21
+ end
22
+
8
23
  def set_source_paths
9
24
  # The base Origen generator puts the Origen core directory on the source path, in retrospect this
10
25
  # was a bad idea and makes for hard to debug errors if an app generator resolves a template from
@@ -25,7 +40,11 @@ module OrigenAppGenerators
25
40
  dir << "#{template_dir}/base"
26
41
  klass = last_class
27
42
  else
28
- dir = "#{Origen.root!}/templates/app_generators/#{class_dir(klass)}"
43
+ dir = []
44
+ class_dirs(klass).each do |class_dir|
45
+ dir << "#{Origen.root!}/templates/app_generators/#{class_dir}"
46
+ dir << "#{Origen.root!}/app/templates/app_generators/#{class_dir}"
47
+ end
29
48
  end
30
49
  Array(dir).each do |dir|
31
50
  self.class.source_paths << dir if File.exist?(dir) && !self.class.source_paths.include?(dir)
@@ -40,7 +59,9 @@ module OrigenAppGenerators
40
59
  end
41
60
 
42
61
  def get_common_user_input
43
- get_name_and_namespace
62
+ # Don't bother asking the user for this, their life will be easier if they just go with
63
+ # Origen's default namespace based on their app's name
64
+ @namespace = @name.to_s.camelize
44
65
  end
45
66
 
46
67
  def get_lastest_origen_version
@@ -73,6 +94,17 @@ module OrigenAppGenerators
73
94
  names.map(&:underscore).join('/')
74
95
  end
75
96
 
97
+ def class_dirs(klass)
98
+ names = klass.to_s.split('::')
99
+ names.shift
100
+ dirs = []
101
+ until names.empty?
102
+ dirs << names.map(&:underscore).join('/')
103
+ names.pop
104
+ end
105
+ dirs
106
+ end
107
+
76
108
  # def application_class?(klass)
77
109
  # until klass == OrigenAppGenerators::Base
78
110
  # end
@@ -133,12 +165,6 @@ module OrigenAppGenerators
133
165
  symlink_cmds.each { |cmd| system(cmd) }
134
166
  end
135
167
 
136
- # Convenience method that is equivalent to calling get_name and then get_namespace
137
- def get_name_and_namespace
138
- get_name
139
- get_namespace
140
- end
141
-
142
168
  # Prompts the user to confirm or enter the Ruby namespace to be used in the app.
143
169
  #
144
170
  # If @name is already defined a proposal will be generated from that, alternatively a proposal
@@ -28,13 +28,13 @@ module OrigenAppGenerators
28
28
 
29
29
  # **** Add require line ****
30
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",
31
+ inject_into_file "#{app_dir}lib/#{Origen.app.name}.rb", "require '#{Origen.app.name}/#{@domain_namespace.underscore}/#{@classname.underscore}'\n",
32
32
  before: module_declaration
33
33
 
34
34
  # **** Add to the AVAILABLE hash ****
35
35
  if available[@domain_summary]
36
36
  existing_domain = /\s*('|")#{@domain_summary}('|") => \[\s*\n/
37
- inject_into_file "lib/#{Origen.app.name}.rb", " #{Origen.app.namespace}::#{@domain_namespace}::#{@classname},\n",
37
+ inject_into_file "#{app_dir}lib/#{Origen.app.name}.rb", " #{Origen.app.namespace}::#{@domain_namespace}::#{@classname},\n",
38
38
  after: existing_domain
39
39
  else
40
40
  new_domain = <<-END
@@ -43,7 +43,7 @@ module OrigenAppGenerators
43
43
  ],
44
44
  END
45
45
  available_hash = /AVAILABLE = {\s*\n/
46
- inject_into_file "lib/#{Origen.app.name}.rb", new_domain, after: available_hash
46
+ inject_into_file "#{app_dir}lib/#{Origen.app.name}.rb", new_domain, after: available_hash
47
47
  end
48
48
 
49
49
  # **** Add a starter set of test inputs ****
@@ -59,11 +59,11 @@ module OrigenAppGenerators
59
59
  if @parentclass == 'Plugin'
60
60
  inputs += " ['#{first}', '#{second}', :default, :default, 'A cool plugin', 'yes', :default]"
61
61
  else
62
- inputs += " ['#{first}', '#{second}', :default, :default, :default]"
62
+ inputs += " ['#{first}', '#{second}', :default]"
63
63
  end
64
64
  inputs = ",#{inputs}" unless test_inputs.empty?
65
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
66
+ inject_into_file "#{app_dir}lib/#{Origen.app.name}.rb", inputs, before: end_of_test_inputs
67
67
  end
68
68
 
69
69
  # Can't compile this as contains some final ERB, so substitute instead
@@ -78,7 +78,7 @@ module OrigenAppGenerators
78
78
  # end
79
79
 
80
80
  def conclude
81
- system "origen lint #{Origen.root}/lib/#{Origen.app.name}.rb"
81
+ system "origen lint #{Origen.root}/#{app_dir}lib/#{Origen.app.name}.rb"
82
82
  puts
83
83
  puts "New generator created at: #{filelist[:generator][:dest]}"
84
84
  puts
@@ -90,6 +90,14 @@ module OrigenAppGenerators
90
90
 
91
91
  protected
92
92
 
93
+ def app_dir
94
+ if File.exist?("#{Origen.root}/app/lib")
95
+ 'app/'
96
+ else
97
+ ''
98
+ end
99
+ end
100
+
93
101
  def get_summary
94
102
  puts
95
103
  puts 'DESCRIBE YOUR NEW GENERATOR IN A FEW WORDS'
@@ -151,11 +159,11 @@ module OrigenAppGenerators
151
159
  def filelist
152
160
  @filelist ||= {
153
161
  generator: { source: 'generator.rb',
154
- dest: "lib/#{Origen.app.name}/#{@domain_namespace.underscore}/#{@classname.underscore}.rb" },
155
- templates_dir: { dest: "templates/app_generators/#{@domain_namespace.underscore}/#{@classname.underscore}",
162
+ dest: "#{app_dir}lib/#{Origen.app.name}/#{@domain_namespace.underscore}/#{@classname.underscore}.rb" },
163
+ templates_dir: { dest: "#{app_dir}templates/app_generators/#{@domain_namespace.underscore}/#{@classname.underscore}",
156
164
  type: :directory },
157
165
  # doc_info: { source: 'info.md.erb',
158
- # dest: "templates/web/#{Origen.app.name}/#{@domain_namespace.underscore}/#{@classname.underscore}.md.erb" }
166
+ # dest: "#{app_dir}templates/web/#{Origen.app.name}/#{@domain_namespace.underscore}/#{@classname.underscore}.md.erb" }
159
167
  }
160
168
  end
161
169
  end
@@ -1,8 +1,4 @@
1
1
  # This file has been added by origen_app_generators to test that the target can be
2
2
  # loaded within this application, it will not be included in your final application
3
3
  # builds once your generator has been released.
4
- namespace :new_app_tests do
5
- task :load_target do
6
- Origen.app.target.load!
7
- end
8
- end
4
+ Origen.app.target.load!
@@ -77,23 +77,21 @@ module OrigenAppGenerators
77
77
  list = super # Always pick up the parent list
78
78
  # Example of how to remove a file from the parent list
79
79
  # list.delete(:web_doc_layout)
80
- list.delete(:lib_readme)
81
- list.delete(:lib_readme_dev)
82
80
  list.delete(:templates_shared)
83
81
  # Example of how to add a file, in this case the file will be compiled and copied to
84
82
  # the same location in the new app
85
83
  # list[:config_shared_commands] = { source: 'config/shared_commands.rb' }
86
84
  list[:config_load_generators] = { source: 'config/load_generators.rb' }
87
- list[:lib_base] = { source: 'lib/base.rb', dest: "lib/#{@name}/base.rb" }
88
- list[:lib_plugin] = { source: 'lib/plugin.rb', dest: "lib/#{@name}/plugin.rb" }
89
- list[:lib_application] = { source: 'lib/application.rb', dest: "lib/#{@name}/application.rb" }
85
+ list[:lib_base] = { source: 'app/lib/base.rb', dest: "app/lib/#{@name}/base.rb" }
86
+ list[:lib_plugin] = { source: 'app/lib/plugin.rb', dest: "app/lib/#{@name}/plugin.rb" }
87
+ list[:lib_application] = { source: 'app/lib/application.rb', dest: "app/lib/#{@name}/application.rb" }
90
88
  # Alternatively specifying a different destination, typically you would do this when
91
89
  # the final location is dynamic
92
90
  # list[:gemspec] = { source: 'gemspec.rb', dest: "#{@name}.gemspec" }
93
91
  # Example of how to create a directory
94
- list[:templates_app] = { dest: 'templates/app_generators/application', type: :directory }
95
- list[:templates_plugin] = { dest: 'templates/app_generators/plugin', type: :directory }
96
- list[:templates_base] = { dest: 'templates/app_generators/base', type: :directory }
92
+ list[:templates_app] = { dest: 'app/templates/app_generators/application', type: :directory }
93
+ list[:templates_plugin] = { dest: 'app/templates/app_generators/plugin', type: :directory }
94
+ list[:templates_base] = { dest: 'app/templates/app_generators/base', type: :directory }
97
95
  # By default, directories created in this way will contain a .keep file, to inhibit this:
98
96
  # list[:pattern_dir] = { dest: "pattern", type: :directory, nokeep: true }
99
97
  # Example of how to create a symlink
@@ -1,8 +1,7 @@
1
1
  module OrigenAppGenerators
2
2
  # The base generator class that should be used by all plugin generators
3
3
  class Plugin < Application
4
- def get_common_user_input
5
- get_name_and_namespace
4
+ def get_additional_user_input
6
5
  get_summary
7
6
  get_audience unless @audience
8
7
  end
@@ -19,15 +18,13 @@ module OrigenAppGenerators
19
18
  list.delete(:web_installation)
20
19
  list.delete(:web_introduction)
21
20
  list[:gemspec] = { source: 'gemspec.rb', dest: "#{@name}.gemspec" }
22
- list[:templates_shared] = { dest: 'templates/shared', type: :directory }
21
+ list[:templates_shared] = { dest: 'app/templates/shared', type: :directory }
23
22
  if @audience == :external
24
23
  list[:travis] = { source: '.travis.yml' }
25
- list[:web_navbar] = { source: 'templates/web/partials/_navbar_external.html.erb', dest: 'templates/web/partials/_navbar.html.erb' }
24
+ list[:web_navbar] = { source: 'app/templates/web/partials/_navbar_external.html.erb', dest: 'app/templates/web/partials/_navbar.html.erb' }
26
25
  else
27
- list[:web_navbar] = { source: 'templates/web/partials/_navbar_internal.html.erb', dest: 'templates/web/partials/_navbar.html.erb' }
26
+ list[:web_navbar] = { source: 'app/templates/web/partials/_navbar_internal.html.erb', dest: 'app/templates/web/partials/_navbar.html.erb' }
28
27
  end
29
- list[:lib_readme] = { source: 'lib/README', dest: "lib/#{@name}/README" }
30
- list[:lib_readme_dev] = { source: 'lib_dev/README', dest: "lib/#{@name}_dev/README" }
31
28
  list
32
29
  end
33
30
  end
@@ -0,0 +1,29 @@
1
+ module OrigenAppGenerators
2
+ module TestEngineering
3
+ module Common
4
+ def common_filelist(list)
5
+ # Example of how to remove a file from the parent list
6
+ # list.delete(:target_debug)
7
+ # Example of how to add a file, in this case the file will be compiled and copied to
8
+ # the same location in the new app
9
+ list[:environment_v93k] = { source: 'environment/v93k.rb' }
10
+ list[:environment_j750] = { source: 'environment/j750.rb' }
11
+ list[:environment_uflex] = { source: 'environment/uflex.rb' }
12
+ # Alternatively specifying a different destination, typically you would do this when
13
+ # the final location is dynamic
14
+ # list[:gemspec] = { source: 'gemspec.rb', dest: "#{@name}.gemspec" }
15
+ # Example of how to create a directory
16
+ # list[:pattern_dir] = { dest: 'pattern', type: :directory }
17
+ # Example of how to create a symlink
18
+ list[:environment_default] = { source: 'uflex.rb', # Relative to the file being linked to
19
+ dest: 'environment/default.rb', # Relative to destination_root
20
+ type: :symlink }
21
+ # Test engineering source directories
22
+ list[:patterns_dir] = { dest: 'app/patterns', type: :directory }
23
+ list[:flows_dir] = { dest: 'app/flows', type: :directory }
24
+ # Remember to return the final list
25
+ list
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,8 +1,9 @@
1
1
  module OrigenAppGenerators
2
2
  module TestEngineering
3
- require 'origen_app_generators/sub_block_parser'
4
3
  # Generates a generic application shell
5
4
  class StandAloneApplication < Application
5
+ include Common
6
+
6
7
  desc 'A stand alone test engineering application'
7
8
 
8
9
  # Any methods that are not protected will get invoked in the order that they are
@@ -13,13 +14,12 @@ module OrigenAppGenerators
13
14
  # The methods to get the common user input that applies to all applications will
14
15
  # get called at the start automatically, you have a chance here to ask any additional
15
16
  # questions that are specific to the type of application being generated
16
- get_top_level_names
17
- get_sub_block_names
18
17
  end
19
18
 
20
19
  def generate_files
21
- # Calling this will build all files, directories and symlinks contained in the
22
- # hash returned by the filelist method
20
+ @development_dependencies = [
21
+ ['origen_testers']
22
+ ]
23
23
  build_filelist
24
24
  end
25
25
 
@@ -37,122 +37,8 @@ module OrigenAppGenerators
37
37
 
38
38
  protected
39
39
 
40
- def sub_block_parser
41
- @sub_block_parser ||= SubBlockParser.new
42
- end
43
-
44
- def get_top_level_names
45
- puts
46
- puts 'NAME YOUR TOP-LEVEL DEVICE(S)'
47
- puts
48
- puts 'What do you want to call the top-level class that represents your device?'
49
- puts 'By default it will be called TopLevel, but if you want this application to support multiple devices you should'
50
- puts 'give them unique names.'
51
- puts 'Separate multiple names with a comma: Falcon, Eagle, Vulture'
52
- puts
53
-
54
- valid = false
55
- until valid
56
- @top_level_names = get_text(single: true, default: 'TopLevel').strip.split(',').map do |name|
57
- name.strip.gsub(/\s+/, '_').camelize
58
- end
59
- unless @top_level_names.empty?
60
- # Should we check anything here?
61
- valid = true
62
- end
63
- end
64
- @top_level_names
65
- end
66
-
67
- def get_sub_block_names
68
- puts
69
- puts 'DEFINE YOUR SUB-BLOCKS'
70
- puts
71
- puts 'What sub-blocks does this device contain?'
72
- puts 'You can leave this blank, but entering some details of the sub-blocks you will want to involve in your tests'
73
- puts 'will save you some manual setup of the associated models and controllers.'
74
- puts 'You can specify layers of hierarchy and multiple instantiations, here are some examples:'
75
- puts
76
- puts ' A RAM, OSC, PLL and 2 ATDs at the top-level: ram, osc, pll, atd(2)'
77
- puts ' With 3 COMMS blocks with embedded components: ram, osc, pll, atd(2), comms[ram(2), osc](3)'
78
- if @top_level_names.size > 1
79
- puts
80
- puts 'If you want different modules for each of your top-level devices you can do:'
81
- puts
82
- puts " #{@top_level_names[0]}[ram, atd(2)], #{@top_level_names[1]}[ram(2), atd(4)]"
83
- end
84
- puts
85
-
86
- valid = false
87
- until valid
88
- input = get_text(single: true).strip
89
- if input.empty?
90
- @sub_blocks_lookup = {}
91
- valid = true
92
- else
93
- begin
94
- @sub_blocks_lookup = sub_block_parser.parse(input)
95
- valid = true
96
- rescue
97
- valid = false
98
- end
99
- end
100
- end
101
- @sub_blocks_lookup
102
- end
103
-
104
- # Returns a hash that looks like:
105
- #
106
- # {"Falcon"=>{"RAM"=>{}, "ATD"=>{:instances=>2}}, "Eagle"=>{"RAM"=>{:instances=>2}, "ATD"=>{:instances=>4}}}
107
- def top_level_sub_blocks
108
- blocks = {}
109
- # Make sure that each top-level object has a sub blocks assignment
110
- if @top_level_names.any? { |n| @sub_blocks_lookup[n] }
111
- @top_level_names.each do |name|
112
- if @sub_blocks_lookup[name]
113
- blocks[name] = @sub_blocks_lookup[name][:children] || {}
114
- else
115
- blocks[name] = {}
116
- end
117
- end
118
- # Duplicate the given sub blocks to all top-level objects if none have been specified
119
- else
120
- @top_level_names.each do |name|
121
- blocks[name] = @sub_blocks_lookup
122
- end
123
- end
124
- blocks
125
- end
126
-
127
- # Returns a hash with all sub-blocks at the top-level, e.g.:
128
- #
129
- # {"RAM"=>{}, "ATD"=>{}, "Comms"=>{"RAM"=>{:instances=>2}, "Osc"=>{}}, "Osc"=>{}}
130
- def sub_blocks
131
- blocks = {}
132
- top_level_sub_blocks.each do |top, attrs|
133
- extract_sub_blocks(attrs) do |name, attrs|
134
- if blocks[name]
135
- if blocks[name] != (attrs[:children] || {})
136
- Origen.log.warning "The app builder does not currently support different sub-block definitions for block #{name}"
137
- Origen.log.warning 'Only the first defintion has been built'
138
- end
139
- else
140
- blocks[name] = attrs[:children] || {}
141
- end
142
- end
143
- end
144
- blocks
145
- end
146
-
147
- def extract_sub_blocks(blocks, &block)
148
- blocks.each do |name, attrs|
149
- yield name, attrs
150
- extract_sub_blocks(attrs[:children], &block) if attrs[:children]
151
- end
152
- end
153
-
154
40
  # Defines the filelist for the generator, the default list is inherited from the
155
- # parent class (Application).
41
+ # parent class (Plugin).
156
42
  # The filelist can contain references to generate files, directories or symlinks in the
157
43
  # new application.
158
44
  #
@@ -160,74 +46,16 @@ module OrigenAppGenerators
160
46
  # from the parent generator, this means that your generator will automatically stay up
161
47
  # to date with the latest conventions
162
48
  #
163
- # The master templates live in templates/app_generators/application, but
49
+ # The master templates live in templates/app_generators/plugin, but
164
50
  # DO NOT MODIFY THESE FILES DIRECTLY.
165
51
  # Either add or remove things post-generation in the modify_files method or copy the
166
- # master file to the equivalent sub-directory of templates/app_generators/test_engineering/generic_stand_alone_application
52
+ # master file to the equivalent sub-directory of templates/app_generators/test_engineering/mpg_test_block
167
53
  # which will override the version in the master directory.
168
54
  #
169
55
  # Additional files can be added or removed from the filelist as shown below.
170
56
  def filelist
171
57
  @filelist ||= begin
172
- list = super # Always pick up the parent list
173
- # Example of how to remove a file from the parent list
174
- list.delete(:lib_top_level)
175
- list.delete(:target_debug)
176
- list.delete(:target_production)
177
- list.delete(:target_default)
178
- # Example of how to add a file, in this case the file will be compiled and copied to
179
- # the same location in the new app
180
- @top_level_names.each_with_index do |name, i|
181
- list["top_level_model_#{i}"] = { source: 'lib/top_level.rb',
182
- dest: "lib/#{@name}/#{name.underscore}.rb",
183
- options: { name: name, sub_blocks: top_level_sub_blocks[name] }
184
- }
185
-
186
- list["top_level_controller_#{i}"] = { source: 'lib/top_level_controller.rb',
187
- dest: "lib/#{@name}/#{name.underscore}_controller.rb",
188
- options: { name: name }
189
- }
190
-
191
- list["target_#{name}"] = { source: 'target/top_level.rb',
192
- dest: "target/#{name.underscore}.rb",
193
- options: { name: name }
194
- }
195
- if i == 0
196
- list[:target_default] = { source: "#{name.underscore}.rb", # Relative to the file being linked to
197
- dest: 'target/default.rb', # Relative to destination_root
198
- type: :symlink }
199
- end
200
- end
201
-
202
- sub_blocks.each do |name, blocks|
203
- list["ip_block_#{name}"] = { source: 'lib/ip_block.rb',
204
- dest: "lib/#{@name}/#{name.underscore}.rb",
205
- options: { name: name, sub_blocks: blocks }
206
- }
207
-
208
- list["ip_block_controller_#{name}"] = { source: 'lib/ip_block_controller.rb',
209
- dest: "lib/#{@name}/#{name.underscore}_controller.rb" }
210
- end
211
-
212
- list[:environment_j750] = { source: 'environment/j750.rb' }
213
- list[:environment_uflex] = { source: 'environment/uflex.rb' }
214
- list[:environment_v93k] = { source: 'environment/v93k.rb' }
215
- list[:environment_jlink] = { source: 'environment/jlink.rb' }
216
- # Alternatively specifying a different destination, typically you would do this when
217
- # the final location is dynamic
218
- # list[:gemspec] = { source: 'gemspec.rb', dest: "#{@name}.gemspec" }
219
- # Example of how to create a directory
220
- # list[:pattern_dir] = { dest: "pattern", type: :directory }
221
- # Example of how to create a symlink
222
- list[:environment_default] = { source: 'j750.rb', # Relative to the file being linked to
223
- dest: 'environment/default.rb', # Relative to destination_root
224
- type: :symlink }
225
- # Test engineering source directories
226
- list[:program_dir] = { dest: 'program', type: :directory }
227
- list[:pattern_dir] = { dest: 'pattern', type: :directory }
228
- # Example source files
229
- list[:pattern_example] = { source: 'pattern/example.rb' }
230
- # Remember to return the final list
58
+ list = common_filelist(super) # Always pick up the parent list
231
59
  list
232
60
  end
233
61
  end