opal 0.2.2 → 0.3.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.
- data/.gitignore +5 -10
- data/LICENSE +75 -0
- data/README.md +55 -3
- data/Rakefile +62 -139
- data/bin/opal +7 -10
- data/gems/core/README.md +5 -0
- data/gems/core/Rakefile +7 -0
- data/gems/core/core.gemspec +13 -0
- data/gems/core/lib/core.rb +33 -0
- data/gems/core/lib/core/array.rb +1470 -0
- data/gems/core/lib/core/basic_object.rb +15 -0
- data/gems/core/lib/core/class.rb +31 -0
- data/gems/core/lib/core/dir.rb +26 -0
- data/gems/core/lib/core/error.rb +43 -0
- data/gems/core/lib/core/false_class.rb +21 -0
- data/gems/core/lib/core/file.rb +54 -0
- data/gems/core/lib/core/hash.rb +725 -0
- data/gems/core/lib/core/kernel.rb +240 -0
- data/gems/core/lib/core/module.rb +98 -0
- data/gems/core/lib/core/nil_class.rb +41 -0
- data/gems/core/lib/core/numeric.rb +370 -0
- data/gems/core/lib/core/proc.rb +11 -0
- data/gems/core/lib/core/range.rb +17 -0
- data/gems/core/lib/core/regexp.rb +18 -0
- data/gems/core/lib/core/string.rb +328 -0
- data/gems/core/lib/core/symbol.rb +15 -0
- data/gems/core/lib/core/top_self.rb +8 -0
- data/gems/core/lib/core/true_class.rb +20 -0
- data/gems/core/lib/core/vm.rb +16 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/append_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/assoc_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/at_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/clear_spec.rb +1 -1
- data/{opals/opal/opal → gems/core}/spec/core/array/collect_bang_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/collect_spec.rb +0 -0
- data/gems/core/spec/core/array/compact_spec.rb +41 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/concat_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/constructor_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/each_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/element_reference_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/first_spec.rb +1 -1
- data/{opals/opal/opal → gems/core}/spec/core/array/include_spec.rb +0 -0
- data/gems/core/spec/core/array/join_spec.rb +6 -0
- data/gems/core/spec/core/array/last_spec.rb +51 -0
- data/gems/core/spec/core/array/length_spec.rb +6 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/map_spec.rb +2 -0
- data/gems/core/spec/core/array/reverse_spec.rb +6 -0
- data/{opals/opal/opal → gems/core}/spec/core/builtin_constants/builtin_constants_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/and_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/inspect_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/or_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/to_s_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/xor_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/file/join_spec.rb +1 -1
- data/gems/core/spec/core/hash/assoc_spec.rb +32 -0
- data/{opals/opal/opal → gems/core}/spec/core/kernel/instance_eval_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/kernel/loop_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/kernel/raise_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/module/attr_accessor_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/number/lt_spec.rb +0 -0
- data/gems/core/spec/core/string/sub_spec.rb +24 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/and_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/inspect_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/or_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/to_s_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/xor_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/and_spec.rb +2 -3
- data/{opals/opal/opal → gems/core}/spec/language/array_spec.rb +21 -5
- data/gems/core/spec/language/block_spec.rb +38 -0
- data/{opals/opal/opal → gems/core}/spec/language/break_spec.rb +0 -0
- data/gems/core/spec/language/case_spec.rb +103 -0
- data/{opals/opal/opal → gems/core}/spec/language/def_spec.rb +11 -1
- data/{opals/opal/opal → gems/core}/spec/language/eigenclass_spec.rb +0 -0
- data/gems/core/spec/language/file_spec.rb +13 -0
- data/gems/core/spec/language/fixtures/block.rb +21 -0
- data/gems/core/spec/language/fixtures/super.rb +293 -0
- data/{opals/opal/opal → gems/core}/spec/language/hash_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/if_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/loop_spec.rb +0 -0
- data/gems/core/spec/language/metaclass_spec.rb +21 -0
- data/{opals/opal/opal → gems/core}/spec/language/method_spec.rb +60 -0
- data/{opals/opal/opal → gems/core}/spec/language/next_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/or_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/redo_spec.rb +0 -0
- data/gems/core/spec/language/regexp_spec.rb +26 -0
- data/{opals/opal/opal → gems/core}/spec/language/rescue_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/return_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/string_spec.rb +0 -0
- data/gems/core/spec/language/super_spec.rb +32 -0
- data/{opals/opal/opal → gems/core}/spec/language/until_spec.rb +47 -47
- data/gems/core/spec/language/variables_spec.rb +155 -0
- data/{opals/opal/opal → gems/core}/spec/language/while_spec.rb +47 -47
- data/{opals/opal/opal → gems/core}/spec/spec_helper.rb +1 -1
- data/gems/core_fs/README.md +19 -0
- data/gems/dev/Rakefile +5 -0
- data/gems/dev/lib/dev.js +99 -0
- data/gems/dev/lib/dev/generator.js +1264 -0
- data/gems/dev/lib/dev/parser.js +979 -0
- data/gems/dev/lib/dev/ruby_parser.js +1088 -0
- data/gems/dev/lib/dev/ruby_parser.y +1267 -0
- data/gems/dev/lib/dev/string_scanner.js +38 -0
- data/gems/dev/tools/racc2js/README.md +39 -0
- data/gems/dev/tools/racc2js/math_parser.js +222 -0
- data/gems/dev/tools/racc2js/math_parser.rb +133 -0
- data/gems/dev/tools/racc2js/math_parser.y +28 -0
- data/gems/dev/tools/racc2js/parser.js +218 -0
- data/gems/dev/tools/racc2js/racc2js.rb +153 -0
- data/gems/json/README.md +4 -0
- data/gems/json/json.gemspec +14 -0
- data/gems/json/lib/json.rb +64 -0
- data/gems/json/lib/json/ext.rb +51 -0
- data/{opals/opal/browser/lib/browser/json_parse.js → gems/json/lib/json/json2.js} +197 -37
- data/gems/ospec/README.md +0 -0
- data/gems/ospec/lib/ospec.rb +6 -0
- data/gems/ospec/lib/ospec/autorun.rb +3 -0
- data/gems/ospec/lib/ospec/dsl.rb +15 -0
- data/gems/ospec/lib/ospec/example.rb +11 -0
- data/gems/ospec/lib/ospec/example/before_and_after_hooks.rb +56 -0
- data/gems/ospec/lib/ospec/example/errors.rb +17 -0
- data/gems/ospec/lib/ospec/example/example_group.rb +12 -0
- data/gems/ospec/lib/ospec/example/example_group_factory.rb +21 -0
- data/gems/ospec/lib/ospec/example/example_group_hierarchy.rb +20 -0
- data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/example/example_group_methods.rb +26 -68
- data/gems/ospec/lib/ospec/example/example_group_proxy.rb +14 -0
- data/gems/ospec/lib/ospec/example/example_methods.rb +46 -0
- data/gems/ospec/lib/ospec/example/example_proxy.rb +18 -0
- data/gems/ospec/lib/ospec/expectations.rb +19 -0
- data/gems/ospec/lib/ospec/expectations/errors.rb +8 -0
- data/gems/ospec/lib/ospec/expectations/fail_with.rb +8 -0
- data/gems/ospec/lib/ospec/expectations/handler.rb +27 -0
- data/gems/ospec/lib/ospec/matchers.rb +24 -0
- data/{opals/opal/Rakefile → gems/ospec/lib/ospec/matchers/be.rb} +0 -0
- data/gems/ospec/lib/ospec/matchers/generated_descriptions.rb +20 -0
- data/gems/ospec/lib/ospec/matchers/operator_matcher.rb +52 -0
- data/gems/ospec/lib/ospec/runner.rb +40 -0
- data/gems/ospec/lib/ospec/runner/example_group_runner.rb +44 -0
- data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/runner/formatter/html_formatter.rb +31 -40
- data/gems/ospec/lib/ospec/runner/formatter/terminal_formatter.rb +48 -0
- data/gems/ospec/lib/ospec/runner/options.rb +36 -0
- data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/runner/reporter.rb +23 -55
- data/gems/ospec/ospec.gemspec +0 -0
- data/gems/rquery/README.md +9 -0
- data/gems/rquery/lib/rquery.rb +10 -0
- data/gems/rquery/lib/rquery/ajax.rb +4 -0
- data/gems/rquery/lib/rquery/css.rb +96 -0
- data/gems/rquery/lib/rquery/document.rb +25 -0
- data/gems/rquery/lib/rquery/element.rb +292 -0
- data/gems/rquery/lib/rquery/event.rb +108 -0
- data/gems/rquery/lib/rquery/jquery.js +8177 -0
- data/gems/rquery/lib/rquery/request.rb +138 -0
- data/gems/rquery/lib/rquery/response.rb +49 -0
- data/gems/rquery/rquery.gemspec +16 -0
- data/lib/opal.js +1597 -0
- data/lib/opal.rb +6 -69
- data/lib/opal/builder.rb +115 -0
- data/lib/opal/bundle.rb +131 -0
- data/lib/opal/command.rb +11 -0
- data/lib/opal/context.rb +69 -0
- data/lib/opal/context/console.rb +12 -0
- data/lib/opal/context/file_system.rb +19 -0
- data/lib/opal/context/loader.rb +117 -0
- data/lib/opal/gem.rb +153 -0
- data/lib/opal/ruby/nodes.rb +1302 -0
- data/lib/opal/ruby/parser.rb +780 -0
- data/lib/opal/ruby/ruby_parser.rb +5170 -0
- data/lib/opal/ruby/ruby_parser.y +1298 -0
- data/opal.gemspec +11 -256
- metadata +179 -240
- data/.gitmodules +0 -6
- data/Opalfile +0 -384
- data/VERSION +0 -1
- data/demos/apps/browser_demo/index.html +0 -11
- data/demos/apps/browser_demo/lib/browser_demo.rb +0 -31
- data/demos/apps/simple_opal/Opalfile +0 -13
- data/demos/apps/simple_opal/index.html +0 -11
- data/demos/apps/simple_opal/lib/app_controller.rb +0 -62
- data/demos/apps/simple_opal/lib/main_window.rb +0 -146
- data/demos/browser/request/index.html +0 -52
- data/demos/browser/request/request.rb +0 -48
- data/gen/browser/__PROJECT_NAME__/Rakefile +0 -12
- data/gen/browser/__PROJECT_NAME__/index.html +0 -11
- data/gen/browser/__PROJECT_NAME__/javascripts/opal.debug.js +0 -4687
- data/gen/browser/__PROJECT_NAME__/javascripts/opal.min.js +0 -175
- data/gen/browser/__PROJECT_NAME__/lib/__PROJECT_NAME__.rb +0 -1
- data/lib/opal/builders/base.rb +0 -50
- data/lib/opal/builders/css.rb +0 -46
- data/lib/opal/builders/javascript.rb +0 -44
- data/lib/opal/builders/opal.rb +0 -79
- data/lib/opal/builders/ruby.rb +0 -50
- data/lib/opal/builders/ruby/generate.rb +0 -1851
- data/lib/opal/builders/ruby/nodes.rb +0 -210
- data/lib/opal/builders/ruby/ruby.rb +0 -916
- data/lib/opal/builders/ruby/ruby_parser.rb +0 -6008
- data/lib/opal/builders/ruby/ruby_parser.rb.y +0 -1451
- data/lib/opal/models/build_item.rb +0 -104
- data/lib/opal/models/hash_struct.rb +0 -40
- data/lib/opal/models/project.rb +0 -252
- data/lib/opal/models/struct_accessors.rb +0 -58
- data/lib/opal/models/target.rb +0 -176
- data/lib/opal/opal/build.rb +0 -169
- data/lib/opal/opal/env/console.rb +0 -66
- data/lib/opal/opal/env/fs.rb +0 -98
- data/lib/opal/opal/env/object.rb +0 -48
- data/lib/opal/opal/environment.rb +0 -139
- data/lib/opal/opal/gen.rb +0 -62
- data/lib/opal/opal/opal.rb +0 -75
- data/lib/opal/opal/repl.rb +0 -38
- data/lib/opal/opalfile/dsl.rb +0 -62
- data/lib/opal/opalfile/opalfile.rb +0 -133
- data/lib/opal/opalfile/task.rb +0 -96
- data/lib/opal/opalfile/task_manager.rb +0 -63
- data/lib/opal/opalfile/task_scope.rb +0 -52
- data/lib/opal/rack/app_server.rb +0 -119
- data/lib/opal/rake/opal_task.rb +0 -34
- data/opals/opal/README.md +0 -37
- data/opals/opal/browser/Opalfile +0 -11
- data/opals/opal/browser/README.md +0 -146
- data/opals/opal/browser/SIZZLE_LICESNSE.txt +0 -148
- data/opals/opal/browser/lib/browser.rb +0 -118
- data/opals/opal/browser/lib/browser/builder.rb +0 -41
- data/opals/opal/browser/lib/browser/canvas_context.rb +0 -115
- data/opals/opal/browser/lib/browser/dimensions.rb +0 -50
- data/opals/opal/browser/lib/browser/document.rb +0 -146
- data/opals/opal/browser/lib/browser/element.rb +0 -487
- data/opals/opal/browser/lib/browser/element/attributes.rb +0 -88
- data/opals/opal/browser/lib/browser/element/css.rb +0 -290
- data/opals/opal/browser/lib/browser/element/form.rb +0 -146
- data/opals/opal/browser/lib/browser/event/dom_events.rb +0 -81
- data/opals/opal/browser/lib/browser/event/event.rb +0 -177
- data/opals/opal/browser/lib/browser/event/trigger_events.rb +0 -53
- data/opals/opal/browser/lib/browser/geometry.rb +0 -97
- data/opals/opal/browser/lib/browser/json.rb +0 -32
- data/opals/opal/browser/lib/browser/request/request.rb +0 -201
- data/opals/opal/browser/lib/browser/sizzle.js +0 -1068
- data/opals/opal/browser/lib/browser/string.rb +0 -42
- data/opals/opal/browser/lib/browser/touch.rb +0 -37
- data/opals/opal/browser/lib/browser/vml_context.js +0 -33
- data/opals/opal/browser/lib/browser/window.rb +0 -36
- data/opals/opal/browser/spec/browser/browser_detection_spec.rb +0 -7
- data/opals/opal/browser/spec/document/aref_spec.rb +0 -110
- data/opals/opal/browser/spec/document/ready_spec.rb +0 -16
- data/opals/opal/browser/spec/element/body_spec.rb +0 -11
- data/opals/opal/browser/spec/element/clear_spec.rb +0 -26
- data/opals/opal/browser/spec/element/empty_spec.rb +0 -29
- data/opals/opal/browser/spec/element/has_class_spec.rb +0 -40
- data/opals/opal/browser/spec/element/hidden_spec.rb +0 -23
- data/opals/opal/browser/spec/element/hide_spec.rb +0 -31
- data/opals/opal/browser/spec/element/remove_spec.rb +0 -25
- data/opals/opal/browser/spec/element/show_spec.rb +0 -31
- data/opals/opal/browser/spec/element/style_spec.rb +0 -69
- data/opals/opal/browser/spec/element/toggle_spec.rb +0 -31
- data/opals/opal/browser/spec/element/visible_spec.rb +0 -23
- data/opals/opal/browser/spec/spec_helper.rb +0 -1
- data/opals/opal/opal/Opalfile +0 -14
- data/opals/opal/opal/spec/core/array/compact_spec.rb +0 -15
- data/opals/opal/opal/spec/fixtures/super.rb +0 -70
- data/opals/opal/opal/spec/language/____temp_remove_this.rb +0 -12
- data/opals/opal/opal/spec/language/block_spec.rb +0 -18
- data/opals/opal/opal/spec/language/case_spec.rb +0 -103
- data/opals/opal/opal/spec/language/metaclass_spec.rb +0 -21
- data/opals/opal/opal/spec/language/super_spec.rb +0 -26
- data/opals/opal/runtime/Opalfile +0 -78
- data/opals/opal/runtime/README.md +0 -12
- data/opals/opal/runtime/docs/debugging.md +0 -51
- data/opals/opal/runtime/lib/array.rb +0 -1516
- data/opals/opal/runtime/lib/basic_object.rb +0 -49
- data/opals/opal/runtime/lib/class.rb +0 -54
- data/opals/opal/runtime/lib/dir.rb +0 -36
- data/opals/opal/runtime/lib/error.rb +0 -49
- data/opals/opal/runtime/lib/false_class.rb +0 -52
- data/opals/opal/runtime/lib/file.rb +0 -79
- data/opals/opal/runtime/lib/hash.rb +0 -791
- data/opals/opal/runtime/lib/io.rb +0 -39
- data/opals/opal/runtime/lib/kernel.rb +0 -288
- data/opals/opal/runtime/lib/match_data.rb +0 -36
- data/opals/opal/runtime/lib/module.rb +0 -109
- data/opals/opal/runtime/lib/nil_class.rb +0 -69
- data/opals/opal/runtime/lib/number.rb +0 -398
- data/opals/opal/runtime/lib/proc.rb +0 -77
- data/opals/opal/runtime/lib/range.rb +0 -63
- data/opals/opal/runtime/lib/regexp.rb +0 -111
- data/opals/opal/runtime/lib/ruby.rb +0 -30
- data/opals/opal/runtime/lib/string.rb +0 -328
- data/opals/opal/runtime/lib/symbol.rb +0 -40
- data/opals/opal/runtime/lib/top_self.rb +0 -33
- data/opals/opal/runtime/lib/true_class.rb +0 -45
- data/opals/opal/runtime/runtime/browser.js +0 -287
- data/opals/opal/runtime/runtime/debug.js +0 -180
- data/opals/opal/runtime/runtime/opal.js +0 -1008
- data/opals/opal/runtime/runtime/post_opal.js +0 -1
- data/opals/opal/runtime/runtime/pre_opal.js +0 -2
- data/opals/opal/runtime/runtime/server_side.js +0 -50
- data/opals/opal/spec/LICENSE.txt +0 -26
- data/opals/opal/spec/Opalfile +0 -5
- data/opals/opal/spec/bin/spec.rb +0 -43
- data/opals/opal/spec/lib/spec.rb +0 -33
- data/opals/opal/spec/lib/spec/dsl.rb +0 -41
- data/opals/opal/spec/lib/spec/example.rb +0 -35
- data/opals/opal/spec/lib/spec/example/before_and_after_hooks.rb +0 -81
- data/opals/opal/spec/lib/spec/example/errors.rb +0 -42
- data/opals/opal/spec/lib/spec/example/example_group.rb +0 -37
- data/opals/opal/spec/lib/spec/example/example_group_factory.rb +0 -43
- data/opals/opal/spec/lib/spec/example/example_group_hierarchy.rb +0 -45
- data/opals/opal/spec/lib/spec/example/example_group_proxy.rb +0 -41
- data/opals/opal/spec/lib/spec/example/example_methods.rb +0 -73
- data/opals/opal/spec/lib/spec/example/example_proxy.rb +0 -48
- data/opals/opal/spec/lib/spec/expectations.rb +0 -46
- data/opals/opal/spec/lib/spec/expectations/errors.rb +0 -35
- data/opals/opal/spec/lib/spec/expectations/fail_with.rb +0 -37
- data/opals/opal/spec/lib/spec/expectations/handler.rb +0 -48
- data/opals/opal/spec/lib/spec/matchers.rb +0 -50
- data/opals/opal/spec/lib/spec/matchers/be.rb +0 -26
- data/opals/opal/spec/lib/spec/matchers/generated_descriptions.rb +0 -47
- data/opals/opal/spec/lib/spec/matchers/operator_matcher.rb +0 -66
- data/opals/opal/spec/lib/spec/runner.rb +0 -48
- data/opals/opal/spec/lib/spec/runner/example_group_runner.rb +0 -71
- data/opals/opal/spec/lib/spec/runner/formatter/terminal_formatter.rb +0 -82
- data/opals/opal/spec/lib/spec/runner/options.rb +0 -63
- data/opals/opal/spec/resources/index.html +0 -25
- data/opals/opal/spec/resources/spec.css +0 -132
- data/spec/cherry_kit/iseq_spec.rb +0 -38
- data/spec/spec_helper.rb +0 -16
- data/spec/vienna_spec.rb +0 -7
- data/yard/index.html +0 -43
- data/yard/style.css +0 -765
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# basic_object.rb
|
|
3
|
-
# vienna
|
|
4
|
-
#
|
|
5
|
-
# Created by Adam Beynon.
|
|
6
|
-
# Copyright 2010 Adam Beynon.
|
|
7
|
-
#
|
|
8
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
-
# of this software and associated documentation files (the "Software"), to deal
|
|
10
|
-
# in the Software without restriction, including without limitation the rights
|
|
11
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
-
# copies of the Software, and to permit persons to whom the Software is
|
|
13
|
-
# furnished to do so, subject to the following conditions:
|
|
14
|
-
#
|
|
15
|
-
# The above copyright notice and this permission notice shall be included in
|
|
16
|
-
# all copies or substantial portions of the Software.
|
|
17
|
-
#
|
|
18
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
24
|
-
# THE SOFTWARE.
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
class BasicObject
|
|
28
|
-
|
|
29
|
-
def initialize
|
|
30
|
-
# puts "in basicobject initialize"
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def ==(obj)
|
|
34
|
-
`return #{self} === #{obj} ? #{self}.t : #{self}.f;`
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def equal? other
|
|
38
|
-
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def !()
|
|
42
|
-
false
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def !=(other)
|
|
46
|
-
`return #{self == other}.r ? #{false} : #{true};`
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
end
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# class.rb
|
|
3
|
-
# vienna
|
|
4
|
-
#
|
|
5
|
-
# Created by Adam Beynon.
|
|
6
|
-
# Copyright 2010 Adam Beynon.
|
|
7
|
-
#
|
|
8
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
-
# of this software and associated documentation files (the "Software"), to deal
|
|
10
|
-
# in the Software without restriction, including without limitation the rights
|
|
11
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
-
# copies of the Software, and to permit persons to whom the Software is
|
|
13
|
-
# furnished to do so, subject to the following conditions:
|
|
14
|
-
#
|
|
15
|
-
# The above copyright notice and this permission notice shall be included in
|
|
16
|
-
# all copies or substantial portions of the Software.
|
|
17
|
-
#
|
|
18
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
24
|
-
# THE SOFTWARE.
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
class Class
|
|
28
|
-
|
|
29
|
-
def include(mod)
|
|
30
|
-
`return #{self}.include(#{mod});`
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def extend(mod)
|
|
34
|
-
`return #{self}.extend(#{mod});`
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def allocate
|
|
38
|
-
`return new #{self}.allocator();`
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def self.new(super_class)
|
|
42
|
-
`return opal.__subclass("", #{super_class});`
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def new
|
|
46
|
-
obj = allocate
|
|
47
|
-
`#{obj}.$initialize.apply(#{obj}, arguments);`
|
|
48
|
-
obj
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def initialize
|
|
52
|
-
puts "in Class.new initialize"
|
|
53
|
-
end
|
|
54
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# dir.rb
|
|
3
|
-
# vienna
|
|
4
|
-
#
|
|
5
|
-
# Created by Adam Beynon.
|
|
6
|
-
# Copyright 2010 Adam Beynon.
|
|
7
|
-
#
|
|
8
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
-
# of this software and associated documentation files (the "Software"), to deal
|
|
10
|
-
# in the Software without restriction, including without limitation the rights
|
|
11
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
-
# copies of the Software, and to permit persons to whom the Software is
|
|
13
|
-
# furnished to do so, subject to the following conditions:
|
|
14
|
-
#
|
|
15
|
-
# The above copyright notice and this permission notice shall be included in
|
|
16
|
-
# all copies or substantial portions of the Software.
|
|
17
|
-
#
|
|
18
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
24
|
-
# THE SOFTWARE.
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
class Dir
|
|
28
|
-
|
|
29
|
-
def self.getwd
|
|
30
|
-
`return opal.getwd;`
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def self.glob(glob)
|
|
34
|
-
`return opal.glob_files(#{glob});`
|
|
35
|
-
end
|
|
36
|
-
end
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# error.rb
|
|
3
|
-
# vienna
|
|
4
|
-
#
|
|
5
|
-
# Created by Adam Beynon.
|
|
6
|
-
# Copyright 2010 Adam Beynon.
|
|
7
|
-
#
|
|
8
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
-
# of this software and associated documentation files (the "Software"), to deal
|
|
10
|
-
# in the Software without restriction, including without limitation the rights
|
|
11
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
-
# copies of the Software, and to permit persons to whom the Software is
|
|
13
|
-
# furnished to do so, subject to the following conditions:
|
|
14
|
-
#
|
|
15
|
-
# The above copyright notice and this permission notice shall be included in
|
|
16
|
-
# all copies or substantial portions of the Software.
|
|
17
|
-
#
|
|
18
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
24
|
-
# THE SOFTWARE.
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
class Exception
|
|
29
|
-
|
|
30
|
-
def message
|
|
31
|
-
@message
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def initialize(message)
|
|
35
|
-
`if (!#{message}) {
|
|
36
|
-
#{message} = #{nil};
|
|
37
|
-
}`
|
|
38
|
-
@message = message
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
class RuntimeError < Exception
|
|
44
|
-
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
class StandardError < Exception
|
|
48
|
-
|
|
49
|
-
end
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# false_class.rb
|
|
3
|
-
# vienna
|
|
4
|
-
#
|
|
5
|
-
# Created by Adam Beynon.
|
|
6
|
-
# Copyright 2010 Adam Beynon.
|
|
7
|
-
#
|
|
8
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
-
# of this software and associated documentation files (the "Software"), to deal
|
|
10
|
-
# in the Software without restriction, including without limitation the rights
|
|
11
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
-
# copies of the Software, and to permit persons to whom the Software is
|
|
13
|
-
# furnished to do so, subject to the following conditions:
|
|
14
|
-
#
|
|
15
|
-
# The above copyright notice and this permission notice shall be included in
|
|
16
|
-
# all copies or substantial portions of the Software.
|
|
17
|
-
#
|
|
18
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
24
|
-
# THE SOFTWARE.
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
class FalseClass
|
|
28
|
-
|
|
29
|
-
def inspect
|
|
30
|
-
"false"
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def to_s
|
|
34
|
-
"false"
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def !()
|
|
38
|
-
true
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def &(other)
|
|
42
|
-
false
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def |(other)
|
|
46
|
-
other ? true : false
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def ^(other)
|
|
50
|
-
other ? true : false
|
|
51
|
-
end
|
|
52
|
-
end
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# file.rb
|
|
3
|
-
# vienna
|
|
4
|
-
#
|
|
5
|
-
# Created by Adam Beynon.
|
|
6
|
-
# Copyright 2010 Adam Beynon.
|
|
7
|
-
#
|
|
8
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
-
# of this software and associated documentation files (the "Software"), to deal
|
|
10
|
-
# in the Software without restriction, including without limitation the rights
|
|
11
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
-
# copies of the Software, and to permit persons to whom the Software is
|
|
13
|
-
# furnished to do so, subject to the following conditions:
|
|
14
|
-
#
|
|
15
|
-
# The above copyright notice and this permission notice shall be included in
|
|
16
|
-
# all copies or substantial portions of the Software.
|
|
17
|
-
#
|
|
18
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
24
|
-
# THE SOFTWARE.
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
class File
|
|
28
|
-
|
|
29
|
-
# class << self
|
|
30
|
-
|
|
31
|
-
# end
|
|
32
|
-
|
|
33
|
-
def self.join(*parts)
|
|
34
|
-
`return #{parts}.join("/");`
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# Returns all components of the filename given in `file_name` except the last
|
|
38
|
-
# one. The filename must be formed using forward slashed ("/") regardless of
|
|
39
|
-
# the separator used on the local filesystem.
|
|
40
|
-
#
|
|
41
|
-
# @example
|
|
42
|
-
# File.dirname "home/adam/work/ruby.rb"
|
|
43
|
-
# # => "/home/adam/work"
|
|
44
|
-
#
|
|
45
|
-
# @param [String] file_name
|
|
46
|
-
# @return [String]
|
|
47
|
-
def self.dirname(file_name)
|
|
48
|
-
`return #{file_name}.substr(0, #{file_name}.lastIndexOf('/'));`
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def self.expand_path(path = "")
|
|
52
|
-
`var start_slash = (#{path}[0] === "/");
|
|
53
|
-
var parts = #{path}.split("/");
|
|
54
|
-
var result = [];
|
|
55
|
-
var part;
|
|
56
|
-
for (var i = 0; i < parts.length; i++) {
|
|
57
|
-
part = parts[i];
|
|
58
|
-
switch (part) {
|
|
59
|
-
case '..':
|
|
60
|
-
result.pop();
|
|
61
|
-
break;
|
|
62
|
-
case '.':
|
|
63
|
-
break;
|
|
64
|
-
case '':
|
|
65
|
-
break;
|
|
66
|
-
default:
|
|
67
|
-
result.push(part);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (start_slash) {
|
|
72
|
-
// if we started with a slash, use that
|
|
73
|
-
return "/" + result.join("/");
|
|
74
|
-
} else {
|
|
75
|
-
// otherwise join with our current working dir
|
|
76
|
-
return opal.getwd + "/" + result.join("/");
|
|
77
|
-
}`
|
|
78
|
-
end
|
|
79
|
-
end
|
|
@@ -1,791 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# hash.rb
|
|
3
|
-
# vienna
|
|
4
|
-
#
|
|
5
|
-
# Created by Adam Beynon.
|
|
6
|
-
# Copyright 2010 Adam Beynon.
|
|
7
|
-
#
|
|
8
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
-
# of this software and associated documentation files (the "Software"), to deal
|
|
10
|
-
# in the Software without restriction, including without limitation the rights
|
|
11
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
-
# copies of the Software, and to permit persons to whom the Software is
|
|
13
|
-
# furnished to do so, subject to the following conditions:
|
|
14
|
-
#
|
|
15
|
-
# The above copyright notice and this permission notice shall be included in
|
|
16
|
-
# all copies or substantial portions of the Software.
|
|
17
|
-
#
|
|
18
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
24
|
-
# THE SOFTWARE.
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
# A {Hash} is a collection of key-value pairs. It is similar to an {Array},
|
|
28
|
-
# except that indexing is done via arbitrary keys of any object type, not an
|
|
29
|
-
# integer index. Hashes enumerate their values in the order that the
|
|
30
|
-
# corresponding keys were inserted.
|
|
31
|
-
#
|
|
32
|
-
# Hashes have a default value that is returned when accessing keys that do not
|
|
33
|
-
# exist in the hash. By default, that value is `nil`.
|
|
34
|
-
class Hash
|
|
35
|
-
|
|
36
|
-
# Creates a new hash populated with the given objects. Equivalent to the
|
|
37
|
-
# literal `{ key => value, ... }`.
|
|
38
|
-
#
|
|
39
|
-
# @example
|
|
40
|
-
# Hash["a", 100, "b", 200]
|
|
41
|
-
# # => {"a" =>100, "b"=>200}
|
|
42
|
-
#
|
|
43
|
-
# @return [Hash]
|
|
44
|
-
def self.[](*all)
|
|
45
|
-
`return vnH.apply(#{self}, #{all});`
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# Equality - Two hashes are equal if they each contain the same number of keys
|
|
49
|
-
# and if each key-value pair is equal to (according to {Object#==}) the
|
|
50
|
-
# corresponding elements in the other hash.
|
|
51
|
-
#
|
|
52
|
-
# @example
|
|
53
|
-
# h1 = {"a" => 1, "c" => 2}
|
|
54
|
-
# h2 = {7 => 35, "c" => 2, "a" => 1}
|
|
55
|
-
# h3 = {"a" => 1, "c" => 2, 7 => 35}
|
|
56
|
-
# h4 = {"a" => 1, "d" => 2, "f" => 35}
|
|
57
|
-
# h1 == h2
|
|
58
|
-
# # => false
|
|
59
|
-
# h2 == h3
|
|
60
|
-
# # => true
|
|
61
|
-
# h3 == h4
|
|
62
|
-
# # => false
|
|
63
|
-
#
|
|
64
|
-
# @param [Hash] other another hash to comapre
|
|
65
|
-
# @return [Boolean]
|
|
66
|
-
def ==(other)
|
|
67
|
-
`if (#{self} === #{other}) return #{true};
|
|
68
|
-
if (!(#{other}.info & #{self}.TH)) return #{false}
|
|
69
|
-
if (#{self}.__keys__.length !== #{other}.__keys__.length) return #{false};
|
|
70
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
71
|
-
var key = #{self}.__keys__[i].hash();
|
|
72
|
-
if (!(#{self}.__assocs__[key]['$=='](#{other}.__assocs__[key]).r)) return #{false};
|
|
73
|
-
}`
|
|
74
|
-
true
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
alias_method :eql?, :==
|
|
78
|
-
|
|
79
|
-
# Element Reference - retrieves the `value` object corresponding to the `key`
|
|
80
|
-
# object. If not found, returns the default value.
|
|
81
|
-
#
|
|
82
|
-
# @example
|
|
83
|
-
# h = {"a" => 100, "b" => 200}
|
|
84
|
-
# h["a"]
|
|
85
|
-
# # => 100
|
|
86
|
-
# h["c"]
|
|
87
|
-
# # => nil
|
|
88
|
-
#
|
|
89
|
-
# @param [Object] key key to look for
|
|
90
|
-
# @return [Object] result or default value
|
|
91
|
-
def [](key)
|
|
92
|
-
`return #{self}.hash_fetch(#{key});`
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
# Element Assignment - Associates the value give by `value` with the key given
|
|
96
|
-
# by `key`. `key` should not have its value changed while it is in use as a
|
|
97
|
-
# key.
|
|
98
|
-
#
|
|
99
|
-
# @example
|
|
100
|
-
# h = {"a" => 100, "b" => 200}
|
|
101
|
-
# h["a"] = 9
|
|
102
|
-
# # => 9
|
|
103
|
-
# h["c"] = 4
|
|
104
|
-
# # => 4
|
|
105
|
-
# h
|
|
106
|
-
# # => {"a" => 9, "b" => 200, "c" => 4}
|
|
107
|
-
#
|
|
108
|
-
# @param [Object] key key for hash
|
|
109
|
-
# @param [Object] value value for key
|
|
110
|
-
# @return [Object] returns the value
|
|
111
|
-
def []=(key, value)
|
|
112
|
-
`return #{self}.hash_store(#{key}, #{value});`
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
alias_method :store, :[]=
|
|
116
|
-
|
|
117
|
-
# Searches through the hash comparing `obj` with the key using ==. Returns the
|
|
118
|
-
# key-value pair (two elements array) or nil if no match is found. See
|
|
119
|
-
# {Array#assoc}.
|
|
120
|
-
#
|
|
121
|
-
# @example
|
|
122
|
-
# h = { "a" => [1, 2, 3], "b" => [4, 5, 6] }
|
|
123
|
-
# h["a"]
|
|
124
|
-
# # => ["a", [1, 2, 3]]
|
|
125
|
-
# h["c"]
|
|
126
|
-
# # => nil
|
|
127
|
-
#
|
|
128
|
-
# @param [Object] obj key to search for
|
|
129
|
-
# @return [Array<Object, Object>, nil] result or nil
|
|
130
|
-
def assoc(obj)
|
|
131
|
-
`var key;
|
|
132
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
133
|
-
key = #{self}.__keys__[i];
|
|
134
|
-
if (key['$=='](#{obj}).r) {
|
|
135
|
-
return [key, #{self}.__assocs__[key.hash()]];
|
|
136
|
-
}
|
|
137
|
-
}`
|
|
138
|
-
nil
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
# Removes all key-value pairs from `self`.
|
|
142
|
-
#
|
|
143
|
-
# @example
|
|
144
|
-
# h = { "a" => [1, 2, 3], "b" => [4, 5, 6] }
|
|
145
|
-
# h.clear
|
|
146
|
-
# # => {}
|
|
147
|
-
#
|
|
148
|
-
# @return [Hash] returns receiver
|
|
149
|
-
def clear
|
|
150
|
-
`#{self}.__keys__ = [];
|
|
151
|
-
#{self}.__assocs__ = {};`
|
|
152
|
-
self
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
# Returns the default value, the value that would be returned by hsh[key] if
|
|
156
|
-
# key did not exist in hsh.
|
|
157
|
-
#
|
|
158
|
-
# @example
|
|
159
|
-
# h = Hash.new # => {}
|
|
160
|
-
# h.default # => nil
|
|
161
|
-
# h.default(2) # => nil
|
|
162
|
-
#
|
|
163
|
-
# h = Hash.new 'cat' # => {}
|
|
164
|
-
# h.default # => 'cat'
|
|
165
|
-
# h.default(2) # => 'cat'
|
|
166
|
-
#
|
|
167
|
-
# @todo Using block as default does not currently work
|
|
168
|
-
#
|
|
169
|
-
# @param [Object] key to check with
|
|
170
|
-
# @return [Object] returns default
|
|
171
|
-
def default(key = nil)
|
|
172
|
-
`return #{self}.__default__;`
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
# Sets the default value, the value returned for a key that does not exist in
|
|
176
|
-
# the hash. It is not possible to set the default to a {Proc} that will be
|
|
177
|
-
# executed on each key lookup.
|
|
178
|
-
#
|
|
179
|
-
# @example
|
|
180
|
-
# h = { "a" => 100, "b" => 200 }
|
|
181
|
-
# h.default = "Go fish"
|
|
182
|
-
# h['a']
|
|
183
|
-
# # => 100
|
|
184
|
-
# h['z']
|
|
185
|
-
# # => "Go fish"
|
|
186
|
-
#
|
|
187
|
-
# @param [Object] obj the new default
|
|
188
|
-
# @return [Object] returns the default value
|
|
189
|
-
def default=(obj)
|
|
190
|
-
`return #{self}.__default__ = #{obj};`
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
# Deletes and returns a key-value pair from `self` whose key is equal to
|
|
194
|
-
# `key`. If the key is not found, returns the default value. If the optional
|
|
195
|
-
# code block is given and the key is not found, pass in the key and return
|
|
196
|
-
# the result of `block`.
|
|
197
|
-
#
|
|
198
|
-
# @todo Use with block functionality not yet implemented.
|
|
199
|
-
#
|
|
200
|
-
# @example
|
|
201
|
-
# h = { "a" => 100, "b" => 200}
|
|
202
|
-
# h.delete("a")
|
|
203
|
-
# # => 100
|
|
204
|
-
# h.delete("z")
|
|
205
|
-
# # => nil
|
|
206
|
-
#
|
|
207
|
-
# @param [Object] key to delete
|
|
208
|
-
# @return [Object] returns value or default value
|
|
209
|
-
def delete(key)
|
|
210
|
-
`return #{self}.hash_delete(#{key});`
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
# Deletes every key-pair value from `self` for which block evaluates to
|
|
214
|
-
# `true`.
|
|
215
|
-
#
|
|
216
|
-
# If no block is given, an enumerator is returned instead.
|
|
217
|
-
#
|
|
218
|
-
# @todo Enumerator functionality not yet implemented.
|
|
219
|
-
#
|
|
220
|
-
# @example
|
|
221
|
-
# h = { "a" => 100, "b" => 200, "c" => 300 }
|
|
222
|
-
# h.delete_if { |key, value| key >= "b" }
|
|
223
|
-
# # => { "a" => 100 }
|
|
224
|
-
#
|
|
225
|
-
# @return [Hash] returns receiver
|
|
226
|
-
def delete_if(&block)
|
|
227
|
-
`var key, value;
|
|
228
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
229
|
-
key = #{self}.__keys__[i];
|
|
230
|
-
value = #{self}.__assocs__[key.hash()];
|
|
231
|
-
if (#{block}.apply(#{block}.__self__, [key, value]).r) {
|
|
232
|
-
#{self}.hash_delete(key);
|
|
233
|
-
i--;
|
|
234
|
-
};
|
|
235
|
-
}`
|
|
236
|
-
self
|
|
237
|
-
end
|
|
238
|
-
|
|
239
|
-
# Calls `block` once for each key in `self`, passing the key-value pair as
|
|
240
|
-
# parameters.
|
|
241
|
-
#
|
|
242
|
-
# If no block is given, an enumerator is returned instead.
|
|
243
|
-
#
|
|
244
|
-
# @todo Enumerator functionality not yet implemented.
|
|
245
|
-
#
|
|
246
|
-
# @example
|
|
247
|
-
# h = { "a" => 100, "b" => 200 }
|
|
248
|
-
# h.each { |k, v| puts "#{k} is #{v}" }
|
|
249
|
-
# # => "a is 100"
|
|
250
|
-
# # => "b is 200"
|
|
251
|
-
#
|
|
252
|
-
# @return [Hash] returns reciever
|
|
253
|
-
def each(&block)
|
|
254
|
-
`var key, value;
|
|
255
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
256
|
-
key = #{self}.__keys__[i];
|
|
257
|
-
value = #{self}.__assocs__[key.hash()];
|
|
258
|
-
#{block}.apply(#{block}.__self__, [key, value]);
|
|
259
|
-
}`
|
|
260
|
-
self
|
|
261
|
-
end
|
|
262
|
-
|
|
263
|
-
alias_method :each_pair, :each
|
|
264
|
-
|
|
265
|
-
# Calls block once for each key in `self`, passing key as a parameter.
|
|
266
|
-
#
|
|
267
|
-
# @example
|
|
268
|
-
# h = { "a" => 100, "b" => 200 }
|
|
269
|
-
# h.each_key { |key| puts key }
|
|
270
|
-
# # => "a"
|
|
271
|
-
# # => "b"
|
|
272
|
-
#
|
|
273
|
-
# @return [Hash] returns receiver
|
|
274
|
-
def each_key(&block)
|
|
275
|
-
`var key;
|
|
276
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
277
|
-
key = #{self}.__keys__[i];
|
|
278
|
-
#{block}.apply(#{block}.__self__, [key]);
|
|
279
|
-
}`
|
|
280
|
-
self
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
# Calls `block` once for each key in `hsh`, passing the value as a parameter.
|
|
284
|
-
#
|
|
285
|
-
# @example
|
|
286
|
-
# h = { "a" => 100, "b" => 200 }
|
|
287
|
-
# h.each_value { |value| puts value }
|
|
288
|
-
# # => 100
|
|
289
|
-
# # => 200
|
|
290
|
-
#
|
|
291
|
-
# @return [Hash] returns receiver
|
|
292
|
-
def each_value(&block)
|
|
293
|
-
`var key, value;
|
|
294
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
295
|
-
key = #{self}.__keys__[i];
|
|
296
|
-
value = #{self}.__assocs__[key.hash()];
|
|
297
|
-
#{block}.apply(#{block}.__self__, [value]);
|
|
298
|
-
}`
|
|
299
|
-
self
|
|
300
|
-
end
|
|
301
|
-
|
|
302
|
-
# Returns true if `self` contains no key-value pairs.
|
|
303
|
-
#
|
|
304
|
-
# @example
|
|
305
|
-
# {}.empty?
|
|
306
|
-
# # => true
|
|
307
|
-
#
|
|
308
|
-
# @return [Boolean]
|
|
309
|
-
def empty?
|
|
310
|
-
`return #{self}.__keys__.length == 0 ? #{true} : #{false};`
|
|
311
|
-
end
|
|
312
|
-
|
|
313
|
-
# Returns a value from the hash for the given key. If the key can't be found,
|
|
314
|
-
# there are several options: With no other arguments, it will raise an
|
|
315
|
-
# KeyError exception; if `default` is given, then that will be returned; if
|
|
316
|
-
# the optional code block is specified, then that will be run and its result
|
|
317
|
-
# returned.
|
|
318
|
-
#
|
|
319
|
-
# @example
|
|
320
|
-
# h = { "a" => 100, "b" => 200 }
|
|
321
|
-
# h.fetch("a")
|
|
322
|
-
# # => 100
|
|
323
|
-
# h.fetch("z", "Go fish")
|
|
324
|
-
# # => "Go fish"
|
|
325
|
-
# h.fetch("z") { |el| "Go fish, #{el}" }
|
|
326
|
-
# # => "Go fish, z"
|
|
327
|
-
# h.fetch("z")
|
|
328
|
-
# # => (opal):2: in `fetch`: key not found (KeyError)
|
|
329
|
-
#
|
|
330
|
-
# @param [Object] key the key to lookup
|
|
331
|
-
# @param [Object] defaults the default value to return
|
|
332
|
-
# @return [Object] value from hash
|
|
333
|
-
def fetch(key, defaults)
|
|
334
|
-
`var value = #{self}.__assocs__[#{key}.hash()];
|
|
335
|
-
if (value !== undefined) {
|
|
336
|
-
return value;
|
|
337
|
-
} else if (#{defaults} === undefined) {
|
|
338
|
-
throw "KeyError: key not found";
|
|
339
|
-
} else if (#{defaults}.info & #{self}.TP) {
|
|
340
|
-
return #{defaults}.apply(#{defaults}.__self__, [#{key}]);
|
|
341
|
-
} else {
|
|
342
|
-
return #{defaults};
|
|
343
|
-
}`
|
|
344
|
-
end
|
|
345
|
-
|
|
346
|
-
# Returns a new array that is a one-dimensional flattening of this hash. That
|
|
347
|
-
# is, for every key or value that is an array, extract its elements into the
|
|
348
|
-
# new array. Unlike {Array#flatten}, this method does not flatten recursively
|
|
349
|
-
# by default. The optional `level` argument determines the level of
|
|
350
|
-
# recursion to flatten.
|
|
351
|
-
#
|
|
352
|
-
# @example
|
|
353
|
-
# a = { 1 => "one", 2 => [2, "two"], 3 => "three" }
|
|
354
|
-
# a.flatten
|
|
355
|
-
# # => [1, "one", 2, [2, "two"], 3, "three"]
|
|
356
|
-
# a.flatten(2)
|
|
357
|
-
# # => [1, "one", 2, 2, "two", 3, "three"]
|
|
358
|
-
#
|
|
359
|
-
# @param [Number] level the level to flatten until
|
|
360
|
-
# @return [Array] flattened hash
|
|
361
|
-
def flatten(level = 1)
|
|
362
|
-
`var result = [], key, value;
|
|
363
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
364
|
-
key = #{self}.__keys__[i];
|
|
365
|
-
value = #{self}.__assocs__[key.hash()];
|
|
366
|
-
result.push(key);
|
|
367
|
-
if (value.info & #{self}.TA) {
|
|
368
|
-
if (#{level} == 1) {
|
|
369
|
-
result.push(value);
|
|
370
|
-
} else {
|
|
371
|
-
var temp = value.$flatten(#{level} - 1);
|
|
372
|
-
result = result.concat(temp);
|
|
373
|
-
}
|
|
374
|
-
} else {
|
|
375
|
-
result.push(value);
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
return result;`
|
|
379
|
-
end
|
|
380
|
-
|
|
381
|
-
# Returns `true` if the given `key` is present in `self`.
|
|
382
|
-
#
|
|
383
|
-
# @example
|
|
384
|
-
# h = { "a" => 100, "b" => 200 }
|
|
385
|
-
# h.has_key? "a"
|
|
386
|
-
# # => true
|
|
387
|
-
# h.has_key? "b"
|
|
388
|
-
# # => false
|
|
389
|
-
#
|
|
390
|
-
# @param [Object] key the key to check for
|
|
391
|
-
# @return [Boolean]
|
|
392
|
-
def has_key?(key)
|
|
393
|
-
`return #{self}.__assocs__.hasOwnProperty(#{key}.hash()) ? #{true} : #{false};`
|
|
394
|
-
end
|
|
395
|
-
|
|
396
|
-
alias_method :include?, :has_key?
|
|
397
|
-
alias_method :key?, :has_key?
|
|
398
|
-
alias_method :member?, :has_key?
|
|
399
|
-
|
|
400
|
-
# Returns `true` if the given `value` is present for some key in `self`.
|
|
401
|
-
#
|
|
402
|
-
# @example
|
|
403
|
-
# h = { "a" => 100, "b" => 200 }
|
|
404
|
-
# h.has_value?(100)
|
|
405
|
-
# # => true
|
|
406
|
-
# h.has_value?(200)
|
|
407
|
-
# # => false
|
|
408
|
-
#
|
|
409
|
-
# @param [Object] value the value to check for
|
|
410
|
-
# @return [Boolean]
|
|
411
|
-
def has_value?(value)
|
|
412
|
-
`var key, val;
|
|
413
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
414
|
-
key = #{self}.__keys__[i];
|
|
415
|
-
val = #{self}.__assocs__[key.hash()];
|
|
416
|
-
if (value['$=='](val).r) {
|
|
417
|
-
return #{true};
|
|
418
|
-
};
|
|
419
|
-
}`
|
|
420
|
-
false
|
|
421
|
-
end
|
|
422
|
-
|
|
423
|
-
alias_method :value?, :has_value?
|
|
424
|
-
|
|
425
|
-
# Replaces the contents of `self` with the contents of `other_hash`.
|
|
426
|
-
#
|
|
427
|
-
# @example
|
|
428
|
-
# h = { "a" => 100, "b" => 200 }
|
|
429
|
-
# h.replace({ "c" => 200, "d" => 300 })
|
|
430
|
-
# # => { "c" => 200, "d" => 300 }
|
|
431
|
-
#
|
|
432
|
-
# @param [Hash] other_hash hash for contents
|
|
433
|
-
# @return [Hash] returns receiver
|
|
434
|
-
def replace(other_hash)
|
|
435
|
-
`#{self}.__keys__ = [];
|
|
436
|
-
#{self}.__assocs__ = {};
|
|
437
|
-
for (var i = 0; i < #{other_hash}.__keys__.length; i++) {
|
|
438
|
-
key = #{other_hash}.__keys__[i];
|
|
439
|
-
val = #{other_hash}.__assocs__[key.hash()];
|
|
440
|
-
#{self}.hash_store(key, val)
|
|
441
|
-
}`
|
|
442
|
-
self
|
|
443
|
-
end
|
|
444
|
-
|
|
445
|
-
# Returns the contents of this hash as a string.
|
|
446
|
-
#
|
|
447
|
-
# @example
|
|
448
|
-
# h = { "a" => 100, "b" => 200 }
|
|
449
|
-
# # => "{ \"a\" => 100, \"b\" => 200 }"
|
|
450
|
-
#
|
|
451
|
-
# @return [String]
|
|
452
|
-
def inspect
|
|
453
|
-
`var result = ['{'], key, value;
|
|
454
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
455
|
-
key = #{self}.__keys__[i];
|
|
456
|
-
value = #{self}.__assocs__[key.hash()];
|
|
457
|
-
if (i > 0) result.push(', ');
|
|
458
|
-
result.push(key.$inspect());
|
|
459
|
-
result.push('=>');
|
|
460
|
-
result.push(value.$inspect());
|
|
461
|
-
}
|
|
462
|
-
result.push('}');
|
|
463
|
-
return result.join('');`
|
|
464
|
-
end
|
|
465
|
-
|
|
466
|
-
alias_method :to_s, :inspect
|
|
467
|
-
|
|
468
|
-
# Returns a new hash created by using `self`'s values as keys, and the keys as
|
|
469
|
-
# values.
|
|
470
|
-
#
|
|
471
|
-
# @example
|
|
472
|
-
# h = { "n" => 100, "m" => 100, "y" => 300, "d" => 200, "a" => 0 }
|
|
473
|
-
# h.invert
|
|
474
|
-
# # => { 0 => "a", 100 => "m", 200 => "d", 300 => "y" }
|
|
475
|
-
#
|
|
476
|
-
# @return [Hash] inverted hash
|
|
477
|
-
def invert
|
|
478
|
-
`var res = vnH();
|
|
479
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
480
|
-
key = #{self}.__keys__[i];
|
|
481
|
-
value = #{self}.__assocs__[key.hash()];
|
|
482
|
-
res.hash_store(value, key);
|
|
483
|
-
}
|
|
484
|
-
return res;`
|
|
485
|
-
end
|
|
486
|
-
|
|
487
|
-
# Deletes every key-value pair from `self` for which block evaluates to
|
|
488
|
-
# `false`.
|
|
489
|
-
#
|
|
490
|
-
# If no block is given, an enumerator is returned instead.
|
|
491
|
-
#
|
|
492
|
-
# @todo Enumerator functionality is not yet implemented.
|
|
493
|
-
#
|
|
494
|
-
# @example
|
|
495
|
-
# h = { "a" => 100, "b" => 200, "c" => 300 }
|
|
496
|
-
# h.keep_if { |key, value| key == "b" }
|
|
497
|
-
# # => { "b" => 200 }
|
|
498
|
-
#
|
|
499
|
-
# @return [Hash] returns receiver
|
|
500
|
-
def keep_if(&block)
|
|
501
|
-
`var key, value;
|
|
502
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
503
|
-
key = #{self}.__keys__[i];
|
|
504
|
-
value = #{self}.__assocs__[key.hash()];
|
|
505
|
-
if (!#{block}.apply(#{block}.__self__, [key, value]).r) {
|
|
506
|
-
#{self}.hash_delete(key);
|
|
507
|
-
i--;
|
|
508
|
-
};
|
|
509
|
-
}`
|
|
510
|
-
self
|
|
511
|
-
end
|
|
512
|
-
|
|
513
|
-
# Returns the key for a given value. If not found, returns `nil`.
|
|
514
|
-
#
|
|
515
|
-
# @example
|
|
516
|
-
# h = { "a" => 100, "b" => 200 }
|
|
517
|
-
# h.key(200)
|
|
518
|
-
# # => "b"
|
|
519
|
-
# h.key(300)
|
|
520
|
-
# # => nil
|
|
521
|
-
#
|
|
522
|
-
# @param [Object] value to check for
|
|
523
|
-
# @return [Object] key or nil
|
|
524
|
-
def key(value)
|
|
525
|
-
`var key, val;
|
|
526
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
527
|
-
key = #{self}.__keys__[i];
|
|
528
|
-
val = #{self}.__assocs__[key.hash()];
|
|
529
|
-
if (value['$=='](val).r) {
|
|
530
|
-
return key;
|
|
531
|
-
};
|
|
532
|
-
}`
|
|
533
|
-
nil
|
|
534
|
-
end
|
|
535
|
-
|
|
536
|
-
# Returns a new array populated with the keys from this hash. See also
|
|
537
|
-
# {Hash#values}.
|
|
538
|
-
#
|
|
539
|
-
# @example
|
|
540
|
-
# h = { "a" => 100, "b" => 200, "c" => 300 }
|
|
541
|
-
# h.keys
|
|
542
|
-
# # => ["a", "b", "c"]
|
|
543
|
-
#
|
|
544
|
-
# @return [Array] keys
|
|
545
|
-
def keys
|
|
546
|
-
`return #{self}.__keys__.slice();`
|
|
547
|
-
end
|
|
548
|
-
|
|
549
|
-
# Returns the number of key-value pairs in the hash.
|
|
550
|
-
#
|
|
551
|
-
# @example
|
|
552
|
-
# h = { "a" => 100, "b" => 200 }
|
|
553
|
-
# h.length
|
|
554
|
-
# # => 2
|
|
555
|
-
# h.delete "a"
|
|
556
|
-
# h.length
|
|
557
|
-
# # => 1
|
|
558
|
-
#
|
|
559
|
-
# @return [Number] length
|
|
560
|
-
def length
|
|
561
|
-
`return #{self}.__keys__.length;`
|
|
562
|
-
end
|
|
563
|
-
|
|
564
|
-
alias_method :size, :length
|
|
565
|
-
|
|
566
|
-
# Returns a new hash containing the contents of `other_hash` and the contents
|
|
567
|
-
# of `self`. If no block is specified, the value for entries with duplicate
|
|
568
|
-
# keys will be that of `other_hash`. Otherwise the value for each duplicate
|
|
569
|
-
# key is determined by calling the block with the key, its value in `self` and
|
|
570
|
-
# its valye in `other_hash`.
|
|
571
|
-
#
|
|
572
|
-
# @todo Block functionality not yet implemented.
|
|
573
|
-
#
|
|
574
|
-
# @example
|
|
575
|
-
# h = { "a" => 100, "b" => 200 }
|
|
576
|
-
# h2 = { "b" => 300, "c" => 400 }
|
|
577
|
-
# h.merge(h2)
|
|
578
|
-
# # => { "a" => 100, "b" => 300, "c" => 400 }
|
|
579
|
-
# h
|
|
580
|
-
# # => { "a" => 100, "b" => 200 }
|
|
581
|
-
#
|
|
582
|
-
# @param [Hash] other_hash hash to merge
|
|
583
|
-
# @return [Hash] returns new hash with merged contents
|
|
584
|
-
def merge(other_hash)
|
|
585
|
-
`var result = vnH(), key, val;
|
|
586
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
587
|
-
key = #{self}.__keys__[i];
|
|
588
|
-
val = #{self}.__assocs__[key.hash()];
|
|
589
|
-
result.hash_store(key, val)
|
|
590
|
-
}
|
|
591
|
-
for (var i = 0; i < #{other_hash}.__keys__.length; i++) {
|
|
592
|
-
key = #{other_hash}.__keys__[i];
|
|
593
|
-
val = #{other_hash}.__assocs__[key.hash()];
|
|
594
|
-
result.hash_store(key, val)
|
|
595
|
-
}
|
|
596
|
-
return result;`
|
|
597
|
-
end
|
|
598
|
-
|
|
599
|
-
# Adds the contents of `other_hash` to `self`. If no block is specified,
|
|
600
|
-
# entries with duplicate keys are overwritten with the values from
|
|
601
|
-
# `other_hash`, otherwise the value of each duplicate key is determined by
|
|
602
|
-
# calling the block with the key, its value in `self` and its value in
|
|
603
|
-
# `other_hash`.
|
|
604
|
-
#
|
|
605
|
-
# @todo Block functionality not yet implemented.
|
|
606
|
-
#
|
|
607
|
-
# @example
|
|
608
|
-
# h = { "a" => 100, "b" => 200 }
|
|
609
|
-
# h2 = { "b" => 300, "c" => 400 }
|
|
610
|
-
# h.merge!(h2)
|
|
611
|
-
# # => { "a" => 100, "b" => 300, "c" => 400 }
|
|
612
|
-
# h
|
|
613
|
-
# # => { "a" => 100, "b" => 300, "c" => 400 }
|
|
614
|
-
#
|
|
615
|
-
# @param [Hash] other_hash hash to merge
|
|
616
|
-
# @return [Hash] returns receiver
|
|
617
|
-
def merge!(other_hash)
|
|
618
|
-
`var key, val;
|
|
619
|
-
for (var i = 0; i < #{other_hash}.__keys__.length; i++) {
|
|
620
|
-
key = #{other_hash}.__keys__[i];
|
|
621
|
-
val = #{other_hash}.__assocs__[key.hash()];
|
|
622
|
-
#{self}.hash_store(key, val)
|
|
623
|
-
}
|
|
624
|
-
return #{self};`
|
|
625
|
-
end
|
|
626
|
-
|
|
627
|
-
alias_method :update, :merge!
|
|
628
|
-
|
|
629
|
-
# Searches through the hash comapring obj with the value using ==. Returns the
|
|
630
|
-
# first key-value pair (two-element array) that matches. See also
|
|
631
|
-
# {Array#rassoc}.
|
|
632
|
-
#
|
|
633
|
-
# @example
|
|
634
|
-
# a = { 1 => "one", 2 => "two", 3 => "three" }
|
|
635
|
-
# a.rassoc "two"
|
|
636
|
-
# # => [2, "two"]
|
|
637
|
-
# a.rassoc "four"
|
|
638
|
-
# # => nil
|
|
639
|
-
#
|
|
640
|
-
# @param [Object] obj object to check
|
|
641
|
-
# @return [Array]
|
|
642
|
-
def rassoc(obj)
|
|
643
|
-
`var key, val;
|
|
644
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
645
|
-
key = #{self}.__keys__[i];
|
|
646
|
-
val = #{self}.__assocs__[key.hash()];
|
|
647
|
-
if (val['$=='](#{obj}).r) {
|
|
648
|
-
return [key, val];
|
|
649
|
-
}
|
|
650
|
-
}`
|
|
651
|
-
nil
|
|
652
|
-
end
|
|
653
|
-
|
|
654
|
-
# Same as {Hash#delete_if}, but it works on (and returns) a copy of the hash.
|
|
655
|
-
#
|
|
656
|
-
# @return [Hash]
|
|
657
|
-
def reject(&block)
|
|
658
|
-
`var result = vnH(), key, value;
|
|
659
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
660
|
-
key = #{self}.__keys__[i];
|
|
661
|
-
value = #{self}.__assocs__[key.hash()];
|
|
662
|
-
if (!#{block}.apply(#{block}.__self__, [key, value]).r) {
|
|
663
|
-
result.hash_store(key, value);
|
|
664
|
-
};
|
|
665
|
-
}
|
|
666
|
-
return result;`
|
|
667
|
-
end
|
|
668
|
-
|
|
669
|
-
# Equivalent to {Hash#delete_if}, but returns `nil` if no changes were made.
|
|
670
|
-
#
|
|
671
|
-
# @return [Hash]
|
|
672
|
-
def reject!(&block)
|
|
673
|
-
`var key, value, size = #{self}.__keys__.length;
|
|
674
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
675
|
-
key = #{self}.__keys__[i];
|
|
676
|
-
value = #{self}.__assocs__[key.hash()];
|
|
677
|
-
if (#{block}.apply(#{block}.__self__, [key, value]).r) {
|
|
678
|
-
#{self}.hash_delete(key);
|
|
679
|
-
i--;
|
|
680
|
-
};
|
|
681
|
-
}
|
|
682
|
-
return #{self}.__keys__.length == size ? #{nil} : #{self}`
|
|
683
|
-
end
|
|
684
|
-
|
|
685
|
-
# Returns a new hash consisting of entries for which the block returns `true`.
|
|
686
|
-
#
|
|
687
|
-
# @todo Need to implement Enumerator functionality (when no block given).
|
|
688
|
-
#
|
|
689
|
-
# @example
|
|
690
|
-
# h = { :a => 100, :b => 200, :c => 300 }
|
|
691
|
-
# h.select { |k, v| k > "a" }
|
|
692
|
-
# # => { :b => 200, :c => 300 }
|
|
693
|
-
# h.select { |k, v| v < 200 }
|
|
694
|
-
# # => { :a => 100 }
|
|
695
|
-
#
|
|
696
|
-
# @return [Hash]
|
|
697
|
-
def select(&block)
|
|
698
|
-
`var result = vnH(), key, value;
|
|
699
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
700
|
-
key = #{self}.__keys__[i];
|
|
701
|
-
value = #{self}.__assocs__[key.hash()];
|
|
702
|
-
if (#{block}.apply(#{block}.__self__, [key, value]).r) {
|
|
703
|
-
result.hash_store(key, value);
|
|
704
|
-
};
|
|
705
|
-
}
|
|
706
|
-
return result;`
|
|
707
|
-
end
|
|
708
|
-
|
|
709
|
-
# Equivalent to {Hash#keep_if}, but returns `nil` if no changes were made.
|
|
710
|
-
#
|
|
711
|
-
# @return [Hash, nil]
|
|
712
|
-
def select!(&block)
|
|
713
|
-
`var key, value, size = #{self}.__keys__.length;
|
|
714
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
715
|
-
key = #{self}.__keys__[i];
|
|
716
|
-
value = #{self}.__assocs__[key.hash()];
|
|
717
|
-
if (!#{block}.apply(#{block}.__self__, [key, value]).r) {
|
|
718
|
-
#{self}.hash_delete(key);
|
|
719
|
-
i--;
|
|
720
|
-
};
|
|
721
|
-
}
|
|
722
|
-
return #{self}.__keys__.length == size ? #{nil} : #{self}`
|
|
723
|
-
end
|
|
724
|
-
|
|
725
|
-
# Removes a key-value pair from `self` and returns it as the two-item array,
|
|
726
|
-
# [key, value], or returns the hash's default value if the hash is empty.
|
|
727
|
-
#
|
|
728
|
-
# @example
|
|
729
|
-
# h = { :a => 1, :b => 2}
|
|
730
|
-
# h.shift
|
|
731
|
-
# # => [:a, 1]
|
|
732
|
-
# h
|
|
733
|
-
# # => {:b => 1}
|
|
734
|
-
# {}.shift
|
|
735
|
-
# # => nil
|
|
736
|
-
#
|
|
737
|
-
# @return [Array, Object] array or default value
|
|
738
|
-
def shift
|
|
739
|
-
`var key, value;
|
|
740
|
-
if (#{self}.__keys__.length > 0) {
|
|
741
|
-
key = #{self}.__keys__[0];
|
|
742
|
-
value = #{self}.__assocs__[key.hash()];
|
|
743
|
-
#{self}.hash_delete(key);
|
|
744
|
-
return [key, value];
|
|
745
|
-
} else {
|
|
746
|
-
return #{self}.__default__;
|
|
747
|
-
}`
|
|
748
|
-
end
|
|
749
|
-
|
|
750
|
-
# Convert `self` to a nested array of `[key, value]` arrays.
|
|
751
|
-
#
|
|
752
|
-
# @example
|
|
753
|
-
# h = { :a => 1, :b => 2, :c => 3 }
|
|
754
|
-
# h.to_a
|
|
755
|
-
# # => [[:a, 1], [:b, 2], [:c, 3]]
|
|
756
|
-
#
|
|
757
|
-
# @return [Array]
|
|
758
|
-
def to_a
|
|
759
|
-
`var result = [], key, value;
|
|
760
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
761
|
-
key = #{self}.__keys__[i];
|
|
762
|
-
value = #{self}.__assocs__[key.hash()];
|
|
763
|
-
result.push([key, value]);
|
|
764
|
-
}
|
|
765
|
-
return result;`
|
|
766
|
-
end
|
|
767
|
-
|
|
768
|
-
# Returns self.
|
|
769
|
-
#
|
|
770
|
-
# @return [Hash] self
|
|
771
|
-
def to_hash
|
|
772
|
-
self
|
|
773
|
-
end
|
|
774
|
-
|
|
775
|
-
# Returns a new array populated with the values from `self`.
|
|
776
|
-
#
|
|
777
|
-
# @example
|
|
778
|
-
# h = { :a => 1, :b => 2 }
|
|
779
|
-
# h.values
|
|
780
|
-
# # => [1, 2]
|
|
781
|
-
#
|
|
782
|
-
# @return [Array]
|
|
783
|
-
def values
|
|
784
|
-
`var result = [];
|
|
785
|
-
for (var i = 0; i < #{self}.__keys__.length; i++) {
|
|
786
|
-
result.push(#{self}.__assocs__[#{self}.__keys__[i].hash()]);
|
|
787
|
-
}
|
|
788
|
-
return result;`
|
|
789
|
-
end
|
|
790
|
-
|
|
791
|
-
end
|