opal 0.5.5 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (257) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +40 -9
  3. data/CHANGELOG.md +349 -0
  4. data/Gemfile +7 -8
  5. data/README.md +25 -3
  6. data/Rakefile +4 -2
  7. data/bin/opal +1 -1
  8. data/examples/rack/Gemfile +3 -0
  9. data/examples/rack/app/application.rb +13 -0
  10. data/examples/rack/app/user.rb +21 -0
  11. data/examples/rack/config.ru +7 -0
  12. data/examples/rack/index.html.erb +10 -0
  13. data/examples/sinatra/Gemfile +4 -0
  14. data/examples/sinatra/app/application.rb +7 -0
  15. data/examples/sinatra/config.ru +21 -0
  16. data/lib/mspec/opal/rake_task.rb +29 -8
  17. data/lib/mspec/opal/runner.rb +5 -4
  18. data/lib/opal.rb +1 -0
  19. data/lib/opal/builder.rb +0 -28
  20. data/lib/opal/cli.rb +0 -14
  21. data/lib/opal/compiler.rb +12 -11
  22. data/lib/opal/fragment.rb +8 -1
  23. data/lib/opal/nodes/array.rb +1 -1
  24. data/lib/opal/nodes/base.rb +4 -0
  25. data/lib/opal/nodes/call.rb +6 -2
  26. data/lib/opal/nodes/call_special.rb +1 -1
  27. data/lib/opal/nodes/class.rb +2 -2
  28. data/lib/opal/nodes/constants.rb +3 -1
  29. data/lib/opal/nodes/helpers.rb +23 -14
  30. data/lib/opal/nodes/if.rb +16 -9
  31. data/lib/opal/nodes/literal.rb +37 -5
  32. data/lib/opal/nodes/logic.rb +7 -1
  33. data/lib/opal/nodes/module.rb +2 -2
  34. data/lib/opal/nodes/scope.rb +13 -2
  35. data/lib/opal/nodes/top.rb +9 -0
  36. data/lib/opal/nodes/variables.rb +5 -2
  37. data/lib/opal/parser.rb +306 -71
  38. data/lib/opal/parser/grammar.rb +2667 -2775
  39. data/lib/opal/parser/grammar.y +177 -233
  40. data/lib/opal/parser/lexer.rb +511 -427
  41. data/lib/opal/parser/sexp.rb +15 -3
  42. data/lib/opal/source_map.rb +8 -4
  43. data/lib/opal/sprockets.rb +4 -0
  44. data/lib/opal/sprockets/cache_key_fix.rb +17 -0
  45. data/lib/opal/sprockets/environment.rb +21 -0
  46. data/lib/opal/sprockets/erb.rb +30 -0
  47. data/lib/opal/sprockets/processor.rb +127 -0
  48. data/lib/opal/sprockets/server.rb +166 -0
  49. data/lib/opal/util.rb +29 -0
  50. data/lib/opal/version.rb +1 -1
  51. data/opal.gemspec +1 -1
  52. data/opal/corelib/array.rb +106 -187
  53. data/opal/corelib/array/inheritance.rb +113 -0
  54. data/opal/corelib/basic_object.rb +6 -2
  55. data/opal/corelib/boolean.rb +4 -0
  56. data/opal/corelib/class.rb +2 -0
  57. data/opal/corelib/complex.rb +3 -0
  58. data/opal/corelib/enumerable.rb +75 -8
  59. data/opal/corelib/enumerator.rb +2 -0
  60. data/opal/corelib/error.rb +23 -23
  61. data/opal/corelib/hash.rb +5 -5
  62. data/opal/corelib/helpers.rb +51 -16
  63. data/opal/corelib/io.rb +7 -24
  64. data/opal/corelib/kernel.rb +23 -11
  65. data/opal/corelib/module.rb +44 -47
  66. data/opal/corelib/nil_class.rb +4 -0
  67. data/opal/corelib/numeric.rb +101 -15
  68. data/opal/corelib/range.rb +2 -0
  69. data/opal/corelib/rational.rb +3 -0
  70. data/opal/corelib/regexp.rb +36 -17
  71. data/opal/corelib/runtime.js +22 -7
  72. data/opal/corelib/string.rb +213 -110
  73. data/opal/corelib/string/inheritance.rb +78 -0
  74. data/opal/corelib/struct.rb +8 -0
  75. data/opal/corelib/time.rb +54 -42
  76. data/opal/corelib/variables.rb +24 -0
  77. data/opal/opal.rb +5 -27
  78. data/spec/cli/compiler_spec.rb +136 -0
  79. data/spec/cli/dependency_resolver_spec.rb +40 -0
  80. data/spec/cli/lexer_spec.rb +110 -0
  81. data/spec/cli/parser/alias_spec.rb +26 -0
  82. data/spec/cli/parser/and_spec.rb +13 -0
  83. data/spec/cli/parser/attrasgn_spec.rb +28 -0
  84. data/spec/cli/parser/begin_spec.rb +42 -0
  85. data/spec/cli/parser/block_spec.rb +12 -0
  86. data/spec/cli/parser/break_spec.rb +17 -0
  87. data/spec/cli/parser/call_spec.rb +139 -0
  88. data/spec/cli/parser/class_spec.rb +35 -0
  89. data/spec/cli/parser/comments_spec.rb +11 -0
  90. data/spec/cli/parser/def_spec.rb +61 -0
  91. data/spec/cli/parser/if_spec.rb +26 -0
  92. data/spec/cli/parser/iter_spec.rb +59 -0
  93. data/spec/cli/parser/lambda_spec.rb +64 -0
  94. data/spec/cli/parser/literal_spec.rb +113 -0
  95. data/spec/cli/parser/masgn_spec.rb +37 -0
  96. data/spec/cli/parser/module_spec.rb +27 -0
  97. data/spec/cli/parser/not_spec.rb +27 -0
  98. data/spec/cli/parser/op_asgn1_spec.rb +23 -0
  99. data/spec/cli/parser/op_asgn2_spec.rb +23 -0
  100. data/spec/cli/parser/or_spec.rb +13 -0
  101. data/spec/cli/parser/return_spec.rb +17 -0
  102. data/spec/cli/parser/sclass_spec.rb +21 -0
  103. data/spec/cli/parser/string_spec.rb +269 -0
  104. data/spec/cli/parser/super_spec.rb +20 -0
  105. data/spec/cli/parser/undef_spec.rb +15 -0
  106. data/spec/cli/parser/unless_spec.rb +13 -0
  107. data/spec/cli/parser/variables_spec.rb +92 -0
  108. data/spec/cli/parser/while_spec.rb +15 -0
  109. data/spec/cli/parser/yield_spec.rb +20 -0
  110. data/spec/cli/spec_helper.rb +31 -11
  111. data/spec/opal/core/array/set_range_to_array_spec.rb +7 -0
  112. data/spec/opal/core/date_spec.rb +122 -0
  113. data/spec/opal/core/language/predefined_spec.rb +1 -1
  114. data/spec/opal/core/runtime/operator_call_spec.rb +13 -0
  115. data/spec/opal/core/runtime/truthy_spec.rb +23 -0
  116. data/spec/opal/filters/bugs/array.rb +96 -87
  117. data/spec/opal/filters/bugs/basic_object.rb +9 -0
  118. data/spec/opal/filters/bugs/class.rb +16 -0
  119. data/spec/opal/filters/bugs/enumerable.rb +54 -0
  120. data/spec/opal/filters/bugs/language.rb +37 -3
  121. data/spec/opal/filters/bugs/math.rb +93 -0
  122. data/spec/opal/filters/bugs/nil.rb +7 -0
  123. data/spec/opal/filters/bugs/numeric.rb +19 -0
  124. data/spec/opal/filters/bugs/opal.rb +12 -0
  125. data/spec/opal/filters/bugs/regexp.rb +0 -2
  126. data/spec/opal/filters/bugs/string.rb +317 -19
  127. data/spec/opal/filters/bugs/struct.rb +29 -0
  128. data/spec/opal/filters/bugs/time.rb +130 -9
  129. data/spec/opal/filters/unsupported/encoding.rb +52 -4
  130. data/spec/opal/filters/unsupported/enumerator.rb +0 -3
  131. data/spec/opal/filters/unsupported/integer_size.rb +7 -0
  132. data/spec/opal/filters/unsupported/method_added.rb +10 -0
  133. data/spec/opal/filters/unsupported/mutable_strings.rb +299 -1
  134. data/spec/opal/filters/unsupported/private_constants.rb +30 -0
  135. data/spec/opal/filters/unsupported/private_methods.rb +16 -0
  136. data/spec/opal/filters/unsupported/random.rb +4 -0
  137. data/spec/opal/filters/unsupported/tainted.rb +53 -0
  138. data/spec/opal/filters/unsupported/trusted.rb +5 -0
  139. data/spec/opal/rubyspecs +167 -234
  140. data/spec/opal/spec_helper.rb +3 -0
  141. data/spec/opal/stdlib/promise/error_spec.rb +15 -0
  142. data/spec/opal/stdlib/promise/rescue_spec.rb +35 -0
  143. data/spec/opal/stdlib/promise/then_spec.rb +54 -0
  144. data/spec/opal/stdlib/promise/trace_spec.rb +35 -0
  145. data/spec/opal/stdlib/promise/value_spec.rb +15 -0
  146. data/spec/opal/stdlib/promise/when_spec.rb +34 -0
  147. data/stdlib/base64.rb +152 -0
  148. data/stdlib/date.rb +82 -49
  149. data/{opal/corelib → stdlib}/encoding.rb +3 -1
  150. data/stdlib/erb.rb +0 -1
  151. data/stdlib/json.rb +10 -26
  152. data/stdlib/math.rb +370 -0
  153. data/stdlib/native.rb +40 -33
  154. data/stdlib/opal-parser.rb +7 -4
  155. data/stdlib/promise.rb +292 -0
  156. data/stdlib/strscan.rb +1 -1
  157. data/stdlib/template.rb +1 -3
  158. data/stdlib/time.rb +9 -0
  159. metadata +143 -204
  160. data/doc/compiler.md +0 -42
  161. data/doc/compiler_options.md +0 -5
  162. data/doc/examples/node_http_server.rb +0 -49
  163. data/doc/external_libraries.md +0 -9
  164. data/doc/generated_javascript.md +0 -272
  165. data/doc/home.md +0 -17
  166. data/doc/method_missing.md +0 -58
  167. data/doc/static_applications.md +0 -60
  168. data/doc/using_ruby_from_javascript.md +0 -18
  169. data/doc/using_sprockets.md +0 -65
  170. data/spec/opal/core/numeric/abs_spec.rb +0 -12
  171. data/spec/opal/core/numeric/downto_spec.rb +0 -19
  172. data/spec/opal/core/numeric/equal_value_spec.rb +0 -9
  173. data/spec/opal/core/numeric/even_spec.rb +0 -21
  174. data/spec/opal/core/numeric/magnitude_spec.rb +0 -12
  175. data/spec/opal/core/numeric/odd_spec.rb +0 -21
  176. data/spec/opal/core/string/chop_spec.rb +0 -10
  177. data/spec/opal/core/string/chr_spec.rb +0 -13
  178. data/spec/opal/core/string/clone_spec.rb +0 -8
  179. data/spec/opal/core/string/comparison_spec.rb +0 -13
  180. data/spec/opal/core/string/dup_spec.rb +0 -8
  181. data/spec/opal/core/string/element_reference_spec.rb +0 -96
  182. data/spec/opal/core/string/fixtures/classes.rb +0 -49
  183. data/spec/opal/core/string/format_spec.rb +0 -9
  184. data/spec/opal/core/string/freeze_spec.rb +0 -15
  185. data/spec/opal/core/string/gsub_spec.rb +0 -31
  186. data/spec/opal/core/string/lines_spec.rb +0 -9
  187. data/spec/opal/core/string/ljust_spec.rb +0 -32
  188. data/spec/opal/core/string/lstrip_spec.rb +0 -7
  189. data/spec/opal/core/string/match_spec.rb +0 -49
  190. data/spec/opal/core/string/next_spec.rb +0 -10
  191. data/spec/opal/core/string/ord_spec.rb +0 -9
  192. data/spec/opal/core/string/partition_spec.rb +0 -10
  193. data/spec/opal/core/string/rindex_spec.rb +0 -50
  194. data/spec/opal/core/string/rjust_spec.rb +0 -32
  195. data/spec/opal/core/string/rstrip_spec.rb +0 -7
  196. data/spec/opal/core/string/scan_spec.rb +0 -66
  197. data/spec/opal/core/string/slice_spec.rb +0 -74
  198. data/spec/opal/core/string/split_spec.rb +0 -5
  199. data/spec/opal/core/string/strip_spec.rb +0 -6
  200. data/spec/opal/core/string/sub_spec.rb +0 -38
  201. data/spec/opal/core/string/succ_spec.rb +0 -10
  202. data/spec/opal/core/string/sum_spec.rb +0 -5
  203. data/spec/opal/core/string/to_f_spec.rb +0 -14
  204. data/spec/opal/core/string/to_i_spec.rb +0 -25
  205. data/spec/opal/core/string/tr_s_spec.rb +0 -31
  206. data/spec/opal/core/string/tr_spec.rb +0 -31
  207. data/spec/opal/filters/bugs/parser.rb +0 -10
  208. data/spec/opal/filters/unsupported/immutable_strings.rb +0 -24
  209. data/spec/opal/filters/unsupported/string_subclasses.rb +0 -8
  210. data/spec/opal/parser/alias_spec.rb +0 -26
  211. data/spec/opal/parser/and_spec.rb +0 -13
  212. data/spec/opal/parser/array_spec.rb +0 -22
  213. data/spec/opal/parser/attrasgn_spec.rb +0 -28
  214. data/spec/opal/parser/begin_spec.rb +0 -42
  215. data/spec/opal/parser/block_spec.rb +0 -12
  216. data/spec/opal/parser/break_spec.rb +0 -17
  217. data/spec/opal/parser/call_spec.rb +0 -131
  218. data/spec/opal/parser/class_spec.rb +0 -35
  219. data/spec/opal/parser/const_spec.rb +0 -13
  220. data/spec/opal/parser/cvar_spec.rb +0 -11
  221. data/spec/opal/parser/def_spec.rb +0 -61
  222. data/spec/opal/parser/false_spec.rb +0 -17
  223. data/spec/opal/parser/file_spec.rb +0 -7
  224. data/spec/opal/parser/gvar_spec.rb +0 -13
  225. data/spec/opal/parser/hash_spec.rb +0 -17
  226. data/spec/opal/parser/heredoc_spec.rb +0 -30
  227. data/spec/opal/parser/iasgn_spec.rb +0 -9
  228. data/spec/opal/parser/if_spec.rb +0 -26
  229. data/spec/opal/parser/int_spec.rb +0 -13
  230. data/spec/opal/parser/iter_spec.rb +0 -59
  231. data/spec/opal/parser/ivar_spec.rb +0 -9
  232. data/spec/opal/parser/lambda_spec.rb +0 -64
  233. data/spec/opal/parser/lasgn_spec.rb +0 -8
  234. data/spec/opal/parser/line_spec.rb +0 -8
  235. data/spec/opal/parser/lvar_spec.rb +0 -38
  236. data/spec/opal/parser/masgn_spec.rb +0 -37
  237. data/spec/opal/parser/module_spec.rb +0 -27
  238. data/spec/opal/parser/nil_spec.rb +0 -17
  239. data/spec/opal/parser/not_spec.rb +0 -27
  240. data/spec/opal/parser/nth_ref_spec.rb +0 -13
  241. data/spec/opal/parser/op_asgn1_spec.rb +0 -23
  242. data/spec/opal/parser/op_asgn2_spec.rb +0 -23
  243. data/spec/opal/parser/or_spec.rb +0 -13
  244. data/spec/opal/parser/parse_spec.rb +0 -66
  245. data/spec/opal/parser/regexp_spec.rb +0 -16
  246. data/spec/opal/parser/return_spec.rb +0 -17
  247. data/spec/opal/parser/sclass_spec.rb +0 -21
  248. data/spec/opal/parser/self_spec.rb +0 -17
  249. data/spec/opal/parser/str_spec.rb +0 -107
  250. data/spec/opal/parser/string_spec.rb +0 -8
  251. data/spec/opal/parser/super_spec.rb +0 -20
  252. data/spec/opal/parser/true_spec.rb +0 -17
  253. data/spec/opal/parser/undef_spec.rb +0 -15
  254. data/spec/opal/parser/unless_spec.rb +0 -13
  255. data/spec/opal/parser/while_spec.rb +0 -15
  256. data/spec/opal/parser/xstr_spec.rb +0 -116
  257. data/spec/opal/parser/yield_spec.rb +0 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8c3c4aae83ea36c7e4785f86f3ec1af7f0faa999
