                          
                          JRuby for Max changelog

******************************************************************************
* Version 1.0.2                                                              *
******************************************************************************

* Upgrade JRuby to version 1.7.4

* Added Ruby Gem manager patcher, for installing, updating, and deleting gems.


******************************************************************************
* Version 1.0.1                                                              *
******************************************************************************

* Upgrade JRuby to version 1.6.7.2

* Fixed a bug in JRubyForMax::LiveAPI::LiveObject that preventing receiving
  data from the Max patcher.

******************************************************************************
* Version 1.0 (since this project was forked from "ajm objects")             *
******************************************************************************

* Ruby 1.9 is now the default interpreter mode (use @ruby_version 1.8 to change back to 1.8 if needed)

* Upgraded JRuby to version 1.6.4

* .rb extension is now optional for @file

* A jruby.error_window patch has been provided to make it easy to display errors.
  This is especially useful in Max for Live where the Max window is often not visible.

* Ruby evaluation is automatically deferred until the object has initialized, so you don't have
  to put a [deferlow] object after your [loadbang]s anymore

* $0 and __FILE__ are now the absolute path to the @file, so you can determine the folder containing
  the @file (with File.dirname $0)

* Current directory (Dir.pwd) is now set to the user's home directory instead of "/"

* Added info outlet support. The info outlet also sends messages indicating various status changes,
  like "fileloaded".

* @symbols_to was changed to @text_to and the behavior changed as follows:
  - @text_to conversions only applies to text input (not numbers)
  - the "string" conversion type now single-quotes the string
  - a new "interpolated" conversion type double-quotes the string

* Added a JRubyForMax::SendReceive module containing methods for sending and receiving data between
  any jruby objects in Max or Max for Live.

* Added a JRubyForMax::LiveAPI module to ease interacting with the Live API.
  The main use case so far is reading and writing MIDI clips.


******************************************************************************
* Version 0.9.2 (when the object was ajm.ruby from "ajm objects")            *
******************************************************************************

* Upgraded JRuby to version 1.5.5


******************************************************************************
* Version 0.9   (when the object was ajm.ruby from "ajm objects")            *
******************************************************************************

* Multiple inlets are now supported. This is the first argument to the object,
  and number of outlets is the second argument (it was previous the first).
  If you were using multiple outlets, you must now add a first argument for
  1 inlet. So [mxj ajm.ruby 3] becomes [mxj ajm.ruby 1 3].
  The inlet() method reports the current inlet in your Ruby script.

* Evaluation by sending ruby code messages to the object's inlet now needs to be
  prepended with the 'eval' message.
  So instead of sending [puts 'hello'] you must now send [eval puts 'hello']
  Adding a [prepend eval] before ajm.ruby's inlet is a simple way to update
  existing patches that relied on the old behavior.

* @listproc is no longer supported. Any input that is a list automatically calls
  the inlet() method. Use the 'eval' message to evaluate Ruby code.

* def list(*params) in Ruby has now been replace with def inlet(inlet_index, *params)
   There are also in0, in1, ... in9(*params) convenience methods.
   See the help patch for examples of usage.

* @evaloutlet's default value has changed from 0 to -1 (no output)
  If you rely on evaluating scripts on-the-fly from Max messages, you either
  explicit call out0 to send output to the outlet, or expliclty set @evalout 0
  (note the preferred name of @evaloutlet is @evalout)

* The @scriptfile attribute is now deprecated in favor of @file

* The @evaloutlet attribute is now deprecated in favor of @evalout

* No gems are included with ajm.ruby anymore

* ajm.ruby now provides much more useful error messages

* unlike the old list() method, the inlet() method uses a splat for it's parameters,
  so you can define this method like
    def inlet(inlet_index, param1, param2, param3)
  or
    def inlet(inlet_index, *params)
  to handle any number of parameters.
  This is true for the in0, in1, ..., in9 convenience methods too.

* The directory of the @file is added to $LOAD_PATH so you can require
  files relative to it.

* @files can be located relative to the current patch

* Double clicking a script that's running a @file will open that file
  in the associated editor (based on your OS file associations)

* A 'call' message was introduced, see the "receiving input from Max"
  section of the help patch

* A 'send' message was introduced, see the "receiving input from Max"
  section of the help patch

* the number of files installed with ajm.ruby has decreased significantly
  (we now use jruby-complete.jar instead of an unpacked ruby installation)

* __FILE__ is now set correctly when using @file to load a script

