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
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class Range
|
|
2
|
+
|
|
3
|
+
def to_s
|
|
4
|
+
`var str = #{`self.$beg`.to_s};
|
|
5
|
+
var str2 = #{`self.$end`.to_s};
|
|
6
|
+
var join = self.$exc ? '...' : '..';
|
|
7
|
+
return str + join + str2;`
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def inspect
|
|
11
|
+
`var str = #{`self.$beg`.inspect};
|
|
12
|
+
var str2 = #{`self.$end`.inspect};
|
|
13
|
+
var join = self.$exc ? '...' : '..';
|
|
14
|
+
return str + join + str2;`
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
# A {String} object holds a sequence of bytes, typically representing
|
|
2
|
+
# characters.
|
|
3
|
+
#
|
|
4
|
+
# Implementation Details
|
|
5
|
+
# ======================
|
|
6
|
+
#
|
|
7
|
+
# For performance, strings in Opal are build directly on top of native
|
|
8
|
+
# javascript strings, so that they are infact the same object. This has the side
|
|
9
|
+
# effect that all strings are immutable, that is, they cannot be changed. Most
|
|
10
|
+
# of the string methods that end in '!' are therefore not implemented, but their
|
|
11
|
+
# counterparts are: 'upase' exists, but 'upcase!' does not, for example.
|
|
12
|
+
class String
|
|
13
|
+
|
|
14
|
+
def self.new(str = "")
|
|
15
|
+
`return new String(str);`
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Copy - returns a new string containing `count` copies of the receiver.
|
|
19
|
+
#
|
|
20
|
+
# @example
|
|
21
|
+
#
|
|
22
|
+
# 'Ho! ' * 3
|
|
23
|
+
# # => 'Ho! Ho! Ho! '
|
|
24
|
+
#
|
|
25
|
+
# @param [Numeric] count number of copies
|
|
26
|
+
# @return [String]
|
|
27
|
+
def *(count)
|
|
28
|
+
`var result = [];
|
|
29
|
+
|
|
30
|
+
for (var i = 0; i < count; i++) {
|
|
31
|
+
result.push(self);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return result.join('');`
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Concatenation - Returns a new string containing `other` concatenated onto
|
|
38
|
+
# `self`.
|
|
39
|
+
#
|
|
40
|
+
# @example
|
|
41
|
+
#
|
|
42
|
+
# 'Hello from ' + self.to_s
|
|
43
|
+
# # => 'Hello from main'
|
|
44
|
+
#
|
|
45
|
+
# @param [String] other string to concatenate
|
|
46
|
+
# @return [String]
|
|
47
|
+
def +(other)
|
|
48
|
+
`return self + other;`
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Returns a copy of `self` with the first character converted to uppercase and
|
|
52
|
+
# the remaining to lowercase.
|
|
53
|
+
#
|
|
54
|
+
# @example
|
|
55
|
+
#
|
|
56
|
+
# 'hello'.capitalize
|
|
57
|
+
# # => 'Hello'
|
|
58
|
+
# 'HELLO'.capitalize
|
|
59
|
+
# # => 'Hello'
|
|
60
|
+
# '123ABC'.capitalize
|
|
61
|
+
# # => '123abc'
|
|
62
|
+
#
|
|
63
|
+
# @return [String]
|
|
64
|
+
def capitalize
|
|
65
|
+
`return self.charAt(0).toUpperCase() + self.substr(1).toLowerCase();`
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Returns a copy of `self` with all uppercase letters replaces with their
|
|
69
|
+
# lowercase counterparts.
|
|
70
|
+
#
|
|
71
|
+
# @example
|
|
72
|
+
#
|
|
73
|
+
# 'hELLo'.downcase
|
|
74
|
+
# # => 'hello'
|
|
75
|
+
#
|
|
76
|
+
# @return [String]
|
|
77
|
+
def downcase
|
|
78
|
+
`return self.toLowerCase();`
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def to_s
|
|
82
|
+
self
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Returns a printable version of `self`, surrounded with quotation marks, with
|
|
86
|
+
# all special characters escaped.
|
|
87
|
+
#
|
|
88
|
+
# @example
|
|
89
|
+
#
|
|
90
|
+
# str = "hello"
|
|
91
|
+
# str.inspect
|
|
92
|
+
# # => "\"hello\""
|
|
93
|
+
#
|
|
94
|
+
# @return [String]
|
|
95
|
+
def inspect
|
|
96
|
+
`/* borrowed from json2.js, see file for license */
|
|
97
|
+
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
|
|
98
|
+
|
|
99
|
+
escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
|
|
100
|
+
|
|
101
|
+
meta = {
|
|
102
|
+
'\b': '\\b',
|
|
103
|
+
'\t': '\\t',
|
|
104
|
+
'\n': '\\n',
|
|
105
|
+
'\f': '\\f',
|
|
106
|
+
'\r': '\\r',
|
|
107
|
+
'"' : '\\"',
|
|
108
|
+
'\\': '\\\\'
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
escapable.lastIndex = 0;
|
|
112
|
+
|
|
113
|
+
return escapable.test(self) ? '"' + self.replace(escapable, function (a) {
|
|
114
|
+
var c = meta[a];
|
|
115
|
+
return typeof c === 'string' ? c :
|
|
116
|
+
'\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
|
|
117
|
+
}) + '"' : '"' + self + '"';`
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Returns the number of characters in `self`.
|
|
121
|
+
#
|
|
122
|
+
# @return [Numeric]
|
|
123
|
+
def length
|
|
124
|
+
`return self.length;`
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# Returns the corresponding symbol for the receiver.
|
|
128
|
+
#
|
|
129
|
+
# @example
|
|
130
|
+
#
|
|
131
|
+
# "koala".to_sym # => :Koala
|
|
132
|
+
# 'cat'.to_sym # => :cat
|
|
133
|
+
# '@cat'.to_sym # => :@cat
|
|
134
|
+
#
|
|
135
|
+
# This can also be used to create symbols that cannot be created using the
|
|
136
|
+
# :xxxx notation.
|
|
137
|
+
#
|
|
138
|
+
# @return [Symbol]
|
|
139
|
+
def to_sym
|
|
140
|
+
`return $opal.Y(self);`
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def intern
|
|
144
|
+
`return $opal.Y(self);`
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Returns a new string with the characters from `self` in reverse order.
|
|
148
|
+
#
|
|
149
|
+
# @example
|
|
150
|
+
#
|
|
151
|
+
# 'stressed'.reverse
|
|
152
|
+
# # => 'desserts'
|
|
153
|
+
#
|
|
154
|
+
# @return [String]
|
|
155
|
+
def reverse
|
|
156
|
+
`return self.split('').reverse().join('');`
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def sub(pattern)
|
|
160
|
+
`return self.replace(pattern, function(str) {
|
|
161
|
+
return #{yield `str`};
|
|
162
|
+
});`
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def gsub(pattern)
|
|
166
|
+
`var r = pattern.toString();
|
|
167
|
+
r = r.substr(1, r.lastIndexOf('/') - 1);
|
|
168
|
+
r = new RegExp(r, 'g');
|
|
169
|
+
return self.replace(pattern, function(str) {
|
|
170
|
+
return #{yield `str`};
|
|
171
|
+
});`
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def slice(start, finish = nil)
|
|
175
|
+
`return self.substr(start, finish);`
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def split(split)
|
|
179
|
+
`return self.split(split);`
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# Comparison - returns -1 if `other` is greater than, 0 if `other` is equal to
|
|
183
|
+
# or 1 if `other` is less than `self. Returns nil if `other` is not a string.
|
|
184
|
+
#
|
|
185
|
+
# @example
|
|
186
|
+
#
|
|
187
|
+
# 'abcdef' <=> 'abcde' # => 1
|
|
188
|
+
# 'abcdef' <=> 'abcdef' # => 0
|
|
189
|
+
# 'abcdef' <=> 'abcdefg' # => -1
|
|
190
|
+
# 'abcdef' <=> 'ABCDEF' # => 1
|
|
191
|
+
#
|
|
192
|
+
# @param [String] other string to compare
|
|
193
|
+
# @return [-1, 0, 1, nil] result
|
|
194
|
+
def <=>(other)
|
|
195
|
+
`if (typeof other != 'string') return nil;
|
|
196
|
+
else if (self > other) return 1;
|
|
197
|
+
else if (self < other) return -1;
|
|
198
|
+
return 0;`
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
# Equality - if other is not a string, returns false. Otherwise, returns true
|
|
202
|
+
# if self <=> other returns zero.
|
|
203
|
+
#
|
|
204
|
+
# @param [String] other string to compare
|
|
205
|
+
# @return [true, false]
|
|
206
|
+
def ==(other)
|
|
207
|
+
`return self.valueOf() === other.valueOf() ? Qtrue : Qfalse;`
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
# Match - if obj is a Regexp, then uses it to match against self, returning
|
|
211
|
+
# nil if there is no match, or the index of the match location otherwise. If
|
|
212
|
+
# obj is not a regexp, then it calls =~ on it, using the receiver as an
|
|
213
|
+
# argument
|
|
214
|
+
#
|
|
215
|
+
# @TODO passing a non regexp is not currently supported
|
|
216
|
+
#
|
|
217
|
+
# @param [Regexp, Objec] obj
|
|
218
|
+
# @return [Numeric, nil]
|
|
219
|
+
def =~(obj)
|
|
220
|
+
obj.match self
|
|
221
|
+
nil
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
# Case-insensitive version of {#<=>}
|
|
225
|
+
#
|
|
226
|
+
# @example
|
|
227
|
+
#
|
|
228
|
+
# 'abcdef'.casecmp 'abcde' # => 1
|
|
229
|
+
# 'aBcDeF'.casecmp 'abcdef' # => 0
|
|
230
|
+
# 'abcdef'.casecmp 'aBcdEFg' # => -1
|
|
231
|
+
#
|
|
232
|
+
# @param [String] other string to compare
|
|
233
|
+
# @return [-1, 0, 1, nil]
|
|
234
|
+
def casecmp(other)
|
|
235
|
+
`if (typeof other != 'string') return nil;
|
|
236
|
+
var a = self.toLowerCase(), b = other.toLowerCase();
|
|
237
|
+
if (a > b) return 1;
|
|
238
|
+
else if (a < b) return -1;
|
|
239
|
+
return 0;`
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
# Returns `true` if self has a length of zero.
|
|
243
|
+
#
|
|
244
|
+
# @example
|
|
245
|
+
#
|
|
246
|
+
# 'hello'.empty?
|
|
247
|
+
# # => false
|
|
248
|
+
# ''.empty?
|
|
249
|
+
# # => true
|
|
250
|
+
#
|
|
251
|
+
# @return [true, false]
|
|
252
|
+
def empty?
|
|
253
|
+
`return self.length == 0 ? Qtrue : Qfalse;`
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
# Returns true is self ends with the given suffix.
|
|
257
|
+
#
|
|
258
|
+
# @example
|
|
259
|
+
#
|
|
260
|
+
# 'hello'.end_with? 'lo'
|
|
261
|
+
# # => true
|
|
262
|
+
#
|
|
263
|
+
# @param [String] suffix the suffix to check
|
|
264
|
+
# @return [true, false]
|
|
265
|
+
def end_with?(suffix)
|
|
266
|
+
`if (self.lastIndexOf(suffix) == self.length - suffix.length) {
|
|
267
|
+
return Qtrue;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
return Qfalse;`
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
# Two strings are equal if they have the same length and content.
|
|
274
|
+
#
|
|
275
|
+
# @param [String] other string to compare
|
|
276
|
+
# @return [true, false]
|
|
277
|
+
def eql?(other)
|
|
278
|
+
`return self == other ? Qtrue : Qfalse;`
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
# Returns true if self contains the given string `other`.
|
|
282
|
+
#
|
|
283
|
+
# @example
|
|
284
|
+
#
|
|
285
|
+
# 'hello'.include? 'lo' # => true
|
|
286
|
+
# 'hello'.include? 'ol' # => false
|
|
287
|
+
#
|
|
288
|
+
# @param [String] other string to check for
|
|
289
|
+
# @return [true, false]
|
|
290
|
+
def include?(other)
|
|
291
|
+
`return self.indexOf(other) == -1 ? Qfalse : Qtrue;`
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
# Returns the index of the first occurance of the given `substr` or pattern in
|
|
295
|
+
# self. Returns `nil` if not found. If the second param is present then it
|
|
296
|
+
# specifies the index of self to begin searching.
|
|
297
|
+
#
|
|
298
|
+
# @TODO: regexp and offsets not yet implemented.
|
|
299
|
+
#
|
|
300
|
+
# @example
|
|
301
|
+
#
|
|
302
|
+
# 'hello'.index 'e' # => 1
|
|
303
|
+
# 'hello'.index 'lo' # => 3
|
|
304
|
+
# 'hello'.index 'a' # => nil
|
|
305
|
+
#
|
|
306
|
+
# @param [String] substr string to check for
|
|
307
|
+
# @return [Numeric, nil]
|
|
308
|
+
def index(substr)
|
|
309
|
+
`var res = self.indexOf(substr);
|
|
310
|
+
|
|
311
|
+
return res == -1 ? nil : res;`
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
# Returns a copy of self with leading whitespace removed.
|
|
315
|
+
#
|
|
316
|
+
# @example
|
|
317
|
+
#
|
|
318
|
+
# ' hello '.lstrip
|
|
319
|
+
# # => 'hello '
|
|
320
|
+
# 'hello'.lstrip
|
|
321
|
+
# # => 'hello'
|
|
322
|
+
#
|
|
323
|
+
# @return [String]
|
|
324
|
+
def lstrip
|
|
325
|
+
`return self.replace(/^\s*/, '');`
|
|
326
|
+
end
|
|
327
|
+
end
|
|
328
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Exposes all the VM methods for opal as ruby methods on this module.
|
|
2
|
+
module OpalVM
|
|
3
|
+
|
|
4
|
+
# Define a bridged class that will extend the given native prototype.
|
|
5
|
+
# Classes here must extend Object, and will be placed in the top level
|
|
6
|
+
# scope. As soon as this is called, the class generated will be available
|
|
7
|
+
# for immediate use.
|
|
8
|
+
#
|
|
9
|
+
# @param [NativePrototype] prototype
|
|
10
|
+
# @param [String] name
|
|
11
|
+
def self.bridged_class(prototype, name)
|
|
12
|
+
`VM.bridged_class(prototype, null, name, VM.Object);`
|
|
13
|
+
nil
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
File without changes
|
|
File without changes
|
|
File without changes
|