opal 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -0,0 +1,60 @@
1
+
2
+ describe "Observable#remove_observer" do
3
+
4
+ it "should be possible to remove a single observer for a key" do
5
+ a = KVOTestSimple.new
6
+ b = KVOTestSimple.new
7
+
8
+ a_saw_observer = false
9
+
10
+ first_observer = a.observe(:first_name) do |info|
11
+ a_saw_observer = true
12
+ end
13
+
14
+ second_a_saw_observer = false
15
+
16
+ a.observe(:first_name) do |info|
17
+ second_a_saw_observer = true
18
+ end
19
+
20
+ a.remove_observer first_observer, :first_name
21
+ a.set_attribute :first_name, "something"
22
+ a.first_name.should == "setting_something"
23
+
24
+ a_saw_observer.should == false
25
+ second_a_saw_observer.should == true
26
+
27
+ end
28
+
29
+
30
+ it "should not post any notifications to any observer when all removed" do
31
+ c = KVOTestSimple.new
32
+
33
+ d_saw = e_saw = f_saw = false
34
+
35
+ d = c.observe :first_name do |info|
36
+ d_saw = true
37
+ end
38
+
39
+ e = c.observe :first_name do |info|
40
+ e_saw = true
41
+ end
42
+
43
+ f = c.observe :first_name do |info|
44
+ f_saw = true
45
+ end
46
+
47
+ c.remove_observer d, :first_name
48
+ c.remove_observer e, :first_name
49
+ c.remove_observer f, :first_name
50
+
51
+ c.set_attribute :first_name, "something"
52
+ c.first_name.should == "setting_something"
53
+
54
+ d_saw.should == false
55
+ e_saw.should == false
56
+ f_saw.should == false
57
+
58
+ end
59
+
60
+ end
@@ -0,0 +1,14 @@
1
+ mode :all do
2
+ config :opal,
3
+
4
+ :required => [:runtime]
5
+
6
+ end
7
+
8
+ mode :spec do
9
+ config :opal,
10
+
11
+ :lib_directories => ['spec'],
12
+ :bin_file => :spec
13
+
14
+ end
@@ -0,0 +1,30 @@
1
+
2
+ describe "Array#<<" do
3
+ it "pushed the object onto the end of the array" do
4
+ ([1, 2] << "c" << "d" << [3, 4]).should == [1, 2, "c", "d", [3, 4]]
5
+ end
6
+
7
+ it "returns self to allow chaining" do
8
+ a = []
9
+ b = a
10
+ (a << 1).should == b
11
+ (a << 2 << 3).should == b
12
+ end
13
+
14
+ it "correctly resizes the Array" do
15
+ a = []
16
+ a.size.should == 0
17
+ a << :foo
18
+ a.size.should == 1
19
+ a << :bar << :baz
20
+ a.size.should == 3
21
+
22
+ a = [1, 2, 3]
23
+ a.shift
24
+ a.shift
25
+ a.shift
26
+ a << :foo
27
+ a.should == [:foo]
28
+
29
+ end
30
+ end
@@ -0,0 +1,29 @@
1
+
2
+ describe "Array#assoc" do
3
+ it "returns the first array whose 1st item is == obj or nil" do
4
+ s1 = ["colors", "red", "blue", "green"]
5
+ s2 = [:letters, "a", "b", "c"]
6
+ s3 = [4]
7
+ s4 = ["colors", "cyan", "yellow", "magenda"]
8
+ s5 = [:letters, "a", "i", "u"]
9
+ s_nil = [nil, nil]
10
+ a = [s1, s2, s3, s4, s5, s_nil]
11
+ a.assoc(s1.first).should == s1
12
+ a.assoc(s2.first).should == s2
13
+ a.assoc(s3.first).should == s3
14
+ a.assoc(s4.first).should == s1
15
+ a.assoc(s5.first).should == s2
16
+ a.assoc(s_nil.first).should == s_nil
17
+ a.assoc(4).should == s3
18
+ a.assoc("key not in array").should == nil
19
+ end
20
+
21
+ it "ignores any non-Array elements" do
22
+ [1, 2, 3].assoc(2).should == nil
23
+ s1 = [4]
24
+ s2 = [5, 4, 3]
25
+ a = ["foo", [], s1, s2, nil, []]
26
+ a.assoc(s1.first).should == s1
27
+ a.assoc(s2.first).should == s2
28
+ end
29
+ end
@@ -0,0 +1,37 @@
1
+
2
+ describe "Array#at" do
3
+ it "returns the (n+1)'th element for the passed index n" do
4
+ a = [1, 2, 3, 4, 5, 6]
5
+ a.at(0).should == 1
6
+ a.at(1).should == 2
7
+ a.at(5).should == 6
8
+ end
9
+
10
+ it "returns nil if the given index is greater than or equal to the array's length" do
11
+ a = [1, 2, 3, 4, 5, 6]
12
+ a.at(6).should == nil
13
+ a.at(7).should == nil
14
+ end
15
+
16
+ it "returns the (-n)'th element from the last, for the given negative index n" do
17
+ a = [1, 2, 3, 4, 5, 6]
18
+ a.at(-1).should == 6
19
+ a.at(-2).should == 5
20
+ a.at(-6).should == 1
21
+ end
22
+
23
+ it "returns nil if the given index is less than -len, where len is the length of the array" do
24
+ a = [1, 2, 3, 4, 5, 6]
25
+ a.at(-7).should == nil
26
+ a.at(-8).should == nil
27
+ end
28
+
29
+ it "does not extend the array unless the given index is out of range" do
30
+ a = [1, 2, 3, 4, 5, 6]
31
+ a.length.should == 6
32
+ a.at(100)
33
+ a.length.should == 6
34
+ a.at(-100)
35
+ a.length.should == 6
36
+ end
37
+ end
@@ -0,0 +1,22 @@
1
+
2
+ describe "Array#clear" do
3
+ it "removes all elements" do
4
+ a = [1, 2, 3, 4]
5
+ a.clear
6
+ # a.clear.should == a
7
+ a.should == []
8
+ end
9
+
10
+ it "returns self" do
11
+ a = [1]
12
+ oid = a.object_id
13
+ a.clear.object_id.should == oid
14
+ end
15
+
16
+ it "leaves the Array empty" do
17
+ a = [1]
18
+ a.clear
19
+ a.empty?.should == true
20
+ a.size.should == 0
21
+ end
22
+ end
@@ -0,0 +1,27 @@
1
+
2
+ describe "Array#collect!" do
3
+ it "replaces each element with the value returned by block" do
4
+ a = [7, 9, 3, 5]
5
+ a.collect! { |i| i - 1 }
6
+ a.should == [6, 8, 2, 4]
7
+ end
8
+
9
+ it "returns self" do
10
+ a = [1, 2, 3, 4, 5]
11
+ b = a.collect! { |i| i + 1 }
12
+ a.object_id.should == b.object_id
13
+ end
14
+
15
+ it "returns the evaluated value of block but its contents is partially modified, if it broke in the block" do
16
+ a = ['a', 'b', 'c', 'd']
17
+ b = a.collect! do |i|
18
+ if i == 'c'
19
+ break 0
20
+ else
21
+ i + '!'
22
+ end
23
+ end
24
+ b.should == 0
25
+ a.should == ['a!', 'b!', 'c', 'd']
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+
2
+ describe "Array#collect" do
3
+ it "returns a copy of array with each element replaced by the value returned by block" do
4
+ a = ['a', 'b', 'c', 'd']
5
+ b = a.collect { |i| i + '!'}
6
+ b.should == ['a!', 'b!', 'c!', 'd!']
7
+ # a.object_id.should_not == a.object_id
8
+ end
9
+
10
+ it "does not change self" do
11
+ a = ['a', 'b', 'c', 'd']
12
+ b = a.collect { |i| i + '!' }
13
+ a.should == ['a', 'b', 'c', 'd']
14
+ end
15
+
16
+ it "returns the evaluated value of the block if it broke in the block" do
17
+ a = ['a', 'b', 'c', 'd']
18
+ b = a.collect do |i|
19
+ if i == 'c'
20
+ break 0
21
+ else
22
+ i + '!'
23
+ end
24
+ end
25
+ b.should == 0
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+
2
+ describe "Array#compact" do
3
+ it "returns a copy of array with all nil elements removed" do
4
+ a = [1, 2, 4]
5
+ a.compact.should == [1, 2, 4]
6
+ a = [1, nil, 2, 4]
7
+ a.compact.should == [1, 2, 4]
8
+ a = [1, 2, 4, nil]
9
+ a.compact.should == [1, 2, 4]
10
+ a = [nil, 1, 2, 4]
11
+ a.compact.should == [1, 2, 4]
12
+ end
13
+
14
+ # it "does not return self"
15
+ end
@@ -0,0 +1,15 @@
1
+
2
+ describe "Array#concat" do
3
+ it "appends the elements in the other array" do
4
+ ary = [1, 2, 3]
5
+ ary.concat([9, 10, 11])
6
+ ary.should == [1, 2, 3, 9, 10, 11]
7
+ ary.concat []
8
+ ary.should == [1, 2, 3, 9, 10, 11]
9
+ end
10
+
11
+ it "does not loop endlessly when argument is self" do
12
+ ary = ["x", "y"]
13
+ ary.concat(ary).should == ["x", "y", "x", "y"]
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+
2
+ describe "Array.[]" do
3
+ it "returns a new array populated with the given elements" do
4
+ obj = Object.new
5
+ Array.[](5, true, nil, 'a', "Ruby", obj).should == [5, true, nil, 'a', "Ruby", obj]
6
+ end
7
+ end
8
+
9
+ describe "Array[]" do
10
+ it "is a synonym for .[]" do
11
+ obj = Object.new
12
+ Array[5, true, nil, 'a', "Ruby", obj].should == [5, true, nil, 'a', "Ruby", obj]
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+
2
+ describe "Array#each" do
3
+ it "yields each element to the block" do
4
+ a = []
5
+ x = [1, 2, 3]
6
+ x.each { |item| a << item }.should == x
7
+ a.should == [1, 2, 3]
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+
2
+ describe "Array#[]" do
3
+
4
+ end
@@ -0,0 +1,35 @@
1
+
2
+ describe "Array#first" do
3
+ it "returns the first element" do
4
+ %W{a b c}.first.should == 'a'
5
+ [nil].first.should == nil
6
+ end
7
+
8
+ it "returns nil if self is empty" do
9
+ [].first.should == nil
10
+ end
11
+
12
+ it "returns the first count elements if given a count" do
13
+ [true, false, true, nil, false].first(2).should == [true, false]
14
+ end
15
+
16
+ it "returns an empty array when passed count on an empty array" do
17
+ [].first(0).should == []
18
+ [].first(1).should == []
19
+ [].first(2).should == []
20
+ end
21
+
22
+ it "returns an empty array when passed count == 0" do
23
+ [1, 2, 3, 4, 5].first(0).should == []
24
+ end
25
+
26
+ it "returns an array containing the first element when passed count == 1" do
27
+ [1, 2, 3, 4, 5].first(1).should == [1]
28
+ end
29
+
30
+ it "raises an argument error when count is negative"
31
+
32
+ it "returns the entire array when count > length" do
33
+ [1, 2, 3, 4, 5, 6, 7, 8, 9].first(10).should == [1, 2, 3, 4, 5, 6, 7, 8, 9]
34
+ end
35
+ end
@@ -0,0 +1,9 @@
1
+
2
+ describe "Array#include?" do
3
+ it "returns true if object is present, false otherwise" do
4
+ [1, 2, "a", "b"].include?("c").should == false
5
+ [1, 2, "a", "b"].include?("a").should == true
6
+ end
7
+
8
+ it "determines presence by using element == obj"
9
+ end
@@ -0,0 +1,31 @@
1
+
2
+ describe "Array#map" do
3
+ it "returns a copy of array with each element replaced by the value returned by block" do
4
+ a = ['a', 'b', 'c', 'd']
5
+ b = a.map { |i| i + '!' }
6
+ b.should == ['a!', 'b!', 'c!', 'd!']
7
+ # b.object_id.should_not == a.object_id
8
+ end
9
+
10
+ it "does not return subclass instance"
11
+
12
+ it "does not change self" do
13
+ a = ['a', 'b', 'c', 'd']
14
+ b = a.map { |i| i + '!' }
15
+ a.should == ['a', 'b', 'c', 'd']
16
+ end
17
+
18
+ it "returns the evaluated value of the block if it broke in the block" do
19
+ a = ['a', 'b', 'c', 'd']
20
+ b = a.map { |i|
21
+ if i == 'c'
22
+ break 0
23
+ else
24
+ i + '!'
25
+ end
26
+ }
27
+ b.should == 0
28
+ end
29
+
30
+ it "returns an enumerator when no block given"
31
+ end
@@ -0,0 +1,7 @@
1
+
2
+ describe "RUBY_VERSION" do
3
+
4
+ it "is a String" do
5
+ # RUBY_VERSION.class.should == String
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+
2
+ describe "FalseClass#&" do
3
+ it "returns false" do
4
+ (false & false).should == false
5
+ (false & true).should == false
6
+ (false & nil).should == false
7
+ (false & "").should == false
8
+ (false & 'x').should == false
9
+ end
10
+ end
@@ -0,0 +1,6 @@
1
+
2
+ describe "FalseClass#inspect" do
3
+ it "returns the string 'false'" do
4
+ false.inspect.should == "false"
5
+ end
6
+ end
@@ -0,0 +1,10 @@
1
+
2
+ describe "FalseClass#|" do
3
+ it "returns false if other is nil or false, otherwise true" do
4
+ (false | false).should == false
5
+ (false | true).should == true
6
+ (false | nil).should == false
7
+ (false | "").should == true
8
+ (false | 'x').should == true
9
+ end
10
+ end