* A @ruby_version attribute was introduced to control the Ruby version on
  a per-object basis. Valid values are @ruby_version 1.9 and @ruby_version 1.8
  1.8 is the default. 1.9 support is still under development by the JRuby
  developers so it may not be completely compatible with MRI Ruby 1.9.

* Ruby symbols now have the ':' prefix when output to Max

* JRuby upgraded to version 1.5.2


******************************************************************************
* Version 0.8.8 (when the object was ajm.ruby from "ajm objects")            *
******************************************************************************

* JRuby upgraded to version 1.3.1

* Enabled Ruby 1.9 support


******************************************************************************
* Version 0.8.6 (when the object was ajm.ruby from "ajm objects")            *
******************************************************************************

* $max_object_map stores references to all ajm.ruby objects

* max_object() lookup method (see help file)

* $max_objects is an array containing all ajm.ruby objects in the current
  context

* added global variable storage system, set_global() and get_global() methods

* added convenience methods inlet_assist() and outlet_assist()

* initialization code externalized to the script file ajm_ruby_initialize.rb

* The $LOAD_PATH no longer includes all folders on Max's search path.

* properties file introduced to expose configuration options:
  - ruby.initializers: initialization code for ajm.ruby
  - ruby.loadpath: additional paths to include on the $LOAD_PATH

* Renamed some variables and methods to be follow standard Ruby naming
  convetions:
   - $MaxObject renamed to $max_object
   - setLocal() and getLocal() renamed to set_local() and get_local()
  The old names are still available for backward compatibility, but they are
  now deprecated and will be removed at some point in the future.

* Ruby symbols are converted to Max Strings without a coercion warning

* Fixed a bug outputting arrays with 3 or more levels of nesting

* JRuby upgraded to version 1.1.5


******************************************************************************
* Version 0.8.1 (when the object was ajm.ruby from "ajm objects")            *
******************************************************************************

* varargs support fixed for puts(), print(), and error()

* @scriptfile and '@evaloutlet -1' avoid unnecessary conversion to Max Atoms
  (prevents pointless "coerced to string" messages in the Max window)

* JRuby upgraded to version 1.1.2


******************************************************************************
* Version 0.8  (when the object was ajm.ruby from "ajm objects")             *
******************************************************************************

* Upgraded to JRuby 1.1.1 from JRuby 1.1 RC1
  Improved performance/memory usage and thousands of compatibility fixes.
  See http://jruby.codehaus.org/ for more info.

* Added scriptfile attribute - load a script from an external file

* The $0 variable will be set to the absolute path of the scriptfile, or nil
  if no scriptfile is being used.

* ARGV and $* can be used to access any additonal arguments to scriptfile.

* Added context attribute - supports shared evaluator context between
  any sequencer or ajm.ruby objects

* Improved message parsing behavior
  - fixed a bug parsing Max symbols containing spaces
  - the "text" message was added to better support textedit's one symbol
    output mode: [route text] should no longer be used before ajm.ruby

* Improved search path behavior
  - Ruby search path now includes any folder on Max's search path.
    The search order is:
     (1) the java/lib/ruby directory structure (standard libraries)
     (2) Max's search path (see Options -> File Preferences)
  - Any file on the search path can be loaded/required by filename instead
    of the full path.

* Gems can now be loaded. But first they must be installed via a seperate
  JRuby installation. See the NOTES section of the README for more info.

* Initialization of the ruby evaluator is deferred until the first script is
  evaluated. This speeds up loading of patches with many ruby objects, but
  there will be a slight delay when the first script evaluates.

* Added an autoinit attribute - use this to force initialization of the ruby
  evaluator when the patch loads, eating the cost of initialization up front.

* Max lists sent to the inlet of [ajm.ruby] call a list() method that takes a
  single array as an argument:  def list(array) ...
  The default implementation passes through the list. Redefine as desired.

* The list() behavior can be disabled by setting @listproc false

* Added methods out0(*params), out1, ..., out9
  as shortcuts for outlet(0, *params), etc

* When nested arrays and hashes are coerced to Strings, the String should
  be an accurate representation of the datastructure (i.e. you can pass it
  to another ajm.ruby and it should evaluate correctly).

* Unnecessary conversions to Atom types are now avoided when evaloutlet < 0

* Long values outside the 32-bit integer range (-2147483648 to 2147483647)
  are now coerced to a String when outputting to Max to avoid wraparound.
