opal 0.0.1 → 0.1.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 +10 -1
- data/.gitmodules +0 -0
- data/Opalfile +371 -0
- data/README.md +45 -0
- data/Rakefile +237 -34
- data/VERSION +1 -1
- data/bin/opal +13 -0
- data/demos/apps/browser_demo/index.html +11 -0
- data/demos/apps/browser_demo/lib/browser_demo.rb +31 -0
- data/demos/apps/simple_opal/Opalfile +13 -0
- data/demos/apps/simple_opal/index.html +11 -0
- data/demos/apps/simple_opal/lib/app_controller.rb +62 -0
- data/demos/apps/simple_opal/lib/main_window.rb +146 -0
- data/demos/browser/request/index.html +52 -0
- data/demos/browser/request/request.rb +48 -0
- data/gen/browser/__PROJECT_NAME__/index.html +10 -0
- data/gen/browser/__PROJECT_NAME__/lib/__PROJECT_NAME__.rb +1 -0
- data/lib/opal.rb +48 -3
- data/lib/opal/builders/base.rb +50 -0
- data/lib/opal/builders/css.rb +46 -0
- data/lib/opal/builders/javascript.rb +44 -0
- data/lib/opal/builders/opal.rb +79 -0
- data/lib/opal/builders/ruby.rb +50 -0
- data/lib/opal/builders/ruby/generate.rb +1851 -0
- data/lib/opal/builders/ruby/nodes.rb +210 -0
- data/lib/opal/builders/ruby/ruby.rb +916 -0
- data/lib/opal/builders/ruby/ruby_parser.rb +6008 -0
- data/lib/opal/builders/ruby/ruby_parser.rb.y +1451 -0
- data/lib/opal/models/build_item.rb +104 -0
- data/lib/opal/models/hash_struct.rb +40 -0
- data/lib/opal/models/project.rb +215 -0
- data/lib/opal/models/struct_accessors.rb +58 -0
- data/lib/opal/models/target.rb +176 -0
- data/lib/opal/opal/env/console.rb +66 -0
- data/lib/opal/opal/env/fs.rb +98 -0
- data/lib/opal/opal/env/object.rb +48 -0
- data/lib/opal/opal/environment.rb +139 -0
- data/lib/opal/opal/gen.rb +62 -0
- data/lib/opal/opal/opal.rb +68 -0
- data/lib/opal/opal/repl.rb +38 -0
- data/lib/opal/opalfile/dsl.rb +62 -0
- data/lib/opal/opalfile/opalfile.rb +133 -0
- data/lib/opal/opalfile/task.rb +96 -0
- data/lib/opal/opalfile/task_manager.rb +63 -0
- data/lib/opal/opalfile/task_scope.rb +52 -0
- data/lib/opal/rack/app_server.rb +119 -0
- data/opals/aristo/README.md +16 -0
- data/opals/browser/Opalfile +11 -0
- data/opals/browser/README.md +146 -0
- data/opals/browser/SIZZLE_LICESNSE.txt +148 -0
- data/opals/browser/lib/browser.rb +118 -0
- data/opals/browser/lib/browser/builder.rb +41 -0
- data/opals/browser/lib/browser/canvas_context.rb +115 -0
- data/opals/browser/lib/browser/dimensions.rb +50 -0
- data/opals/browser/lib/browser/document.rb +146 -0
- data/opals/browser/lib/browser/element.rb +487 -0
- data/opals/browser/lib/browser/element/attributes.rb +88 -0
- data/opals/browser/lib/browser/element/css.rb +290 -0
- data/opals/browser/lib/browser/element/form.rb +146 -0
- data/opals/browser/lib/browser/event/dom_events.rb +81 -0
- data/opals/browser/lib/browser/event/event.rb +177 -0
- data/opals/browser/lib/browser/event/trigger_events.rb +53 -0
- data/opals/browser/lib/browser/geometry.rb +97 -0
- data/opals/browser/lib/browser/json.rb +32 -0
- data/opals/browser/lib/browser/json_parse.js +321 -0
- data/opals/browser/lib/browser/request/request.rb +201 -0
- data/opals/browser/lib/browser/sizzle.js +1068 -0
- data/opals/browser/lib/browser/string.rb +42 -0
- data/opals/browser/lib/browser/touch.rb +37 -0
- data/{runtime/yaml.js → opals/browser/lib/browser/vml_context.js} +8 -8
- data/opals/browser/lib/browser/window.rb +36 -0
- data/opals/browser/spec/browser/browser_detection_spec.rb +7 -0
- data/opals/browser/spec/document/aref_spec.rb +110 -0
- data/opals/browser/spec/document/ready_spec.rb +16 -0
- data/opals/browser/spec/element/body_spec.rb +11 -0
- data/opals/browser/spec/element/clear_spec.rb +26 -0
- data/opals/browser/spec/element/empty_spec.rb +29 -0
- data/opals/browser/spec/element/has_class_spec.rb +40 -0
- data/opals/browser/spec/element/hidden_spec.rb +23 -0
- data/opals/browser/spec/element/hide_spec.rb +31 -0
- data/opals/browser/spec/element/remove_spec.rb +25 -0
- data/opals/browser/spec/element/show_spec.rb +31 -0
- data/opals/browser/spec/element/style_spec.rb +69 -0
- data/opals/browser/spec/element/toggle_spec.rb +31 -0
- data/opals/browser/spec/element/visible_spec.rb +23 -0
- data/opals/browser/spec/spec_helper.rb +1 -0
- data/opals/cherry_kit/Opalfile +6 -0
- data/opals/cherry_kit/bin/cherry_kit.rb +11 -0
- data/opals/cherry_kit/lib/cherry_kit.rb +29 -0
- data/opals/foundation/Opalfile +11 -0
- data/opals/foundation/bin/foundation.rb +12 -0
- data/opals/foundation/lib/foundation.rb +32 -0
- data/opals/foundation/lib/foundation/__table_view_desktop/outline_view.rb +57 -0
- data/opals/foundation/lib/foundation/__table_view_desktop/table_column.rb +59 -0
- data/opals/foundation/lib/foundation/__table_view_desktop/table_header_view.rb +34 -0
- data/opals/foundation/lib/foundation/__table_view_desktop/table_view.rb +304 -0
- data/opals/foundation/lib/foundation/controllers/array_controller.rb +54 -0
- data/opals/foundation/lib/foundation/controllers/controller.rb +74 -0
- data/opals/foundation/lib/foundation/controllers/controller_selection_proxy.rb +67 -0
- data/opals/foundation/lib/foundation/controllers/object_controller.rb +145 -0
- data/opals/foundation/lib/foundation/controllers/view.rb +40 -0
- data/opals/foundation/lib/foundation/core/application.rb +476 -0
- data/opals/foundation/lib/foundation/core/attributes.rb +146 -0
- data/opals/foundation/lib/foundation/core/bindings.rb +125 -0
- data/opals/foundation/lib/foundation/core/builder.rb +101 -0
- data/opals/foundation/lib/foundation/core/event.rb +112 -0
- data/opals/foundation/lib/foundation/core/index_path.rb +49 -0
- data/opals/foundation/lib/foundation/core/index_set.rb +97 -0
- data/opals/foundation/lib/foundation/core/notification.rb +113 -0
- data/opals/foundation/lib/foundation/core/observable.rb +275 -0
- data/opals/foundation/lib/foundation/core/observable_array.rb +30 -0
- data/opals/foundation/lib/foundation/core/responder.rb +85 -0
- data/opals/foundation/lib/foundation/core/run_loop.rb +89 -0
- data/opals/foundation/lib/foundation/core/touch.rb +95 -0
- data/opals/foundation/lib/foundation/gestures/gesture_recognizer.rb +35 -0
- data/opals/foundation/lib/foundation/rendering/render_context.rb +100 -0
- data/opals/foundation/lib/foundation/rendering/renderer.rb +137 -0
- data/opals/foundation/lib/foundation/rendering/root_theme.rb +77 -0
- data/opals/foundation/lib/foundation/rendering/root_theme/button.rb +62 -0
- data/opals/foundation/lib/foundation/rendering/root_theme/control.rb +72 -0
- data/opals/foundation/lib/foundation/rendering/root_theme/label.rb +54 -0
- data/opals/foundation/lib/foundation/rendering/root_theme/scroller.rb +58 -0
- data/opals/foundation/lib/foundation/rendering/root_theme/slider.rb +72 -0
- data/opals/foundation/lib/foundation/rendering/root_theme/table_view.rb +97 -0
- data/opals/foundation/lib/foundation/rendering/root_theme/text_field.rb +55 -0
- data/opals/foundation/lib/foundation/rendering/root_theme/view.rb +81 -0
- data/opals/foundation/lib/foundation/rendering/theme.rb +38 -0
- data/opals/foundation/lib/foundation/table_view/cell.rb +39 -0
- data/opals/foundation/lib/foundation/table_view/table.rb +171 -0
- data/opals/foundation/lib/foundation/views/button.rb +63 -0
- data/opals/foundation/lib/foundation/views/checkbox.rb +28 -0
- data/opals/foundation/lib/foundation/views/clip.rb +47 -0
- data/opals/foundation/lib/foundation/views/control.rb +199 -0
- data/opals/foundation/lib/foundation/views/label.rb +54 -0
- data/opals/foundation/lib/foundation/views/scroll.rb +294 -0
- data/opals/foundation/lib/foundation/views/scroll_view_desktop.rb +152 -0
- data/opals/foundation/lib/foundation/views/scroller.rb +54 -0
- data/opals/foundation/lib/foundation/views/slider.rb +93 -0
- data/opals/foundation/lib/foundation/views/text_field.rb +83 -0
- data/opals/foundation/lib/foundation/views/view.rb +426 -0
- data/opals/foundation/lib/foundation/windows/window.rb +191 -0
- data/opals/foundation/resources/button/button.css +23 -0
- data/{runtime/init.js → opals/foundation/resources/foundation.css} +27 -33
- data/opals/foundation/resources/scroll/scroll.css +22 -0
- data/opals/foundation/resources/scroll_view/scroll_view.css +3 -0
- data/opals/foundation/resources/scroll_view/scroller.css +3 -0
- data/opals/foundation/resources/slider/regular/slider.css +3 -0
- data/opals/foundation/resources/slider/slider.css +27 -0
- data/opals/foundation/resources/table_view/outline_view.css +3 -0
- data/opals/foundation/resources/table_view/table_view.css +15 -0
- data/opals/foundation/resources/text_field/text_field.css +71 -0
- data/opals/foundation/spec/spec_helper.rb +1 -0
- data/opals/foundation/spec/system/attributes/get_attribute_spec.rb +69 -0
- data/opals/foundation/spec/system/attributes/get_path_spec.rb +44 -0
- data/opals/foundation/spec/system/attributes/set_path_spec.rb +24 -0
- data/opals/foundation/spec/system/attributes/set_spec.rb +58 -0
- data/opals/foundation/spec/system/bindings/bindings.rb +85 -0
- data/opals/foundation/spec/system/key_value_binding/bind_spec.rb +43 -0
- data/opals/foundation/spec/system/observable/dependant_keys_spec.rb +74 -0
- data/opals/foundation/spec/system/observable/observe_spec.rb +292 -0
- data/opals/foundation/spec/system/observable/remove_observer_spec.rb +60 -0
- data/opals/opal/Opalfile +14 -0
- data/opals/opal/spec/core/array/append_spec.rb +30 -0
- data/opals/opal/spec/core/array/assoc_spec.rb +29 -0
- data/opals/opal/spec/core/array/at_spec.rb +37 -0
- data/opals/opal/spec/core/array/clear_spec.rb +22 -0
- data/opals/opal/spec/core/array/collect_bang_spec.rb +27 -0
- data/opals/opal/spec/core/array/collect_spec.rb +27 -0
- data/opals/opal/spec/core/array/compact_spec.rb +15 -0
- data/opals/opal/spec/core/array/concat_spec.rb +15 -0
- data/opals/opal/spec/core/array/constructor_spec.rb +14 -0
- data/opals/opal/spec/core/array/each_spec.rb +9 -0
- data/opals/opal/spec/core/array/element_reference_spec.rb +4 -0
- data/opals/opal/spec/core/array/first_spec.rb +35 -0
- data/opals/opal/spec/core/array/include_spec.rb +9 -0
- data/opals/opal/spec/core/array/map_spec.rb +31 -0
- data/opals/opal/spec/core/builtin_constants/builtin_constants_spec.rb +7 -0
- data/opals/opal/spec/core/false/and_spec.rb +10 -0
- data/opals/opal/spec/core/false/inspect_spec.rb +6 -0
- data/opals/opal/spec/core/false/or_spec.rb +10 -0
- data/opals/opal/spec/core/false/to_s_spec.rb +6 -0
- data/opals/opal/spec/core/false/xor_spec.rb +10 -0
- data/opals/opal/spec/core/file/join_spec.rb +19 -0
- data/opals/opal/spec/core/kernel/instance_eval_spec.rb +0 -0
- data/opals/opal/spec/core/kernel/loop_spec.rb +24 -0
- data/opals/opal/spec/core/kernel/raise_spec.rb +0 -0
- data/opals/opal/spec/core/module/attr_accessor_spec.rb +28 -0
- data/opals/opal/spec/core/number/lt_spec.rb +12 -0
- data/opals/opal/spec/core/true/and_spec.rb +10 -0
- data/opals/opal/spec/core/true/inspect_spec.rb +6 -0
- data/opals/opal/spec/core/true/or_spec.rb +10 -0
- data/opals/opal/spec/core/true/to_s_spec.rb +6 -0
- data/opals/opal/spec/core/true/xor_spec.rb +10 -0
- data/opals/opal/spec/fixtures/super.rb +70 -0
- data/opals/opal/spec/language/____temp_remove_this.rb +12 -0
- data/opals/opal/spec/language/and_spec.rb +62 -0
- data/opals/opal/spec/language/array_spec.rb +52 -0
- data/opals/opal/spec/language/block_spec.rb +18 -0
- data/opals/opal/spec/language/break_spec.rb +36 -0
- data/opals/opal/spec/language/case_spec.rb +103 -0
- data/opals/opal/spec/language/def_spec.rb +11 -0
- data/opals/opal/spec/language/eigenclass_spec.rb +60 -0
- data/opals/opal/spec/language/hash_spec.rb +29 -0
- data/opals/opal/spec/language/if_spec.rb +54 -0
- data/opals/opal/spec/language/loop_spec.rb +11 -0
- data/opals/opal/spec/language/metaclass_spec.rb +21 -0
- data/opals/opal/spec/language/method_spec.rb +64 -0
- data/opals/opal/spec/language/next_spec.rb +25 -0
- data/opals/opal/spec/language/or_spec.rb +34 -0
- data/opals/opal/spec/language/redo_spec.rb +24 -0
- data/opals/opal/spec/language/rescue_spec.rb +20 -0
- data/opals/opal/spec/language/return_spec.rb +47 -0
- data/opals/opal/spec/language/string_spec.rb +25 -0
- data/opals/opal/spec/language/super_spec.rb +26 -0
- data/opals/opal/spec/language/until_spec.rb +157 -0
- data/opals/opal/spec/language/while_spec.rb +163 -0
- data/opals/opal/spec/spec_helper.rb +5 -0
- data/opals/runtime/Opalfile +68 -0
- data/opals/runtime/README.md +12 -0
- data/opals/runtime/docs/debugging.md +51 -0
- data/opals/runtime/lib/array.rb +1516 -0
- data/opals/runtime/lib/basic_object.rb +49 -0
- data/opals/runtime/lib/class.rb +54 -0
- data/opals/runtime/lib/dir.rb +36 -0
- data/opals/runtime/lib/error.rb +49 -0
- data/opals/runtime/lib/false_class.rb +52 -0
- data/opals/runtime/lib/file.rb +79 -0
- data/opals/runtime/lib/hash.rb +791 -0
- data/opals/runtime/lib/io.rb +39 -0
- data/opals/runtime/lib/kernel.rb +288 -0
- data/opals/runtime/lib/match_data.rb +36 -0
- data/opals/runtime/lib/module.rb +109 -0
- data/opals/runtime/lib/nil_class.rb +69 -0
- data/opals/runtime/lib/number.rb +398 -0
- data/opals/runtime/lib/proc.rb +77 -0
- data/opals/runtime/lib/range.rb +63 -0
- data/opals/runtime/lib/regexp.rb +111 -0
- data/opals/runtime/lib/ruby.rb +30 -0
- data/opals/runtime/lib/string.rb +328 -0
- data/opals/runtime/lib/symbol.rb +40 -0
- data/opals/runtime/lib/top_self.rb +33 -0
- data/opals/runtime/lib/true_class.rb +45 -0
- data/opals/runtime/runtime/browser.js +287 -0
- data/opals/runtime/runtime/debug.js +182 -0
- data/opals/runtime/runtime/opal.js +1010 -0
- data/opals/runtime/runtime/post_opal.js +1 -0
- data/opals/runtime/runtime/pre_opal.js +2 -0
- data/opals/runtime/runtime/server_side.js +50 -0
- data/opals/spec/LICENSE.txt +26 -0
- data/opals/spec/Opalfile +5 -0
- data/opals/spec/bin/spec.rb +43 -0
- data/opals/spec/lib/spec.rb +33 -0
- data/opals/spec/lib/spec/dsl.rb +41 -0
- data/opals/spec/lib/spec/example.rb +35 -0
- data/opals/spec/lib/spec/example/before_and_after_hooks.rb +81 -0
- data/opals/spec/lib/spec/example/errors.rb +42 -0
- data/opals/spec/lib/spec/example/example_group.rb +37 -0
- data/opals/spec/lib/spec/example/example_group_factory.rb +43 -0
- data/opals/spec/lib/spec/example/example_group_hierarchy.rb +45 -0
- data/opals/spec/lib/spec/example/example_group_methods.rb +142 -0
- data/opals/spec/lib/spec/example/example_group_proxy.rb +41 -0
- data/opals/spec/lib/spec/example/example_methods.rb +73 -0
- data/opals/spec/lib/spec/example/example_proxy.rb +48 -0
- data/opals/spec/lib/spec/expectations.rb +46 -0
- data/opals/spec/lib/spec/expectations/errors.rb +35 -0
- data/opals/spec/lib/spec/expectations/fail_with.rb +37 -0
- data/opals/spec/lib/spec/expectations/handler.rb +48 -0
- data/opals/spec/lib/spec/matchers.rb +50 -0
- data/opals/spec/lib/spec/matchers/be.rb +26 -0
- data/opals/spec/lib/spec/matchers/generated_descriptions.rb +47 -0
- data/opals/spec/lib/spec/matchers/operator_matcher.rb +66 -0
- data/opals/spec/lib/spec/runner.rb +48 -0
- data/opals/spec/lib/spec/runner/example_group_runner.rb +71 -0
- data/opals/spec/lib/spec/runner/formatter/html_formatter.rb +100 -0
- data/opals/spec/lib/spec/runner/formatter/terminal_formatter.rb +82 -0
- data/opals/spec/lib/spec/runner/options.rb +63 -0
- data/opals/spec/lib/spec/runner/reporter.rb +123 -0
- data/opals/spec/resources/index.html +25 -0
- data/opals/spec/resources/spec.css +132 -0
- data/spec/cherry_kit/iseq_spec.rb +38 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/vienna_spec.rb +7 -0
- data/yard/index.html +43 -0
- data/yard/style.css +765 -0
- metadata +312 -49
- data/docs/jarv.rdoc +0 -27
- data/runtime/array.js +0 -153
- data/runtime/class.js +0 -469
- data/runtime/compar.js +0 -73
- data/runtime/dir.js +0 -115
- data/runtime/enum.js +0 -74
- data/runtime/file.js +0 -165
- data/runtime/gem.js +0 -241
- data/runtime/hash.js +0 -181
- data/runtime/load.js +0 -251
- data/runtime/module.js +0 -98
- data/runtime/number.js +0 -148
- data/runtime/object.js +0 -522
- data/runtime/opal.js +0 -200
- data/runtime/parse.js +0 -2218
- data/runtime/range.js +0 -56
- data/runtime/re.js +0 -91
- data/runtime/string.js +0 -199
- data/runtime/variable.js +0 -184
- data/runtime/vm.js +0 -1150
- data/tasks/build.rb +0 -16
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
|
|
2
|
+
# describe "self in an eigenclass body (class << obj)" do
|
|
3
|
+
# it "is TrueClass for true" do
|
|
4
|
+
# class << true; self; end.should == TrueClass
|
|
5
|
+
# end
|
|
6
|
+
#
|
|
7
|
+
# it "is FalseClass for false" do
|
|
8
|
+
# class << false; self; end.should == FalseClass
|
|
9
|
+
# end
|
|
10
|
+
#
|
|
11
|
+
# it "is NilClass for nil" do
|
|
12
|
+
# class << nil; self; end.should == NilClass
|
|
13
|
+
# end
|
|
14
|
+
#
|
|
15
|
+
# it "is a singleton Class instance" do
|
|
16
|
+
# mock = Object.new
|
|
17
|
+
# cls = class << mock; self; end
|
|
18
|
+
# cls.is_a?(Class).should == true
|
|
19
|
+
# # puts cls
|
|
20
|
+
# # `console.log(#{cls});`
|
|
21
|
+
# end
|
|
22
|
+
#
|
|
23
|
+
# it "is a Class for classes"
|
|
24
|
+
#
|
|
25
|
+
# it "inherits from Class for classes" do
|
|
26
|
+
# temp = []
|
|
27
|
+
# cls = class << Object; self; end
|
|
28
|
+
# sc = cls
|
|
29
|
+
# until sc.nil? || sc.superclass == sc
|
|
30
|
+
# temp << sc
|
|
31
|
+
# sc = sc.superclass
|
|
32
|
+
# end
|
|
33
|
+
# temp.should include(Class)
|
|
34
|
+
# end
|
|
35
|
+
# end
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
# puts "testing eigenclass etc"
|
|
39
|
+
#
|
|
40
|
+
# class EigenclassSpecTest
|
|
41
|
+
#
|
|
42
|
+
# def something=(something)
|
|
43
|
+
# puts "setting something to #{something}"
|
|
44
|
+
# end
|
|
45
|
+
# end
|
|
46
|
+
#
|
|
47
|
+
# a = EigenclassSpecTest.new
|
|
48
|
+
# a.something = 100
|
|
49
|
+
#
|
|
50
|
+
# a_class = class << a; self; end
|
|
51
|
+
#
|
|
52
|
+
# a_class.define_method(:something=) do |value|
|
|
53
|
+
# puts "setting something.."
|
|
54
|
+
# super value
|
|
55
|
+
# puts "did set something"
|
|
56
|
+
# end
|
|
57
|
+
#
|
|
58
|
+
# # `console.log(#{a}['$something=']);`
|
|
59
|
+
#
|
|
60
|
+
# a.something = 200
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
|
|
2
|
+
describe "Hash literal" do
|
|
3
|
+
it "{} should return an empty hash" do
|
|
4
|
+
{}.size.should == 0
|
|
5
|
+
{}.should == {}
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "{} should return a new hash populated with the given elements" do
|
|
9
|
+
h = { :a => 'a', 'b' => 3, 44 => 2.3 }
|
|
10
|
+
h.size.should == 3
|
|
11
|
+
h.should == { :a => 'a', 'b' => 3, 44 => 2.3 }
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "treats empty expressions as nils" do
|
|
15
|
+
h = {() => ()}
|
|
16
|
+
h.keys.should == [nil]
|
|
17
|
+
h.values.should == [nil]
|
|
18
|
+
|
|
19
|
+
h = {() => :value}
|
|
20
|
+
h.keys.should == [nil]
|
|
21
|
+
h.values.should == [:value]
|
|
22
|
+
h[nil].should == :value
|
|
23
|
+
|
|
24
|
+
h = {:key => ()}
|
|
25
|
+
h.keys.should == [:key]
|
|
26
|
+
h.values.should == [nil]
|
|
27
|
+
h[:key].should == nil
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#
|
|
2
|
+
# describe "The if expression" do
|
|
3
|
+
# it "evaluates body if expression is true" do
|
|
4
|
+
# a = []
|
|
5
|
+
# if true
|
|
6
|
+
# a << 123
|
|
7
|
+
# end
|
|
8
|
+
# a.should == [123]
|
|
9
|
+
# end
|
|
10
|
+
#
|
|
11
|
+
# it "does not evaluate body if expression is false" do
|
|
12
|
+
# a = []
|
|
13
|
+
# if false
|
|
14
|
+
# a << 123
|
|
15
|
+
# end
|
|
16
|
+
# a.should == []
|
|
17
|
+
# end
|
|
18
|
+
#
|
|
19
|
+
# it "does not evaluate body if expression is empty" do
|
|
20
|
+
# a = []
|
|
21
|
+
# if ()
|
|
22
|
+
# a << 123
|
|
23
|
+
# end
|
|
24
|
+
# a.should == []
|
|
25
|
+
# end
|
|
26
|
+
#
|
|
27
|
+
# it "does not evaluate else body if expression is true" do
|
|
28
|
+
# a = []
|
|
29
|
+
# if true
|
|
30
|
+
# a << 123
|
|
31
|
+
# else
|
|
32
|
+
# a << 456
|
|
33
|
+
# end
|
|
34
|
+
# a.should == [123]
|
|
35
|
+
# end
|
|
36
|
+
#
|
|
37
|
+
# it "evaluates only else-body if expression is false" do
|
|
38
|
+
# a = []
|
|
39
|
+
# if false
|
|
40
|
+
# a << 123
|
|
41
|
+
# else
|
|
42
|
+
# a << 456
|
|
43
|
+
# end
|
|
44
|
+
# a.should == [456]
|
|
45
|
+
# end
|
|
46
|
+
#
|
|
47
|
+
# it "returns result of then-body evaluation if expression is true" do
|
|
48
|
+
# # raise "this causes error: return is injected before if = javascript error"
|
|
49
|
+
# # if true
|
|
50
|
+
# # 123
|
|
51
|
+
# # end.should == 456
|
|
52
|
+
# end
|
|
53
|
+
# end
|
|
54
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
describe "self in a metaclass body (class << obj)" do
|
|
3
|
+
it "is TrueClass for true" do
|
|
4
|
+
class << true; self; end.should == TrueClass
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
it "is FalseClass for false" do
|
|
8
|
+
class << false; self; end.should == FalseClass
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "is NilClass for nil" do
|
|
12
|
+
class << nil; self; end.should == NilClass
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "raises a TypeError for numbers"
|
|
16
|
+
|
|
17
|
+
it "raises a TypeError for symbols"
|
|
18
|
+
|
|
19
|
+
it "is a singleton Class instance"
|
|
20
|
+
|
|
21
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
|
|
2
|
+
describe "Calling a method" do
|
|
3
|
+
it "with no arguments is ok" do
|
|
4
|
+
def fooP0; 100; end
|
|
5
|
+
|
|
6
|
+
fooP0.should == 100
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "with simple required arguments works" do
|
|
10
|
+
def fooP1(a); [a]; end
|
|
11
|
+
fooP1(1).should == [1]
|
|
12
|
+
|
|
13
|
+
def fooP2(a, b); [a, b]; end
|
|
14
|
+
fooP2(1, 2).should == [1, 2]
|
|
15
|
+
|
|
16
|
+
def fooP3(a,b,c); [a,b,c]; end
|
|
17
|
+
fooP3(1,2,3).should == [1,2,3]
|
|
18
|
+
|
|
19
|
+
def fooP4(a,b,c,d); [a,b,c,d]; end
|
|
20
|
+
fooP4(1,2,3,4).should == [1,2,3,4]
|
|
21
|
+
|
|
22
|
+
def fooP5(a,b,c,d,e); [a,b,c,d,e]; end
|
|
23
|
+
fooP5(1,2,3,4,5).should == [1,2,3,4,5]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "works with optional arguments" do
|
|
27
|
+
def fooP0O1(a=1); [a]; end
|
|
28
|
+
fooP0O1().should == [1]
|
|
29
|
+
|
|
30
|
+
def fooP1O1(a, b=1); [a, b]; end
|
|
31
|
+
fooP1O1(1).should == [1, 1]
|
|
32
|
+
|
|
33
|
+
def fooP2O1(a, b, c=1); [a, b, c]; end
|
|
34
|
+
fooP2O1(1, 2).should == [1, 2, 1]
|
|
35
|
+
|
|
36
|
+
def fooP3O1(a, b, c, d=1); [a, b, c, d]; end
|
|
37
|
+
fooP3O1(1, 2, 3).should == [1, 2, 3, 1]
|
|
38
|
+
|
|
39
|
+
def fooP4O1(a, b, c, d, e=1); [a, b, c, d, e]; end
|
|
40
|
+
fooP4O1(1, 2, 3, 4).should == [1, 2, 3, 4, 1]
|
|
41
|
+
|
|
42
|
+
def fooP0O2(a=1, b=2); [a, b]; end
|
|
43
|
+
fooP0O2.should == [1, 2]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "works with rest arguments" do
|
|
47
|
+
def fooP0R(*r); r; end
|
|
48
|
+
fooP0R().should == []
|
|
49
|
+
fooP0R(1).should == [1]
|
|
50
|
+
fooP0R(1, 2).should == [1, 2]
|
|
51
|
+
|
|
52
|
+
def fooP1R(a, *r); [a, r]; end
|
|
53
|
+
fooP1R(1).should == [1, []]
|
|
54
|
+
fooP1R(1, 2).should == [1, [2]]
|
|
55
|
+
|
|
56
|
+
# def fooP0O1R(a=1, *r); [a, r]; end
|
|
57
|
+
# fooP0O1R().should == [1, []]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "with an empty expression is like calling with nil argument" do
|
|
61
|
+
def foo(a); a; end
|
|
62
|
+
foo(()).should == nil
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
|
|
2
|
+
describe "The next statement from within the block" do
|
|
3
|
+
it "ends block execution" do
|
|
4
|
+
a = []
|
|
5
|
+
lambda {
|
|
6
|
+
a << 1
|
|
7
|
+
next
|
|
8
|
+
a << 2
|
|
9
|
+
}.call
|
|
10
|
+
a.should == [1]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "causes block to return nil if invoked without arguments" do
|
|
14
|
+
lambda { 123; next; 456 }.call.should == nil
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "causes block to return nil if invoked with an empty expression" do
|
|
18
|
+
lambda { next (); 456 }.call.should == nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "returns the argument passed" do
|
|
22
|
+
lambda { 123; next 234; 345 }.call.should == 234
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
|
|
2
|
+
describe "The || operator" do
|
|
3
|
+
it "evaluates to true if any of its operands are true" do
|
|
4
|
+
if false || true || nil
|
|
5
|
+
x = true
|
|
6
|
+
end
|
|
7
|
+
x.should == true
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "evaluates to false if all of its operands are false" do
|
|
11
|
+
if false || nil
|
|
12
|
+
x = true
|
|
13
|
+
end
|
|
14
|
+
x.should == nil
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "is evaluated before assignment operators" do
|
|
18
|
+
x = nil || true
|
|
19
|
+
x.should == true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "has a lower precedence than the && operator" do
|
|
23
|
+
x = 1 || false && x = 2
|
|
24
|
+
x.should == 1
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "treats empty expressions as nil" do
|
|
28
|
+
(() || true).should == true
|
|
29
|
+
(() || false).should == false
|
|
30
|
+
(true || ()).should == true
|
|
31
|
+
(false || ()).should == nil
|
|
32
|
+
(() || ()).should == nil
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
|
|
2
|
+
describe "The redo statement" do
|
|
3
|
+
it "restarts block execution if used within block" do
|
|
4
|
+
a = []
|
|
5
|
+
lambda {
|
|
6
|
+
a << 1
|
|
7
|
+
redo if a.size < 2
|
|
8
|
+
a << 2
|
|
9
|
+
}.call
|
|
10
|
+
a.should == [1, 1, 2]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "re-executes the closest loop"
|
|
14
|
+
|
|
15
|
+
it "re-executes the last step in enumeration" do
|
|
16
|
+
list = []
|
|
17
|
+
[1,2,3].each do |x|
|
|
18
|
+
list << x
|
|
19
|
+
break if list.size == 6
|
|
20
|
+
redo if x == 3
|
|
21
|
+
end
|
|
22
|
+
list.should == [1,2,3,3,3,3]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
class SpecificExampleException < StandardError; end
|
|
3
|
+
|
|
4
|
+
class OtherCustomException < StandardError; end
|
|
5
|
+
|
|
6
|
+
def exception_list
|
|
7
|
+
[SpecificExampleException, OtherCustomException]
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe "The rescue keyword" do
|
|
11
|
+
it "can be used to handle a specific exception"
|
|
12
|
+
|
|
13
|
+
it "can capture the raised exception in a local variable" do
|
|
14
|
+
begin
|
|
15
|
+
raise SpecificExampleException, "some text"
|
|
16
|
+
rescue SpecificExampleException => e
|
|
17
|
+
e.message.should == "some text"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
|
|
2
|
+
describe "The return keyword" do
|
|
3
|
+
it "returns any object directly" do
|
|
4
|
+
def r; return 1; end
|
|
5
|
+
r().should == 1
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "returns an single element array directly" do
|
|
9
|
+
def r; return[1]; end
|
|
10
|
+
r().should == [1]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "returns an multi element array directly" do
|
|
14
|
+
def r; return [1, 2]; end
|
|
15
|
+
r().should == [1, 2]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "returns nil be default" do
|
|
19
|
+
def r; return; end
|
|
20
|
+
r().should == nil
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# describe "within a begin" do
|
|
24
|
+
# it "executes ensure before re"
|
|
25
|
+
# end
|
|
26
|
+
|
|
27
|
+
describe "within a block" do
|
|
28
|
+
it "raises a LocalJumpError if there is no lexicaly enclosing method" #do
|
|
29
|
+
# def f; yield; end
|
|
30
|
+
# lambda { f { return 5 } }
|
|
31
|
+
# end
|
|
32
|
+
|
|
33
|
+
it "causes lambda to return nil if invoked without any arguments" do
|
|
34
|
+
lambda { return; 456 }.call.should == nil
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe "within two blocks" do
|
|
40
|
+
it "causes the method that lexically encloses the block to return" do
|
|
41
|
+
def f
|
|
42
|
+
1.times { 1.times { return true }; false }; false
|
|
43
|
+
end
|
|
44
|
+
f.should == true
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
|
|
2
|
+
describe "Ruby character strings" do
|
|
3
|
+
it "don't get interpolated when put in single quotes" do
|
|
4
|
+
@ip = 'xxx'
|
|
5
|
+
'#{@ip}'.should == '#{@ip}'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it 'get interpolated with #{} when put in double quotes' do
|
|
9
|
+
@ip = 'xxx'
|
|
10
|
+
"#{@ip}".should == "xxx"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "interpolate instance variables just with the # character" #do
|
|
14
|
+
# @ip = "xxx"
|
|
15
|
+
# "#@ip".should == "xxx"
|
|
16
|
+
# end
|
|
17
|
+
|
|
18
|
+
it "interpolate global variables just with the # character"
|
|
19
|
+
|
|
20
|
+
it "interpolate class variables with just the # character"
|
|
21
|
+
|
|
22
|
+
it "allow underscore as part of a variable name in a simple interpolation"
|
|
23
|
+
|
|
24
|
+
it "have characters [.(=?!# end simple # interpolation"
|
|
25
|
+
end
|