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
data/lib/opal/opal/env/object.rb
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# 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
|
-
module Opal
|
|
28
|
-
|
|
29
|
-
class Environment
|
|
30
|
-
|
|
31
|
-
class Object
|
|
32
|
-
|
|
33
|
-
# @param [Opal::Environment] env
|
|
34
|
-
def initialize(env)
|
|
35
|
-
@properties = {}
|
|
36
|
-
@environment = env
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def [](key)
|
|
40
|
-
@properties[key]
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def []=(key, value)
|
|
44
|
-
@properties[key] = value
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# env.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
|
-
module Opal
|
|
28
|
-
|
|
29
|
-
# Env is an opal environment. An instance of the ruby "virtual machine" that
|
|
30
|
-
# holds the context for running ruby (through javascript). An ENV loads the
|
|
31
|
-
# correct context, boots the runtime, and ties everything together conecting
|
|
32
|
-
# the opal runtime and ruby classes that provide a layer for communicating
|
|
33
|
-
# back and forth between the two. Any time opal is used to run ruby code
|
|
34
|
-
# "server side", it will be through an instance of this class.
|
|
35
|
-
class Environment
|
|
36
|
-
|
|
37
|
-
# Path to system opals
|
|
38
|
-
OPALS_PATH = File.join Vienna::PATH, 'opals'
|
|
39
|
-
|
|
40
|
-
def initialize(args)
|
|
41
|
-
|
|
42
|
-
begin
|
|
43
|
-
require 'rubygems'
|
|
44
|
-
require 'v8'
|
|
45
|
-
rescue Exception
|
|
46
|
-
abort "therubyracer not available. Install it with: sudo gem install therubyracer"
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# puts "making new environment"
|
|
50
|
-
@context = V8::Context.new
|
|
51
|
-
load_runtime
|
|
52
|
-
|
|
53
|
-
# puts "args are: #{args.inspect}"
|
|
54
|
-
|
|
55
|
-
if args.length == 1
|
|
56
|
-
file = args[0]
|
|
57
|
-
# puts "need to run #{file}"
|
|
58
|
-
# puts File.read(file)
|
|
59
|
-
if File.exist? file
|
|
60
|
-
load_required_file file
|
|
61
|
-
args.clear
|
|
62
|
-
else
|
|
63
|
-
abort "Cannot find opal file #{args[0]}"
|
|
64
|
-
end
|
|
65
|
-
else
|
|
66
|
-
start
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
def load_runtime
|
|
72
|
-
@context['console'] = Opal::Environment::Console.new self
|
|
73
|
-
@context['__opal_fs_access'] = Opal::Environment::FS.new self
|
|
74
|
-
|
|
75
|
-
runtime_files = %w(pre_opal opal server_side debug post_opal)
|
|
76
|
-
js_str = []
|
|
77
|
-
|
|
78
|
-
runtime_files.each do |file|
|
|
79
|
-
str= File.read File.join(OPALS_PATH, 'opal', 'runtime', 'runtime', "#{file}.js")
|
|
80
|
-
js_str << str
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
js_eval js_str.join
|
|
84
|
-
|
|
85
|
-
# need to load libs (kernel, module first, then all others)
|
|
86
|
-
rb_sources = Dir.glob(File.join(OPALS_PATH, 'opal', 'runtime', 'lib', '**', '*.rb'))
|
|
87
|
-
# we want kernel first, then module
|
|
88
|
-
%w(kernel module).reverse.each do |order|
|
|
89
|
-
rb_sources.unshift rb_sources.select { |item|
|
|
90
|
-
/#{Regexp.escape order}\.rb$/.match item
|
|
91
|
-
}.first
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
rb_sources.uniq!
|
|
95
|
-
|
|
96
|
-
rb_sources.each do |src|
|
|
97
|
-
# puts src
|
|
98
|
-
res = Vienna::RubyParser.new(src, File.read(src)).build!
|
|
99
|
-
eval_str = "opal.load_raw_file('#{src}', #{res});"
|
|
100
|
-
js_eval eval_str
|
|
101
|
-
# break
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
# Start accepting user input and compiling it
|
|
106
|
-
def start
|
|
107
|
-
while true
|
|
108
|
-
'>> '.display
|
|
109
|
-
gets.each do |e|
|
|
110
|
-
puts("=> " + ruby_eval(e.to_s))
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
# Evaluate the given javascript normally in context
|
|
116
|
-
def js_eval(str)
|
|
117
|
-
@context.eval(str).to_s
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
def load_required_file(path)
|
|
121
|
-
# puts "loading require file! #{path}"
|
|
122
|
-
parser = Vienna::RubyParser.new(path, File.read(path))
|
|
123
|
-
res = parser.build!
|
|
124
|
-
# puts "a"
|
|
125
|
-
# puts res
|
|
126
|
-
@context.eval("opal.entry_point((function() {return (#{res}).apply(opal.top_self, ['#{path}'])}));").to_s
|
|
127
|
-
# puts "b"
|
|
128
|
-
true
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
# Evaluate the given string in the context
|
|
132
|
-
def ruby_eval(str)
|
|
133
|
-
parser = Vienna::RubyParser.new("(opal)", str, :iseq_type => :main)
|
|
134
|
-
res = parser.build!
|
|
135
|
-
@context.eval("opal.entry_point((function() {return (#{res}).apply(opal.top_self, ['(opal)']).$inspect()}));").to_s
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
end
|
|
139
|
-
end
|
data/lib/opal/opal/gen.rb
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# gen.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
|
-
require 'fileutils'
|
|
28
|
-
|
|
29
|
-
module Opal
|
|
30
|
-
|
|
31
|
-
def self.gen
|
|
32
|
-
ARGV.shift
|
|
33
|
-
unless ARGV.length > 0
|
|
34
|
-
print_usage
|
|
35
|
-
abort
|
|
36
|
-
end
|
|
37
|
-
path = ARGV.first
|
|
38
|
-
name = path
|
|
39
|
-
# abort "not yet implemented"
|
|
40
|
-
|
|
41
|
-
base = File.expand_path(File.join(Vienna::PATH, 'gen', 'browser'))
|
|
42
|
-
|
|
43
|
-
FileUtils.mkdir_p name
|
|
44
|
-
|
|
45
|
-
Dir.glob(File.join(base, '**/*')).each do |file|
|
|
46
|
-
local = /^#{Regexp.escape base}\/(.*)$/.match(file)[1]
|
|
47
|
-
local.gsub!(/__PROJECT_NAME__/, name)
|
|
48
|
-
# puts local
|
|
49
|
-
if File.directory? file
|
|
50
|
-
FileUtils.mkdir_p local
|
|
51
|
-
else
|
|
52
|
-
File.open(local, 'w') do |out|
|
|
53
|
-
input = File.read file
|
|
54
|
-
input.gsub!(/__PROJECT_NAME__/, name)
|
|
55
|
-
out.write input
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
end
|
|
62
|
-
end
|
data/lib/opal/opal/opal.rb
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# opal.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
|
-
# Opal is the ruby runtime available from the command line.
|
|
28
|
-
module Opal
|
|
29
|
-
|
|
30
|
-
# main entry point into Opal. If no args, files, etc, then simply just run the
|
|
31
|
-
# REPL? for now, always run the repl
|
|
32
|
-
def self.run
|
|
33
|
-
command = ARGV.first
|
|
34
|
-
case command
|
|
35
|
-
when 'new'
|
|
36
|
-
gen
|
|
37
|
-
when 'repl'
|
|
38
|
-
puts "need to start REPL session"
|
|
39
|
-
ARGV.clear
|
|
40
|
-
Opal::Environment.new ARGV
|
|
41
|
-
when 'build'
|
|
42
|
-
ARGV.shift
|
|
43
|
-
# when building, if we have an Opalfile, build using a project, otherwise
|
|
44
|
-
# we simply want to build the given ruby file to its respective js file
|
|
45
|
-
if File.exist? 'Opalfile'
|
|
46
|
-
p = Vienna::Project.new Dir.getwd, {}
|
|
47
|
-
p.build!
|
|
48
|
-
else
|
|
49
|
-
# puts "need to build singular files"
|
|
50
|
-
build!
|
|
51
|
-
end
|
|
52
|
-
when 'server'
|
|
53
|
-
# puts "need to do server"
|
|
54
|
-
p = Vienna::Project.new Dir.getwd, {}
|
|
55
|
-
s = Vienna::AppServer.new p
|
|
56
|
-
else
|
|
57
|
-
print_usage
|
|
58
|
-
end
|
|
59
|
-
# puts "runnign repl"
|
|
60
|
-
# puts ARGV
|
|
61
|
-
# we must remove all args from argv before running repl to stop args being
|
|
62
|
-
# passed on as ruby code to execute (into js)
|
|
63
|
-
# ARGV.clear
|
|
64
|
-
|
|
65
|
-
# make a new environment
|
|
66
|
-
# Opal::Environment.new args
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def self.print_usage
|
|
70
|
-
puts %Q{
|
|
71
|
-
Usage:
|
|
72
|
-
opal new PROJECT_PATH
|
|
73
|
-
}
|
|
74
|
-
end
|
|
75
|
-
end
|
data/lib/opal/opal/repl.rb
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# repl.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
|
-
module Opal
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
class REPL
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
end
|
|
38
|
-
end
|
data/lib/opal/opalfile/dsl.rb
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# dsl.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
|
-
module Vienna
|
|
28
|
-
|
|
29
|
-
class Opalfile
|
|
30
|
-
|
|
31
|
-
# enter the new mode (:debug, :all, :spec, :release, etc.)
|
|
32
|
-
def mode(mode_name, &block)
|
|
33
|
-
@current_mode = mode_name
|
|
34
|
-
# make sure our global env has this mode
|
|
35
|
-
self.class.env[mode_name] ||= Hash.new
|
|
36
|
-
# configure all configs within
|
|
37
|
-
instance_eval(&block)
|
|
38
|
-
# always go back to :all when outside a mode - modes cannot be nested
|
|
39
|
-
@current_mode = :all
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def config(config_name, opts={})
|
|
43
|
-
# ensure we have a configuration setting for config_name in current mode
|
|
44
|
-
self.class.env[@current_mode][config_name] ||= Hash.new
|
|
45
|
-
# merge in new options with already existing options
|
|
46
|
-
self.class.env[@current_mode][config_name].merge! opts
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def desc(description)
|
|
50
|
-
@last_desc = description
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def task(task_name, &block)
|
|
54
|
-
define_task task_name, &block
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def namespace(name=nil, &block)
|
|
58
|
-
define_namespace(name, &block)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
end
|
|
62
|
-
end
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# opalfile.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
|
-
module Vienna
|
|
28
|
-
|
|
29
|
-
class Opalfile
|
|
30
|
-
|
|
31
|
-
@root_opalfile = nil
|
|
32
|
-
|
|
33
|
-
attr_reader :tasks
|
|
34
|
-
|
|
35
|
-
# array of TaskScope instances
|
|
36
|
-
attr_reader :task_scope_stack
|
|
37
|
-
|
|
38
|
-
attr_reader :opalfile_path
|
|
39
|
-
|
|
40
|
-
# Access the global modes and configs
|
|
41
|
-
def self.env
|
|
42
|
-
@opalfile_env ||= {:all => {}}
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Access the global mode/config
|
|
46
|
-
def self.config_for(mode, config)
|
|
47
|
-
res = {}
|
|
48
|
-
# First: merge in all configs that apply to all modes
|
|
49
|
-
if env.has_key?(:all) and env[:all].has_key?(:all)
|
|
50
|
-
res.merge!(env[:all][:all])
|
|
51
|
-
end
|
|
52
|
-
# Second: merge in all configs that apply to current mode
|
|
53
|
-
if env.has_key?(mode) and env[mode].has_key?(:all)
|
|
54
|
-
res.merge!(env[mode][:all])
|
|
55
|
-
end
|
|
56
|
-
# Third: merge in target configs that apply to all modes
|
|
57
|
-
if env.has_key?(:all) and env[:all].has_key?(config)
|
|
58
|
-
res.merge!(env[:all][config])
|
|
59
|
-
end
|
|
60
|
-
# Forth: merge in target configs that apply to current mode
|
|
61
|
-
if env.has_key?(mode) and env[mode].has_key?(config)
|
|
62
|
-
res.merge!(env[mode][config])
|
|
63
|
-
end
|
|
64
|
-
# return our full config
|
|
65
|
-
res
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# set the root opalfile
|
|
69
|
-
def self.root_opalfile=(path_to_root)
|
|
70
|
-
@root_opalfile = new(path_to_root)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def self.root_opalfile
|
|
74
|
-
@root_opalfile
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
def initialize(root)
|
|
79
|
-
@opalfile_path = root
|
|
80
|
-
# default mode is :all
|
|
81
|
-
@current_mode = :all
|
|
82
|
-
@configs = {}
|
|
83
|
-
@namespace_scope = []
|
|
84
|
-
# stack of TaskScope instanced for instance_evaling context
|
|
85
|
-
@task_scope_stack = []
|
|
86
|
-
@tasks = {}
|
|
87
|
-
|
|
88
|
-
# firstly copy tasks etc from root, if it exists?
|
|
89
|
-
root_opalfile = self.class.root_opalfile
|
|
90
|
-
# merge unless root_opalfile.nil?
|
|
91
|
-
@tasks = root_opalfile.tasks.dup unless root_opalfile.nil?
|
|
92
|
-
|
|
93
|
-
instance_eval File.read(root) if File.exist? root
|
|
94
|
-
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def has_task?(task_name)
|
|
98
|
-
@tasks.has_key?(task_name)
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
# force invoke the given task name with the given options
|
|
102
|
-
def invoke(task_name, options={})
|
|
103
|
-
# puts "need to invoke #{task_name}"
|
|
104
|
-
@task_scope_stack << (ctx = Vienna::TaskScope.new)
|
|
105
|
-
ctx.task_variables = options
|
|
106
|
-
ctx.opalfile = self
|
|
107
|
-
@tasks[task_name].invoke(ctx)
|
|
108
|
-
@task_scope_stack.pop
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
# find task name with scope
|
|
112
|
-
def [](name, scope=nil)
|
|
113
|
-
task_name = name.to_s
|
|
114
|
-
if scope
|
|
115
|
-
task_name = scope + ":" + task_name
|
|
116
|
-
end
|
|
117
|
-
if @tasks[task_name]
|
|
118
|
-
return @tasks[task_name]
|
|
119
|
-
end
|
|
120
|
-
task_name = name.to_s
|
|
121
|
-
@tasks[task_name] or raise "Don't know how to build task #{name}"
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
def config_for(config_name)
|
|
125
|
-
config = {}
|
|
126
|
-
config_name = config_name.to_sym
|
|
127
|
-
config.merge!(@configs[:all]) if @configs.has_key? :all
|
|
128
|
-
config.merge!(@configs[config_name]) if @configs.has_key? config_name
|
|
129
|
-
config
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
end
|
|
133
|
-
end
|