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
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
|
|
2
|
+
describe "Array#compact" do
|
|
3
|
+
it "returns a copy of array with all nil elements removed" do
|
|
4
|
+
a = [1, 2, 4]
|
|
5
|
+
a.compact.should == [1, 2, 4]
|
|
6
|
+
a = [1, nil, 2, 4]
|
|
7
|
+
a.compact.should == [1, 2, 4]
|
|
8
|
+
a = [1, 2, 4, nil]
|
|
9
|
+
a.compact.should == [1, 2, 4]
|
|
10
|
+
a = [nil, 1, 2, 4]
|
|
11
|
+
a.compact.should == [1, 2, 4]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "does not return self" do
|
|
15
|
+
a = [1, 2, 3]
|
|
16
|
+
a.compact.object_id.should_not == a.object_id
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe "Array#compact!" do
|
|
21
|
+
it "removes all nil elements" do
|
|
22
|
+
a = ['a', nil, 'b', false, 'c']
|
|
23
|
+
a.compact!.object_id.should == a.object_id
|
|
24
|
+
a.should == ['a', 'b', false, 'c']
|
|
25
|
+
a = [nil, 'a', 'b', false, 'c']
|
|
26
|
+
a.compact!.object_id.should == a.object_id
|
|
27
|
+
a.should == ['a', 'b', false, 'c']
|
|
28
|
+
a = ['a', 'b', false, 'c', nil]
|
|
29
|
+
a.compact!.object_id.should == a.object_id
|
|
30
|
+
a.should == ['a', 'b', false, 'c']
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "returns self if some nil elements are removed" do
|
|
34
|
+
a = ['a', nil, 'b', false, 'c']
|
|
35
|
+
a.compact!.object_id.should == a.object_id
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "returns nil if there are no nil elements to remove" do
|
|
39
|
+
[1, 2, false, 3].compact!.should == nil
|
|
40
|
+
end
|
|
41
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
|
|
2
|
+
describe "Array#last" do
|
|
3
|
+
it "returns the last element" do
|
|
4
|
+
[1, 1, 1, 1, 2].last.should == 2
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
it "returns nil if self is empty" do
|
|
8
|
+
[].last.should == nil
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "returns the last count elements if given a count" do
|
|
12
|
+
[1, 2, 3, 4, 5, 9].last(3).should == [4, 5, 9]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "returns an empty array when passeed a count on an empty array" do
|
|
16
|
+
[].last(0).should == []
|
|
17
|
+
[].last(1).should == []
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "returns an empty array when count == 0" do
|
|
21
|
+
[1, 2, 3, 4, 5].last(0).should == []
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "returns an array containing the last element when passed count == 1" do
|
|
25
|
+
[1, 2, 3, 4, 5].last(1).should == [5]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "returns the entire array when count > length" do
|
|
29
|
+
[1, 2, 3, 4, 5, 9].last(10).should == [1, 2, 3, 4, 5, 9]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "returns an array which is independant to the original when passed count" do
|
|
33
|
+
ary = [1, 2, 3, 4, 5]
|
|
34
|
+
ary.last(0).replace([1, 2])
|
|
35
|
+
ary.should == [1, 2, 3, 4, 5]
|
|
36
|
+
ary.last(1).replace([1, 2])
|
|
37
|
+
ary.should == [1, 2, 3, 4, 5]
|
|
38
|
+
ary.last(6).replace([1, 2])
|
|
39
|
+
ary.should == [1, 2, 3, 4, 5]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "is not destructive" do
|
|
43
|
+
a = [1, 2, 3]
|
|
44
|
+
a.last
|
|
45
|
+
a.should == [1, 2, 3]
|
|
46
|
+
a.last(2)
|
|
47
|
+
a.should == [1, 2, 3]
|
|
48
|
+
a.last(3)
|
|
49
|
+
a.should == [1, 2, 3]
|
|
50
|
+
end
|
|
51
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require File.expand_path('../../../spec_helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
describe "Hash#assoc" do
|
|
4
|
+
# before each
|
|
5
|
+
$h = {:apple => :green, :orange => :orange, :grape => :green, :banana => :yellow}
|
|
6
|
+
|
|
7
|
+
it "returns an Array if the argument is == to a key of the Hash" do
|
|
8
|
+
$h.assoc(:apple).class.should == Array
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "returns a 2-element Array if the argument is == to a key of the Hash" do
|
|
12
|
+
$h.assoc(:grape).size.should == 2
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "sets the first element of the Array to the located key" do
|
|
16
|
+
$h.assoc(:banana).first.should == :banana
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "sets the last element of the array to the value of the located key" do
|
|
20
|
+
$h.assoc(:banana).last.should == :yellow
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "uses #== to compare the argument to the keys" do
|
|
24
|
+
$h[1.0] = :value
|
|
25
|
+
1.should == 1.0
|
|
26
|
+
$h.assoc(1).should == [1.0, :value]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "returns nil if the argument is not a key of the Hash" do
|
|
30
|
+
$h.assoc(:green).should == nil
|
|
31
|
+
end
|
|
32
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "String#sub with pattern, replacement" do
|
|
4
|
+
it "returns a copy of self with all occurrences of pattern replaced with replacement" do
|
|
5
|
+
"hello".sub(/[aeiou]/, '*').should == "h*llo"
|
|
6
|
+
"hello".sub(//, ".").should == "hello"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "ignores a block if supplied" do
|
|
10
|
+
"food".sub(/f/, "g") { "W" }.should == "good"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "supports /i for ignoring case" do
|
|
14
|
+
"Hello".sub(/h/i, "j").should == "jello"
|
|
15
|
+
"hello".sub(/H/i, "j").should == "jello"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe "String#sub with pattern and block" do
|
|
20
|
+
it "returns a copy of self with the first occurrences of pattern replaced with the block's return value" do
|
|
21
|
+
# "hi".sub(/./) { |s| s + ' ' }.should == "h i"
|
|
22
|
+
# "hi!".sub(/(.)(.)/) { |*a| " " }.should == '["hi"]!'
|
|
23
|
+
end
|
|
24
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
describe "The '&&' statement" do
|
|
3
|
-
it "short
|
|
3
|
+
it "short-circuits evaluation at the first condition to be false" do
|
|
4
4
|
x = nil
|
|
5
5
|
true && false && x = 1
|
|
6
6
|
x.should == nil
|
|
@@ -17,8 +17,7 @@ describe "The '&&' statement" do
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
it "evaluates the full set of chained conditions during assignment" do
|
|
20
|
-
x = nil
|
|
21
|
-
y = nil
|
|
20
|
+
x, y = nil
|
|
22
21
|
x = 1 && y = 2
|
|
23
22
|
x.should == 2
|
|
24
23
|
end
|
|
@@ -31,18 +31,18 @@ describe "Bareword array literal" do
|
|
|
31
31
|
|
|
32
32
|
it "%W() transforms unquoted barewords into an array, supporing interpolation" do
|
|
33
33
|
a = 3
|
|
34
|
-
%W(a #{3+a} 3).should == ["a", "6", "3"]
|
|
34
|
+
# %W(a #{3+a} 3).should == ["a", "6", "3"]
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
it "%W() always treats interpolated expressions as a single word" do
|
|
38
38
|
a = "hello world"
|
|
39
|
-
%W(a b c #{a} d e).should == ["a", "b", "c", "hello world", "d", "e"]
|
|
39
|
+
# %W(a b c #{a} d e).should == ["a", "b", "c", "hello world", "d", "e"]
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
it "treats consecutive whitespace characters the same as one" do
|
|
43
|
-
%W(a b c d).should == ["a", "b", "c", "d"]
|
|
44
|
-
%W(hello
|
|
45
|
-
world).should == ["hello", "world"]
|
|
43
|
+
# %W(a b c d).should == ["a", "b", "c", "d"]
|
|
44
|
+
# %W(hello
|
|
45
|
+
# world).should == ["hello", "world"]
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
it "treats whitespace as literals characters when escaped by a backslash" #do
|
|
@@ -50,3 +50,19 @@ describe "Bareword array literal" do
|
|
|
50
50
|
# end
|
|
51
51
|
|
|
52
52
|
end
|
|
53
|
+
|
|
54
|
+
describe "The unpacking splat operator (*)" do
|
|
55
|
+
it "when applied to a literal nested array, unpacks its elements into the containing array" do
|
|
56
|
+
[1, 2, *[3, 4, 5]].should == [1, 2, 3, 4, 5]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "when applied to a nested referenced array, unpacks its elements into the containing array" do
|
|
60
|
+
splatted_array = [3, 4, 5]
|
|
61
|
+
[1, 2, *splatted_array].should == [1, 2, 3, 4, 5]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "when applied to a value with no other items in the containing array, coerces the passed value to an array and returns it unchanged" do
|
|
65
|
+
splatted_array = [3, 4, 5]
|
|
66
|
+
[*splatted_array].should == splatted_array
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
|
+
require File.dirname(__FILE__) + '/fixtures/block'
|
|
3
|
+
|
|
4
|
+
describe "A block with a 'rest' arg" do
|
|
5
|
+
it "collects all of the arguments passed to yield" do
|
|
6
|
+
ret = nil
|
|
7
|
+
BlockSpecs::Yield.new.splat(1,2,3) {|*args| ret = args}
|
|
8
|
+
ret.should == [1,2,3]
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe "A block with an anonymous 'rest' arg" do
|
|
13
|
+
it "ignores all of the arguments passed to yield" do
|
|
14
|
+
ret = [1].each {|*| }
|
|
15
|
+
ret.should == [1]
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe "A block whose arguments are splatted" do
|
|
20
|
+
it "captures the arguments passed to the block in an array" do
|
|
21
|
+
a = []
|
|
22
|
+
BlockSpecs::Yield.new.two_args { |*args| a << args }
|
|
23
|
+
a.should == [[1, 2]]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "captures the array passed to the block in an array" do
|
|
27
|
+
a = []
|
|
28
|
+
BlockSpecs::Yield.new.two_arg_array { |*args| a << args }
|
|
29
|
+
a.should == [[[1, 2]]]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "yields the correct arguments in a nested block" do
|
|
33
|
+
a = []
|
|
34
|
+
BlockSpecs::Yield.new.yield_splat_inside_block { |a1, a2| a << [a1, a2]}
|
|
35
|
+
# a.should == [[1, 0], [2, 1]]
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
File without changes
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#
|
|
2
|
+
# describe "The 'case'-construct" do
|
|
3
|
+
# it "evaluates the body of the when clause matching the case target expression" do
|
|
4
|
+
# case 1
|
|
5
|
+
# when 2; false
|
|
6
|
+
# when 1; true
|
|
7
|
+
# end.should == true
|
|
8
|
+
# end
|
|
9
|
+
#
|
|
10
|
+
# it "evaluates the body of the when clause whose array expression includes the case target expression" do
|
|
11
|
+
# case 2
|
|
12
|
+
# when 3, 4; false
|
|
13
|
+
# when 1, 2; true
|
|
14
|
+
# end.should == true
|
|
15
|
+
# end
|
|
16
|
+
#
|
|
17
|
+
# it "evaluates the body of the when clause in left-to-right order if it's an array expression" do
|
|
18
|
+
# @calls = []
|
|
19
|
+
# def foo; @calls << :foo; end
|
|
20
|
+
# def bar; @calls << :bar; end
|
|
21
|
+
#
|
|
22
|
+
# case true
|
|
23
|
+
# when foo, bar;
|
|
24
|
+
# end
|
|
25
|
+
#
|
|
26
|
+
# @calls.should == [:foo, :bar]
|
|
27
|
+
# end
|
|
28
|
+
#
|
|
29
|
+
# it "evaluates the body of the when clause whose range expression includes the case target expression" do
|
|
30
|
+
# case 5
|
|
31
|
+
# when 21..30; false
|
|
32
|
+
# when 1..20; true
|
|
33
|
+
# end.should == true
|
|
34
|
+
# end
|
|
35
|
+
#
|
|
36
|
+
# it "returns nil when no 'then'-bodies are given" do
|
|
37
|
+
# case "a"
|
|
38
|
+
# when "a"
|
|
39
|
+
# when "b"
|
|
40
|
+
# end.should == nil
|
|
41
|
+
# end
|
|
42
|
+
#
|
|
43
|
+
# it "evaluates the 'else'-body when no other expression matches" do
|
|
44
|
+
# case "c"
|
|
45
|
+
# when "a"; 'foo'
|
|
46
|
+
# when "b"; 'bar'
|
|
47
|
+
# else 'zzz'
|
|
48
|
+
# end.should == 'zzz'
|
|
49
|
+
# end
|
|
50
|
+
#
|
|
51
|
+
# it "returns nil when no expression matches and 'else'-body is empty" do
|
|
52
|
+
# case "c"
|
|
53
|
+
# when "a"; "a"
|
|
54
|
+
# when "b"; "b"
|
|
55
|
+
# else
|
|
56
|
+
# end.should == nil
|
|
57
|
+
# end
|
|
58
|
+
#
|
|
59
|
+
# it "returns 2 when a then body is empty" do
|
|
60
|
+
# case Object.new
|
|
61
|
+
# when Number then
|
|
62
|
+
# 1
|
|
63
|
+
# when String then
|
|
64
|
+
# # ok
|
|
65
|
+
# else
|
|
66
|
+
# 2
|
|
67
|
+
# end.should == 2
|
|
68
|
+
# end
|
|
69
|
+
#
|
|
70
|
+
# it "returns that statement following 'then'" do
|
|
71
|
+
# case "a"
|
|
72
|
+
# when "a" then 'foo'
|
|
73
|
+
# when "b" then 'bar'
|
|
74
|
+
# end.should == 'foo'
|
|
75
|
+
# end
|
|
76
|
+
#
|
|
77
|
+
# it "tests classes with case equality" do
|
|
78
|
+
# case "a"
|
|
79
|
+
# when String
|
|
80
|
+
# 'foo'
|
|
81
|
+
# when Symbol
|
|
82
|
+
# 'bar'
|
|
83
|
+
# end.should == 'foo'
|
|
84
|
+
# end
|
|
85
|
+
#
|
|
86
|
+
# it "tests with matching regexps" do
|
|
87
|
+
# case "hello"
|
|
88
|
+
# when /abc/; false
|
|
89
|
+
# when /^hell/; true
|
|
90
|
+
# end.should == true
|
|
91
|
+
# end
|
|
92
|
+
#
|
|
93
|
+
# it "takes a list of values" do
|
|
94
|
+
# case 'z'
|
|
95
|
+
# when 'a', 'b', 'c', 'd'
|
|
96
|
+
# "foo"
|
|
97
|
+
# when 'x', 'y', 'z'
|
|
98
|
+
# "bar"
|
|
99
|
+
# end.should == "bar"
|
|
100
|
+
# end
|
|
101
|
+
#
|
|
102
|
+
# it "takes an expanded array in addition to a list of values"
|
|
103
|
+
# end
|