4
- data.tar.gz: a8373ec3672064f31eed60d47ca924d551e1371f
3
+ metadata.gz: 9f894d4150a0535a93f352701ed5b9d204b74409
4
+ data.tar.gz: 1551213eccd9d9177e3868722429c56624a40b5b
5
5
  SHA512:
6
- metadata.gz: 3fd251517ad89ef9153543b94fcfbfe05d8362461644cb92b0f423e77cbccc3d1477816bb395e8d837ce0d753c377bc65d612c17469b26889497d1f0d793219d
7
- data.tar.gz: cab981292ad0da4f0462f1933421e8bc49927783aa57c8520c3b779ef1d470e78b0f938c376f6987b5093177c7cd0c199f6197386f3e02d0f10609e6b4cbed60
6
+ metadata.gz: a14ce6ec8c51a5a64d29c0b10865daaf426c17703f978fc99f2aad2d0bb9b2562f9de495cb1d0cf2f40281305ebe3f3cd4eb4442e68b3a92bbf9d6c5b5eb3d52
7
+ data.tar.gz: b697aeeca8bfee4fcc2f70bbc6fd52df6bf140938983b114e905f3d08c01ba080756e21e331301d9713b735db090f9b5b670dee7c56d64d2f7655b55c7f238d3
@@ -1,17 +1,48 @@
1
1
  language: ruby
