opal 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (306) hide show
  1. data/.gitignore +10 -1
  2. data/.gitmodules +0 -0
  3. data/Opalfile +371 -0
  4. data/README.md +45 -0
  5. data/Rakefile +237 -34
  6. data/VERSION +1 -1
  7. data/bin/opal +13 -0
  8. data/demos/apps/browser_demo/index.html +11 -0
  9. data/demos/apps/browser_demo/lib/browser_demo.rb +31 -0
  10. data/demos/apps/simple_opal/Opalfile +13 -0
  11. data/demos/apps/simple_opal/index.html +11 -0
  12. data/demos/apps/simple_opal/lib/app_controller.rb +62 -0
  13. data/demos/apps/simple_opal/lib/main_window.rb +146 -0
  14. data/demos/browser/request/index.html +52 -0
  15. data/demos/browser/request/request.rb +48 -0
  16. data/gen/browser/__PROJECT_NAME__/index.html +10 -0
  17. data/gen/browser/__PROJECT_NAME__/lib/__PROJECT_NAME__.rb +1 -0
  18. data/lib/opal.rb +48 -3
  19. data/lib/opal/builders/base.rb +50 -0
  20. data/lib/opal/builders/css.rb +46 -0
  21. data/lib/opal/builders/javascript.rb +44 -0
  22. data/lib/opal/builders/opal.rb +79 -0
  23. data/lib/opal/builders/ruby.rb +50 -0
  24. data/lib/opal/builders/ruby/generate.rb +1851 -0
  25. data/lib/opal/builders/ruby/nodes.rb +210 -0
  26. data/lib/opal/builders/ruby/ruby.rb +916 -0
  27. data/lib/opal/builders/ruby/ruby_parser.rb +6008 -0
  28. data/lib/opal/builders/ruby/ruby_parser.rb.y +1451 -0
  29. data/lib/opal/models/build_item.rb +104 -0
  30. data/lib/opal/models/hash_struct.rb +40 -0
  31. data/lib/opal/models/project.rb +215 -0
  32. data/lib/opal/models/struct_accessors.rb +58 -0
  33. data/lib/opal/models/target.rb +176 -0
  34. data/lib/opal/opal/env/console.rb +66 -0
  35. data/lib/opal/opal/env/fs.rb +98 -0
  36. data/lib/opal/opal/env/object.rb +48 -0
  37. data/lib/opal/opal/environment.rb +139 -0
  38. data/lib/opal/opal/gen.rb +62 -0
  39. data/lib/opal/opal/opal.rb +68 -0
  40. data/lib/opal/opal/repl.rb +38 -0
  41. data/lib/opal/opalfile/dsl.rb +62 -0
  42. data/lib/opal/opalfile/opalfile.rb +133 -0
  43. data/lib/opal/opalfile/task.rb +96 -0
  44. data/lib/opal/opalfile/task_manager.rb +63 -0
  45. data/lib/opal/opalfile/task_scope.rb +52 -0
  46. data/lib/opal/rack/app_server.rb +119 -0
  47. data/opals/aristo/README.md +16 -0
  48. data/opals/browser/Opalfile +11 -0
  49. data/opals/browser/README.md +146 -0
  50. data/opals/browser/SIZZLE_LICESNSE.txt +148 -0
  51. data/opals/browser/lib/browser.rb +118 -0
  52. data/opals/browser/lib/browser/builder.rb +41 -0
  53. data/opals/browser/lib/browser/canvas_context.rb +115 -0
  54. data/opals/browser/lib/browser/dimensions.rb +50 -0
  55. data/opals/browser/lib/browser/document.rb +146 -0
  56. data/opals/browser/lib/browser/element.rb +487 -0
  57. data/opals/browser/lib/browser/element/attributes.rb +88 -0
  58. data/opals/browser/lib/browser/element/css.rb +290 -0
  59. data/opals/browser/lib/browser/element/form.rb +146 -0
  60. data/opals/browser/lib/browser/event/dom_events.rb +81 -0
  61. data/opals/browser/lib/browser/event/event.rb +177 -0
  62. data/opals/browser/lib/browser/event/trigger_events.rb +53 -0
  63. data/opals/browser/lib/browser/geometry.rb +97 -0
  64. data/opals/browser/lib/browser/json.rb +32 -0
  65. data/opals/browser/lib/browser/json_parse.js +321 -0
  66. data/opals/browser/lib/browser/request/request.rb +201 -0
  67. data/opals/browser/lib/browser/sizzle.js +1068 -0
  68. data/opals/browser/lib/browser/string.rb +42 -0
  69. data/opals/browser/lib/browser/touch.rb +37 -0
  70. data/{runtime/yaml.js → opals/browser/lib/browser/vml_context.js} +8 -8
  71. data/opals/browser/lib/browser/window.rb +36 -0
  72. data/opals/browser/spec/browser/browser_detection_spec.rb +7 -0
  73. data/opals/browser/spec/document/aref_spec.rb +110 -0
  74. data/opals/browser/spec/document/ready_spec.rb +16 -0
  75. data/opals/browser/spec/element/body_spec.rb +11 -0
  76. data/opals/browser/spec/element/clear_spec.rb +26 -0
  77. data/opals/browser/spec/element/empty_spec.rb +29 -0
  78. data/opals/browser/spec/element/has_class_spec.rb +40 -0
  79. data/opals/browser/spec/element/hidden_spec.rb +23 -0
  80. data/opals/browser/spec/element/hide_spec.rb +31 -0
  81. data/opals/browser/spec/element/remove_spec.rb +25 -0
  82. data/opals/browser/spec/element/show_spec.rb +31 -0
  83. data/opals/browser/spec/element/style_spec.rb +69 -0
  84. data/opals/browser/spec/element/toggle_spec.rb +31 -0
  85. data/opals/browser/spec/element/visible_spec.rb +23 -0
  86. data/opals/browser/spec/spec_helper.rb +1 -0
  87. data/opals/cherry_kit/Opalfile +6 -0
  88. data/opals/cherry_kit/bin/cherry_kit.rb +11 -0
  89. data/opals/cherry_kit/lib/cherry_kit.rb +29 -0
  90. data/opals/foundation/Opalfile +11 -0
  91. data/opals/foundation/bin/foundation.rb +12 -0
  92. data/opals/foundation/lib/foundation.rb +32 -0
  93. data/opals/foundation/lib/foundation/__table_view_desktop/outline_view.rb +57 -0
  94. data/opals/foundation/lib/foundation/__table_view_desktop/table_column.rb +59 -0
  95. data/opals/foundation/lib/foundation/__table_view_desktop/table_header_view.rb +34 -0
  96. data/opals/foundation/lib/foundation/__table_view_desktop/table_view.rb +304 -0
  97. data/opals/foundation/lib/foundation/controllers/array_controller.rb +54 -0
  98. data/opals/foundation/lib/foundation/controllers/controller.rb +74 -0
  99. data/opals/foundation/lib/foundation/controllers/controller_selection_proxy.rb +67 -0
  100. data/opals/foundation/lib/foundation/controllers/object_controller.rb +145 -0
  101. data/opals/foundation/lib/foundation/controllers/view.rb +40 -0
  102. data/opals/foundation/lib/foundation/core/application.rb +476 -0
  103. data/opals/foundation/lib/foundation/core/attributes.rb +146 -0
  104. data/opals/foundation/lib/foundation/core/bindings.rb +125 -0
  105. data/opals/foundation/lib/foundation/core/builder.rb +101 -0
  106. data/opals/foundation/lib/foundation/core/event.rb +112 -0
  107. data/opals/foundation/lib/foundation/core/index_path.rb +49 -0
  108. data/opals/foundation/lib/foundation/core/index_set.rb +97 -0
  109. data/opals/foundation/lib/foundation/core/notification.rb +113 -0
  110. data/opals/foundation/lib/foundation/core/observable.rb +275 -0
  111. data/opals/foundation/lib/foundation/core/observable_array.rb +30 -0
  112. data/opals/foundation/lib/foundation/core/responder.rb +85 -0
  113. data/opals/foundation/lib/foundation/core/run_loop.rb +89 -0
  114. data/opals/foundation/lib/foundation/core/touch.rb +95 -0
  115. data/opals/foundation/lib/foundation/gestures/gesture_recognizer.rb +35 -0
  116. data/opals/foundation/lib/foundation/rendering/render_context.rb +100 -0
  117. data/opals/foundation/lib/foundation/rendering/renderer.rb +137 -0
  118. data/opals/foundation/lib/foundation/rendering/root_theme.rb +77 -0
  119. data/opals/foundation/lib/foundation/rendering/root_theme/button.rb +62 -0
  120. data/opals/foundation/lib/foundation/rendering/root_theme/control.rb +72 -0
  121. data/opals/foundation/lib/foundation/rendering/root_theme/label.rb +54 -0
  122. data/opals/foundation/lib/foundation/rendering/root_theme/scroller.rb +58 -0
  123. data/opals/foundation/lib/foundation/rendering/root_theme/slider.rb +72 -0
  124. data/opals/foundation/lib/foundation/rendering/root_theme/table_view.rb +97 -0
  125. data/opals/foundation/lib/foundation/rendering/root_theme/text_field.rb +55 -0
  126. data/opals/foundation/lib/foundation/rendering/root_theme/view.rb +81 -0
  127. data/opals/foundation/lib/foundation/rendering/theme.rb +38 -0
  128. data/opals/foundation/lib/foundation/table_view/cell.rb +39 -0
  129. data/opals/foundation/lib/foundation/table_view/table.rb +171 -0
  130. data/opals/foundation/lib/foundation/views/button.rb +63 -0
  131. data/opals/foundation/lib/foundation/views/checkbox.rb +28 -0
  132. data/opals/foundation/lib/foundation/views/clip.rb +47 -0
  133. data/opals/foundation/lib/foundation/views/control.rb +199 -0
  134. data/opals/foundation/lib/foundation/views/label.rb +54 -0
  135. data/opals/foundation/lib/foundation/views/scroll.rb +294 -0
  136. data/opals/foundation/lib/foundation/views/scroll_view_desktop.rb +152 -0
  137. data/opals/foundation/lib/foundation/views/scroller.rb +54 -0
  138. data/opals/foundation/lib/foundation/views/slider.rb +93 -0
  139. data/opals/foundation/lib/foundation/views/text_field.rb +83 -0
  140. data/opals/foundation/lib/foundation/views/view.rb +426 -0
  141. data/opals/foundation/lib/foundation/windows/window.rb +191 -0
  142. data/opals/foundation/resources/button/button.css +23 -0
  143. data/{runtime/init.js → opals/foundation/resources/foundation.css} +27 -33
  144. data/opals/foundation/resources/scroll/scroll.css +22 -0
  145. data/opals/foundation/resources/scroll_view/scroll_view.css +3 -0
  146. data/opals/foundation/resources/scroll_view/scroller.css +3 -0
  147. data/opals/foundation/resources/slider/regular/slider.css +3 -0
  148. data/opals/foundation/resources/slider/slider.css +27 -0
  149. data/opals/foundation/resources/table_view/outline_view.css +3 -0
  150. data/opals/foundation/resources/table_view/table_view.css +15 -0
  151. data/opals/foundation/resources/text_field/text_field.css +71 -0
  152. data/opals/foundation/spec/spec_helper.rb +1 -0
  153. data/opals/foundation/spec/system/attributes/get_attribute_spec.rb +69 -0
  154. data/opals/foundation/spec/system/attributes/get_path_spec.rb +44 -0
  155. data/opals/foundation/spec/system/attributes/set_path_spec.rb +24 -0
  156. data/opals/foundation/spec/system/attributes/set_spec.rb +58 -0
  157. data/opals/foundation/spec/system/bindings/bindings.rb +85 -0
  158. data/opals/foundation/spec/system/key_value_binding/bind_spec.rb +43 -0
  159. data/opals/foundation/spec/system/observable/dependant_keys_spec.rb +74 -0
  160. data/opals/foundation/spec/system/observable/observe_spec.rb +292 -0
  161. data/opals/foundation/spec/system/observable/remove_observer_spec.rb +60 -0
  162. data/opals/opal/Opalfile +14 -0
  163. data/opals/opal/spec/core/array/append_spec.rb +30 -0
  164. data/opals/opal/spec/core/array/assoc_spec.rb +29 -0
  165. data/opals/opal/spec/core/array/at_spec.rb +37 -0
  166. data/opals/opal/spec/core/array/clear_spec.rb +22 -0
  167. data/opals/opal/spec/core/array/collect_bang_spec.rb +27 -0
  168. data/opals/opal/spec/core/array/collect_spec.rb +27 -0
  169. data/opals/opal/spec/core/array/compact_spec.rb +15 -0
  170. data/opals/opal/spec/core/array/concat_spec.rb +15 -0
  171. data/opals/opal/spec/core/array/constructor_spec.rb +14 -0
  172. data/opals/opal/spec/core/array/each_spec.rb +9 -0
  173. data/opals/opal/spec/core/array/element_reference_spec.rb +4 -0
  174. data/opals/opal/spec/core/array/first_spec.rb +35 -0
  175. data/opals/opal/spec/core/array/include_spec.rb +9 -0
  176. data/opals/opal/spec/core/array/map_spec.rb +31 -0
  177. data/opals/opal/spec/core/builtin_constants/builtin_constants_spec.rb +7 -0
  178. data/opals/opal/spec/core/false/and_spec.rb +10 -0
  179. data/opals/opal/spec/core/false/inspect_spec.rb +6 -0
  180. data/opals/opal/spec/core/false/or_spec.rb +10 -0
  181. data/opals/opal/spec/core/false/to_s_spec.rb +6 -0
  182. data/opals/opal/spec/core/false/xor_spec.rb +10 -0
  183. data/opals/opal/spec/core/file/join_spec.rb +19 -0
  184. data/opals/opal/spec/core/kernel/instance_eval_spec.rb +0 -0
  185. data/opals/opal/spec/core/kernel/loop_spec.rb +24 -0
  186. data/opals/opal/spec/core/kernel/raise_spec.rb +0 -0
  187. data/opals/opal/spec/core/module/attr_accessor_spec.rb +28 -0
  188. data/opals/opal/spec/core/number/lt_spec.rb +12 -0
  189. data/opals/opal/spec/core/true/and_spec.rb +10 -0
  190. data/opals/opal/spec/core/true/inspect_spec.rb +6 -0
  191. data/opals/opal/spec/core/true/or_spec.rb +10 -0
  192. data/opals/opal/spec/core/true/to_s_spec.rb +6 -0
  193. data/opals/opal/spec/core/true/xor_spec.rb +10 -0
  194. data/opals/opal/spec/fixtures/super.rb +70 -0
  195. data/opals/opal/spec/language/____temp_remove_this.rb +12 -0
  196. data/opals/opal/spec/language/and_spec.rb +62 -0
  197. data/opals/opal/spec/language/array_spec.rb +52 -0
  198. data/opals/opal/spec/language/block_spec.rb +18 -0
  199. data/opals/opal/spec/language/break_spec.rb +36 -0
  200. data/opals/opal/spec/language/case_spec.rb +103 -0
  201. data/opals/opal/spec/language/def_spec.rb +11 -0
  202. data/opals/opal/spec/language/eigenclass_spec.rb +60 -0
  203. data/opals/opal/spec/language/hash_spec.rb +29 -0
  204. data/opals/opal/spec/language/if_spec.rb +54 -0
  205. data/opals/opal/spec/language/loop_spec.rb +11 -0
  206. data/opals/opal/spec/language/metaclass_spec.rb +21 -0
  207. data/opals/opal/spec/language/method_spec.rb +64 -0
  208. data/opals/opal/spec/language/next_spec.rb +25 -0
  209. data/opals/opal/spec/language/or_spec.rb +34 -0
  210. data/opals/opal/spec/language/redo_spec.rb +24 -0
  211. data/opals/opal/spec/language/rescue_spec.rb +20 -0
  212. data/opals/opal/spec/language/return_spec.rb +47 -0
  213. data/opals/opal/spec/language/string_spec.rb +25 -0
  214. data/opals/opal/spec/language/super_spec.rb +26 -0
  215. data/opals/opal/spec/language/until_spec.rb +157 -0
  216. data/opals/opal/spec/language/while_spec.rb +163 -0
  217. data/opals/opal/spec/spec_helper.rb +5 -0
  218. data/opals/runtime/Opalfile +68 -0
  219. data/opals/runtime/README.md +12 -0
  220. data/opals/runtime/docs/debugging.md +51 -0
  221. data/opals/runtime/lib/array.rb +1516 -0
  222. data/opals/runtime/lib/basic_object.rb +49 -0
  223. data/opals/runtime/lib/class.rb +54 -0
  224. data/opals/runtime/lib/dir.rb +36 -0
  225. data/opals/runtime/lib/error.rb +49 -0
  226. data/opals/runtime/lib/false_class.rb +52 -0
  227. data/opals/runtime/lib/file.rb +79 -0
  228. data/opals/runtime/lib/hash.rb +791 -0
  229. data/opals/runtime/lib/io.rb +39 -0
  230. data/opals/runtime/lib/kernel.rb +288 -0
  231. data/opals/runtime/lib/match_data.rb +36 -0
  232. data/opals/runtime/lib/module.rb +109 -0
  233. data/opals/runtime/lib/nil_class.rb +69 -0
  234. data/opals/runtime/lib/number.rb +398 -0
  235. data/opals/runtime/lib/proc.rb +77 -0
  236. data/opals/runtime/lib/range.rb +63 -0
  237. data/opals/runtime/lib/regexp.rb +111 -0
  238. data/opals/runtime/lib/ruby.rb +30 -0
  239. data/opals/runtime/lib/string.rb +328 -0
  240. data/opals/runtime/lib/symbol.rb +40 -0
  241. data/opals/runtime/lib/top_self.rb +33 -0
  242. data/opals/runtime/lib/true_class.rb +45 -0
  243. data/opals/runtime/runtime/browser.js +287 -0
  244. data/opals/runtime/runtime/debug.js +182 -0
  245. data/opals/runtime/runtime/opal.js +1010 -0
  246. data/opals/runtime/runtime/post_opal.js +1 -0
  247. data/opals/runtime/runtime/pre_opal.js +2 -0
  248. data/opals/runtime/runtime/server_side.js +50 -0
  249. data/opals/spec/LICENSE.txt +26 -0
  250. data/opals/spec/Opalfile +5 -0
  251. data/opals/spec/bin/spec.rb +43 -0
  252. data/opals/spec/lib/spec.rb +33 -0
  253. data/opals/spec/lib/spec/dsl.rb +41 -0
  254. data/opals/spec/lib/spec/example.rb +35 -0
  255. data/opals/spec/lib/spec/example/before_and_after_hooks.rb +81 -0
  256. data/opals/spec/lib/spec/example/errors.rb +42 -0
  257. data/opals/spec/lib/spec/example/example_group.rb +37 -0
  258. data/opals/spec/lib/spec/example/example_group_factory.rb +43 -0
  259. data/opals/spec/lib/spec/example/example_group_hierarchy.rb +45 -0
  260. data/opals/spec/lib/spec/example/example_group_methods.rb +142 -0
  261. data/opals/spec/lib/spec/example/example_group_proxy.rb +41 -0
  262. data/opals/spec/lib/spec/example/example_methods.rb +73 -0
  263. data/opals/spec/lib/spec/example/example_proxy.rb +48 -0
  264. data/opals/spec/lib/spec/expectations.rb +46 -0
  265. data/opals/spec/lib/spec/expectations/errors.rb +35 -0
  266. data/opals/spec/lib/spec/expectations/fail_with.rb +37 -0
  267. data/opals/spec/lib/spec/expectations/handler.rb +48 -0
  268. data/opals/spec/lib/spec/matchers.rb +50 -0
  269. data/opals/spec/lib/spec/matchers/be.rb +26 -0
  270. data/opals/spec/lib/spec/matchers/generated_descriptions.rb +47 -0
  271. data/opals/spec/lib/spec/matchers/operator_matcher.rb +66 -0
  272. data/opals/spec/lib/spec/runner.rb +48 -0
  273. data/opals/spec/lib/spec/runner/example_group_runner.rb +71 -0
  274. data/opals/spec/lib/spec/runner/formatter/html_formatter.rb +100 -0
  275. data/opals/spec/lib/spec/runner/formatter/terminal_formatter.rb +82 -0
  276. data/opals/spec/lib/spec/runner/options.rb +63 -0
  277. data/opals/spec/lib/spec/runner/reporter.rb +123 -0
  278. data/opals/spec/resources/index.html +25 -0
  279. data/opals/spec/resources/spec.css +132 -0
  280. data/spec/cherry_kit/iseq_spec.rb +38 -0
  281. data/spec/spec_helper.rb +16 -0
  282. data/spec/vienna_spec.rb +7 -0
  283. data/yard/index.html +43 -0
  284. data/yard/style.css +765 -0
  285. metadata +312 -49
  286. data/docs/jarv.rdoc +0 -27
  287. data/runtime/array.js +0 -153
  288. data/runtime/class.js +0 -469
  289. data/runtime/compar.js +0 -73
  290. data/runtime/dir.js +0 -115
  291. data/runtime/enum.js +0 -74
  292. data/runtime/file.js +0 -165
  293. data/runtime/gem.js +0 -241
  294. data/runtime/hash.js +0 -181
  295. data/runtime/load.js +0 -251
  296. data/runtime/module.js +0 -98
  297. data/runtime/number.js +0 -148
  298. data/runtime/object.js +0 -522
  299. data/runtime/opal.js +0 -200
  300. data/runtime/parse.js +0 -2218
  301. data/runtime/range.js +0 -56
  302. data/runtime/re.js +0 -91
  303. data/runtime/string.js +0 -199
  304. data/runtime/variable.js +0 -184
  305. data/runtime/vm.js +0 -1150
  306. data/tasks/build.rb +0 -16
