origen 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (336) hide show
  1. checksums.yaml +4 -4
  2. data/bin/ctags +0 -0
  3. data/bin/origen +165 -1
  4. data/bin/rgen +2 -0
  5. data/config/application.rb +141 -0
  6. data/config/commands.rb +72 -0
  7. data/config/development.rb +7 -0
  8. data/config/environment.rb +0 -0
  9. data/config/rgen.policy +7 -0
  10. data/config/rubocop/easy.yml +620 -0
  11. data/config/rubocop/easy_disabled.yml +271 -0
  12. data/config/rubocop/easy_enabled.yml +731 -0
  13. data/config/rubocop/strict.yml +620 -0
  14. data/config/rubocop/strict_disabled.yml +247 -0
  15. data/config/rubocop/strict_enabled.yml +755 -0
  16. data/config/users.rb +20 -0
  17. data/config/version.rb +1 -1
  18. data/helpers/url.rb +68 -0
  19. data/lib/c99/doc_interface.rb +56 -0
  20. data/lib/c99/j750_interface.rb +85 -0
  21. data/lib/c99/nvm.rb +89 -0
  22. data/lib/c99/target/mock2.rb +1 -0
  23. data/lib/c99/target/subdir/mock3.rb +1 -0
  24. data/lib/option_parser/optparse.rb +12 -0
  25. data/lib/origen/acronyms.rb +60 -0
  26. data/lib/origen/application/command_dispatcher.rb +12 -0
  27. data/lib/origen/application/configuration.rb +206 -0
  28. data/lib/origen/application/configuration_manager.rb +78 -0
  29. data/lib/origen/application/deployer.rb +367 -0
  30. data/lib/origen/application/environment.rb +186 -0
  31. data/lib/origen/application/lsf.rb +145 -0
  32. data/lib/origen/application/lsf_manager.rb +657 -0
  33. data/lib/origen/application/plugins_manager.rb +280 -0
  34. data/lib/origen/application/release.rb +359 -0
  35. data/lib/origen/application/runner.rb +246 -0
  36. data/lib/origen/application/statistics.rb +191 -0
  37. data/lib/origen/application/target.rb +374 -0
  38. data/lib/origen/application/version_tracker.rb +59 -0
  39. data/lib/origen/application/workspace_manager.rb +151 -0
  40. data/lib/origen/application.rb +746 -0
  41. data/lib/origen/bugs/bug.rb +36 -0
  42. data/lib/origen/bugs.rb +45 -0
  43. data/lib/origen/callbacks.rb +35 -0
  44. data/lib/origen/chip_mode.rb +118 -0
  45. data/lib/origen/chip_package.rb +461 -0
  46. data/lib/origen/client.rb +87 -0
  47. data/lib/origen/code_generators/actions.rb +258 -0
  48. data/lib/origen/code_generators/base.rb +57 -0
  49. data/lib/origen/code_generators/bundler.rb +17 -0
  50. data/lib/origen/code_generators/gem_setup.rb +49 -0
  51. data/lib/origen/code_generators/rake.rb +13 -0
  52. data/lib/origen/code_generators/rspec.rb +12 -0
  53. data/lib/origen/code_generators/semver.rb +39 -0
  54. data/lib/origen/code_generators/timever.rb +37 -0
  55. data/lib/origen/code_generators.rb +111 -0
  56. data/lib/origen/commands/add.rb +12 -0
  57. data/lib/origen/commands/compile.rb +62 -0
  58. data/lib/origen/commands/ctags.rb +9 -0
  59. data/lib/origen/commands/dispatch.rb +22 -0
  60. data/lib/origen/commands/environment.rb +11 -0
  61. data/lib/origen/commands/fetch.rb +63 -0
  62. data/lib/origen/commands/generate.rb +130 -0
  63. data/lib/origen/commands/interactive.rb +73 -0
  64. data/lib/origen/commands/lint.rb +82 -0
  65. data/lib/origen/commands/lsf.rb +93 -0
  66. data/lib/origen/commands/merge.rb +55 -0
  67. data/lib/origen/commands/modifications.rb +12 -0
  68. data/lib/origen/commands/new.rb +113 -0
  69. data/lib/origen/commands/plugin.rb +105 -0
  70. data/lib/origen/commands/program.rb +70 -0
  71. data/lib/origen/commands/rc.rb +442 -0
  72. data/lib/origen/commands/save.rb +56 -0
  73. data/lib/origen/commands/target.rb +27 -0
  74. data/lib/origen/commands/time.rb +127 -0
  75. data/lib/origen/commands/version.rb +17 -0
  76. data/lib/origen/commands/web.rb +221 -0
  77. data/lib/origen/commands.rb +272 -0
  78. data/lib/origen/commands_global.rb +76 -0
  79. data/lib/origen/controller.rb +94 -0
  80. data/lib/origen/core_ext/array.rb +23 -0
  81. data/lib/origen/core_ext/bignum.rb +36 -0
  82. data/lib/origen/core_ext/enumerable.rb +76 -0
  83. data/lib/origen/core_ext/fixnum.rb +46 -0
  84. data/lib/origen/core_ext/hash.rb +52 -0
  85. data/lib/origen/core_ext/module.rb +14 -0
  86. data/lib/origen/core_ext/numeric.rb +126 -0
  87. data/lib/origen/core_ext/object.rb +13 -0
  88. data/lib/origen/core_ext/range.rb +7 -0
  89. data/lib/origen/core_ext/string.rb +124 -0
  90. data/lib/origen/core_ext.rb +10 -0
  91. data/lib/origen/database/key_value_store.rb +111 -0
  92. data/lib/origen/database/key_value_stores.rb +108 -0
  93. data/lib/origen/database.rb +6 -0
  94. data/lib/origen/encodings.rb +102 -0
  95. data/lib/origen/features/feature.rb +22 -0
  96. data/lib/origen/features.rb +104 -0
  97. data/lib/origen/file_handler.rb +429 -0
  98. data/lib/origen/generator/comparator.rb +56 -0
  99. data/lib/origen/generator/compiler.rb +277 -0
  100. data/lib/origen/generator/flow.rb +49 -0
  101. data/lib/origen/generator/job.rb +131 -0
  102. data/lib/origen/generator/pattern.rb +356 -0
  103. data/lib/origen/generator/pattern_finder.rb +155 -0
  104. data/lib/origen/generator/pattern_iterator.rb +55 -0
  105. data/lib/origen/generator/renderer.rb +113 -0
  106. data/lib/origen/generator/resources.rb +40 -0
  107. data/lib/origen/generator/stage.rb +89 -0
  108. data/lib/origen/generator.rb +85 -0
  109. data/lib/origen/global_methods.rb +205 -0
  110. data/lib/origen/import_manager.rb +596 -0
  111. data/lib/origen/location/base.rb +116 -0
  112. data/lib/origen/location/map.rb +83 -0
  113. data/lib/origen/location.rb +6 -0
  114. data/lib/origen/log.rb +217 -0
  115. data/lib/origen/logger_methods.rb +56 -0
  116. data/lib/origen/mode.rb +61 -0
  117. data/lib/origen/model.rb +267 -0
  118. data/lib/origen/model_initializer.rb +45 -0
  119. data/lib/origen/nvm/block_array.rb +72 -0
  120. data/lib/origen/nvm.rb +6 -0
  121. data/lib/origen/parameters/live.rb +22 -0
  122. data/lib/origen/parameters/missing.rb +28 -0
  123. data/lib/origen/parameters/set.rb +144 -0
  124. data/lib/origen/parameters.rb +107 -0
  125. data/lib/origen/pdm.rb +218 -0
  126. data/lib/origen/pins/function_proxy.rb +36 -0
  127. data/lib/origen/pins/ground_pin.rb +6 -0
  128. data/lib/origen/pins/pin.rb +860 -0
  129. data/lib/origen/pins/pin_bank.rb +349 -0
  130. data/lib/origen/pins/pin_clock.rb +124 -0
  131. data/lib/origen/pins/pin_collection.rb +492 -0
  132. data/lib/origen/pins/pin_common.rb +206 -0
  133. data/lib/origen/pins/port.rb +268 -0
  134. data/lib/origen/pins/power_pin.rb +30 -0
  135. data/lib/origen/pins.rb +696 -0
  136. data/lib/origen/registers/bit.rb +562 -0
  137. data/lib/origen/registers/bit_collection.rb +787 -0
  138. data/lib/origen/registers/container.rb +288 -0
  139. data/lib/origen/registers/domain.rb +16 -0
  140. data/lib/origen/registers/reg.rb +1406 -0
  141. data/lib/origen/registers/reg_collection.rb +24 -0
  142. data/lib/origen/registers.rb +652 -0
  143. data/lib/origen/regression_manager.rb +251 -0
  144. data/lib/origen/remote_manager.rb +340 -0
  145. data/lib/origen/revision_control/base.rb +257 -0
  146. data/lib/origen/revision_control/design_sync.rb +276 -0
  147. data/lib/origen/revision_control/git.rb +243 -0
  148. data/lib/origen/revision_control/subversion.rb +6 -0
  149. data/lib/origen/revision_control.rb +44 -0
  150. data/lib/origen/ruby_version_check.rb +131 -0
  151. data/lib/origen/site_config.rb +61 -0
  152. data/lib/origen/specs/checkers.rb +103 -0
  153. data/lib/origen/specs/creation_info.rb +17 -0
  154. data/lib/origen/specs/doc_resource.rb +91 -0
  155. data/lib/origen/specs/exhibit.rb +17 -0
  156. data/lib/origen/specs/mode_select.rb +16 -0
  157. data/lib/origen/specs/note.rb +17 -0
  158. data/lib/origen/specs/override.rb +21 -0
  159. data/lib/origen/specs/power_supply.rb +13 -0
  160. data/lib/origen/specs/spec.rb +226 -0
  161. data/lib/origen/specs/version_history.rb +14 -0
  162. data/lib/origen/specs.rb +552 -0
  163. data/lib/origen/sub_blocks.rb +298 -0
  164. data/lib/origen/tester/api.rb +277 -0
  165. data/lib/origen/tester/bdm/bdm.rb +25 -0
  166. data/lib/origen/tester/command_based_tester.rb +46 -0
  167. data/lib/origen/tester/doc/doc.rb +226 -0
  168. data/lib/origen/tester/doc/generator/flow.rb +71 -0
  169. data/lib/origen/tester/doc/generator/flow_line.rb +203 -0
  170. data/lib/origen/tester/doc/generator/test.rb +68 -0
  171. data/lib/origen/tester/doc/generator/test_group.rb +66 -0
  172. data/lib/origen/tester/doc/generator/tests.rb +47 -0
  173. data/lib/origen/tester/doc/generator.rb +126 -0
  174. data/lib/origen/tester/doc/model.rb +162 -0
  175. data/lib/origen/tester/generator/flow_control_api.rb +606 -0
  176. data/lib/origen/tester/generator/identity_map.rb +25 -0
  177. data/lib/origen/tester/generator/placeholder.rb +13 -0
  178. data/lib/origen/tester/generator/test_numberer.rb +25 -0
  179. data/lib/origen/tester/generator.rb +271 -0
  180. data/lib/origen/tester/interface.rb +154 -0
  181. data/lib/origen/tester/j750/files.rb +45 -0
  182. data/lib/origen/tester/j750/generator/flow.rb +123 -0
  183. data/lib/origen/tester/j750/generator/flow_line.rb +288 -0
  184. data/lib/origen/tester/j750/generator/patgroup.rb +111 -0
  185. data/lib/origen/tester/j750/generator/patgroups.rb +41 -0
  186. data/lib/origen/tester/j750/generator/patset.rb +111 -0
  187. data/lib/origen/tester/j750/generator/patsets.rb +41 -0
  188. data/lib/origen/tester/j750/generator/templates/flow.txt.erb +9 -0
  189. data/lib/origen/tester/j750/generator/templates/instances.txt.erb +16 -0
  190. data/lib/origen/tester/j750/generator/templates/patgroups.txt.erb +8 -0
  191. data/lib/origen/tester/j750/generator/templates/patsets.txt.erb +10 -0
  192. data/lib/origen/tester/j750/generator/test_instance.rb +846 -0
  193. data/lib/origen/tester/j750/generator/test_instance_group.rb +60 -0
  194. data/lib/origen/tester/j750/generator/test_instances.rb +182 -0
  195. data/lib/origen/tester/j750/generator.rb +203 -0
  196. data/lib/origen/tester/j750/j750.rb +845 -0
  197. data/lib/origen/tester/j750/j750_hpt.rb +35 -0
  198. data/lib/origen/tester/j750/parser/ac_spec.rb +11 -0
  199. data/lib/origen/tester/j750/parser/ac_specs.rb +0 -0
  200. data/lib/origen/tester/j750/parser/dc_spec.rb +36 -0
  201. data/lib/origen/tester/j750/parser/dc_specs.rb +50 -0
  202. data/lib/origen/tester/j750/parser/descriptions.rb +340 -0
  203. data/lib/origen/tester/j750/parser/flow.rb +111 -0
  204. data/lib/origen/tester/j750/parser/flow_line.rb +207 -0
  205. data/lib/origen/tester/j750/parser/flows.rb +23 -0
  206. data/lib/origen/tester/j750/parser/pattern_set.rb +94 -0
  207. data/lib/origen/tester/j750/parser/pattern_sets.rb +33 -0
  208. data/lib/origen/tester/j750/parser/test_instance.rb +322 -0
  209. data/lib/origen/tester/j750/parser/test_instances.rb +26 -0
  210. data/lib/origen/tester/j750/parser/timeset.rb +15 -0
  211. data/lib/origen/tester/j750/parser/timesets.rb +0 -0
  212. data/lib/origen/tester/j750/parser.rb +104 -0
  213. data/lib/origen/tester/jlink/jlink.rb +33 -0
  214. data/lib/origen/tester/parser/description_lookup.rb +64 -0
  215. data/lib/origen/tester/parser/searchable_array.rb +32 -0
  216. data/lib/origen/tester/parser/searchable_hash.rb +32 -0
  217. data/lib/origen/tester/parser.rb +24 -0
  218. data/lib/origen/tester/time.rb +338 -0
  219. data/lib/origen/tester/timing.rb +253 -0
  220. data/lib/origen/tester/ultraflex/files.rb +45 -0
  221. data/lib/origen/tester/ultraflex/generator/flow.rb +119 -0
  222. data/lib/origen/tester/ultraflex/generator/flow_line.rb +269 -0
  223. data/lib/origen/tester/ultraflex/generator/patgroup.rb +111 -0
  224. data/lib/origen/tester/ultraflex/generator/patgroups.rb +41 -0
  225. data/lib/origen/tester/ultraflex/generator/patset.rb +111 -0
  226. data/lib/origen/tester/ultraflex/generator/patsets.rb +41 -0
  227. data/lib/origen/tester/ultraflex/generator/templates/flow.txt.erb +9 -0
  228. data/lib/origen/tester/ultraflex/generator/templates/instances.txt.erb +16 -0
  229. data/lib/origen/tester/ultraflex/generator/templates/patgroups.txt.erb +8 -0
  230. data/lib/origen/tester/ultraflex/generator/templates/patsets.txt.erb +10 -0
  231. data/lib/origen/tester/ultraflex/generator/test_instance.rb +622 -0
  232. data/lib/origen/tester/ultraflex/generator/test_instance_group.rb +60 -0
  233. data/lib/origen/tester/ultraflex/generator/test_instances.rb +174 -0
  234. data/lib/origen/tester/ultraflex/generator.rb +200 -0
  235. data/lib/origen/tester/ultraflex/parser/ac_spec.rb +11 -0
  236. data/lib/origen/tester/ultraflex/parser/ac_specs.rb +0 -0
  237. data/lib/origen/tester/ultraflex/parser/dc_spec.rb +36 -0
  238. data/lib/origen/tester/ultraflex/parser/dc_specs.rb +50 -0
  239. data/lib/origen/tester/ultraflex/parser/descriptions.rb +342 -0
  240. data/lib/origen/tester/ultraflex/parser/flow.rb +111 -0
  241. data/lib/origen/tester/ultraflex/parser/flow_line.rb +207 -0
  242. data/lib/origen/tester/ultraflex/parser/flows.rb +23 -0
  243. data/lib/origen/tester/ultraflex/parser/pattern_set.rb +94 -0
  244. data/lib/origen/tester/ultraflex/parser/pattern_sets.rb +33 -0
  245. data/lib/origen/tester/ultraflex/parser/test_instance.rb +262 -0
  246. data/lib/origen/tester/ultraflex/parser/test_instances.rb +26 -0
  247. data/lib/origen/tester/ultraflex/parser/timeset.rb +15 -0
  248. data/lib/origen/tester/ultraflex/parser/timesets.rb +0 -0
  249. data/lib/origen/tester/ultraflex/parser.rb +104 -0
  250. data/lib/origen/tester/ultraflex/ultraflex.rb +759 -0
  251. data/lib/origen/tester/v93k/generator/flow.rb +63 -0
  252. data/lib/origen/tester/v93k/generator/flow_node/print.rb +10 -0
  253. data/lib/origen/tester/v93k/generator/flow_node.rb +17 -0
  254. data/lib/origen/tester/v93k/generator/pattern.rb +16 -0
  255. data/lib/origen/tester/v93k/generator/pattern_master.rb +54 -0
  256. data/lib/origen/tester/v93k/generator/templates/_test_method.txt.erb +6 -0
  257. data/lib/origen/tester/v93k/generator/templates/_test_suite.txt.erb +11 -0
  258. data/lib/origen/tester/v93k/generator/templates/template.flow.erb +121 -0
  259. data/lib/origen/tester/v93k/generator/templates/template.pmfl.erb +9 -0
  260. data/lib/origen/tester/v93k/generator/test_function.rb +103 -0
  261. data/lib/origen/tester/v93k/generator/test_functions.rb +79 -0
  262. data/lib/origen/tester/v93k/generator/test_method.rb +46 -0
  263. data/lib/origen/tester/v93k/generator/test_methods.rb +75 -0
  264. data/lib/origen/tester/v93k/generator/test_suite.rb +54 -0
  265. data/lib/origen/tester/v93k/generator/test_suites.rb +65 -0
  266. data/lib/origen/tester/v93k/generator.rb +80 -0
  267. data/lib/origen/tester/v93k/v93k.rb +420 -0
  268. data/lib/origen/tester/vector.rb +86 -0
  269. data/lib/origen/tester/vector_generator.rb +633 -0
  270. data/lib/origen/tester/vector_pipeline.rb +150 -0
  271. data/lib/origen/tester.rb +56 -0
  272. data/lib/origen/top_level.rb +134 -0
  273. data/lib/origen/users/ldap.rb +65 -0
  274. data/lib/origen/users/user.rb +149 -0
  275. data/lib/origen/users.rb +30 -0
  276. data/lib/origen/utility/block_args.rb +93 -0
  277. data/lib/origen/utility/csv_data.rb +110 -0
  278. data/lib/origen/utility/design_sync.rb +494 -0
  279. data/lib/origen/utility/diff.rb +158 -0
  280. data/lib/origen/utility/input_capture.rb +121 -0
  281. data/lib/origen/utility/mailer.rb +143 -0
  282. data/lib/origen/utility/s_record.rb +205 -0
  283. data/lib/origen/utility/time_and_date.rb +30 -0
  284. data/lib/origen/utility.rb +12 -0
  285. data/lib/origen/version_checker.rb +117 -0
  286. data/lib/origen/version_string.rb +356 -0
  287. data/lib/origen.rb +648 -0
  288. data/lib/tasks/gem.rake +27 -22
  289. data/origen_site_config.yml +36 -0
  290. data/source_setup +17 -0
  291. data/spec/format/rgen_formatter.rb +14 -0
  292. data/templates/api_doc/README.txt.erb +24 -0
  293. data/templates/code_generators/gemfile_app.rb +4 -0
  294. data/templates/code_generators/gemfile_plugin.rb +6 -0
  295. data/templates/code_generators/gemspec.rb +33 -0
  296. data/templates/code_generators/rakefile.rb +10 -0
  297. data/templates/code_generators/spec_helper.rb +49 -0
  298. data/templates/code_generators/version.rb +8 -0
  299. data/templates/code_generators/version_time.rb +3 -0
  300. data/templates/git/gitignore.erb +33 -0
  301. data/templates/j750/_vt_flow.txt.erb +8 -0
  302. data/templates/j750/_vt_instances.txt.erb +4 -0
  303. data/templates/j750/program_sheet.txt.erb +9 -0
  304. data/templates/nanoc/Rules +74 -0
  305. data/templates/nanoc/config.yaml +77 -0
  306. data/templates/nanoc/content/favicon.ico +0 -0
  307. data/templates/nanoc/layouts/bootstrap.html.erb +63 -0
  308. data/templates/nanoc/layouts/bootstrap3.html.erb +71 -0
  309. data/templates/nanoc/layouts/freescale.html.erb +79 -0
  310. data/templates/nanoc/lib/bootstrap_filter.rb +49 -0
  311. data/templates/nanoc/lib/codeblocks_filter.rb +41 -0
  312. data/templates/nanoc/lib/default.rb +2 -0
  313. data/templates/nanoc/lib/gzip_filter.rb +16 -0
  314. data/templates/nanoc/lib/haml_code_filter.rb +41 -0
  315. data/templates/nanoc/lib/helpers.rb +1 -0
  316. data/templates/nanoc/lib/search_filter.rb +62 -0
  317. data/templates/nanoc_dynamic/content/search.js.erb +92 -0
  318. data/templates/shared/web/_logo.html +10 -0
  319. data/templates/test/_inline_sub.txt.erb +2 -0
  320. data/templates/test/environment.txt.erb +1 -0
  321. data/templates/test/inline.txt.erb +11 -0
  322. data/templates/test/inspections.txt.erb +19 -0
  323. data/templates/test/set1/_sub1.txt.erb +12 -0
  324. data/templates/test/set1/_sub4.txt.erb +1 -0
  325. data/templates/test/set1/_sub5.txt.erb +1 -0
  326. data/templates/test/set1/main.txt.erb +53 -0
  327. data/templates/test/set1/sub_dir/_sub2.txt.erb +20 -0
  328. data/templates/test/set1/sub_dir/_sub3.txt.erb +12 -0
  329. data/templates/test/set1/sub_dir/main2.txt.erb +4 -0
  330. data/templates/test/set2/template_with_no_erb_1.txt +9 -0
  331. data/templates/test/set2/template_with_no_erb_2.txt +9 -0
  332. data/templates/test/set3/_layout.html.erb +4 -0
  333. data/templates/test/set3/content.html.erb +6 -0
  334. data/templates/time/filter.rb.erb +15 -0
  335. data/templates/time/rules.rb.erb +45 -0
  336. metadata +639 -5