2
2
 
3
- rvm:
4
- - 1.8.7
5
- - 1.9.3
6
- - 2.0.0
7
- - rbx-20mode
3
+ cache: bundler
4
+
5
+ matrix:
6
+ fast_finish: true
7
+
8
+ include:
9
+ - rvm: 2.1.0
10
+ env: RUN=default
11
+
12
+ - rvm: 1.8.7
13
+ env: RUN=rspec
14
+
15
+ - rvm: 1.9.3
16
+ env: RUN=rspec
17
+
18
+ - rvm: 2.0.0
19
+ env: RUN=rspec
20
+
21
+ - rvm: rbx
22
+ env: RUN=rspec
23
+
24
+ - rvm: jruby
25
+ env: RUN=rspec
26
+
27
+ allow_failures:
28
+ - rvm: 1.8.7
29
+ - rvm: 1.9.3
30
+ - rvm: 2.0.0
31
+ - rvm: rbx
32
+ - rvm: jruby
8
33
 
9
34
  before_install:
10
35
  - git submodule update --init
11
36
 
37
+ # Fix waiting for rubygems v2.2.1 to be released and active on travis
38
+ # https://github.com/rubygems/rubygems/commit/f8e0f1d5f67cfc4e1966cc1e2db367aebf8a09e4
39
+ - gem update bundler
40
+ - bundle --version
41
+ - gem update --system 2.1.11
42
+ - gem --version
43
+
44
+ script:
45
+ - "bundle exec rake $RUN"
46
+
12
47
  notifications:
