origen 0.0.1 → 0.0.2
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 +4 -4
- data/bin/ctags +0 -0
- data/bin/origen +165 -1
- data/bin/rgen +2 -0
- data/config/application.rb +141 -0
- data/config/commands.rb +72 -0
- data/config/development.rb +7 -0
- data/config/environment.rb +0 -0
- data/config/rgen.policy +7 -0
- data/config/rubocop/easy.yml +620 -0
- data/config/rubocop/easy_disabled.yml +271 -0
- data/config/rubocop/easy_enabled.yml +731 -0
- data/config/rubocop/strict.yml +620 -0
- data/config/rubocop/strict_disabled.yml +247 -0
- data/config/rubocop/strict_enabled.yml +755 -0
- data/config/users.rb +20 -0
- data/config/version.rb +1 -1
- data/helpers/url.rb +68 -0
- data/lib/c99/doc_interface.rb +56 -0
- data/lib/c99/j750_interface.rb +85 -0
- data/lib/c99/nvm.rb +89 -0
- data/lib/c99/target/mock2.rb +1 -0
- data/lib/c99/target/subdir/mock3.rb +1 -0
- data/lib/option_parser/optparse.rb +12 -0
- data/lib/origen/acronyms.rb +60 -0
- data/lib/origen/application/command_dispatcher.rb +12 -0
- data/lib/origen/application/configuration.rb +206 -0
- data/lib/origen/application/configuration_manager.rb +78 -0
- data/lib/origen/application/deployer.rb +367 -0
- data/lib/origen/application/environment.rb +186 -0
- data/lib/origen/application/lsf.rb +145 -0
- data/lib/origen/application/lsf_manager.rb +657 -0
- data/lib/origen/application/plugins_manager.rb +280 -0
- data/lib/origen/application/release.rb +359 -0
- data/lib/origen/application/runner.rb +246 -0
- data/lib/origen/application/statistics.rb +191 -0
- data/lib/origen/application/target.rb +374 -0
- data/lib/origen/application/version_tracker.rb +59 -0
- data/lib/origen/application/workspace_manager.rb +151 -0
- data/lib/origen/application.rb +746 -0
- data/lib/origen/bugs/bug.rb +36 -0
- data/lib/origen/bugs.rb +45 -0
- data/lib/origen/callbacks.rb +35 -0
- data/lib/origen/chip_mode.rb +118 -0
- data/lib/origen/chip_package.rb +461 -0
- data/lib/origen/client.rb +87 -0
- data/lib/origen/code_generators/actions.rb +258 -0
- data/lib/origen/code_generators/base.rb +57 -0
- data/lib/origen/code_generators/bundler.rb +17 -0
- data/lib/origen/code_generators/gem_setup.rb +49 -0
- data/lib/origen/code_generators/rake.rb +13 -0
- data/lib/origen/code_generators/rspec.rb +12 -0
- data/lib/origen/code_generators/semver.rb +39 -0
- data/lib/origen/code_generators/timever.rb +37 -0
- data/lib/origen/code_generators.rb +111 -0
- data/lib/origen/commands/add.rb +12 -0
- data/lib/origen/commands/compile.rb +62 -0
- data/lib/origen/commands/ctags.rb +9 -0
- data/lib/origen/commands/dispatch.rb +22 -0
- data/lib/origen/commands/environment.rb +11 -0
- data/lib/origen/commands/fetch.rb +63 -0
- data/lib/origen/commands/generate.rb +130 -0
- data/lib/origen/commands/interactive.rb +73 -0
- data/lib/origen/commands/lint.rb +82 -0
- data/lib/origen/commands/lsf.rb +93 -0
- data/lib/origen/commands/merge.rb +55 -0
- data/lib/origen/commands/modifications.rb +12 -0
- data/lib/origen/commands/new.rb +113 -0
- data/lib/origen/commands/plugin.rb +105 -0
- data/lib/origen/commands/program.rb +70 -0
- data/lib/origen/commands/rc.rb +442 -0
- data/lib/origen/commands/save.rb +56 -0
- data/lib/origen/commands/target.rb +27 -0
- data/lib/origen/commands/time.rb +127 -0
- data/lib/origen/commands/version.rb +17 -0
- data/lib/origen/commands/web.rb +221 -0
- data/lib/origen/commands.rb +272 -0
- data/lib/origen/commands_global.rb +76 -0
- data/lib/origen/controller.rb +94 -0
- data/lib/origen/core_ext/array.rb +23 -0
- data/lib/origen/core_ext/bignum.rb +36 -0
- data/lib/origen/core_ext/enumerable.rb +76 -0
- data/lib/origen/core_ext/fixnum.rb +46 -0
- data/lib/origen/core_ext/hash.rb +52 -0
- data/lib/origen/core_ext/module.rb +14 -0
- data/lib/origen/core_ext/numeric.rb +126 -0
- data/lib/origen/core_ext/object.rb +13 -0
- data/lib/origen/core_ext/range.rb +7 -0
- data/lib/origen/core_ext/string.rb +124 -0
- data/lib/origen/core_ext.rb +10 -0
- data/lib/origen/database/key_value_store.rb +111 -0
- data/lib/origen/database/key_value_stores.rb +108 -0
- data/lib/origen/database.rb +6 -0
- data/lib/origen/encodings.rb +102 -0
- data/lib/origen/features/feature.rb +22 -0
- data/lib/origen/features.rb +104 -0
- data/lib/origen/file_handler.rb +429 -0
- data/lib/origen/generator/comparator.rb +56 -0
- data/lib/origen/generator/compiler.rb +277 -0
- data/lib/origen/generator/flow.rb +49 -0
- data/lib/origen/generator/job.rb +131 -0
- data/lib/origen/generator/pattern.rb +356 -0
- data/lib/origen/generator/pattern_finder.rb +155 -0
- data/lib/origen/generator/pattern_iterator.rb +55 -0
- data/lib/origen/generator/renderer.rb +113 -0
- data/lib/origen/generator/resources.rb +40 -0
- data/lib/origen/generator/stage.rb +89 -0
- data/lib/origen/generator.rb +85 -0
- data/lib/origen/global_methods.rb +205 -0
- data/lib/origen/import_manager.rb +596 -0
- data/lib/origen/location/base.rb +116 -0
- data/lib/origen/location/map.rb +83 -0
- data/lib/origen/location.rb +6 -0
- data/lib/origen/log.rb +217 -0
- data/lib/origen/logger_methods.rb +56 -0
- data/lib/origen/mode.rb +61 -0
- data/lib/origen/model.rb +267 -0
- data/lib/origen/model_initializer.rb +45 -0
- data/lib/origen/nvm/block_array.rb +72 -0
- data/lib/origen/nvm.rb +6 -0
- data/lib/origen/parameters/live.rb +22 -0
- data/lib/origen/parameters/missing.rb +28 -0
- data/lib/origen/parameters/set.rb +144 -0
- data/lib/origen/parameters.rb +107 -0
- data/lib/origen/pdm.rb +218 -0
- data/lib/origen/pins/function_proxy.rb +36 -0
- data/lib/origen/pins/ground_pin.rb +6 -0
- data/lib/origen/pins/pin.rb +860 -0
- data/lib/origen/pins/pin_bank.rb +349 -0
- data/lib/origen/pins/pin_clock.rb +124 -0
- data/lib/origen/pins/pin_collection.rb +492 -0
- data/lib/origen/pins/pin_common.rb +206 -0
- data/lib/origen/pins/port.rb +268 -0
- data/lib/origen/pins/power_pin.rb +30 -0
- data/lib/origen/pins.rb +696 -0
- data/lib/origen/registers/bit.rb +562 -0
- data/lib/origen/registers/bit_collection.rb +787 -0
- data/lib/origen/registers/container.rb +288 -0
- data/lib/origen/registers/domain.rb +16 -0
- data/lib/origen/registers/reg.rb +1406 -0
- data/lib/origen/registers/reg_collection.rb +24 -0
- data/lib/origen/registers.rb +652 -0
- data/lib/origen/regression_manager.rb +251 -0
- data/lib/origen/remote_manager.rb +340 -0
- data/lib/origen/revision_control/base.rb +257 -0
- data/lib/origen/revision_control/design_sync.rb +276 -0
- data/lib/origen/revision_control/git.rb +243 -0
- data/lib/origen/revision_control/subversion.rb +6 -0
- data/lib/origen/revision_control.rb +44 -0
- data/lib/origen/ruby_version_check.rb +131 -0
- data/lib/origen/site_config.rb +61 -0
- data/lib/origen/specs/checkers.rb +103 -0
- data/lib/origen/specs/creation_info.rb +17 -0
- data/lib/origen/specs/doc_resource.rb +91 -0
- data/lib/origen/specs/exhibit.rb +17 -0
- data/lib/origen/specs/mode_select.rb +16 -0
- data/lib/origen/specs/note.rb +17 -0
- data/lib/origen/specs/override.rb +21 -0
- data/lib/origen/specs/power_supply.rb +13 -0
- data/lib/origen/specs/spec.rb +226 -0
- data/lib/origen/specs/version_history.rb +14 -0
- data/lib/origen/specs.rb +552 -0
- data/lib/origen/sub_blocks.rb +298 -0
- data/lib/origen/tester/api.rb +277 -0
- data/lib/origen/tester/bdm/bdm.rb +25 -0
- data/lib/origen/tester/command_based_tester.rb +46 -0
- data/lib/origen/tester/doc/doc.rb +226 -0
- data/lib/origen/tester/doc/generator/flow.rb +71 -0
- data/lib/origen/tester/doc/generator/flow_line.rb +203 -0
- data/lib/origen/tester/doc/generator/test.rb +68 -0
- data/lib/origen/tester/doc/generator/test_group.rb +66 -0
- data/lib/origen/tester/doc/generator/tests.rb +47 -0
- data/lib/origen/tester/doc/generator.rb +126 -0
- data/lib/origen/tester/doc/model.rb +162 -0
- data/lib/origen/tester/generator/flow_control_api.rb +606 -0
- data/lib/origen/tester/generator/identity_map.rb +25 -0
- data/lib/origen/tester/generator/placeholder.rb +13 -0
- data/lib/origen/tester/generator/test_numberer.rb +25 -0
- data/lib/origen/tester/generator.rb +271 -0
- data/lib/origen/tester/interface.rb +154 -0
- data/lib/origen/tester/j750/files.rb +45 -0
- data/lib/origen/tester/j750/generator/flow.rb +123 -0
- data/lib/origen/tester/j750/generator/flow_line.rb +288 -0
- data/lib/origen/tester/j750/generator/patgroup.rb +111 -0
- data/lib/origen/tester/j750/generator/patgroups.rb +41 -0
- data/lib/origen/tester/j750/generator/patset.rb +111 -0
- data/lib/origen/tester/j750/generator/patsets.rb +41 -0
- data/lib/origen/tester/j750/generator/templates/flow.txt.erb +9 -0
- data/lib/origen/tester/j750/generator/templates/instances.txt.erb +16 -0
- data/lib/origen/tester/j750/generator/templates/patgroups.txt.erb +8 -0
- data/lib/origen/tester/j750/generator/templates/patsets.txt.erb +10 -0
- data/lib/origen/tester/j750/generator/test_instance.rb +846 -0
- data/lib/origen/tester/j750/generator/test_instance_group.rb +60 -0
- data/lib/origen/tester/j750/generator/test_instances.rb +182 -0
- data/lib/origen/tester/j750/generator.rb +203 -0
- data/lib/origen/tester/j750/j750.rb +845 -0
- data/lib/origen/tester/j750/j750_hpt.rb +35 -0
- data/lib/origen/tester/j750/parser/ac_spec.rb +11 -0
- data/lib/origen/tester/j750/parser/ac_specs.rb +0 -0
- data/lib/origen/tester/j750/parser/dc_spec.rb +36 -0
- data/lib/origen/tester/j750/parser/dc_specs.rb +50 -0
- data/lib/origen/tester/j750/parser/descriptions.rb +340 -0
- data/lib/origen/tester/j750/parser/flow.rb +111 -0
- data/lib/origen/tester/j750/parser/flow_line.rb +207 -0
- data/lib/origen/tester/j750/parser/flows.rb +23 -0
- data/lib/origen/tester/j750/parser/pattern_set.rb +94 -0
- data/lib/origen/tester/j750/parser/pattern_sets.rb +33 -0
- data/lib/origen/tester/j750/parser/test_instance.rb +322 -0
- data/lib/origen/tester/j750/parser/test_instances.rb +26 -0
- data/lib/origen/tester/j750/parser/timeset.rb +15 -0
- data/lib/origen/tester/j750/parser/timesets.rb +0 -0
- data/lib/origen/tester/j750/parser.rb +104 -0
- data/lib/origen/tester/jlink/jlink.rb +33 -0
- data/lib/origen/tester/parser/description_lookup.rb +64 -0
- data/lib/origen/tester/parser/searchable_array.rb +32 -0
- data/lib/origen/tester/parser/searchable_hash.rb +32 -0
- data/lib/origen/tester/parser.rb +24 -0
- data/lib/origen/tester/time.rb +338 -0
- data/lib/origen/tester/timing.rb +253 -0
- data/lib/origen/tester/ultraflex/files.rb +45 -0
- data/lib/origen/tester/ultraflex/generator/flow.rb +119 -0
- data/lib/origen/tester/ultraflex/generator/flow_line.rb +269 -0
- data/lib/origen/tester/ultraflex/generator/patgroup.rb +111 -0
- data/lib/origen/tester/ultraflex/generator/patgroups.rb +41 -0
- data/lib/origen/tester/ultraflex/generator/patset.rb +111 -0
- data/lib/origen/tester/ultraflex/generator/patsets.rb +41 -0
- data/lib/origen/tester/ultraflex/generator/templates/flow.txt.erb +9 -0
- data/lib/origen/tester/ultraflex/generator/templates/instances.txt.erb +16 -0
- data/lib/origen/tester/ultraflex/generator/templates/patgroups.txt.erb +8 -0
- data/lib/origen/tester/ultraflex/generator/templates/patsets.txt.erb +10 -0
- data/lib/origen/tester/ultraflex/generator/test_instance.rb +622 -0
- data/lib/origen/tester/ultraflex/generator/test_instance_group.rb +60 -0
- data/lib/origen/tester/ultraflex/generator/test_instances.rb +174 -0
- data/lib/origen/tester/ultraflex/generator.rb +200 -0
- data/lib/origen/tester/ultraflex/parser/ac_spec.rb +11 -0
- data/lib/origen/tester/ultraflex/parser/ac_specs.rb +0 -0
- data/lib/origen/tester/ultraflex/parser/dc_spec.rb +36 -0
- data/lib/origen/tester/ultraflex/parser/dc_specs.rb +50 -0
- data/lib/origen/tester/ultraflex/parser/descriptions.rb +342 -0
- data/lib/origen/tester/ultraflex/parser/flow.rb +111 -0
- data/lib/origen/tester/ultraflex/parser/flow_line.rb +207 -0
- data/lib/origen/tester/ultraflex/parser/flows.rb +23 -0
- data/lib/origen/tester/ultraflex/parser/pattern_set.rb +94 -0
- data/lib/origen/tester/ultraflex/parser/pattern_sets.rb +33 -0
- data/lib/origen/tester/ultraflex/parser/test_instance.rb +262 -0
- data/lib/origen/tester/ultraflex/parser/test_instances.rb +26 -0
- data/lib/origen/tester/ultraflex/parser/timeset.rb +15 -0
- data/lib/origen/tester/ultraflex/parser/timesets.rb +0 -0
- data/lib/origen/tester/ultraflex/parser.rb +104 -0
- data/lib/origen/tester/ultraflex/ultraflex.rb +759 -0
- data/lib/origen/tester/v93k/generator/flow.rb +63 -0
- data/lib/origen/tester/v93k/generator/flow_node/print.rb +10 -0
- data/lib/origen/tester/v93k/generator/flow_node.rb +17 -0
- data/lib/origen/tester/v93k/generator/pattern.rb +16 -0
- data/lib/origen/tester/v93k/generator/pattern_master.rb +54 -0
- data/lib/origen/tester/v93k/generator/templates/_test_method.txt.erb +6 -0
- data/lib/origen/tester/v93k/generator/templates/_test_suite.txt.erb +11 -0
- data/lib/origen/tester/v93k/generator/templates/template.flow.erb +121 -0
- data/lib/origen/tester/v93k/generator/templates/template.pmfl.erb +9 -0
- data/lib/origen/tester/v93k/generator/test_function.rb +103 -0
- data/lib/origen/tester/v93k/generator/test_functions.rb +79 -0
- data/lib/origen/tester/v93k/generator/test_method.rb +46 -0
- data/lib/origen/tester/v93k/generator/test_methods.rb +75 -0
- data/lib/origen/tester/v93k/generator/test_suite.rb +54 -0
- data/lib/origen/tester/v93k/generator/test_suites.rb +65 -0
- data/lib/origen/tester/v93k/generator.rb +80 -0
- data/lib/origen/tester/v93k/v93k.rb +420 -0
- data/lib/origen/tester/vector.rb +86 -0
- data/lib/origen/tester/vector_generator.rb +633 -0
- data/lib/origen/tester/vector_pipeline.rb +150 -0
- data/lib/origen/tester.rb +56 -0
- data/lib/origen/top_level.rb +134 -0
- data/lib/origen/users/ldap.rb +65 -0
- data/lib/origen/users/user.rb +149 -0
- data/lib/origen/users.rb +30 -0
- data/lib/origen/utility/block_args.rb +93 -0
- data/lib/origen/utility/csv_data.rb +110 -0
- data/lib/origen/utility/design_sync.rb +494 -0
- data/lib/origen/utility/diff.rb +158 -0
- data/lib/origen/utility/input_capture.rb +121 -0
- data/lib/origen/utility/mailer.rb +143 -0
- data/lib/origen/utility/s_record.rb +205 -0
- data/lib/origen/utility/time_and_date.rb +30 -0
- data/lib/origen/utility.rb +12 -0
- data/lib/origen/version_checker.rb +117 -0
- data/lib/origen/version_string.rb +356 -0
- data/lib/origen.rb +648 -0
- data/lib/tasks/gem.rake +27 -22
- data/origen_site_config.yml +36 -0
- data/source_setup +17 -0
- data/spec/format/rgen_formatter.rb +14 -0
- data/templates/api_doc/README.txt.erb +24 -0
- data/templates/code_generators/gemfile_app.rb +4 -0
- data/templates/code_generators/gemfile_plugin.rb +6 -0
- data/templates/code_generators/gemspec.rb +33 -0
- data/templates/code_generators/rakefile.rb +10 -0
- data/templates/code_generators/spec_helper.rb +49 -0
- data/templates/code_generators/version.rb +8 -0
- data/templates/code_generators/version_time.rb +3 -0
- data/templates/git/gitignore.erb +33 -0
- data/templates/j750/_vt_flow.txt.erb +8 -0
- data/templates/j750/_vt_instances.txt.erb +4 -0
- data/templates/j750/program_sheet.txt.erb +9 -0
- data/templates/nanoc/Rules +74 -0
- data/templates/nanoc/config.yaml +77 -0
- data/templates/nanoc/content/favicon.ico +0 -0
- data/templates/nanoc/layouts/bootstrap.html.erb +63 -0
- data/templates/nanoc/layouts/bootstrap3.html.erb +71 -0
- data/templates/nanoc/layouts/freescale.html.erb +79 -0
- data/templates/nanoc/lib/bootstrap_filter.rb +49 -0
- data/templates/nanoc/lib/codeblocks_filter.rb +41 -0
- data/templates/nanoc/lib/default.rb +2 -0
- data/templates/nanoc/lib/gzip_filter.rb +16 -0
- data/templates/nanoc/lib/haml_code_filter.rb +41 -0
- data/templates/nanoc/lib/helpers.rb +1 -0
- data/templates/nanoc/lib/search_filter.rb +62 -0
- data/templates/nanoc_dynamic/content/search.js.erb +92 -0
- data/templates/shared/web/_logo.html +10 -0
- data/templates/test/_inline_sub.txt.erb +2 -0
- data/templates/test/environment.txt.erb +1 -0
- data/templates/test/inline.txt.erb +11 -0
- data/templates/test/inspections.txt.erb +19 -0
- data/templates/test/set1/_sub1.txt.erb +12 -0
- data/templates/test/set1/_sub4.txt.erb +1 -0
- data/templates/test/set1/_sub5.txt.erb +1 -0
- data/templates/test/set1/main.txt.erb +53 -0
- data/templates/test/set1/sub_dir/_sub2.txt.erb +20 -0
- data/templates/test/set1/sub_dir/_sub3.txt.erb +12 -0
- data/templates/test/set1/sub_dir/main2.txt.erb +4 -0
- data/templates/test/set2/template_with_no_erb_1.txt +9 -0
- data/templates/test/set2/template_with_no_erb_2.txt +9 -0
- data/templates/test/set3/_layout.html.erb +4 -0
- data/templates/test/set3/content.html.erb +6 -0
- data/templates/time/filter.rb.erb +15 -0
- data/templates/time/rules.rb.erb +45 -0
- metadata +639 -5
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require 'irb'
|
|
2
|
+
require 'irb/completion'
|
|
3
|
+
|
|
4
|
+
ARGV << '--help' if ARGV.empty?
|
|
5
|
+
|
|
6
|
+
aliases = {
|
|
7
|
+
'i' => 'interactive',
|
|
8
|
+
'f' => 'fetch'
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
command = ARGV.shift
|
|
12
|
+
command = aliases[command] || command
|
|
13
|
+
|
|
14
|
+
require 'origen/global_methods'
|
|
15
|
+
include Origen::GlobalMethods
|
|
16
|
+
|
|
17
|
+
if ARGV.delete('-d') || ARGV.delete('--debug')
|
|
18
|
+
begin
|
|
19
|
+
if RUBY_VERSION >= '2.0.0'
|
|
20
|
+
require 'byebug'
|
|
21
|
+
else
|
|
22
|
+
require 'rubygems'
|
|
23
|
+
require 'ruby-debug'
|
|
24
|
+
end
|
|
25
|
+
rescue LoadError
|
|
26
|
+
def debugger
|
|
27
|
+
caller[0] =~ /.*\/(\w+\.rb):(\d+).*/
|
|
28
|
+
puts 'The debugger gem is not installed, add the following to your Gemfile:'
|
|
29
|
+
puts
|
|
30
|
+
puts "if RUBY_VERSION >= '2.0.0'"
|
|
31
|
+
puts " gem 'byebug', '~>3.5'"
|
|
32
|
+
puts 'else'
|
|
33
|
+
puts " gem 'debugger', '~>1.6'"
|
|
34
|
+
puts 'end'
|
|
35
|
+
puts
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
Origen.enable_debugger
|
|
39
|
+
else
|
|
40
|
+
def debugger
|
|
41
|
+
caller[0] =~ /.*\/(\w+\.rb):(\d+).*/
|
|
42
|
+
puts "#{Regexp.last_match[1]}:#{Regexp.last_match[2]} - debugger statement ignored, run again with '-d' to enable it"
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
case command
|
|
47
|
+
|
|
48
|
+
when 'new'
|
|
49
|
+
require 'origen/commands/new'
|
|
50
|
+
|
|
51
|
+
when '--version', '-v'
|
|
52
|
+
require 'origen/commands/version'
|
|
53
|
+
|
|
54
|
+
when 'fetch', 'f'
|
|
55
|
+
require 'origen/commands/fetch'
|
|
56
|
+
|
|
57
|
+
when 'interactive'
|
|
58
|
+
IRB.start
|
|
59
|
+
|
|
60
|
+
else
|
|
61
|
+
puts 'Error: Command not recognized' unless ['-h', '--help'].include?(command)
|
|
62
|
+
puts <<-EOT
|
|
63
|
+
Usage: origen COMMAND [ARGS]
|
|
64
|
+
|
|
65
|
+
The following commands are available:
|
|
66
|
+
new Create a new Origen application or plugin. "origen new my_app" creates a
|
|
67
|
+
new origen application workspace in "./my_app"
|
|
68
|
+
interactive Start an interactive Origen console (short-cut alias: "i"), this is just
|
|
69
|
+
IRB with the 'origen' lib loaded automatically
|
|
70
|
+
fetch Automatically creates the workspace for the requested plugin and
|
|
71
|
+
populates the latest version of the plugin (short-cut alias: "f")
|
|
72
|
+
|
|
73
|
+
Many commands can be run with -h (or --help) for more information.
|
|
74
|
+
EOT
|
|
75
|
+
exit(1)
|
|
76
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
module Controller
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
module ClassMethods
|
|
6
|
+
def model(options = {})
|
|
7
|
+
options[:controller_class] = self
|
|
8
|
+
if options[:path]
|
|
9
|
+
@path_to_model = options[:path]
|
|
10
|
+
else
|
|
11
|
+
options[:model_class] = _resolve_model_class(options)
|
|
12
|
+
end
|
|
13
|
+
Origen.controllers << options
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def path_to_model
|
|
17
|
+
@path_to_model
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def _resolve_model_class(options)
|
|
21
|
+
class_name = options[:class_name]
|
|
22
|
+
if class_name
|
|
23
|
+
begin
|
|
24
|
+
klass = eval("#{_namespace}::#{class_name}")
|
|
25
|
+
rescue
|
|
26
|
+
begin
|
|
27
|
+
klass = eval(class_name)
|
|
28
|
+
rescue
|
|
29
|
+
begin
|
|
30
|
+
klass = eval("#{self}::#{class_name}")
|
|
31
|
+
rescue
|
|
32
|
+
puts "Could not find class: #{class_name}"
|
|
33
|
+
raise 'Unknown model class!'
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
klass
|
|
38
|
+
else
|
|
39
|
+
fail "You must supply a :class_name option when defining a controller's model!"
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def _namespace
|
|
44
|
+
to_s.sub(/::[^:]*$/, '')
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def is_a?(*args)
|
|
49
|
+
if model
|
|
50
|
+
super(*args) || model.is_a?(*args)
|
|
51
|
+
else
|
|
52
|
+
super(*args)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def model
|
|
57
|
+
@model ||= begin
|
|
58
|
+
if self.class.path_to_model
|
|
59
|
+
eval(self.class.path_to_model)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def respond_to?(*args)
|
|
65
|
+
if model
|
|
66
|
+
super(*args) || model.respond_to?(*args)
|
|
67
|
+
else
|
|
68
|
+
super(*args)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Used to proxy all method and attribute requests not implemented on the controller
|
|
73
|
+
# to the model.
|
|
74
|
+
#
|
|
75
|
+
# On first call of a missing method a method is generated to avoid the missing lookup
|
|
76
|
+
# next time, this should be faster for repeated lookups of the same method, e.g. reg
|
|
77
|
+
def method_missing(method, *args, &block)
|
|
78
|
+
if model.respond_to?(method)
|
|
79
|
+
define_singleton_method(method) do |*args, &block|
|
|
80
|
+
model.send(method, *args, &block)
|
|
81
|
+
end
|
|
82
|
+
send(method, *args, &block)
|
|
83
|
+
else
|
|
84
|
+
super
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
private
|
|
89
|
+
|
|
90
|
+
def _model=(model)
|
|
91
|
+
@model = model
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class Array
|
|
2
|
+
def ids
|
|
3
|
+
map(&:id)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def dups?
|
|
7
|
+
find { |e| rindex(e) != index(e) } ? true : false
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def dups
|
|
11
|
+
(select { |e| rindex(e) != index(e) }).uniq
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def dups_with_index
|
|
15
|
+
return {} unless self.dups?
|
|
16
|
+
hash = Hash.new { |h, k| h[k] = [] }
|
|
17
|
+
each_with_index do |val, idx|
|
|
18
|
+
hash[val] << idx
|
|
19
|
+
end
|
|
20
|
+
hash.delete_if { |_k, v| v.size == 1 }
|
|
21
|
+
hash
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
class Bignum
|
|
2
|
+
# Extend Fixnum to enable 10.cycles
|
|
3
|
+
def cycles
|
|
4
|
+
if block_given?
|
|
5
|
+
times do
|
|
6
|
+
yield
|
|
7
|
+
Origen.app.tester.cycle
|
|
8
|
+
end
|
|
9
|
+
else
|
|
10
|
+
Origen.app.tester.cycle(repeat: self)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
alias_method :cycle, :cycles
|
|
14
|
+
|
|
15
|
+
alias_method :old_bit_select, :[]
|
|
16
|
+
def [](*args)
|
|
17
|
+
if args.length == 1 && !args.first.is_a?(Range)
|
|
18
|
+
old_bit_select(args.first)
|
|
19
|
+
else
|
|
20
|
+
if args.first.is_a?(Range)
|
|
21
|
+
msb = args.first.first
|
|
22
|
+
lsb = args.first.last
|
|
23
|
+
else
|
|
24
|
+
msb = args.first
|
|
25
|
+
lsb = args.last
|
|
26
|
+
end
|
|
27
|
+
(self >> lsb) & 0.ones_comp(msb - lsb + 1)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def ones_comp(num_bits)
|
|
32
|
+
self ^ ((1 << num_bits) - 1)
|
|
33
|
+
end
|
|
34
|
+
alias_method :ones_complement, :ones_comp
|
|
35
|
+
alias_method :ones_compliment, :ones_comp
|
|
36
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
module Enumerable
|
|
2
|
+
PRIMATIVES = [TrueClass, FalseClass, NilClass, Integer, Float, String, Symbol, Regexp, Complex, Rational, Fixnum, Bignum]
|
|
3
|
+
|
|
4
|
+
def debug(msg)
|
|
5
|
+
Origen.log.debug(msg)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# Returns a list of primitives and/or complex objects found within an enumerable object
|
|
9
|
+
# It ignores empty or nil values by default but is configurable
|
|
10
|
+
# The method is recusive and will run until all enumerable objects have been examined
|
|
11
|
+
def list(options = {})
|
|
12
|
+
options = {
|
|
13
|
+
nil_or_empty: false,
|
|
14
|
+
flatten: [], # Can be a single class or an array of classes to 'flatten' when enumerating (treated as a single value)
|
|
15
|
+
select: [], # Select certain complex data types for enumeration
|
|
16
|
+
ignore: [], # Ignore certain complex data types for enumeration
|
|
17
|
+
to_s: false # If set to true this will convert a complex object called with 'flatten' option to a String
|
|
18
|
+
}.update(options)
|
|
19
|
+
list_array ||= []
|
|
20
|
+
[:ignore, :select, :flatten].each do |opt|
|
|
21
|
+
options[opt] = [options[opt]] unless options[opt].is_a? Array
|
|
22
|
+
end
|
|
23
|
+
unless options[:flatten].empty? || options[:select].empty?
|
|
24
|
+
fail "Cannot have the same arguments for 'flatten' and 'select' options" unless (options[:flatten] & options[:select]).empty?
|
|
25
|
+
end
|
|
26
|
+
unless options[:flatten].empty? || options[:ignore].empty?
|
|
27
|
+
fail "Cannot have the same arguments for 'flatten' and 'ignore' options" unless (options[:flatten] & options[:ignore]).empty?
|
|
28
|
+
end
|
|
29
|
+
unless options[:ignore].empty? || options[:select].empty?
|
|
30
|
+
fail "Cannot have the same arguments for 'ignore' and 'select' options" unless (options[:ignore] & options[:select]).empty?
|
|
31
|
+
end
|
|
32
|
+
if self.respond_to?(:empty?) && self.empty?
|
|
33
|
+
list_array << self if options[:nil_or_empty]
|
|
34
|
+
else
|
|
35
|
+
each do |k, v|
|
|
36
|
+
self.is_a?(Hash) ? item = v : item = k
|
|
37
|
+
klass = item.class.to_s
|
|
38
|
+
superklass = item.class.superclass.to_s
|
|
39
|
+
if options[:flatten].include? item.class
|
|
40
|
+
if item.respond_to?(:empty?)
|
|
41
|
+
next if item.empty? && options[:nil_or_empty] == false
|
|
42
|
+
end
|
|
43
|
+
debug "Adding current enumerable #{klass} to list as a flat object, will not enumerate through it..."
|
|
44
|
+
if options[:to_s] == true
|
|
45
|
+
list_array << "#{superklass}::#{klass}"
|
|
46
|
+
else
|
|
47
|
+
list_array << item
|
|
48
|
+
end
|
|
49
|
+
next
|
|
50
|
+
else
|
|
51
|
+
next unless options[:select].empty? || options[:select].include?(item.class) || PRIMATIVES.include?(item.class)
|
|
52
|
+
next if options[:ignore].include?(item.class)
|
|
53
|
+
case item
|
|
54
|
+
when NilClass
|
|
55
|
+
list_array << item if options[:nil_or_empty]
|
|
56
|
+
when Hash, Array, Range
|
|
57
|
+
# debugger if item == [] && $bac == 1
|
|
58
|
+
if item.empty?
|
|
59
|
+
list_array << [] if options[:nil_or_empty]
|
|
60
|
+
else
|
|
61
|
+
list_array += item.list(options)
|
|
62
|
+
end
|
|
63
|
+
when Struct
|
|
64
|
+
list_array += item.list(options)
|
|
65
|
+
when String
|
|
66
|
+
next if item.empty? && options[:nil_or_empty] == false
|
|
67
|
+
list_array << item
|
|
68
|
+
else
|
|
69
|
+
list_array << item
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
list_array
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
class Fixnum
|
|
2
|
+
# Extend Fixnum to enable 10.cycles
|
|
3
|
+
def cycles
|
|
4
|
+
if block_given?
|
|
5
|
+
times do
|
|
6
|
+
yield
|
|
7
|
+
Origen.app.tester.cycle
|
|
8
|
+
end
|
|
9
|
+
else
|
|
10
|
+
Origen.app.tester.cycle(repeat: self)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
alias_method :cycle, :cycles
|
|
14
|
+
|
|
15
|
+
alias_method :old_bit_select, :[]
|
|
16
|
+
def [](*args)
|
|
17
|
+
if args.length == 1 && !args.first.is_a?(Range)
|
|
18
|
+
old_bit_select(args.first)
|
|
19
|
+
else
|
|
20
|
+
if args.first.is_a?(Range)
|
|
21
|
+
msb = args.first.first
|
|
22
|
+
lsb = args.first.last
|
|
23
|
+
else
|
|
24
|
+
msb = args.first
|
|
25
|
+
lsb = args.last
|
|
26
|
+
end
|
|
27
|
+
(self >> lsb) & 0.ones_comp(msb - lsb + 1)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def ones_comp(num_bits)
|
|
32
|
+
self ^ ((1 << num_bits) - 1)
|
|
33
|
+
end
|
|
34
|
+
alias_method :ones_complement, :ones_comp
|
|
35
|
+
alias_method :ones_compliment, :ones_comp
|
|
36
|
+
|
|
37
|
+
def to_bool
|
|
38
|
+
if self == 1
|
|
39
|
+
return true
|
|
40
|
+
elsif self == 0
|
|
41
|
+
return false
|
|
42
|
+
else
|
|
43
|
+
return nil
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
|
2
|
+
|
|
3
|
+
class Hash
|
|
4
|
+
def ids
|
|
5
|
+
keys
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# Only updates the common keys that exist in self
|
|
9
|
+
def update_common(hash)
|
|
10
|
+
each_key do |k|
|
|
11
|
+
self[k] = hash[k] if hash.key? k
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Boolean method to check if self and another hash have intersecting keys
|
|
16
|
+
def intersect?(hash)
|
|
17
|
+
(keys.to_set & hash.keys.to_set).empty? ? false : true
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Returns a hash containing the intersecting keys between self and another hash
|
|
21
|
+
def intersections(hash)
|
|
22
|
+
(keys.to_set & hash.keys.to_set).to_a
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Filter a hash by a key filter of various types
|
|
26
|
+
def filter(filter)
|
|
27
|
+
filtered_hash = {}
|
|
28
|
+
select_logic = case filter
|
|
29
|
+
when String then 'k[Regexp.new(filter)]'
|
|
30
|
+
when (Fixnum || Integer || Float || Numeric) then "k[Regexp.new('#{filter}')]"
|
|
31
|
+
when Regexp then 'k[filter]'
|
|
32
|
+
when Symbol then 'k == filter'
|
|
33
|
+
when NilClass then true
|
|
34
|
+
else true
|
|
35
|
+
end
|
|
36
|
+
# rubocop:disable UnusedBlockArgument
|
|
37
|
+
filtered_hash = select do |k, v|
|
|
38
|
+
[TrueClass, FalseClass].include?(select_logic.class) ? select_logic : !!eval(select_logic)
|
|
39
|
+
end
|
|
40
|
+
filtered_hash
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Returns the longest key as measured by String#length
|
|
44
|
+
def longest_key
|
|
45
|
+
keys.map(&:to_s).max_by(&:length)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Returns the longest key as measured by String#length
|
|
49
|
+
def longest_value
|
|
50
|
+
values.map(&:to_s).max_by(&:length)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class Module
|
|
2
|
+
def alias_accessor(new, orig)
|
|
3
|
+
alias_reader(new, orig)
|
|
4
|
+
alias_writer(new, orig)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def alias_writer(new, orig)
|
|
8
|
+
alias_method("#{new}=", "#{orig}=") if method_defined?("#{orig}=")
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def alias_reader(new, orig)
|
|
12
|
+
alias_method(new, orig) if method_defined?(orig)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
class Numeric
|
|
2
|
+
def to_hex
|
|
3
|
+
"0x#{to_s(16).upcase}"
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def to_bin
|
|
7
|
+
"0b#{to_s(2)}"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Converts a number to a String representing binary number
|
|
11
|
+
# Requires width of bit string for padding. If the width is
|
|
12
|
+
# less than the number of bits required to represent the number
|
|
13
|
+
# the width argument is meaningless.
|
|
14
|
+
def to_bitstring(width)
|
|
15
|
+
'%0*b' % [width, self]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Reverses the bit representation of a number and returns
|
|
19
|
+
# the new value. Useful when changing register data based on bit order
|
|
20
|
+
def reverse_bits(width)
|
|
21
|
+
result = 0
|
|
22
|
+
0.upto(width - 1) do |i|
|
|
23
|
+
result += self[i] * 2**(width - 1 - i)
|
|
24
|
+
end
|
|
25
|
+
result
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
%w(GHz Ghz GTs Gts).each do |m|
|
|
29
|
+
define_method m do
|
|
30
|
+
self * 1_000_000_000
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
%w(MHz Mhz MTs Mts).each do |m|
|
|
35
|
+
define_method m do
|
|
36
|
+
self * 1_000_000
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
%w(GB).each do |m|
|
|
41
|
+
define_method m do
|
|
42
|
+
self * 1_024 * 1_024 * 1_024
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
%w(MB).each do |m|
|
|
47
|
+
define_method m do
|
|
48
|
+
self * 1_024 * 1_024
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
%w(to_GB).each do |m|
|
|
53
|
+
define_method m do
|
|
54
|
+
result = self / 1_024 / 1_024 / 1_024
|
|
55
|
+
if result == Integer(result)
|
|
56
|
+
return Integer(result)
|
|
57
|
+
else
|
|
58
|
+
return result
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
%w(to_MB).each do |m|
|
|
64
|
+
define_method m do
|
|
65
|
+
result = to_f / 1_024 / 1_024
|
|
66
|
+
if result == Integer(result)
|
|
67
|
+
return Integer(result)
|
|
68
|
+
else
|
|
69
|
+
return result
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
%w(kHz KHz Khz kO ko kOhm kohm).each do |m|
|
|
75
|
+
define_method m do
|
|
76
|
+
self * 1_000
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
%w(kB KB).each do |m|
|
|
81
|
+
define_method m do
|
|
82
|
+
self * 1_024
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
%w(to_kB to_KB).each do |m|
|
|
87
|
+
define_method m do
|
|
88
|
+
result = to_f / 1_024
|
|
89
|
+
if result == Integer(result)
|
|
90
|
+
return Integer(result)
|
|
91
|
+
else
|
|
92
|
+
return result
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
%w(v V s S a A Hz Ts Ohm ohm O o).each do |m|
|
|
98
|
+
define_method m do
|
|
99
|
+
self
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
%w(mv mV ms mS ma mA mo mO mOhm mohm).each do |m|
|
|
104
|
+
define_method m do
|
|
105
|
+
self / 1_000.0
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
%w(uv uV us uS ua uA).each do |m|
|
|
110
|
+
define_method m do
|
|
111
|
+
self / 1_000_000.0
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
%w(nv nV ns nS na nA).each do |m|
|
|
116
|
+
define_method m do
|
|
117
|
+
self / 1_000_000_000.0
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
%w(pv pV ps pS pa pA).each do |m|
|
|
122
|
+
define_method m do
|
|
123
|
+
self / 1_000_000_000_000.0
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class Object
|
|
2
|
+
# Tries the given methods and returns the first one to return a value,
|
|
3
|
+
# ultimately returns nil if no value is found.
|
|
4
|
+
def try(*methods)
|
|
5
|
+
methods.each do |method|
|
|
6
|
+
if self.respond_to?(method)
|
|
7
|
+
val = send(method)
|
|
8
|
+
return val if val
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
nil
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
require 'active_support/core_ext/string/inflections'
|
|
2
|
+
begin
|
|
3
|
+
require 'scrub_rb'
|
|
4
|
+
rescue LoadError
|
|
5
|
+
# Temporary patch as the scrub_rb gem is not installed to the central Ruby installation.
|
|
6
|
+
# This means that when running Origen outside of an application this functionality is not
|
|
7
|
+
# available (which is fine), within an application the gem will be loaded correctly by
|
|
8
|
+
# Bundler and the gem will require quite happily.
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class String
|
|
12
|
+
def to_dec
|
|
13
|
+
if self =~ /0x(.*)/
|
|
14
|
+
Regexp.last_match[1].to_i(16)
|
|
15
|
+
elsif self =~ /0b(.*)/
|
|
16
|
+
Regexp.last_match[1].to_i(2)
|
|
17
|
+
else
|
|
18
|
+
to_i
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def escape_underscores
|
|
23
|
+
gsub('_', '\_')
|
|
24
|
+
end
|
|
25
|
+
alias_method :escape_underscore, :escape_underscores
|
|
26
|
+
|
|
27
|
+
def camel_case
|
|
28
|
+
Origen.deprecate "String#camel_case! is deprecated, use String#camelcase instead, or if you want to get rid of spaces: my_string.gsub(' ', '_').camelcase"
|
|
29
|
+
gsub(/\s+/, '_').split('_').map(&:capitalize).join
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def pad_leading_zeros(width)
|
|
33
|
+
str = self
|
|
34
|
+
(0..(width - size) - 1).each { str = '0' + str }
|
|
35
|
+
str
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def to_lines(length)
|
|
39
|
+
lines = []
|
|
40
|
+
line = []
|
|
41
|
+
len = 0
|
|
42
|
+
split(/\s+/).each do |word|
|
|
43
|
+
if (len + word.length) > length
|
|
44
|
+
lines << line.join(' ')
|
|
45
|
+
line = []
|
|
46
|
+
len = 0
|
|
47
|
+
end
|
|
48
|
+
line << word
|
|
49
|
+
len += word.length + 1 # For the trailing space
|
|
50
|
+
end
|
|
51
|
+
lines << line.join(' ') unless line.empty?
|
|
52
|
+
lines
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Sanitizes the string for conversion to a symbol and returns a lower
|
|
56
|
+
# cased symbol version of the string
|
|
57
|
+
def symbolize
|
|
58
|
+
gsub(/(\n|\s|\(|\)|\.|\[|\]|-|{|})/, '_').downcase.to_sym
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# acronyms
|
|
62
|
+
def to_snakecase!
|
|
63
|
+
Origen.deprecate 'String#to_snakecase! is deprecated, use String#underscore instead since it is aware of FSL acronyms'
|
|
64
|
+
gsub!(/\s+/, '')
|
|
65
|
+
g = gsub!(/(.)([A-Z])/, '\1_\2');
|
|
66
|
+
d = downcase!
|
|
67
|
+
g || d
|
|
68
|
+
end
|
|
69
|
+
alias_method :snakecase!, :to_snakecase!
|
|
70
|
+
|
|
71
|
+
def to_snakecase
|
|
72
|
+
Origen.deprecate 'String#to_snakecase is deprecated, use String#underscore instead since it is aware of FSL acronyms'
|
|
73
|
+
dup.tap(&:to_snakecase!)
|
|
74
|
+
end
|
|
75
|
+
alias_method :snakecase, :to_snakecase
|
|
76
|
+
|
|
77
|
+
def squeeze_lines
|
|
78
|
+
split(/\n+/).join(' ').squeeze(' ')
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Attempt to convert a String to a boolean answer
|
|
82
|
+
def to_bool
|
|
83
|
+
if self == true || self =~ (/^(true|t|yes|y|1)$/i)
|
|
84
|
+
return true
|
|
85
|
+
elsif self == false || self.empty? || self =~ (/^(false|f|no|n|0)$/i)
|
|
86
|
+
return false
|
|
87
|
+
else
|
|
88
|
+
return nil
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Check if a String is a numeric
|
|
93
|
+
def is_numeric?
|
|
94
|
+
return true if self =~ /\A\d+\Z/
|
|
95
|
+
true if Float(self) rescue false # rubocop:disable Style/RescueModifier
|
|
96
|
+
end
|
|
97
|
+
alias_method :numeric?, :is_numeric?
|
|
98
|
+
|
|
99
|
+
# Convert the String to a Numeric (Float or Integer)
|
|
100
|
+
def to_numeric
|
|
101
|
+
if self.numeric?
|
|
102
|
+
if to_i == to_f
|
|
103
|
+
to_i
|
|
104
|
+
else
|
|
105
|
+
to_f
|
|
106
|
+
end
|
|
107
|
+
else
|
|
108
|
+
fail "'#{self}' cannot be converted to a Numeric, exiting..."
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
alias_method :to_number, :to_numeric
|
|
112
|
+
|
|
113
|
+
# Capitalize every word
|
|
114
|
+
def titleize(options = {})
|
|
115
|
+
options = {
|
|
116
|
+
keep_specials: false
|
|
117
|
+
}.update(options)
|
|
118
|
+
if options[:keep_specials]
|
|
119
|
+
split.map(&:capitalize).join(' ')
|
|
120
|
+
else
|
|
121
|
+
split(/ |\_|\-/).map(&:capitalize).join(' ')
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
require 'origen/core_ext/object'
|
|
2
|
+
require 'origen/core_ext/string'
|
|
3
|
+
require 'origen/core_ext/fixnum'
|
|
4
|
+
require 'origen/core_ext/bignum'
|
|
5
|
+
require 'origen/core_ext/numeric'
|
|
6
|
+
require 'origen/core_ext/module'
|
|
7
|
+
require 'origen/core_ext/hash'
|
|
8
|
+
require 'origen/core_ext/array'
|
|
9
|
+
require 'origen/core_ext/range'
|
|
10
|
+
require 'origen/core_ext/enumerable'
|