opal 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/.gitignore
CHANGED
data/.gitmodules
ADDED
File without changes
|
data/Opalfile
ADDED
@@ -0,0 +1,371 @@
|
|
1
|
+
mode :all do
|
2
|
+
|
3
|
+
config :all,
|
4
|
+
:build_prefix => 'tmp/build',
|
5
|
+
:staging_prefix => 'tmp/staging',
|
6
|
+
:tmp_root => 'tmp',
|
7
|
+
|
8
|
+
# where our libs are kept - i.e. what should be a valid build item
|
9
|
+
:lib_directories => ['lib'],
|
10
|
+
|
11
|
+
|
12
|
+
# which sub directory do our javascripts go into
|
13
|
+
:javascripts_prefix => 'javascripts',
|
14
|
+
|
15
|
+
# which sub dir do our built stylesheets go into
|
16
|
+
:stylesheets_prefix => 'stylesheets',
|
17
|
+
|
18
|
+
# final name for our js built file (:project_name for name of project,
|
19
|
+
# other wise to_s is called on it)
|
20
|
+
:javascript_name => :project_name,
|
21
|
+
|
22
|
+
# same as above
|
23
|
+
:stylehseet_name => :project_name,
|
24
|
+
|
25
|
+
# default bin file to run.. if none given, then it defaults to :project_name
|
26
|
+
# which is replaced by the actual project name. This will then mean either
|
27
|
+
# a bin file of the given name, or lib/project_name will be loaded
|
28
|
+
:bin_file => :project_name,
|
29
|
+
|
30
|
+
# by default do NOT build stylesheets.. only cherrykit/spec wants this, so
|
31
|
+
# for browsers etc, do not do this.
|
32
|
+
:build_stylesheets => false,
|
33
|
+
|
34
|
+
# should we copy the html files (if found?)
|
35
|
+
:copy_html => false
|
36
|
+
end
|
37
|
+
|
38
|
+
mode :debug do
|
39
|
+
config :all,
|
40
|
+
|
41
|
+
:build_prefix => '',
|
42
|
+
:staging_prefix => 'tmp/debug/staging'
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
mode :spec do
|
47
|
+
config :all,
|
48
|
+
|
49
|
+
:build_prefix => 'tmp/built_specs',
|
50
|
+
:staging_prefix => 'tmp/spec/staging'
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
# This is the root opalfile. It is used as the basis for every target. These can
|
55
|
+
# all be overridden by each opalfile, and so provide "defaults".
|
56
|
+
|
57
|
+
# Building targets - each opal (app, framework, theme etc) are a single target
|
58
|
+
namespace :target do
|
59
|
+
|
60
|
+
desc "Preparing the target"
|
61
|
+
task :prepare do
|
62
|
+
# set the build root
|
63
|
+
@target.build_root = File.join(@project.build_root, @config.staging_prefix, 'opals', @target.target_name)
|
64
|
+
# set the staging root
|
65
|
+
@target.staging_root = File.join(@project.build_root, @config.staging_prefix, @target.target_name)
|
66
|
+
end
|
67
|
+
|
68
|
+
desc "Building the target"
|
69
|
+
task :build => [:catalog, :hide_non_build_files, :'prepare_build_tasks:all']
|
70
|
+
|
71
|
+
desc "catalog"
|
72
|
+
task :catalog do
|
73
|
+
target_root = @target.target_root
|
74
|
+
Dir[File.join(target_root, '**', '*')].each do |source|
|
75
|
+
next if !File.exist?(source) || File.directory?(source)
|
76
|
+
# should check if its another target
|
77
|
+
|
78
|
+
relative_path = source.sub(/^#{Regexp.escape target_root}\//, "")
|
79
|
+
relative_path = relative_path.split(::File::SEPARATOR).join('/')
|
80
|
+
@target.add_build_item relative_path
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
desc "Hide opalfiles etc"
|
85
|
+
task :hide_non_build_files => [:catalog] do
|
86
|
+
# puts "checking for extra files"
|
87
|
+
@target.build_items.each do |item|
|
88
|
+
|
89
|
+
can_skip = false
|
90
|
+
# skip if item is in our lib directory(s)
|
91
|
+
can_skip = @config.lib_directories.each do |dir|
|
92
|
+
break true if item.filename =~ /^#{dir}.+(rb|js)$/
|
93
|
+
end
|
94
|
+
|
95
|
+
# puts "trying #{item.filename}"
|
96
|
+
|
97
|
+
if @config.copy_html && item.filename =~ /\.html$/
|
98
|
+
# allow html files if we have said so
|
99
|
+
next
|
100
|
+
end
|
101
|
+
|
102
|
+
next if can_skip == true
|
103
|
+
|
104
|
+
# skip all resources
|
105
|
+
if @config.build_stylesheets
|
106
|
+
# puts "can build styleheets for #{item.filename}"
|
107
|
+
next if item.filename =~ /^resources.+$/
|
108
|
+
end
|
109
|
+
|
110
|
+
# if we have a bin item, and our config says we should include the bin
|
111
|
+
# file...
|
112
|
+
next if item.filename =~ /^bin.+$/ and @config.include_bin
|
113
|
+
|
114
|
+
# puts "hiding #{item.filename}"
|
115
|
+
|
116
|
+
# hide any other file
|
117
|
+
item.hide!
|
118
|
+
end
|
119
|
+
# puts "running hide_opalfiles with #{@target.build_items}"
|
120
|
+
# remove all non build files.. for example, if target is not main target,
|
121
|
+
# then remove any bin files.. only want lib files, also remove spec folders
|
122
|
+
# really... the only ruby, for example, we want is in the lib folder
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
namespace :prepare_build_tasks do
|
127
|
+
|
128
|
+
desc "This should invoke all needed tasks"
|
129
|
+
task :all => [:css, :ruby, :javascript, :combine]
|
130
|
+
|
131
|
+
desc "setup"
|
132
|
+
task :setup => [:'target:prepare']
|
133
|
+
|
134
|
+
desc "Ruby sources"
|
135
|
+
task :ruby => [:setup] do
|
136
|
+
# puts "running ruby tasks for #{@target}"
|
137
|
+
# make sure we only grab the ruby files
|
138
|
+
build_items = @target.build_items.select { |item| item.ext == 'rb' }
|
139
|
+
|
140
|
+
build_items.each do |item|
|
141
|
+
# p "item.filename is #{item.filename}"
|
142
|
+
item = @target.add_transform item,
|
143
|
+
:filename => item.filename,
|
144
|
+
:build_task => 'build:ruby',
|
145
|
+
:resource => :ruby,
|
146
|
+
# give our ruby a name.rb.js extension to make it clearer what it is
|
147
|
+
:build_path => File.join(@target.build_root, item.filename) + '.js',
|
148
|
+
:staging_path => File.join(@target.staging_root, item.filename) + '.js'
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
desc "Any javascript sources - not likely to be many"
|
153
|
+
task :javascript => [:setup] do
|
154
|
+
# puts @target.build_items.map { |a| a.filename }
|
155
|
+
build_items = @target.build_items.select { |item| item.ext == 'js' }
|
156
|
+
# puts "found some javascript items: #{build_items}"
|
157
|
+
build_items.each do |item|
|
158
|
+
item = @target.add_transform item,
|
159
|
+
:filename => item.filename,
|
160
|
+
:build_task => 'build:javascript',
|
161
|
+
:resource => :javascript,
|
162
|
+
:build_path => File.join(@target.build_root, item.filename),
|
163
|
+
:staging_path => File.join(@target.staging_root, item.filename)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
desc "Collect all css resources"
|
168
|
+
task :css => [:setup] do
|
169
|
+
if @config.build_stylesheets
|
170
|
+
build_items = @target.build_items.select { |item| item.ext == "css" }
|
171
|
+
|
172
|
+
build_items.each do |item|
|
173
|
+
item = @target.add_transform item,
|
174
|
+
:filename => item.filename,
|
175
|
+
:build_task => 'build:css',
|
176
|
+
:resource => :css,
|
177
|
+
:build_path => File.join(@target.build_root, item.filename),
|
178
|
+
:staging_path => File.join(@target.staging_root, item.filename)
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
desc "combined ruby etc"
|
184
|
+
task :combine => [:css, :ruby, :javascript] do
|
185
|
+
# puts "combining for #{@target.target_name}"
|
186
|
+
code_items = []
|
187
|
+
css_items = []
|
188
|
+
@target.build_items.each do |item|
|
189
|
+
# all resouurce (ruby, css etc) types will have a .resource property
|
190
|
+
next if item.resource.nil?
|
191
|
+
# lookup specific ruby, css etc
|
192
|
+
case item.resource
|
193
|
+
when :ruby, :javascript
|
194
|
+
code_items << item
|
195
|
+
when :css
|
196
|
+
css_items << item
|
197
|
+
else
|
198
|
+
# puts "found NON ruby #{item.inspect}"
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
# code target: the opal - javascript and ruby sources
|
203
|
+
code_target_name = @target.target_name + '.js'
|
204
|
+
|
205
|
+
@target.add_composite code_target_name,
|
206
|
+
:build_task => 'build:opal',
|
207
|
+
:source_items => code_items
|
208
|
+
|
209
|
+
if @config.build_stylesheets
|
210
|
+
# css target is all the css resources (less, css, sass)
|
211
|
+
css_target_name = @target.target_name + '.css'
|
212
|
+
|
213
|
+
@target.add_composite css_target_name,
|
214
|
+
:build_task => 'build:opal_css',
|
215
|
+
:source_items => css_items
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
end
|
220
|
+
|
221
|
+
namespace :build_item do
|
222
|
+
|
223
|
+
task :prepare do
|
224
|
+
filename = @build_item.filename
|
225
|
+
raise "All build items must have a filename." unless filename
|
226
|
+
|
227
|
+
# default build task for a build item
|
228
|
+
@build_item.build_task ||= 'build:copy'
|
229
|
+
# make sure we have an extension set
|
230
|
+
@build_item.ext = File.extname(filename)[1..-1]
|
231
|
+
# make sure our full source path is ready
|
232
|
+
@build_item.source_path ||= File.join(@target.target_root, filename)
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
namespace :build do
|
237
|
+
|
238
|
+
task :clean do
|
239
|
+
# clean.. remove only tmps etc, leave final build as it is
|
240
|
+
staging = File.join @project.build_root, @config.tmp_root
|
241
|
+
FileUtils.rm_rf staging
|
242
|
+
end
|
243
|
+
|
244
|
+
task :copy do
|
245
|
+
# puts "building simple copy task for #{@build_item.source_path}"
|
246
|
+
from = @build_item.source_path
|
247
|
+
to = File.join(@project.build_root, @config.build_prefix, @build_item.filename)
|
248
|
+
# puts from
|
249
|
+
# puts to
|
250
|
+
FileUtils.mkdir_p File.dirname(to)
|
251
|
+
FileUtils.copy_file from, to
|
252
|
+
end
|
253
|
+
|
254
|
+
task :ruby do
|
255
|
+
Vienna::Builders::Ruby.build @build_item, @dst_path
|
256
|
+
end
|
257
|
+
|
258
|
+
task :javascript do
|
259
|
+
Vienna::Builders::Javascript.build @build_item, @dst_path
|
260
|
+
end
|
261
|
+
|
262
|
+
task :css do
|
263
|
+
Vienna::Builders::CSS.build @build_item, @dst_path
|
264
|
+
end
|
265
|
+
|
266
|
+
desc "Build the opal itself (as javascript)"
|
267
|
+
task :opal do
|
268
|
+
Vienna::Builders::Opal.build @build_item, @dst_path
|
269
|
+
end
|
270
|
+
|
271
|
+
task :opal_css do
|
272
|
+
source_items = @build_item.source_items
|
273
|
+
build_path = @build_item.build_path
|
274
|
+
|
275
|
+
FileUtils.mkdir_p File.dirname(build_path)
|
276
|
+
|
277
|
+
File.open(build_path, 'w') do |out|
|
278
|
+
source_items.each do |item|
|
279
|
+
out.write File.read(item.stage!.staging_path)
|
280
|
+
end
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
desc "Final package to combine all opals"
|
285
|
+
task :package do
|
286
|
+
# puts "running package task!"
|
287
|
+
# only run package task if we are the main target
|
288
|
+
if @target.main_target?
|
289
|
+
js_build_path = File.join @project.build_root, @config.build_prefix, @config.javascripts_prefix
|
290
|
+
|
291
|
+
FileUtils.mkdir_p js_build_path
|
292
|
+
|
293
|
+
js_name = @config.javascript_name
|
294
|
+
|
295
|
+
if js_name == :project_name
|
296
|
+
js_name = "#{@project.project_name}.js"
|
297
|
+
end
|
298
|
+
|
299
|
+
# if @config.build_stylesheets
|
300
|
+
css_build_path = File.join @project.build_root, @config.build_prefix, @config.stylesheets_prefix
|
301
|
+
|
302
|
+
# FileUtils.mkdir_p css_build_path
|
303
|
+
|
304
|
+
css_name = @config.stylesheet_name
|
305
|
+
|
306
|
+
if css_name == :project_name
|
307
|
+
css_name = "#{@project.project_name}.css"
|
308
|
+
end
|
309
|
+
# end
|
310
|
+
# javascripts_prefix
|
311
|
+
opals = @project.targets.each_value.to_a.dup
|
312
|
+
|
313
|
+
# puts "opals are:"
|
314
|
+
# p opals
|
315
|
+
|
316
|
+
# order is more-a-less irrelevant, but we MUST have opal first
|
317
|
+
opals.unshift(opals.find { |o| o.target_name.to_sym == :runtime }).uniq!
|
318
|
+
|
319
|
+
# puts "opals are now:"
|
320
|
+
# p opals
|
321
|
+
|
322
|
+
# build the final javascript.js package
|
323
|
+
File.open(File.join(js_build_path, js_name), 'w') do |out|
|
324
|
+
opals.each do |opal|
|
325
|
+
item = opal.build_item_for("#{opal.target_name}.js")
|
326
|
+
out.puts File.read(item.build_path)
|
327
|
+
end
|
328
|
+
# Also, we must include the bin file we want to use, and set the working
|
329
|
+
# directory (which is in the base folder of the main_target)
|
330
|
+
bin_file = @config.bin_file
|
331
|
+
bin_file = @project.project_name if bin_file == :project_name
|
332
|
+
working_dir = @target.target_name.to_s
|
333
|
+
out.puts "opal.run('#{bin_file}','#{working_dir}');"
|
334
|
+
end
|
335
|
+
|
336
|
+
# if @config.build_stylesheets
|
337
|
+
# puts "in a"
|
338
|
+
# puts css_build_path
|
339
|
+
# puts css_name
|
340
|
+
|
341
|
+
all_css_targets = []
|
342
|
+
opals.each do |opal|
|
343
|
+
item = opal.build_item_for("#{opal.target_name}.css")
|
344
|
+
# puts item
|
345
|
+
(all_css_targets << item) if item
|
346
|
+
end
|
347
|
+
|
348
|
+
if all_css_targets.length > 0
|
349
|
+
FileUtils.mkdir_p css_build_path
|
350
|
+
File.open(File.join(css_build_path, css_name), 'w') do |out|
|
351
|
+
all_css_targets.each do |item|
|
352
|
+
out.puts File.read(item.build_path)
|
353
|
+
end
|
354
|
+
end
|
355
|
+
end
|
356
|
+
# FileUtils.mkdir_p css_build_path
|
357
|
+
|
358
|
+
# build the final stylesheet.css package
|
359
|
+
# File.open(File.join(css_build_path, css_name), 'w') do |out|
|
360
|
+
# opals.each do |opal|
|
361
|
+
# puts opal.target_name
|
362
|
+
# item = /opal.build_item_for("#{opal.target_name}.css")
|
363
|
+
# puts item
|
364
|
+
# out.puts(File.read(item.build_path)) if item
|
365
|
+
# end
|
366
|
+
# end
|
367
|
+
# end
|
368
|
+
|
369
|
+
end
|
370
|
+
end
|
371
|
+
end
|
data/README.md
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
Opal: Ruby compiler/runtime for the browser
|
2
|
+
=============================================
|
3
|
+
|
4
|
+
### NOTE: opal has been renamed from vienna. Any reference to vienna in any part of the documentation should be ignored (fixing references soon).
|
5
|
+
|
6
|
+
Opal is the runtime/standard lib for ruby in the browser.
|
7
|
+
|
8
|
+
Installing
|
9
|
+
-----------
|
10
|
+
|
11
|
+
# Insall gem from gemcutter/rubygems
|
12
|
+
sudo gem install opal
|
13
|
+
|
14
|
+
Trying out
|
15
|
+
----------
|
16
|
+
To make a test project, use the following command where project_name is the name of the project to use.
|
17
|
+
|
18
|
+
# make the project
|
19
|
+
opal new project_name
|
20
|
+
# jump into the project
|
21
|
+
cd project_name
|
22
|
+
|
23
|
+
If you look at the generated project, the html file includes a non existant javascript file. This will be where your project is built to. Also, in the lib folder there is a .rb file with the same name as your project with a simple puts command. Build the project:
|
24
|
+
|
25
|
+
opal build
|
26
|
+
|
27
|
+
The javascript file is now there, with all the opal runtime, core libraries and browser libs built in. Opal the file with a web browser and check the console:
|
28
|
+
|
29
|
+
"running project_name"
|
30
|
+
|
31
|
+
To avoid the need to rebuild every time, opal comes with a server command that wraps your project and rebuilds every time index.html is reloaded (i.e. every time you reload the page). To run with a server, use the following:
|
32
|
+
|
33
|
+
opal server
|
34
|
+
|
35
|
+
And open your browser to `127.0.0.1:3030`.
|
36
|
+
|
37
|
+
Next steps
|
38
|
+
----------
|
39
|
+
|
40
|
+
Opal has many of the libraries built. Check out the documentation (more coming soon), ask me questions on freenode (adambeynon): usually in #ruby, #ruby-lang, #javascript etc, or email me: adam.beynon@me.com.
|
41
|
+
|
42
|
+
Command line tools / v8
|
43
|
+
-----------------------
|
44
|
+
|
45
|
+
I am playing with experimental support for therubyracer. Essentially, this gem allows you to embed the v8 javascript engine into ruby applications. Vienna has support for this allowing, firstly, a REPL system for trying out commands, but more importantly/interestingly, can run an entire opal application through the engine. The compilation step is not necessary as ruby files are compiled as they are required. For now, all specs are by default run through this system. Node, *nix (unix/linux) only, no windows support for opal command line.
|
data/Rakefile
CHANGED
@@ -1,52 +1,255 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake'
|
3
|
+
# require 'spec/rake/spectask'
|
4
|
+
# require 'ftools'
|
5
|
+
require 'yard'
|
6
|
+
#
|
7
|
+
# Dir[File.join(File.dirname(__FILE__), 'tasks', '**', '*.rb')].each do |t|
|
8
|
+
# require t
|
9
|
+
# end
|
3
10
|
|
4
11
|
begin
|
5
12
|
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
gem.add_development_dependency "vienna", ">= 0.0.3"
|
13
|
+
Jeweler::Tasks.new do |gemspec|
|
14
|
+
gemspec.name = "opal"
|
15
|
+
gemspec.summary = "Ruby compiler and runtime for the browser"
|
16
|
+
gemspec.description = "Ruby compiler and runtime for the browser."
|
17
|
+
gemspec.email = "adam@adambeynon.com"
|
18
|
+
gemspec.homepage = "http://opalscript.org"
|
19
|
+
gemspec.authors = ["Adam Beynon"]
|
14
20
|
end
|
15
21
|
Jeweler::GemcutterTasks.new
|
16
22
|
rescue LoadError
|
17
|
-
puts "Jeweler
|
23
|
+
puts "Jeweler not available. Install it with: sudo gem install jeweler"
|
18
24
|
end
|
19
25
|
|
20
|
-
require
|
21
|
-
|
22
|
-
|
23
|
-
test.pattern = 'test/**/test_*.rb'
|
24
|
-
test.verbose = true
|
26
|
+
desc "Simple task to require vienna framework. Uses local, not installed."
|
27
|
+
task :opal_gem do
|
28
|
+
require File.join(File.dirname(__FILE__), 'lib', 'opal')
|
25
29
|
end
|
26
30
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
31
|
+
# desc "Run all specs"
|
32
|
+
# Spec::Rake::SpecTask.new('spec') do |t|
|
33
|
+
# t.spec_files = FileList['spec/**/*.rb']
|
34
|
+
# end
|
35
|
+
|
36
|
+
|
37
|
+
desc "Rebuild ruby parser (using racc)"
|
38
|
+
task :ruby_parser do
|
39
|
+
%x{racc -E lib/vienna/builders/ruby/ruby_parser.rb.y -o lib/vienna/builders/ruby/ruby_parser.rb}
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
# desc "Rebuild vienna.js runtime file"
|
44
|
+
# task :vienna do
|
45
|
+
# File.open('build/vienna.js', 'w') do |out|
|
46
|
+
# # pre
|
47
|
+
# out.puts "var vienna = { };"
|
48
|
+
# out.puts "(function(global, exports) {"
|
49
|
+
#
|
50
|
+
# # runtime
|
51
|
+
# out.puts File.read('runtime/vienna.js')
|
52
|
+
#
|
53
|
+
# # post
|
54
|
+
# out.puts "})(window, vienna);"
|
55
|
+
#
|
56
|
+
# # Core library - use all rb files in core dir, but ensure kerenl.rb and
|
57
|
+
# # module.rb are first in line as most other things rely on them
|
58
|
+
# ['core/kernel.rb', 'core/module.rb'].concat(Dir.glob('core/**/*.rb')).uniq!.each do |rb|
|
59
|
+
# builder = Vienna::CherryKit::RubyBuilder.new(rb, nil, nil)
|
60
|
+
# out.puts "// #{rb}"
|
61
|
+
# out.puts "#{builder.build!}.apply(vienna.top_self);"
|
62
|
+
# end
|
63
|
+
# end
|
64
|
+
# # puts "need to rebuild vienna.js"
|
65
|
+
# end
|
66
|
+
|
67
|
+
desc "build opal"
|
68
|
+
task :opal => :opal_gem do
|
69
|
+
raise "currently disabled. use simple_opal"
|
70
|
+
opal = Vienna::Opal.new File.join(File.dirname(__FILE__),'frameworks', 'opal')
|
71
|
+
opal.build! :build_dir => File.join(File.dirname(__FILE__), 'build')
|
72
|
+
end
|
73
|
+
|
74
|
+
desc "build simple_opal test opal purely for testing opal etc"
|
75
|
+
task :simple_opal => :opal_gem do
|
76
|
+
project = Vienna::Project.new(File.join(File.dirname(__FILE__), 'apps', 'simple_opal'), :build_mode => :debug)
|
77
|
+
p project
|
78
|
+
p project.targets
|
79
|
+
project.build!
|
80
|
+
# root = File.join(File.dirname(__FILE__), 'apps', 'simple_opal')
|
81
|
+
# Vienna::Tools.new(root).build :simple_opal
|
82
|
+
end
|
83
|
+
|
84
|
+
desc "build simple_opal test opal purely for testing opal etc"
|
85
|
+
task :simple_opal_spec => :opal_gem do
|
86
|
+
project = Vienna::Project.new(File.join(File.dirname(__FILE__), 'apps', 'simple_opal'), :build_mode => :spec)
|
87
|
+
p project
|
88
|
+
p project.targets
|
89
|
+
project.build!
|
90
|
+
# root = File.join(File.dirname(__FILE__), 'apps', 'simple_opal')
|
91
|
+
# V
|
92
|
+
end
|
93
|
+
|
94
|
+
desc "rebuild opal_spec package"
|
95
|
+
task :opal_spec => :opal_gem do
|
96
|
+
# opal framework root
|
97
|
+
opal_root = File.join(File.dirname(__FILE__), 'frameworks', 'opal')
|
98
|
+
# custom build root
|
99
|
+
tmp_root = File.join(File.dirname(__FILE__), 'tmp', 'opal_spec')
|
100
|
+
# our project
|
101
|
+
project = Vienna::Project.new opal_root, :build_mode => :spec,
|
102
|
+
:build_root => tmp_root
|
103
|
+
|
104
|
+
project.build!
|
105
|
+
end
|
106
|
+
|
107
|
+
desc "Browser Specs"
|
108
|
+
task :browser_spec => :opal_gem do
|
109
|
+
browser_root = File.join(File.dirname(__FILE__), 'frameworks', 'browser')
|
110
|
+
|
111
|
+
tmp_root = File.join(File.dirname(__FILE__), 'tmp', 'browser_spec')
|
112
|
+
|
113
|
+
project = Vienna::Project.new browser_root, :build_mode => :spec,
|
114
|
+
:build_root => tmp_root
|
115
|
+
|
116
|
+
project.build!
|
117
|
+
end
|
118
|
+
|
119
|
+
desc "Foundation Specs"
|
120
|
+
task :foundation_spec => :opal_gem do
|
121
|
+
browser_root = File.join(File.dirname(__FILE__), 'frameworks', 'foundation')
|
122
|
+
|
123
|
+
tmp_root = File.join(File.dirname(__FILE__), 'tmp', 'foundation_spec')
|
124
|
+
|
125
|
+
project = Vienna::Project.new browser_root, :build_mode => :spec,
|
126
|
+
:build_root => tmp_root
|
127
|
+
|
128
|
+
project.build!
|
38
129
|
end
|
39
130
|
|
40
|
-
|
131
|
+
YARD::Rake::YardocTask.new do |t|
|
132
|
+
YARD::Templates::Engine.register_template_path(File.join(Dir.getwd, 'yard_templates'))
|
133
|
+
t.files = ['core/**/*.rb'] # optional
|
134
|
+
# t.options = ['--any', '--extra', '--opts'] # optional
|
135
|
+
t.options = ['-o./doc/vienna', '-tvienna']
|
136
|
+
t.options += ['--title', 'Vienna Documentation']
|
137
|
+
end
|
41
138
|
|
42
|
-
|
139
|
+
# YARD::Rake::YardocTask.new(:cherry_kit) do |t|
|
140
|
+
# t.files = ['lib/**/*.rb', OTHER_PATHS] # optional
|
141
|
+
# t.options = ['--any', '--extra', '--opts'] # optional
|
142
|
+
# end
|
43
143
|
|
44
|
-
|
45
|
-
|
46
|
-
|
144
|
+
desc "Testing compiler etc"
|
145
|
+
task :test => :vienna do
|
146
|
+
test = Vienna::CherryKit::RubyBuilder.new('test/test_vienna.rb', nil, nil)
|
147
|
+
puts test.build!
|
148
|
+
end
|
47
149
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
150
|
+
namespace :doc do
|
151
|
+
|
152
|
+
# rebuild demos
|
153
|
+
desc "Rebuild demos"
|
154
|
+
task :demos => :opal_gem do
|
155
|
+
# every demo uses an index.html file inside of the demos folder
|
156
|
+
base = File.join(File.dirname(__FILE__), 'demos')
|
157
|
+
demos = File.join(base, '**', 'index.html')
|
158
|
+
# we build all demos to vienna/doc/demos
|
159
|
+
Dir.glob(demos).each do |demo|
|
160
|
+
puts "building demo: #{demo}"
|
161
|
+
# path will be (demos/)path(/index.html)
|
162
|
+
path = /^#{Regexp.escape base}\/(.*)\/index\.html$/.match(demo)[1]
|
163
|
+
|
164
|
+
build_root = File.join(File.dirname(__FILE__), 'doc', 'demos', path)
|
165
|
+
|
166
|
+
puts build_root
|
167
|
+
project = Vienna::Project.new File.dirname(demo),
|
168
|
+
:build_root => build_root
|
169
|
+
|
170
|
+
# FIXME: maybe only set options if no Opalfile... some of the CherryKit
|
171
|
+
# apps may want to include some css etc etc, so dont overwrite them?
|
172
|
+
project.options :lib_directories => [""],
|
173
|
+
:javascripts_prefix => "",
|
174
|
+
:copy_html => true
|
175
|
+
project.build!
|
176
|
+
project.clean!
|
177
|
+
# puts project
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
# opal/runtime docs
|
182
|
+
YARD::Rake::YardocTask.new(:opal) do |t|
|
183
|
+
t.files = ['opals/runtime/**/*.rb']
|
184
|
+
t.files += ['opals/opal/spec/core/**/*.rb']
|
185
|
+
t.files += ['-', 'opals/runtime/docs/**/*.md']
|
186
|
+
t.options = ['-o./doc/opal/']
|
187
|
+
t.options += ['-r./opals/runtime/README.md']
|
188
|
+
t.options += ['-mmarkdown']
|
189
|
+
t.options += ['--title', 'Opal Documentation']
|
190
|
+
end
|
191
|
+
|
192
|
+
# browser docs
|
193
|
+
YARD::Rake::YardocTask.new(:browser) do |t|
|
194
|
+
t.files = ['opals/browser/**/*.rb']
|
195
|
+
t.options = ['-o./doc/browser/']
|
196
|
+
t.options += ['-r./opals/browser/README.md']
|
197
|
+
t.options += ['-mmarkdown']
|
198
|
+
t.options += ['--title', 'Browser Documentation']
|
199
|
+
end
|
200
|
+
|
201
|
+
# all specs
|
202
|
+
namespace :spec do
|
203
|
+
|
204
|
+
%w{opal browser}.each do |opal|
|
205
|
+
desc "rebuild spec for #{opal}"
|
206
|
+
task opal.to_sym => :opal_gem do
|
207
|
+
opal_root = File.join(File.dirname(__FILE__), 'opals', opal)
|
208
|
+
build_root = File.join(File.dirname(__FILE__), 'doc', opal, 'spec')
|
209
|
+
project = Vienna::Project.new opal_root, :build_root => build_root, :build_mode => :spec
|
210
|
+
|
211
|
+
project.options :javascript_name => "spec.js",
|
212
|
+
:stylesheet_name => "spec.css",
|
213
|
+
:build_prefix => ""
|
214
|
+
|
215
|
+
project.build!
|
216
|
+
project.clean!
|
217
|
+
|
218
|
+
# spec html file
|
219
|
+
from = File.join(File.dirname(__FILE__), 'opals', 'spec', 'resources', 'index.html')
|
220
|
+
|
221
|
+
FileUtils.copy from, File.join(build_root, 'index.html')
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
# desc "rebuild opal_spec package"
|
226
|
+
# task :opal_spec => :opal_gem do
|
227
|
+
# # opal framework root
|
228
|
+
# opal_root = File.join(File.dirname(__FILE__), 'frameworks', 'opal')
|
229
|
+
# # custom build root
|
230
|
+
# tmp_root = File.join(File.dirname(__FILE__), 'tmp', 'opal_spec')
|
231
|
+
# # our project
|
232
|
+
# project = Vienna::Project.new opal_root, :build_mode => :spec,
|
233
|
+
# :build_root => tmp_root
|
234
|
+
#
|
235
|
+
# project.build!
|
236
|
+
# end
|
237
|
+
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
task :doc => ['doc:browser', 'doc:opal', 'doc:demos'] do
|
242
|
+
# go through each set of generated docs, and replace the style.css file
|
243
|
+
%w{browser opal}.each do |opal|
|
244
|
+
from = File.join(File.dirname(__FILE__), 'yard', 'style.css')
|
245
|
+
to = File.join(File.dirname(__FILE__), 'doc', opal, 'css', 'style.css')
|
246
|
+
FileUtils.copy from, to
|
247
|
+
end
|
248
|
+
|
249
|
+
# copy our index.html and its necessary css files
|
250
|
+
%w{index.html style.css}.each do |resource|
|
251
|
+
from = File.join File.dirname(__FILE__), 'yard', resource
|
252
|
+
to = File.join(File.dirname(__FILE__), 'doc')
|
253
|
+
FileUtils.copy from, to
|
254
|
+
end
|
52
255
|
end
|