13
48
  irc: "irc.freenode.org#opal"
14
-
15
- matrix:
16
- allow_failures:
17
- - rvm: rbx-20mode
@@ -0,0 +1,349 @@
1
+ ## edge
2
+
3
+ * Fix parsing of escapes in single-strings ('foo\n'). Only ' and \
4
+ characters now get escaped in single quoted strings. Also, more escape
5
+ sequences in double-quoted strings are now supported: `\a`, `\v`, `\f`,
6
+ `\e`, `\s`, octal (`\314`), hex (`\xff`) and unicode (`\u1234`).
7
+
8
+ * Sourcemaps revamp. Lexer now tracks column and line info for ever token to
9
+ produce much more accurate sourcemaps. All method calls are now located on
10
+ the correct source line, and multi-line xstrings are now split to generate
11
+ a map line-to-line for long inline javascript parts.
12
+
13
+ * Merged sprockets support from `opal-sprockets` directly into Opal. For the
14
+ next release, the exernal `opal-sprockets` gem is no longer needed. This
15
+ commit adds `Opal::Processor`, `Opal::Server` and `Opal::Environment`.
16
+
17
+ * Introduce pre-processed if directives to hide code from Opal. Two special
18
+ constant checks now take place in the compiler. Either `RUBY_ENGINE` or
19
+ `RUBY_PLATFORM` when `== "opal"`. Both if and unless statements can pick
20
+ up these logic checks:
21
+
22
+ if RUBY_ENGINE == "opal"
23
+ # this code compiles
24
+ else
25
+ # this code never compiles
26
+ end
27
+
28
+ Unless:
29
+
30
+ unless RUBY_ENGINE == "opal"
31
+ # this code never compiles
32
+ end
33
+
34
+ This is particularly useful for avoiding `require()` statements being
35
+ picked up, which are included at compile time.
36
+
37
+ * Add special `debugger` method to compiler. Compiles down to javascript
38
+ `debugger` keyword to start in-browser debug console.
39
+
40
+ * Add missing string escapes to `read_escape` in lexer. Now most ruby escape
41
+ sequences are properly detected and handled in string parsing.
42
+
43
+ * Disable escapes inside x-strings. This means no more double escaping all
44
+ characters in x-strings and backticks. (`\n` => `\n`).
45
+
46
+ * Add `time.rb` to stdlib and moved `Time.parse()` and `Time.iso8601()`
47
+ methods there.
48
+
49
+ * `!` is now treated as a unary method call on the object. Opal now parsed
50
+ `!` as a def method name, and implements the method on `BasicObject`,
51
+ `NilClass` and `Boolean`.
52
+
53
+ * Fixed bug where true/false as object literals from javascript were not
54
+ correctly being detected as truthy/falsy respectively. This is due to the
55
+ javascript "feature" where `new Boolean(false) !== false`.
56
+
57
+ * Moved `native.rb` to stdlib. Native support must now be explicitly required
58
+ into Opal. `Native` is also now a module, instead of a top level class.
59
+ Also added `Native::Object#respond_to?`.
60
+
61
+ * Remove all core `#as_json()` methods from `json.rb`. Added them externally
62
+ to `opal-activesupport`.
63
+
64
+ * `Kernel#respond_to?` now calls `#respond_to_missing?` for compliance.
65
+
66
+ * Fix various `String` methods and add relevant rubyspecs for them. `#chars`,
67
+ `#to_f`, `#clone`, `#split`.
68
+
69
+ * Fix `Array` method compliance: `#first`, `#fetch`, `#insert`, `#delete_at`,
70
+ `#last, `#splice`, `.try_convert`.
71
+
72
+ * Fix compliance of `Kernel#extend` and ensure it calls `#extended()` hook.
73
+
74
+ * Fix bug where sometimes the wrong regexp flags would be generated in the
75
+ output javascript.
76
+
77
+ * Support parsing `__END__` constructs in ruby code, inside the lexer. The
78
+ content is gathered up by use of the parser. The special constant `DATA`
79
+ is then available inside the ruby code to read the content.
80
+
81
+ * Support single character strings (using ? prefix) with escaped characters.
82
+
83
+ * Fix lexer to detect dereferencing on local variables even when whitespace
84
+ is present (`a = 0; a [0]` parses as a deference on a).
85
+
86
+ * Fix various `Struct` methods. Fixed `#each` and `#each_pair` to return
87
+ self. Add `Struct.[]` as synonym for `Struct.new`.
88
+
89
+ * Implemented some `Enumerable` methods: `#collect_concat`, `#flat_map`,
90
+ `#reject`, `#reverse_each`, `#partition` and `#zip`.
91
+
92
+ * Support any Tilt template for `index_path` in `Opal::Server`. All index
93
+ files are now run through `Tilt` (now supports haml etc).
94
+
95
+ * Fix code generation of `op_asgn_1` calls (foo[val] += 10).
96
+
97
+ * Add `base64` to stdlib.
98
+
99
+ * Add promises implementation to stdlib.
100
+
101
+ * Add `Math` module to corelib.
102
+
103
+ * Use `//#` instead of `//@` deprecated syntax for sourceMappingURL.
104
+
105
+ * Implicitly require `erb` from stdlib when including erb templates.
106
+
107
+ * Fix `Regexp.escape` to also escape '(' character.
108
+
109
+ * Support '<' and '>' as matching pairs in string boundrys `%q<hi>`.
110
+
111
+ * `Opal::Server` no longer searches for an index file if not specified.
112
+
113
+ * Move `Math` and `Encoding` to stdlib. Can be required using
114
+ `require 'math'`, etc.
115
+
116
+ * Fix some stdlib `Date` methods.
117
+
118
+ * Fix `Regexp.escape` to properly escape \n, \t, \r, \f characters.
119
+
120
+ * Add `Regexp.quote` as an alias of `escape`.
121
+
122
+ ## 0.5.5 2013-11-25
123
+
124
+ * Fix regression: add `%i[foo bar]` style words back to lexer
125
+
126
+ * Move corelib from `opal/core` to `opal/corelib`. This stops files in
127
+ `core/` clashing with user files.
128
+
129
+ ## 0.5.4 2013-11-20
130
+
131
+ * Reverted `RUBY_VERSION` to `1.9.3`. Opal `0.6.0` will be the first release
132
+ for `2.0.0`.
133
+
134
+ ## 0.5.3 2013-11-12
135
+
136
+ * Opal now targets ruby 2.0.0
137
+
138
+ * Named function inside class body now generates with `$` prefix, e.g.
139
+ `$MyClass`. This makes it easier to wrap/bridge native functions.
140
+
141
+ * Support Array subclasses
142
+
143
+ * Various fixes to `String`, `Kernel` and other core classes
144
+
145
+ * Fix `Method#call` to use correct receiver
146
+
147
+ * Fix `Module#define_method` to call `#to_proc` on explicit argument
148
+
149
+ * Fix `super()` dispatches on class methods
150
+
151
+ * Support `yield()` calls from inside a block (inside a method)
152
+
153
+ * Cleanup string parsing inside lexer
154
+
155
+ * Cleanup parser/lexer to use `t` and `k` prefixes for all tokens
156
+
157
+ ## 0.5.2 2013-11-11
158
+
159
+ * Include native into corelib for 0.5.x
160
+
161
+ ## 0.5.1 2013-11-10
162
+
163
+ * Move all corelib under `core/` directory to prevent filename clashes with
164
+ `require`
165
+
166
+ * Move `native.rb` into stdlib - must now be explicitly required
167
+
168
+ * Implement `BasicObject#__id__`
169
+
170
+ * Cleanup and fix various `Enumerable` methods
171
+
172
+ ## 0.5.0 2013-11-03
173
+
174
+ * WIP: https://gist.github.com/elia/7747460
175
+
176
+ ## 0.4.2 2013-07-03
177
+
178
+ * Added `Kernel#rand`. (fntzr)
179
+
180
+ * Restored the `bin/opal` executable in gemspec.
181
+
182
+ * Now `.valueOf()` is used in `#to_n` of Boolean, Numeric, Regexp and String
183
+ to return the naked JavaScript value instead of a wrapping object.
184
+
185
+ * Parser now wraps or-ops in paranthesis to stop variable order from
186
+ leaking out when minified by uglify. We now have code in this
187
+ format: `(((tmp = lhs) !== false || !==nil) ? tmp : rhs)`.
188
+
189
+ ## 0.4.1 2013-06-16
190
+
191
+ * Move sprockets logic out to external opal-sprockets gem. That now
192
+ handles the compiling and loading of opal files in sprockets.
193
+
194
+ ## 0.4.0 2013-06-15
195
+
196
+ * Added fragments to parser. All parser methods now generate one or
197
+ more Fragments which store the original sexp. This allows us to
198
+ enumerate over them after parsing to map generated lines back to
199
+ original line numbers.
200
+
201
+ * Reverted `null` for `nil`. Too buggy at this time.
202
+
203
+ * Add Opal::SprocketsParser as Parser subclass for handling parsing
204
+ for sprockets environment. This subclass handles require statements
205
+ and stores them for sprockets to use.
206
+
207
+ * Add :irb option to parser to keep top level lvars stored inside
208
+ opal runtime so that an irb session can be persisted and maintain
209
+ access to local variables.
210
+
211
+ * Add Opal::Environment#use_gem() helper to add a gem to opals load
212
+ path.
213
+
214
+ * Stop pre-setting ivars to `nil`. This is no longer needed as `nil`
215
+ is now `null` or `undefined`.
216
+
217
+ * Use `null` as `nil` in opal. This allows us to send methods to
218
+ `null` and `undefined`, and both act as `nil`. This makes opal a
219
+ much better javascript citizen. **REVERTED**
220
+
221
+ * Add Enumerable#none? with specs.
222
+
223
+ * Add Opal.block_send() runtime helper for sending methods to an
224
+ object which uses a block.
225
+
226
+ * Remove \_klass variable for denoting ruby classes, and use
227
+ constructor instead. constructor is a javascript property used for
228
+ the same purpose, and this makes opal fit in as a better js citizen.
229
+
230
+ * Add Class.bridge\_class method to bridge a native constructor into an
231
+ opal class which will set it up with all methods from Object, as
232
+ well as giving it a scope and name.
233
+
234
+ * Added native #[]= and #to_h methods, for setting properties and
235
+ converting to a hash respectivaly.
236
+
237
+ * Fix bug where '::' was parsed as :colon2 instead of :colon3 when in
238
+ an args scope. Fixes #213
239
+
240
+ * Remove lots of properties added to opal classes. This makes normal
241
+ js constructors a lot closer to opal classes, making is easier to
242
+ treat js classes as opal classes.
243
+
244
+ * Merge Hash.from_native into Hash.new
245
+
246
+ ## 0.3.44 2013-05-31
247
+
248
+ * Cleanup runtime, and remove various flags and functions from opal
249
+ objects and classes (moving them to runtime methods).
250
+
251
+ * Remove some activesupport methods into external lib.
252
+
253
+ * Add/fix lots of String methods, with specs.
254
+
255
+ * Add more methods to MatchData class.
256
+
257
+ * Implement $' and $` variables.
258
+
259
+ * Opal can now call methods on all native objects, via method missing
260
+ dispatcher.
261
+
262
+ * Add Opal::Environment as custom sprockets subclass which adds all
263
+ opal load paths automatically.
264
+
265
+ ## 0.3.43 2013-05-02
266
+
267
+ * Stop inlining respond_to? inside the parser. This now fully respects
268
+ an object overriding respond_to?.
269
+
270
+ * Expose `Opal.eval()` function when parser is loaded for parsing
271
+ and running strings of ruby code.
272
+
273
+ * Add erb to corelib (as well as compiler to gem lib). ERB files with
274
+ .opalerb extension will automatically be compiled into Template
275
+ constant.
276
+
277
+ * Added some examples into examples/ dir.
278
+
279
+ * Add Opal.send() javascript function for sending methods to ruby
280
+ objects.
281
+
282
+ * Native class for wrapping and interacting with native objects and
283
+ function calls.
284
+
285
+ * Add local_storage to stdlib as a basic wrapper around localStorage.
286
+
287
+ * Make method_missing more performant by reusing same dispatch function
288
+ instead of reallocating one for each run.
289
+
290
+ * Fix Kernel#format to work in firefox. String.prototype.replace() had
291
+ different semantics for empty matching groups which was breaking
292
+ Kernel#format.
293
+
294
+ ## 0.3.42 2013-03-21
295
+
296
+ * Fix/add lots of language specs.
297
+
298
+ * Seperate sprockets support out to opal-sprockets gem.
299
+
300
+ * Support %r[foo] style regexps.
301
+
302
+ * Use mspec to run specs on corelib and runtime. Rubyspecs are now
303
+ used, where possible to be as compliant as possible.
304
+
305
+ ## 0.3.41 2013-02-26
306
+
307
+ * Remove bin/opal - no longer required for building sources.
308
+
309
+ * Depreceate Opal::Environment. The Opal::Server class provides a better
310
+ method of using the opal load paths. Opal.paths still stores a list of
311
+ load paths for generic sprockets based apps to use.
312
+
313
+ ## 0.3.40 2013-02-23
314
+
315
+ * Add Opal::Server as an easy to configure rack server for testing and
316
+ running Opal based apps.
317
+
318
+ * Added optional arity check mode for parser. When turned on, every method
319
+ will have code which checks the argument arity. Off by default.
320
+
321
+ * Exception subclasses now relfect their name in webkit/firefox debuggers
322
+ to show both their class name and message.
323
+
324
+ * Add Class#const_set. Trying to access undefined constants by a literal
325
+ constant will now also raise a NameError.
326
+
327
+ ## 0.3.39 2013-02-20
328
+
329
+ * Fix bug where methods defined on a parent class after subclass was defined
330
+ would not given subclass access to method. Subclasses are now also tracked
331
+ by superclass, by a private '_inherited' property.
332
+
333
+ * Fix bug where classes defined by `Class.new` did not have a constant scope.
334
+
335
+ * Move Date out of opal.rb loading, as it is part of stdlib not corelib.
336
+
337
+ * Fix for defining methods inside metaclass, or singleton_class scopes.
338
+
339
+ ## 0.3.38 2013-02-13
340
+
341
+ * Add Native module used for wrapping objects to forward calls as native
342
+ calls.
343
+
344
+ * Support method_missing for all objects. Feature can be enabled/disabled on
345
+ Opal::Processor.
346
+
347
+ * Hash can now use any ruby object as a key.
348
+
349
+ * Move to Sprockets based building via `Opal::Processor`.
data/Gemfile CHANGED
@@ -3,15 +3,14 @@ gemspec
3
3
 
