On Fri, 18 Apr 2008 15:56:32 -0700, “John L. (IRONRUBY)”
[email protected] said:
Thanks for doing this work, Brian! This will give me a bunch of things to
look at around the core libs this weekend.
Thanks John! I have encountered some further issues trying to run
activerecord which I will detail in a moment, but firstly I’ve worked
out what is going on with issue (9) in my previous email:
(9) Problem with
activesupport-2.0.2\lib\active_support\core_ext\array\conversions.rb
unknown: Cannot cast from ‘Microsoft.Scripting.SymbolId’ to
‘Ruby.Builtins.Proc’
(ArgumentError)This is the offending piece of code in conversions.rb:
def to_param map(&:to_param).join '/' end
The & operator should call to_proc on the object, but IronRuby is
currently not doing so - I have filed a bug report on RubyForge.
Symbol.to_proc is defined in activesupport in order to support the above
piece of syntactic sugar. “&:some_symbol” is simply shorthand for
“Proc.new { |a| a.some_symbol }”, so as a temporary workaround, any such
occurrences in activesupport can be replaced with the latter expression.
Here are some new issues that I have encountered with
activesupport/activerecord:
(1) Missing library stringio
- As a workaround, I copied the pure Ruby implementation from YAML
(this should be in C:\ruby\lib\ruby\1.8\yaml\stringio.rb in the MRI
distribution).
(2) Problem with active_support/core_ext/logger.rb
:0:in define_around_helper': wrong number or type of arguments for module_eval’ (ArgumentError)
- There is currently no implementation of module_eval that accepts a
string parameter. As a workaround, I rewrote logger.rb so that it
passes a block to module_eval (see attached logger.rb). John has
mentioned that the eval methods should be coming soon, which would
be very helpful indeed…
(3) Problem with active_support/core_ext/module/attr_internal
:0:in main': undefined local variable or method attr_internal_naming_format=’
for Module:Class (NoMethodError)
- The same problem as (2): activesupport defines a method
mattr_accessor which calls module_eval with a string parameter. As a
workaround, I manually defined the accessor
attr_internal_naming_format in attr_internal.rb (see attachment)
(4) Missing method Regexp.quote
- active_support\core_ext\pathname.rb requires the Ruby library
pathname, which in turn calls Regexp.quote. - Workaround: commented out “require ‘pathname’”
(5) Problem with active_support/core_ext/string/iterators.rb
-
Logical operators in method arguments won’t parse - the following
line is the culprit:
loop { yield(scanner.scan(char) || break) } -
I have filed a bug report in RubyForge. Wayne K. has confirmed
that this is a parser bug (incorrect grammar) - see
http://rubyforge.org/tracker/index.php?func=detail&aid=19672&group_id=4359&atid=16798 -
As a workaround, I rewrote the above line as:
loop do s = scanner.scan(char) if !s break end yield(s) end -
We are also missing library ‘strscan.so’ - but StringScanner is
built into IronRuby, so as a workaround, I changed the first line to:
require ‘strscan’ unless defined?(StringScanner)
More activesupport/activerecord observations should be coming soon. I
will add them to Wayne’s TowardsRails Wiki page at some point.
-Brian