data/.gitignore CHANGED
@@ -1,2 +1,11 @@
1
+ announcement.txt
2
+ coverage
3
+ doc
4
+ pkg
1
5
  .DS_Store
2
- build
6
+ cappuccino
7
+ opal_spec
8
+ opal_docs
9
+ .yardoc
10
+ tmp
11
+ .gem
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 |gem|
7
- gem.name = "opal"
8
- gem.summary = %q{Ruby runtime for the browser}
9
- gem.description = %q{Ruby runtime for the browser}
10
- gem.email = "adam@adambeynon.com"
11
- gem.homepage = "http://github.com/adambeynon/opal"
12
- gem.authors = ["Adam Beynon"]
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 (or a dependency) not available. Install it with: gem install jeweler"
23
+ puts "Jeweler not available. Install it with: sudo gem install jeweler"
18
24
  end
19
25
 
20
- require 'rake/testtask'
21
- Rake::TestTask.new(:test) do |test|
22
- test.libs << 'lib' << 'test'
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
- begin
28
- require 'rcov/rcovtask'
29
- Rcov::RcovTask.new do |test|
30
- test.libs << 'test'
31
- test.pattern = 'test/**/test_*.rb'
32
- test.verbose = true
33
- end
34
- rescue LoadError
35
- task :rcov do
36
- abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
37
- end
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
- task :test => :check_dependencies
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
- task :default => :test
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
- require 'rake/rdoctask'
45
- Rake::RDocTask.new do |rdoc|
46
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
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
- rdoc.rdoc_dir = 'rdoc'
49
- rdoc.title = "opal #{version}"
50
- rdoc.rdoc_files.include('README*')
51
- rdoc.rdoc_files.include('lib/**/*.rb')
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