4
4
  # Stick with older racc until
5
5
  # https://github.com/tenderlove/racc/issues/32
6
- # is solved.
7
- gem 'racc', '< 1.4.10' if RUBY_VERSION.to_f < 1.9
8
-
9
- platform :rbx do
10
- gem 'rubysl'
11
- gem 'rubysl-openssl'
12
- end
6
+ # and
7
+ # https://github.com/tenderlove/racc/issues/22
8
+ # are solved.
9
+ gem 'racc', '< 1.4.10' if RUBY_VERSION.to_f < 1.9 or RUBY_ENGINE == 'jruby'
10
+ gem 'json', '< 1.8.1' if RUBY_VERSION.to_f == 2.1 and RUBY_ENGINE == 'ruby'
11
+ gem 'rubysl', :platform => :rbx
13
12
 
14
13
  group :repl do
15
- gem 'therubyracer', :require => 'v8', :platform => :mri
14
+ gem 'therubyracer', :platform => :mri, :require => 'v8'
16
15
  gem 'therubyrhino', :platform => :jruby
17
16
  end
data/README.md CHANGED
@@ -8,7 +8,10 @@ Opal is a ruby to javascript source-to-source compiler. It also has an
8
8
  implementation of the ruby corelib.
9
9
 
10
10
  Opal is [hosted on github](http://github.com/opal/opal), and there
11
- is a Freenode IRC channel at [#opal](http://webchat.freenode.net/?channels=opal). There is also a [google group for opal](http://groups.google.com/forum/#!forum/opalrb).
11
+ is a Freenode IRC channel at [#opal](http://webchat.freenode.net/?channels=opal),
12
+ ask questions on [stackoverflow#opalrb](http://stackoverflow.com/questions/ask?tags=opalrb).
13
+
14
+
12
15
 
13
16
  ## Usage
14
17
 
@@ -92,9 +95,28 @@ StringScanner, Date, etc.
92
95
 
93
96
  ### spec
94
97
 
95
- * **rubyspec** contains rubyspecs that apply to opal (core + language)
96
98
  * **opal** opal additions/special behaviour in the runtime/corelib
97
- * **parser** specs for opal lib (parser, lexer, grammar etc)
99
+ * **cli** specs for opal lib (parser, lexer, grammar, compiler etc)
100
+
101
+ ## Browser support
102
+
103
+ * Internet Explorer 6+
104
+ * Firefox (Current - 1) or Current
105
+ * Chrome (Current - 1) or Current
106
+ * Safari 5.1+
107
+ * Opera 12.1x or (Current - 1) or Current
108
+
109
+ Any problem above browsers should be considered and reported as a bug.
110
+
111
+ (Current - 1) or Current denotes that we support the current stable version of
112
+ the browser and the version that preceded it. For example, if the current
113
+ version of a browser is 24.x, we support the 24.x and 23.x versions.
114
+
115
+ 12.1x or (Current - 1) or Current denotes that we support Opera 12.1x as well
116
+ as last 2 versions of Opera. For example, if the current Opera version is 20.x,
117
+ we support Opera 12.1x, 19.x and 20.x but not Opera 15.x through 18.x.
118
+
119
+ Cross-browser testing sponsored by [BrowserStack](http://browserstack.com).
98
120
 
99
121
  ## License
100
122