Re: [MacRuby-devel] Who wants to install gems anyways?! Introducing MicroGem

2009-02-11 Thread Manfred Stienstra


On Feb 10, 2009, at 12:11 AM, Rich Morin wrote:


I don't care what magic characters are allowed.


You mean Unicode Plane 17 - Supplementary Magical-purpose Plane, the  
one with the Unicorns and Djinns?


___
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel


[MacRuby-devel] Help with bug from Cucumber codebase

2009-02-11 Thread M. Scott Ford

Hello,

I have been trying to get cucumber working with MacRuby, and I have  
run into a bug. I have tracked the source of it down to a block of  
code in cucumber's code base[BLOCK 1]. I have condensed this down to a  
much smaller example[BLOCK 2]. In ruby 1.9.1 the second block results  
in 'yellow,bold', but in macruby the second block results in nil.


My guess is that there is a bug in the merge implementation or the  
constructor implementation. I am not familiar enough with ruby to know  
which, so I will take a look at both. I feel this should be added as a  
test case, but I am not sure where to put that, since I am new to the  
project. Any tips?


-Scott

- BLOCK 1 --
  ALIASES = Hash.new do |h,k|
if k.to_s =~ /(.*)_param/
  h[$1] + ',bold'
end
  end.merge({
'missing' => 'yellow',
'pending' => 'yellow',
'failed'  => 'red',
'passed'  => 'green',
'outline' => 'cyan',
'skipped' => 'cyan',
'comment' => 'grey',
'tag' => 'blue'
  })

  if ENV['CUCUMBER_COLORS'] # Example: export  
CUCUMBER_COLORS="passed=red:failed=yellow"

ENV['CUCUMBER_COLORS'].split(':').each do |pair|
  a = pair.split('=')
  ALIASES[a[0]] = a[1]
end
  end

  ALIASES.each do |method, color|
unless method =~ /.*_param/
  code = <<-EOF
  def #{method}(string=nil, &proc)
#{ALIASES[method].split(",").join("(") + "(string, &proc"  
+ ")" * ALIASES[method].split(",").length}

  end
  # This resets the colour to the non-param colour
  def #{method}_param(string=nil, &proc)
#{ALIASES[method+'_param'].split(",").join("(") +  
"(string, &proc" + ")" * ALIASES[method+'_param'].split(",").length} +  
#{ALIASES[method].split(",").join(' + ')}

  end
  EOF
  eval(code)
end
  end
-- END BLOCK 1 --

--- BLOCK 2 --

ALIASES = Hash.new do |h,k|
  if k.to_s =~ /(.*)_param/
h[$1] + ',bold'
  end
end.merge({
  'missing' => 'yellow'
})

puts ALIASES['missing_param']

- END BLOCK 2 -
___
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel


Re: [MacRuby-devel] Help with bug from Cucumber codebase

2009-02-11 Thread M. Scott Ford
Sorry to reply to my own post but I have been playing with this all  
day to figure out what is wrong. I have narrowed the problem down to  
the merge method, but I am not sure how to fix it. Here are some test  
cases. These all pass in ruby 1.9.1. The first one fails in MacRuby  
trunk, but the other two pass.


h = Hash.new do |h, k|
  12
end
h = h.merge({1 => 2})
assert_equal(h[1], 2)
assert_equal(h[:random], 12)

h = Hash.new do |h, k|
  12
end
h.merge!({1 => 2})
assert_equal(h[1], 2)
assert_equal(h[:random], 12)

h = Hash.new do |h, k|
  12
end
h.merge({1 => 2})
assert_equal(h[1], 12)
assert_equal(h[:random], 12)


On Feb 11, 2009, at 11:53 AM, M. Scott Ford wrote:


Hello,

I have been trying to get cucumber working with MacRuby, and I have  
run into a bug. I have tracked the source of it down to a block of  
code in cucumber's code base[BLOCK 1]. I have condensed this down to  
a much smaller example[BLOCK 2]. In ruby 1.9.1 the second block  
results in 'yellow,bold', but in macruby the second block results in  
nil.


My guess is that there is a bug in the merge implementation or the  
constructor implementation. I am not familiar enough with ruby to  
know which, so I will take a look at both. I feel this should be  
added as a test case, but I am not sure where to put that, since I  
am new to the project. Any tips?


-Scott