@@ -0,0 +1,552 @@
1
+ module Origen
2
+ module Specs
3
+ autoload :Spec, 'origen/specs/spec'
4
+ autoload :Note, 'origen/specs/note'
5
+ autoload :Exhibit, 'origen/specs/exhibit'
6
+ autoload :Doc_Resource, 'origen/specs/doc_resource.rb'
7
+ autoload :Override, 'origen/specs/override.rb'
8
+ autoload :Power_Supply, 'origen/specs/power_supply.rb'
9
+ autoload :Mode_Select, 'origen/specs/mode_select.rb'
10
+ autoload :Version_History, 'origen/specs/version_history.rb'
11
+ autoload :Creation_Info, 'origen/specs/creation_info.rb'
12
+ require_relative 'specs/checkers'
13
+
14
+ attr_accessor :_specs, :_notes, :_exhibits, :_doc_resources, :_overrides, :_power_supplies, :_mode_selects, :_version_history, :_creation_info
15
+
16
+ SPEC_TYPES = [:dc, :ac, :temperature, :supply]
17
+
18
+ NOTE_TYPES = [:spec, :doc, :mode, :feature, :sighting]
19
+
20
+ SpecTableAttr = Struct.new(:table_text, :show, :padding)
21
+
22
+ # Returns a hash of hash containing all specs/modes
23
+ # If no spec is specified then all specs are returned via inspect
24
+ # If a spec is specified, a spec object will be returned if found
25
+ # in the current mode. If a mode option is passed and no spec
26
+ # is passed it will filter the specs inspect display by the mode
27
+ # and visa-versa
28
+ def specs(s = nil, options = {})
29
+ options = {
30
+ type: nil,
31
+ sub_type: nil,
32
+ mode: current_mode.nil? ? nil : current_mode.name,
33
+ spec: nil,
34
+ verbose: false,
35
+ creating_spec: false
36
+ }.update(options)
37
+ _specs
38
+ if s.nil?
39
+ return show_specs(options)
40
+ elsif s.is_a? Hash # no spec was passed but some option was passed
41
+ options.update(s)
42
+ return show_specs(options)
43
+ else # a spec was passed
44
+ options[:spec] = s
45
+ return show_specs(options)
46
+ end
47
+ end
48
+
49
+ # Define and instantiate a Spec object
50
+ def spec(name, type, mode = nil, &block)
51
+ _specs
52
+ name = name_audit(name)
53
+ fail 'Specification names must be of SPEC_TYPES Symbol or String and cannot start with a number' if name.nil?
54
+ fail "Spec type must be one of #{SPEC_TYPES.join(', ')}" unless SPEC_TYPES.include? type
55
+ type = type
56
+ mode = get_mode if mode.nil?
57
+ owner_name = ''
58
+ if self.respond_to?(:name) && send(:name)
59
+ owner_name = self.name.to_s.downcase.to_sym
60
+ elsif self == Origen.top_level
61
+ owner_name = self.class.to_s.split('::').last.downcase.to_sym
62
+ else
63
+ owner_name = self.class.to_s.split('::').last.downcase.to_sym
64
+ end
65
+ spec_placeholder = Spec
66
+ .new(name, type, mode, owner_name, &block)
67
+ # Check if the spec already exists
68
+ if has_spec?(name, type: type, mode: mode, sub_type: spec_placeholder.sub_type, creating_spec: true)
69
+ fail "Spec already exists for name: #{name}, type: #{type}, mode: #{mode} for object #{self}"
70
+ end
71
+ @_specs[name][mode][type][spec_placeholder.sub_type] = spec_placeholder
72
+ end
73
+
74
+ # Returns Boolean based on whether the calling object has any defined specs
75
+ # If the mode option is selected then the search is narrowed
76
+ def has_specs?(options = {})
77
+ _specs
78
+ options = {
79
+ type: nil,
80
+ sub_type: nil,
81
+ mode: current_mode.nil? ? nil : current_mode.name,
82
+ spec: nil,
83
+ verbose: false,
84
+ creating_spec: false
85
+ }.update(options)
86
+ if @_specs.nil? || @_specs == {}
87
+ return false
88
+ else
89
+ return !!show_specs(options)
90
+ end
91
+ end
92
+
93
+ def get_modes
94
+ @_modes
95
+ end
96
+
97
+ # Check if the current IP has a spec
98
+ def has_spec?(s, options = {})
99
+ _specs
100
+ options = {
101
+ type: nil,
102
+ sub_type: nil,
103
+ mode: current_mode.nil? ? nil : current_mode.name,
104
+ spec: nil,
105
+ verbose: false,
106
+ creating_spec: false
107
+ }.update(options)
108
+ options[:spec] = s
109
+ !!show_specs(options)
110
+ end
111
+
112
+ # Define and instantiate a Note object
113
+ def note(id, type, options = {})
114
+ _notes
115
+ @_notes[id][type] = Note.new(id, type, options)
116
+ end
117
+
118
+ def exhibit(id, type, options = {})
119
+ _exhibits
120
+ @_exhibits[id][type] = Exhibit.new(id, type, options)
121
+ end
122
+
123
+ def doc_resource(selector = {}, table_title = {}, text = {}, options = {})
124
+ _doc_resources
125
+ mode = selector[:mode]
126
+ type = selector[:type]
127
+ sub_type = selector[:sub_type]
128
+ audience = selector[:audience]
129
+ @_doc_resources[mode][type][sub_type][audience] = Doc_Resource.new(selector, table_title, text, options)
130
+ end
131
+
132
+ def version_history(date, author, changes)
133
+ _version_history
134
+ tmp_ver_history = Version_History.new(date, author, changes)
135
+ @_version_history[date][author] = tmp_ver_history
136
+ end
137
+
138
+ def override(block_options = {}, find_spec = {}, values = {}, options = {})
139
+ _overrides
140
+ block = block_options[:block]
141
+ spec_ref = find_spec[:spec_id]
142
+ mode_ref = find_spec[:mode_ref]
143
+ sub_type = find_spec[:sub_type]
144
+ audience = find_spec[:audience]
145
+ @_overrides[block][spec_ref][mode_ref][sub_type][audience] = Override.new(block_options, find_spec, values, options)
146
+ end
147
+
148
+ def power_supply(gen, act)
149
+ _power_supplies
150
+ @_power_supplies[gen][act] = Power_Supply.new(gen, act)
151
+ end
152
+
153
+ def mode_select(blk, use, mode_ref, support, loc)
154
+ _mode_selects
155
+ if use
156
+ @_mode_selects[blk][mode_ref] = Mode_Select.new(blk, use, mode_ref, support, loc)
157
+ end
158
+ end
159
+
160
+ def creation_info(author, date, src_info = {}, tool_info = {})
161
+ @_creation_info = Creation_Info.new(author, date, src_info, tool_info)
162
+ end
163
+
164
+ # Returns a Note object from the notes hash
165
+ def notes(options = {})
166
+ options = {
167
+ id: nil,
168
+ type: nil
169
+ }.update(options)
170
+ notes_found = Hash.new do |h, k|
171
+ h[k] = {}
172
+ end
173
+ _notes.filter(options[:id]).each do |id, hash|
174
+ hash.filter(options[:type]).each do |type, note|
175
+ notes_found[id][type] = note
176
+ end
177
+ end
178
+ if notes_found.empty?
179
+ return nil
180
+ elsif notes_found.size == 1
181
+ notes_found.values.first.values.first
182
+ else
183
+ return notes_found
184
+ end
185
+ end
186
+
187
+ def exhibits(options = {})
188
+ options = {
189
+ id: nil,
190
+ type: nil
191
+ }.update(options)
192
+ exhibits_found = Hash.new do|h, k|
193
+ h[k] = {}
194
+ end
195
+ _exhibits.filter(options[:id]).each do |id, hash|
196
+ hash.filter(options[:type]).each do |type, exhibit|
197
+ exhibits_found[id][type] = exhibit
198
+ end
199
+ end
200
+ if exhibits_found.empty?
201
+ return nil
202
+ elsif exhibits_found.size == 1
203
+ return exhibits_found.values.first.values.first
204
+ else
205
+ return exhibits_found
206
+ end
207
+ end
208
+
209
+ def doc_resources(options = {})
210
+ options = {
211
+ mode: nil,
212
+ type: nil,
213
+ sub_type: nil,
214
+ audience: nil,
215
+ doc_resources_to_be_shown: []
216
+ }.update(options)
217
+ doc_resources_to_be_shown = options[:doc_resources_to_be_shown]
218
+ filter_hash(_doc_resources, options[:mode]).each do |_doc_resource, hash|
219
+ filter_hash(hash, options[:type]).each do |_type, hash_|
220
+ filter_hash(hash_, options[:sub_type]).each do |_sub_type, hash__|
221
+ filter_hash(hash__, options[:audience]).each do |_audience, spec|
222
+ doc_resources_to_be_shown << spec
223
+ end
224
+ end
225
+ end
226
+ end
227
+ end
228
+
229
+ def overrides(options = {})
230
+ options = {
231
+ block: nil,
232
+ spec_ref: nil,
233
+ mode_ref: nil,
234
+ sub_type: nil,
235
+ audience: nil,
236
+ overrides: []
237
+ }.update(options)
238
+ overrides = options[:overrides]
239
+ filter_hash(_overrides, options[:block]).each do |_override, hash|
240
+ filter_hash(hash, options[:spec_ref]).each do |_spec_ref, hash_|
241
+ filter_hash(hash_, options[:mode_ref]).each do |_mode_ref, hash__|
242
+ filter_hash(hash__, options[:sub_type]).each do |_sub_type, hash___|
243
+ filter_hash(hash___, options[:audience]).each do |_audience, override|
244
+ overrides << override
245
+ end
246
+ end
247
+ end
248
+ end
249
+ end
250
+ end
251
+
252
+ def mode_selects(options = {})
253
+ options = {
254
+ block: nil,
255
+ mode: nil
256
+ }.update(options)
257
+ modes_found = Hash.new do|h, k|
258
+ h[k] = {}
259
+ end
260
+ _mode_selects.filter(options[:block]).each do |block, hash|
261
+ hash.filter(options[:mode]).each do |mode, sel|
262
+ modes_found[block][mode] = sel
263
+ end
264
+ end
265
+ if modes_found.empty?
266
+ return nil
267
+ elsif modes_found.size == 1
268
+ return modes_found.values.first.values.first
269
+ else
270
+ return modes_found
271
+ end
272
+ end
273
+
274
+ def power_supplies(options = {})
275
+ options = {
276
+ gen: nil,
277
+ act: nil
278
+ }.update(options)
279
+ ps_found = Hash.new do|h, k|
280
+ h[k] = {}
281
+ end
282
+ _power_supplies.filter(options[:gen]).each do |gen, hash|
283
+ hash.filter(options[:act]).each do |act, sel|
284
+ ps_found[gen][act] = sel
285
+ end
286
+ end
287
+ if ps_found.empty?
288
+ return nil
289
+ elsif ps_found.size == 1
290
+ return ps_found.values.first.values.first
291
+ else
292
+ return ps_found
293
+ end
294
+ end
295
+
296
+ def versions
297
+ @_version_history
298
+ end
299
+
300
+ def info
301
+ @_creation_info
302
+ end
303
+
304
+ # Delete all specs
305
+ def delete_all_specs
306
+ @_specs = nil
307
+ end
308
+
309
+ # Delete all notes
310
+ def delete_all_notes
311
+ @_notes = nil
312
+ end
313
+
314
+ # Delete all exhibits
315
+ def delete_all_exhibits
316
+ @_exhibits = nil
317
+ end
318
+
319
+ def delete_all_doc_resources
320
+ @_doc_resources = nil
321
+ end
322
+
323
+ def delete_all_overrides
324
+ @_overrides = nil
325
+ end
326
+
327
+ def delete_all_power_supplies
328
+ @_power_supplies = nil
329
+ end
330
+
331
+ def delete_all_version_history
332
+ @_version_history = nil
333
+ end
334
+
335
+ def delete_all_mode_selects
336
+ @_mode_selects = nil
337
+ end
338
+
339
+ def delete_creation_info
340
+ @_creation_info = nil
341
+ end
342
+
343
+ private
344
+
345
+ def _specs
346
+ # 4D hash with name, type, mode, and sub_type as keys
347
+ @_specs ||= Hash.new do |h, k|
348
+ h[k] = Hash.new do |hh, kk|
349
+ hh[kk] = Hash.new do |hhh, kkk|
350
+ hhh[kkk] = {}
351
+ end
352
+ end
353
+ end
354
+ end
355
+
356
+ # Two-dimensional hash with note id and type as the keys
357
+ def _notes
358
+ @_notes ||= Hash.new do |h, k|
359
+ h[k] = {}
360
+ end
361
+ end
362
+
363
+ def _exhibits
364
+ @_exhibits ||= Hash.new do |h, k|
365
+ h[k] = {}
366
+ end
367
+ end
368
+
369
+ def _doc_resources
370
+ @_doc_resources ||= Hash.new do |h, k|
371
+ h[k] = Hash.new do |hh, kk|
372
+ hh[kk] = Hash.new do |hhh, kkk|
373
+ hhh[kkk] = {}
374
+ end
375
+ end
376
+ end
377
+ end
378
+
379
+ def _overrides
380
+ @_overrides ||= Hash.new do |h, k|
381
+ h[k] = Hash.new do |hh, kk|
382
+ hh[kk] = Hash.new do |hhh, kkk|
383
+ hhh[kkk] = Hash.new do |hhhh, kkkk|
384
+ hhhh[kkkk] = {}
385
+ end
386
+ end
387
+ end
388
+ end
389
+ end
390
+
391
+ def _power_supplies
392
+ @_power_supplies ||= Hash.new do |h, k|
393
+ h[k] = {}
394
+ end
395
+ end
396
+
397
+ def _mode_selects
398
+ @_mode_selects ||= Hash.new do |h, k|
399
+ h[k] = {}
400
+ end
401
+ end
402
+
403
+ def _version_history
404
+ @_version_history ||= Hash.new do |h, k|
405
+ h[k] = {}
406
+ end
407
+ end
408
+
409
+ def _creation_info
410
+ @_creation_info = nil
411
+ end
412
+
413
+ # Return a hash based on the filter provided
414
+ def filter_hash(hash, filter)
415
+ fail 'Hash argument is not a Hash!' unless hash.is_a? Hash
416
+ filtered_hash = {}
417
+ select_logic = case filter
418
+ when String then 'k[Regexp.new(filter)]'
419
+ when (Fixnum || Integer || Float || Numeric) then "k[Regexp.new('#{filter}')]"
420
+ when Regexp then 'k[filter]'
421
+ when Symbol then
422
+ 'k == filter'
423
+ when NilClass then true # Return all specs if a filter is set to nil (i.e. user doesn't care about this filter)
424
+ else true
425
+ end
426
+ # rubocop:disable UnusedBlockArgument
427
+ filtered_hash = hash.select do |k, v|
428
+ [TrueClass, FalseClass].include?(select_logic.class) ? select_logic : eval(select_logic)
429
+ end
430
+ filtered_hash
431
+ end
432
+
433
+ # Filters the 4D hash to find specs for all user visible API
434
+ def show_specs(options = {})
435
+ options = {
436
+ mode: nil,
437
+ spec: nil,
438
+ type: nil,
439
+ sub_type: nil,
440
+ verbose: false,
441
+ specs_to_be_shown: [],
442
+ owner: nil,
443
+ creating_spec: false
444
+ }.update(options)
445
+ specs_to_be_shown = options[:specs_to_be_shown]
446
+ filter_hash(_specs, options[:spec]).each do |_spec, hash|
447
+ filter_hash(hash, options[:mode]).each do |_mode, hash_|
448
+ filter_hash(hash_, options[:type]).each do |_type, hash__|
449
+ filter_hash(hash__, options[:sub_type]).each do |_sub_type, spec|
450
+ specs_to_be_shown << spec
451
+ end
452
+ end
453
+ end
454
+ end
455
+ # If no specs were found must check the possibility another search
456
+ # should be started with mode set to :local or :global
457
+ if specs_to_be_shown.empty?
458
+ # Don't want to re-call this method if the callee is trying to create a spec and just wants to know
459
+ # if there is a spec with the exact same options
460
+ if options[:creating_spec] == false
461
+ # Doesn't make sense to recall the method however if the mode is already set to :global or :local
462
+ unless [:global, :local, nil].include?(options[:mode])
463
+ # Need to check if there are :global or :local specs that match the filter(s) as well
464
+ if self == Origen.top_level
465
+ options[:mode] = :global
466
+ else
467
+ options[:mode] = :local
468
+ end
469
+ options[:specs_to_be_shown] = specs_to_be_shown
470
+ Origen.log.debug "re-calling show_specs with options #{options}"
471
+ return show_specs(options)
472
+ end
473
+ end
474
+ Origen.log.debug "Returning no specs for options #{options}"
475
+ return nil
476
+ elsif specs_to_be_shown.size == 1
477
+ print_to_console(specs_to_be_shown) if options[:verbose] == true
478
+ Origen.log.debug "returning one spec #{specs_to_be_shown.first.name}"
479
+ return specs_to_be_shown.first
480
+ else
481
+ Origen.log.debug "returning an array of specs during initial search: #{specs_to_be_shown}"
482
+ print_to_console(specs_to_be_shown) if options[:verbose] == true
483
+ return specs_to_be_shown
484
+ end
485
+ end
486
+
487
+ # Method to print a spec table to the console
488
+ def print_to_console(specs_to_be_shown)
489
+ whitespace_padding = 3
490
+ table = []
491
+ attrs_to_be_shown = {
492
+ name: SpecTableAttr.new('Name', true, 'Name'.length + whitespace_padding),
493
+ symbol: SpecTableAttr.new('Symbol', false, 'Symbol'.length + whitespace_padding),
494
+ mode: SpecTableAttr.new('Mode', true, 'Mode'.length + whitespace_padding),
495
+ type: SpecTableAttr.new('Type', true, 'Type'.length + whitespace_padding),
496
+ sub_type: SpecTableAttr.new('Sub-Type', false, 'Sub-Type'.length + whitespace_padding),
497
+ # spec SpecTableAttribute :description is called parameter in the spec table output to match historical docs
498
+ description: SpecTableAttr.new('Parameter', false, 'Parameter'.length + whitespace_padding),
499
+ min: SpecTableAttr.new('Min', false, 'Min'.length + whitespace_padding),
500
+ typ: SpecTableAttr.new('Typ', false, 'Typ'.length + whitespace_padding),
501
+ max: SpecTableAttr.new('Max', false, 'Max'.length + whitespace_padding),
502
+ unit: SpecTableAttr.new('Unit', false, 'Unit'.length + whitespace_padding),
503
+ audience: SpecTableAttr.new('Audience', false, 'Audience'.length + whitespace_padding)
504
+ # notes: SpecTableAttr.new('Notes', false, 'Notes'.length + whitespace_padding)
505
+ }
506
+ # Calculate the padding needed in the spec table for the longest attr of all specs
507
+ specs_to_be_shown.each do |spec|
508
+ attrs_to_be_shown.each do |attr_name, attr_struct|
509
+ unless spec.send(attr_name).nil?
510
+ if spec.send(attr_name).class == Origen::Specs::Spec::Limit
511
+ next if spec.send(attr_name).value.nil?
512
+ current_padding = spec.send(attr_name).value.to_s.length + whitespace_padding
513
+ else
514
+ current_padding = spec.send(attr_name).to_s.length + whitespace_padding
515
+ end
516
+ attr_struct.padding = current_padding if attr_struct.padding < current_padding
517
+ attr_struct.show = true # We found real data for this attr on at least one spec so show it in the spec table
518
+ end
519
+ end
520
+ end
521
+ # Now that each spec attribute padding construct the spec table header
522
+ header = ''
523
+ attrs_to_be_shown.each do |_attr_name, attr_struct|
524
+ next if attr_struct.show == false
525
+ header += "| #{attr_struct.table_text}".ljust(attr_struct.padding)
526
+ end
527
+ header += '|'
528
+ ip_header = "| IP: #{specs_to_be_shown.first.ip_name} ".ljust(header.length - 1)
529
+ ip_header += '|'
530
+ table << '=' * header.length
531
+ table << ip_header
532
+ table << '=' * header.length
533
+ table << header
534
+ table << '-' * header.length
535
+ # Create the data lines in the spec table
536
+ specs_to_be_shown.each do |spec|
537
+ data = ''
538
+ attrs_to_be_shown.each do |attr_name, attr_struct|
539
+ next if attr_struct.show == false
540
+ if spec.send(attr_name).class == Origen::Specs::Spec::Limit
541
+ data += "| #{spec.send(attr_name).value}".ljust(attr_struct.padding)
542
+ else
543
+ data += "| #{spec.send(attr_name)}".ljust(attr_struct.padding)
544
+ end
545
+ end
546
+ table << data += '|'
547
+ end
548
+ table << '-' * header.length
549
+ puts table.flatten.join("\n")
550
+ end
551
+ end
552
+ end