All Versions
75
Latest Version
Avg Release Cycle
70 days
Latest Release
644 days ago

Changelog History
Page 4

  • v0.9.4 Changes

    June 20, 2016

    πŸ›  Fixed

    • πŸ— Rebuilt the gem with Rubygems 2.4.8 as building with 2.5.1+ would make the gem un-installable

    • βœ‚ Removed all symlinks from node_module directories to avoid further issues building the gem

  • v0.9.3 Changes

    June 16, 2016

    πŸ›  Fixed

    • Hash#initialize now accepts JS null as well as undefined, restoring its 0.8 behavior
  • v0.9.2 Changes

    January 09, 2016

    πŸ›  Fixed

    • πŸ— Rebuilt the gem with Ruby 2.2 as building with 2.3 would make the gem un-installable
  • v0.9.1 Changes

    January 09, 2016

    πŸ›  Fixed

    • Backport rack2 compatibility (#1260)
    • πŸ›  Fixed issue with JS nil return paths being treated as true (#1274)
    • πŸ›  Fix using more than two rescue in sequence (#1269)
  • v0.9.0 Changes

    December 20, 2015

    βž• Added

    • A console wrapper has been added to the stdlib, requiring it will make available the $console global variable.
    • βž• method_added, method_removed and method_undefined reflection now works.
    • singleton_method_added, singleton_method_removed and singleton_method_undefined reflection now works.
    • πŸ’Ž Now you can bridge a native class to a Ruby class that inherits from another Ruby class
    • πŸ’Ž Numeric semantics are now compliant with Ruby.
    • Complex has been fully implemented.
    • Rational has been fully implemented.
    • πŸ‘» Kernel#raise now properly re-raises exceptions (regardless of how many levels deep you are) and works properly if supplied a class that has an exception method.
    • πŸ‘» Exception#exception, Exception::exception, Exception#message, and Exception#to_s are fully implemented
    • πŸ‘ You can make direct JavaScript method calls on using the recv.JS.methodsyntax. Has support for method calls, final callback (as a block), property getter and setter (via #[] and #[]=), splats, JavaScript keywords (via the ::JS module) and global functions (after require "js").
    • Set#superset?, Set#subset?, and the respective proper_ variant of each are now implemented
    • NameError and NoMethodError - add #name and #args attributes
    • RegExp#match now works correctly in multiline mode with white space
    • πŸ“œ BasicObject#instance_eval now can accept a string argument (after require "opal-parser")
    • βž• Adds Nashorn (Java 8+ Javascript engine) runner bundle exec bin/opal -R nashorn -r nashorn hello.rb

    • πŸ†• Newly compliant with the Ruby Spec Suite:

      • Enumerable#chunk
      • Enumerable#each_cons
      • Enumerable#minmax
      • Range#to_a (#1246)
      • Module comparison methods: #< #<= #<=> #> #>=
      • OpenStruct#method_missing
      • OpenStruct#inspect
      • OpenStruct#to_s
      • OpenStruct#delete_field

    πŸ”„ Changed

    • πŸ“‡ Renamed:
      • Hash.keys => Hash.$$keys
      • Hash.map => Hash.$$map
      • Hash.smap => Hash.$$smap
    • πŸ‘€ Kernel#pp no longer forwards arguments directly to console.log, this behavior has been replaced by stdlib's own console.rb (see above).
    • Opal::Sprockets.javascript_include_tag has been added to allow easy debug mode (i.e. with source maps) when including a sprockets asset into an HTML page.

    πŸ—„ Deprecated

    • Opal::Processor.load_asset_code(sprockets, name) has been deprecated in favor of Opal::Sprockets.load_asset(name, sprockets).

    πŸ›  Fixed

    • πŸ›  Fixed usage of JavaScript keywords as instance variable names for:
      • Kernel#instance_variable_set
      • Kernel#instance_variable_get
      • Kernel#instance_variables
    • Struct#hash now works properly based on struct contents
    • No longer crashes when calling a method with an opt arg followed by an optional kwarg when called without the kwarg
    • Operator methods (e.g. +, <, etc.) can be handled by method_missing
    • πŸ›  Fix issue where passing a block after a parameter and a hash was causing block to not be passed (e.g. method1 some_param, 'a' => 1, &block)
    • Method defs issued inside Module#instance_eval and Class#instance_eval, and the respective exec now create class methods
    • πŸ‘ Now with enabled arity checks calling a method with more arguments than those supported by its signature raises an ArgumentError as well.
    • Previously arity checks would raise an error without clearing the block for a method, that could lead to strange bugs in case the error was rescued.
    • Regexp#=== returns false when the right hand side of the expression cannot be coereced to a string (instead of throwing a TypeError)
    • ⚑️ Regexp#options has been optimized and correctly returns 0 when called on a Regexp literal without any options (e.g. //)
    • πŸ›  Fix Kernel#exit to allow exit inside #at_exit
    • πŸ›  Fixed a number of syntax errors (e.g. #1224 #1225 #1227 #1231 #1233 #1226)
    • πŸ›  Fixed Native() when used with Array instances containing native objects (which weren't wrapped properly) – #1212
    • Fix Array#to_n, Hash#to_n, Struct#to_n when the object contains native objects (#1249)
    • Internal cleanup and lots of bugs!
  • v0.8.1 Changes

    October 12, 2015

    βœ‚ Removed

    • πŸ‘‰ Use official Sprockets processor cache keys API: The old cache key hack has been removed. Add Opal::Processor.cache_key and Opal::Processor.reset_cache_key! to reset it as it’s cached but should change whenever Opal::Config changes.

    πŸ›  Fixed

    • πŸ›  Fix an issue for which a Pathname was passed instead of a String to Sprockets.
  • v0.8.0 Changes

    July 16, 2015

    βž• Added

    • πŸ’Ž Hash[] implementation fully compliant with rubyspec

    • πŸ†• Newly compliant with the Ruby Spec Suite:

      • Array#bsearch
      • Array#combination
      • Array#permutation
      • Array#product
      • Array#rotate!
      • Array#rotate
      • Array#sample
      • Array#to_h
      • Array#values_at
      • Array#zip
      • Enumerator#with_index
      • Kernel#===
      • Kernel#Array
      • Kernel#Float
      • Kernel#Hash
      • Kernel#Integer
      • Kernel#String
      • Kernel#format
      • Kernel#sprintf
      • MatchData#==
      • MatchData#eql?
      • MatchData#values_at
      • Module#instance_methods
      • Regexp#match
      • String#%
      • String#===
      • String#==
      • String#[]
      • String#each_line
      • String#eql?
      • String#index
      • String#inspect
      • String#lines
      • String#match
      • String#next
      • String#oct
      • String#scan
      • String#slice
      • String#split
      • String#succ
      • String#to_i
      • String#try_convert

    πŸ”„ Changed

    • ⚑️ Updated to Sprockets v3.0.
    • 0️⃣ Enable operator inlining by default in the compiler.

    βœ‚ Removed

    • βœ‚ Removed minitest from stdlib. It's not part of MRI and it never belonged there, checkout the opal-minitest gem instead.

    πŸ›  Fixed

    • Delegate dependency management directly to Sprockets (when used) making sourcemaps swift again. This means code generated by sprockets will always need to be bootstrapped via Opal.load or Opal.require. Luckily Opal::Processor.load_asset_code(sprockets, name) does just that in the right way.
    • πŸ›  Fix Promise#always.
    • πŸ›  Fix String#split when no match is found and a limit is provided
    • πŸ›  Fix require_tree(".") when used from file at the root of the assets paths
    • πŸ“œ Parser: Allow trailing comma in paren arglists, after normal args as well as assoc args.
    • πŸ“œ Parser: Fix parsing of parens following divide operator without a space.
    • πŸ“œ Parser: Fix bug where keyword arguments could not be parsed if method definition did not have parens around arguments.
    • Module#const_get now accepts a scoped constant name
    • Regexp#=== sets global match data vars
  • v0.7.2 Changes

    April 23, 2015
    • βœ‚ Remove Sprockets 3.0 support (focus moved to upcoming 0.8)
    • πŸ›  Fix version number consistency.
  • v0.7.1 Changes

    February 13, 2015
    • CLI options -d and -v now set respectively $DEBUG and $VERBOSE
    • πŸ›  Fixed a bug that would make the -v CLI option wait for STDIN input
    • βž• Add the -E / --no-exit CLI option to skip implicit Kernel#exit call
    • Now the CLI implicitly calls Kernel#exit at the end of the script, thus making at_exit blocks be respected.
  • v0.7.0 Changes

    February 01, 2015
    • Stop keyword-arg variable names leaking to global javascript scope

    • πŸ’Ž Class#native_class now also exposes MyClass.new (Ruby) as Opal.global.MyClass.new() (JS)

    • βž• Add CRuby (MRI) tests harness to start checking Opal against them too.

    • βž• Add Minitest to the stdlib.

    • βž• Add Date#<=> with specs.

    • πŸ— Show extended info and context upon parsing, compiling and building errors.

    • πŸ‘Œ Support keyword arguments in method calls and definitions.

    • πŸ›  Fix begin/rescue blocks to evaluate to last expression.

    • πŸ’Ž Add support for RUBY_ENGINE/RUBY_PLATFORM != "opal" pre-processor directives.

      if RUBY_ENGINE != "opal"
        # this code never compiles
      end
      
    • πŸ›  Fix donating methods defined in modules. This ensures that if a class includes more than one module, then the methods defined on the class respect the order in which the modules are included.

    • πŸ‘Œ Improved support for recursive Hash for both #inspect and #hash.

    • ⚑️ Optimized Hash implementation for String and Symbol, they have a separate hash-table in which they're used as both keys and hashes.

    • βž• Added real #hash / eql? support, previously was relying on .toString().

    • String#to_proc now uses __send__ instead of send for calling methods on receivers.

    • πŸ—„ Deprecated Opal::Sprockets::Environment. It can easily be replaced by Opal::Server or by appending Opal.paths to a Sprockets::Environment:

      Sprockets::Environment.new.tap { |e| Opal.paths.each {|p| e.append_path(p)} }
      
    • βž• Add Set methods #classify, #collect!, #map!, #subtract #replace, #difference and #eql?

    • πŸ‘Œ Support module_function without args to toggle module functions.

    • πŸ›  Fix bug where command calls with no space and sym arg were incorrectly parsed.

    • βž• Add some StringScanner methods.

    • βž• Add Date#<< and Date#>> implementations.

    • πŸ‘Œ Support nested directories using require_tree directive.

    • πŸ›  Fix bug where Exception subclasses could not have methods defined on them.

    • πŸ›  Fix symbols with interpolations :"#{foo}"

    • πŸ‘ Implement $1..N matchers and rewrite support for $~, $', $& and $`.

    • Implement Regexp.last_match.

    • πŸ›  Fixed -@ unary op. precedence with a numeric and followed by a method call (e.g. -1.foo was parsed as -(1.foo))

    • require_relative (with strings) is now preprocessed, expanded and added to Compiler#requires

    • Rewritten the require system to respect requires position (previously all the requires were stacked up at the top of the file)

    • Implement for-loop syntax

    • βž• Add Array#|

    • πŸ›  Fix Range.new to raise ArgumentError on contructor values that cannot be compared

    • πŸ›  Fix compiler bug where Contiguous strings were not getting concatenated.

    • Cleanup generated code for constant access. All constant lookups now go through $scope.get('CONST_NAME') to produce cleaner code and a unified place for const missing dispatch.

    • βœ‚ Remove const_missing option from compiler. All constant lookups are now strict.

    • βž• Add initial support for Module#autoload.

    • πŸ›  Fix Enumerator#with_index, Numeric#round.