- BLOCK 1 --
 ALIASES = Hash.new do |h,k|
   if k.to_s =~ /(.*)_param/
 h[$1] + ',bold'
   end
 end.merge({
   'missing' => 'yellow',
   'pending' => 'yellow',
   'failed'  => 'red',
   'passed'  => 'green',
   'outline' => 'cyan',
   'skipped' => 'cyan',
   'comment' => 'grey',
   'tag' => 'blue'
 })

 if ENV['CUCUMBER_COLORS'] # Example: export  
CUCUMBER_COLORS="passed=red:failed=yellow"

   ENV['CUCUMBER_COLORS'].split(':').each do |pair|
 a = pair.split('=')
 ALIASES[a[0]] = a[1]
   end
 end

 ALIASES.each do |method, color|
   unless method =~ /.*_param/
 code = <<-EOF
 def #{method}(string=nil, &proc)
   #{ALIASES[method].split(",").join("(") + "(string, &proc"  
+ ")" * ALIASES[method].split(",").length}

 end
 # This resets the colour to the non-param colour
 def #{method}_param(string=nil, &proc)
   #{ALIASES[method+'_param'].split(",").join("(") +  
"(string, &proc" + ")" * ALIASES[method+'_param'].split(",").length}  
+ #{ALIASES[method].split(",").join(' + ')}

 end
 EOF
 eval(code)
   end
 end
-- END BLOCK 1 --

--- BLOCK 2 --

ALIASES = Hash.new do |h,k|
 if k.to_s =~ /(.*)_param/
   h[$1] + ',bold'
 end
end.merge({
 'missing' => 'yellow'
})

puts ALIASES['missing_param']

- END BLOCK 2 -
___
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel


___
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel


Re: [MacRuby-devel] Help with bug from Cucumber codebase

2009-02-11 Thread M. Scott Ford

And the fix.

Change rb_hash_merge to use rb_obj_dup instead of rb_hash_dup.

On Feb 11, 2009, at 2:48 PM, M. Scott Ford wrote:

Sorry to reply to my own post but I have been playing with this all  
day to figure out what is wrong. I have narrowed the problem down to  
the merge method, but I am not sure how to fix it. Here are some  
test cases. These all pass in ruby 1.9.1. The first one fails in  
MacRuby trunk, but the other two pass.


h = Hash.new do |h, k|
 12
end
h = h.merge({1 => 2})
assert_equal(h[1], 2)
assert_equal(h[:random], 12)

h = Hash.new do |h, k|
 12
end
h.merge!({1 => 2})
assert_equal(h[1], 2)
assert_equal(h[:random], 12)

h = Hash.new do |h, k|
 12
end
h.merge({1 => 2})
assert_equal(h[1], 12)
assert_equal(h[:random], 12)


On Feb 11, 2009, at 11:53 AM, M. Scott Ford wrote:


Hello,

I have been trying to get cucumber working with MacRuby, and I have  
run into a bug. I have tracked the source of it down to a block of  
code in cucumber's code base[BLOCK 1]. I have condensed this down  
to a much smaller example[BLOCK 2]. In ruby 1.9.1 the second block  
results in 'yellow,bold', but in macruby the second block results  
in nil.


My guess is that there is a bug in the merge implementation or the  
constructor implementation. I am not familiar enough with ruby to  
know which, so I will take a look at both. I feel this should be  
added as a test case, but I am not sure where to put that, since I  
am new to the project. Any tips?


-Scott

- BLOCK 1 --
ALIASES = Hash.new do |h,k|
  if k.to_s =~ /(.*)_param/
h[$1] + ',bold'
  end
end.merge({
  'missing' => 'yellow',
  'pending' => 'yellow',
  'failed'  => 'red',
  'passed'  => 'green',
  'outline' => 'cyan',
  'skipped' => 'cyan',
  'comment' => 'grey',
  'tag' => 'blue'
})

if ENV['CUCUMBER_COLORS'] # Example: export  
CUCUMBER_COLORS="passed=red:failed=yellow"

  ENV['CUCUMBER_COLORS'].split(':').each do |pair|
a = pair.split('=')
ALIASES[a[0]] = a[1]
  end
end

ALIASES.each do |method, color|
  unless method =~ /.*_param/
code = <<-EOF
def #{method}(string=nil, &proc)
  #{ALIASES[method].split(",").join("(") + "(string, &proc"  
+ ")" * ALIASES[method].split(",").length}

end
# This resets the colour to the non-param colour
def #{method}_param(string=nil, &proc)
  #{ALIASES[method+'_param'].split(",").join("(") +  
"(string, &proc" + ")" * ALIASES[method 
+'_param'].split(",").length} + #{ALIASES[method].split(",").join('  
+ ')}

end
EOF
eval(code)
  end
end
-- END BLOCK 1 --

--- BLOCK 2 --

ALIASES = Hash.new do |h,k|
if k.to_s =~ /(.*)_param/
  h[$1] + ',bold'
end
end.merge({
'missing' => 'yellow'
})

puts ALIASES['missing_param']

- END BLOCK 2 -
___
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel


___
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel


___
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel


Re: [MacRuby-devel] Help with bug from Cucumber codebase

2009-02-11 Thread Laurent Sansonetti
Thanks for the detective work Scott! Could you create a test case in  
test/ruby/test_hash.rb and send us a patch? I would then merge it.


Laurent

On Feb 11, 2009, at 12:11 PM, M. Scott Ford wrote:


And the fix.

Change rb_hash_merge to use rb_obj_dup instead of rb_hash_dup.

On Feb 11, 2009, at 2:48 PM, M. Scott Ford wrote:

Sorry to reply to my own post but I have been playing with this all  
day to figure out what is wrong. I have narrowed the problem down  
to the merge method, but I am not sure how to fix it. Here are some  
test cases. These all pass in ruby 1.9.1. The first one fails in  
MacRuby trunk, but the other two pass.


h = Hash.new do |h, k|
12
end
h = h.merge({1 => 2})
assert_equal(h[1], 2)
assert_equal(h[:random], 12)

h = Hash.new do |h, k|
12
end
h.merge!({1 => 2})
assert_equal(h[1], 2)
assert_equal(h[:random], 12)

h = Hash.new do |h, k|
12
end
h.merge({1 => 2})
assert_equal(h[1], 12)
assert_equal(h[:random], 12)


On Feb 11, 2009, at 11:53 AM, M. Scott Ford wrote:


Hello,

I have been trying to get cucumber working with MacRuby, and I  
have run into a bug. I have tracked the source of it down to a  
block of code in cucumber's code base[BLOCK 1]. I have condensed  
this down to a much smaller example[BLOCK 2]. In ruby 1.9.1 the  
second block results in 'yellow,bold', but in macruby the second  
block results in nil.


My guess is that there is a bug in the merge implementation or the  
constructor implementation. I am not familiar enough with ruby to  
know which, so I will take a look at both. I feel this should be  
added as a test case, but I am not sure where to put that, since I  
am new to the project. Any tips?


-Scott

- BLOCK 1 --
   ALIASES = Hash.new do |h,k|
 if k.to_s =~ /(.*)_param/
   h[$1] + ',bold'
 end
   end.merge({
 'missing' => 'yellow',
 'pending' => 'yellow',
 'failed'  => 'red',
 'passed'  => 'green',
 'outline' => 'cyan',
 'skipped' => 'cyan',
 'comment' => 'grey',
 'tag' => 'blue'
   })

   if ENV['CUCUMBER_COLORS'] # Example: export  
CUCUMBER_COLORS="passed=red:failed=yellow"

 ENV['CUCUMBER_COLORS'].split(':').each do |pair|
   a = pair.split('=')
   ALIASES[a[0]] = a[1]
 end
   end

   ALIASES.each do |method, color|
 unless method =~ /.*_param/
   code = <<-EOF
   def #{method}(string=nil, &proc)
 #{ALIASES[method].split(",").join("(") + "(string, &proc"  
+ ")" * ALIASES[method].split(",").length}

   end
   # This resets the colour to the non-param colour
   def #{method}_param(string=nil, &proc)
 #{ALIASES[method+'_param'].split(",").join("(") +  
"(string, &proc" + ")" * ALIASES[method 
+'_param'].split(",").length} +  
#{ALIASES[method].split(",").join(' + ')}

   end
   EOF
   eval(code)
 end
   end
-- END BLOCK 1 --

--- BLOCK 2 --

ALIASES = Hash.new do |h,k|
if k.to_s =~ /(.*)_param/
 h[$1] + ',bold'
end
end.merge({
'missing' => 'yellow'
})

puts ALIASES['missing_param']

- END BLOCK 2 -
___
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel


___
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel


___
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel


___
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel