Hi Since this weeks updates to ironruby ironrubymvc is completely broken. The way overloads are selected now is different. for example asp.net mvc has a bunch of methods defined on Controller that are protected internal ie. protected internal void View(string, string) it also has an overload View(string, object) Then it selects the one with object for example in some cases also I used to be able to call that view method in a ruby subclass of Controller with view nil, ''layout'' but now I have to call that with with view '''',''layout'' for it to work for example. It doesn''t know that nil can also count as a string object. There are a bunch of other things that are breaking for example it doesn''t like protected internals as much as it used to anymore either. codeplex? --- Met vriendelijke groeten - Best regards - Salutations Ivan Porto Carrero Blog: http://flanders.co.nz Twitter: http://twitter.com/casualjim Author of IronRuby in Action (http://manning.com/carrero) -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/ironruby-core/attachments/20090606/76d39b55/attachment.html>
Just curious, but why should nil count as a string object? In C Ruby, nil is an object, and an empty string object is not nil: irb(main):001:0> n = nil => nil irb(main):002:0> s = String.new => "" irb(main):003:0> n.nil? => true irb(main):004:0> s.nil? => false irb(main):005:0> s == n => false irb(main):006:0> n.class => NilClass irb(main):007:0> s.class => String irb(main):008:0> s.eql? n => false -- Will Green http://willgreen.mp/ On Sat, Jun 6, 2009 at 9:23 AM, Ivan Porto Carrero <ivan at flanders.co.nz>wrote:> Hi > Since this weeks updates to ironruby ironrubymvc is completely broken. > > The way overloads are selected now is different. > > for example asp.net mvc has a bunch of methods defined on Controller that > are protected internal ie. protected internal void View(string, string) > it also has an overload View(string, object) > > Then it selects the one with object for example in some cases > > also I used to be able to call that view method in a ruby subclass of > Controller with view nil, ''layout'' > > but now I have to call that with with view '''',''layout'' for it to work for > example. It doesn''t know that nil can also count as a string object. > > There are a bunch of other things that are breaking for example it doesn''t > like protected internals as much as it used to anymore either. > > codeplex? > > --- > Met vriendelijke groeten - Best regards - Salutations > Ivan Porto Carrero > Blog: http://flanders.co.nz > Twitter: http://twitter.com/casualjim > Author of IronRuby in Action (http://manning.com/carrero) > > > _______________________________________________ > Ironruby-core mailing list > Ironruby-core at rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/ironruby-core/attachments/20090606/e6e40e3e/attachment.html>
In C# you can pass null to a string parameter and it won''t complain I expected this to work from ironruby too because it did before. So I want to find out if that is going to be a permanent change or if it is a bug :) so i''m not talking about an empty instance of String being nil but it''s about interop with CLR stuff --- Met vriendelijke groeten - Best regards - Salutations Ivan Porto Carrero Blog: http://flanders.co.nz Twitter: http://twitter.com/casualjim Author of IronRuby in Action (http://manning.com/carrero) On Sat, Jun 6, 2009 at 4:52 PM, Will Green <will at hotgazpacho.org> wrote:> Just curious, but why should nil count as a string object? In C Ruby, nil > is an object, and an empty string object is not nil: > > irb(main):001:0> n = nil > => nil > irb(main):002:0> s = String.new > => "" > irb(main):003:0> n.nil? > => true > irb(main):004:0> s.nil? > => false > irb(main):005:0> s == n > => false > irb(main):006:0> n.class > => NilClass > irb(main):007:0> s.class > => String > irb(main):008:0> s.eql? n > => false > > -- > Will Green > http://willgreen.mp/ > > > On Sat, Jun 6, 2009 at 9:23 AM, Ivan Porto Carrero <ivan at flanders.co.nz>wrote: > >> Hi >> Since this weeks updates to ironruby ironrubymvc is completely broken. >> >> The way overloads are selected now is different. >> >> for example asp.net mvc has a bunch of methods defined on Controller that >> are protected internal ie. protected internal void View(string, string) >> it also has an overload View(string, object) >> >> Then it selects the one with object for example in some cases >> >> also I used to be able to call that view method in a ruby subclass of >> Controller with view nil, ''layout'' >> >> but now I have to call that with with view '''',''layout'' for it to work for >> example. It doesn''t know that nil can also count as a string object. >> >> There are a bunch of other things that are breaking for example it doesn''t >> like protected internals as much as it used to anymore either. >> >> codeplex? >> >> --- >> Met vriendelijke groeten - Best regards - Salutations >> Ivan Porto Carrero >> Blog: http://flanders.co.nz >> Twitter: http://twitter.com/casualjim >> Author of IronRuby in Action (http://manning.com/carrero) >> >> >> _______________________________________________ >> Ironruby-core mailing list >> Ironruby-core at rubyforge.org >> http://rubyforge.org/mailman/listinfo/ironruby-core >> >> > > _______________________________________________ > Ironruby-core mailing list > Ironruby-core at rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/ironruby-core/attachments/20090606/a0abff1d/attachment.html>
It would be good to be more specific about the example. Consider class Foo { public void Bar(int, object); public void Bar(int, string); } If I call "Foo.new.Bar 1, nil", then this is an ambiguous call and you should be forced to specify which overload you want. In statically-typed languages, variables have types and the declared type of the variable is used to select an overload at compile time. This obviously doesn''t work for a dynamically-typed language calling into a statically-typed API, so we have to use the runtime types to select the overload. C# dynamic calls face the same issue. From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Ivan Porto Carrero Sent: Saturday, June 06, 2009 8:05 AM To: ironruby-core at rubyforge.org Subject: Re: [Ironruby-core] something has changed In C# you can pass null to a string parameter and it won''t complain I expected this to work from ironruby too because it did before. So I want to find out if that is going to be a permanent change or if it is a bug :) so i''m not talking about an empty instance of String being nil but it''s about interop with CLR stuff --- Met vriendelijke groeten - Best regards - Salutations Ivan Porto Carrero Blog: http://flanders.co.nz Twitter: http://twitter.com/casualjim Author of IronRuby in Action (http://manning.com/carrero) On Sat, Jun 6, 2009 at 4:52 PM, Will Green <will at hotgazpacho.org<mailto:will at hotgazpacho.org>> wrote: Just curious, but why should nil count as a string object? In C Ruby, nil is an object, and an empty string object is not nil: irb(main):001:0> n = nil => nil irb(main):002:0> s = String.new => "" irb(main):003:0> n.nil? => true irb(main):004:0> s.nil? => false irb(main):005:0> s == n => false irb(main):006:0> n.class => NilClass irb(main):007:0> s.class => String irb(main):008:0> s.eql? n => false -- Will Green http://willgreen.mp/ On Sat, Jun 6, 2009 at 9:23 AM, Ivan Porto Carrero <ivan at flanders.co.nz<mailto:ivan at flanders.co.nz>> wrote: Hi Since this weeks updates to ironruby ironrubymvc is completely broken. The way overloads are selected now is different. for example asp.net<http://asp.net> mvc has a bunch of methods defined on Controller that are protected internal ie. protected internal void View(string, string) it also has an overload View(string, object) Then it selects the one with object for example in some cases also I used to be able to call that view method in a ruby subclass of Controller with view nil, ''layout'' but now I have to call that with with view '''',''layout'' for it to work for example. It doesn''t know that nil can also count as a string object. There are a bunch of other things that are breaking for example it doesn''t like protected internals as much as it used to anymore either. codeplex? --- Met vriendelijke groeten - Best regards - Salutations Ivan Porto Carrero Blog: http://flanders.co.nz Twitter: http://twitter.com/casualjim Author of IronRuby in Action (http://manning.com/carrero) _______________________________________________ Ironruby-core mailing list Ironruby-core at rubyforge.org<mailto:Ironruby-core at rubyforge.org> http://rubyforge.org/mailman/listinfo/ironruby-core _______________________________________________ Ironruby-core mailing list Ironruby-core at rubyforge.org<mailto:Ironruby-core at rubyforge.org> http://rubyforge.org/mailman/listinfo/ironruby-core -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/ironruby-core/attachments/20090606/84dcdf59/attachment.html>
So the signatures I''m talking about look like this: protected internal void UpdateModel<TModel>(TModel model) where TModel : class { UpdateModel(model, null, null, null, ValueProvider); } protected internal void UpdateModel<TModel>(TModel model, string prefix) where TModel : class { UpdateModel(model, prefix, null, null, ValueProvider); } protected internal void UpdateModel<TModel>(TModel model, string[] includeProperties) where TModel : class { UpdateModel(model, null, includeProperties, null, ValueProvider); } protected internal void UpdateModel<TModel>(TModel model, string prefix, string[] includeProperties) where TModel : class { UpdateModel(model, prefix, includeProperties, null, ValueProvider); } protected internal void UpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) where TModel : class { UpdateModel(model, prefix, includeProperties, excludeProperties, ValueProvider); } protected internal void UpdateModel<TModel>(TModel model, IDictionary<string, ValueProviderResult> valueProvider) where TModel : class { UpdateModel(model, null, null, null, valueProvider); } protected internal void UpdateModel<TModel>(TModel model, string prefix, IDictionary<string, ValueProviderResult> valueProvider) where TModel : class { UpdateModel(model, prefix, null, null, valueProvider); } protected internal void UpdateModel<TModel>(TModel model, string[] includeProperties, IDictionary<string, ValueProviderResult> valueProvider) where TModel : class { UpdateModel(model, null, includeProperties, null, valueProvider); } protected internal void UpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, IDictionary<string, ValueProviderResult> valueProvider) where TModel : class { UpdateModel(model, prefix, includeProperties, null, valueProvider); } protected internal void UpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties, IDictionary<string, ValueProviderResult> valueProvider) where TModel : class { bool success = TryUpdateModel(model, prefix, includeProperties, excludeProperties, valueProvider); if (!success) { string message = String.Format(CultureInfo.CurrentUICulture, MvcResources.Controller_UpdateModel_UpdateUnsuccessful, typeof(TModel).FullName); throw new InvalidOperationException(message); } } The methods above are defined in ASP.NET MVC but with the current git build I can''t call these methods in an inheriting ruby class it will give me an error. when I work around it with: public new virtual void UpdateModel<TModel>(TModel model) where TModel : class { UpdateModel(model, null, null, null, ValueProvider); } public new virtual void UpdateModel<TModel>(TModel model, string prefix) where TModel : class { UpdateModel(model, prefix, null, null, ValueProvider); } public new virtual void UpdateModel<TModel>(TModel model, string[] includeProperties) where TModel : class { UpdateModel(model, null, includeProperties, null, ValueProvider); } public new virtual void UpdateModel<TModel>(TModel model, string prefix, string[] includeProperties) where TModel : class { UpdateModel(model, prefix, includeProperties, null, ValueProvider); } public new virtual void UpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) where TModel : class { UpdateModel(model, prefix, includeProperties, excludeProperties, ValueProvider); } public new virtual void UpdateModel<TModel>(TModel model, IDictionary<string, ValueProviderResult> valueProvider) where TModel : class { UpdateModel(model, null, null, null, valueProvider); } public new virtual void UpdateModel<TModel>(TModel model, string prefix, IDictionary<string, ValueProviderResult> valueProvider) where TModel : class { UpdateModel(model, prefix, null, null, valueProvider); } public new virtual void UpdateModel<TModel>(TModel model, string[] includeProperties, IDictionary<string, ValueProviderResult> valueProvider) where TModel : class { UpdateModel(model, null, includeProperties, null, valueProvider); } public new virtual void UpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, IDictionary<string, ValueProviderResult> valueProvider) where TModel : class { UpdateModel(model, prefix, includeProperties, null, valueProvider); } public new virtual void UpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties, IDictionary<string, ValueProviderResult> valueProvider) where TModel : class { base.UpdateModel(model, prefix, includeProperties,excludeProperties,valueProvider); } things work again in the inheriting controller def save_user(act) *self.method(:update_model).of(User).call(@user, "user")* if @user.is_valid @membership_service.save @user redirect_to_action(''index'', ''users'') else view act.to_s, :layout end end --- Met vriendelijke groeten - Best regards - Salutations Ivan Porto Carrero Blog: http://flanders.co.nz Twitter: http://twitter.com/casualjim Author of IronRuby in Action (http://manning.com/carrero) On Sat, Jun 6, 2009 at 5:15 PM, Curt Hagenlocher <curth at microsoft.com>wrote:> It would be good to be more specific about the example. > > > > Consider class Foo { > > public void Bar(int, object); > > public void Bar(int, string); > > } > > > > If I call "Foo.new.Bar 1, nil", then this is an ambiguous call and you > should be forced to specify which overload you want. > > > > In statically-typed languages, variables have types and the declared type > of the variable is used to select an overload at compile time. This > obviously doesn''t work for a dynamically-typed language calling into a > statically-typed API, so we have to use the runtime types to select the > overload. C# dynamic calls face the same issue. > > > > *From:* ironruby-core-bounces at rubyforge.org [mailto: > ironruby-core-bounces at rubyforge.org] *On Behalf Of *Ivan Porto Carrero > *Sent:* Saturday, June 06, 2009 8:05 AM > *To:* ironruby-core at rubyforge.org > *Subject:* Re: [Ironruby-core] something has changed > > > > In C# you can pass null to a string parameter and it won''t complain I > expected this to work from ironruby too because it did before. So I want to > find out if that is going to be a permanent change or if it is a bug :) > > so i''m not talking about an empty instance of String being nil but it''s > about interop with CLR stuff > > --- > Met vriendelijke groeten - Best regards - Salutations > Ivan Porto Carrero > Blog: http://flanders.co.nz > Twitter: http://twitter.com/casualjim > Author of IronRuby in Action (http://manning.com/carrero) > > > On Sat, Jun 6, 2009 at 4:52 PM, Will Green <will at hotgazpacho.org> wrote: > > Just curious, but why should nil count as a string object? In C Ruby, nil > is an object, and an empty string object is not nil: > > > > irb(main):001:0> n = nil > > => nil > > irb(main):002:0> s = String.new > > => "" > > irb(main):003:0> n.nil? > > => true > > irb(main):004:0> s.nil? > > => false > > irb(main):005:0> s == n > > => false > > irb(main):006:0> n.class > > => NilClass > > irb(main):007:0> s.class > > => String > > irb(main):008:0> s.eql? n > > => false > > > > -- > Will Green > http://willgreen.mp/ > > On Sat, Jun 6, 2009 at 9:23 AM, Ivan Porto Carrero <ivan at flanders.co.nz> > wrote: > > Hi > > > > Since this weeks updates to ironruby ironrubymvc is completely broken. > > > > The way overloads are selected now is different. > > > > for example asp.net mvc has a bunch of methods defined on Controller that > are protected internal ie. protected internal void View(string, string) > > it also has an overload View(string, object) > > > > Then it selects the one with object for example in some cases > > > > also I used to be able to call that view method in a ruby subclass of > Controller with view nil, ''layout'' > > > > but now I have to call that with with view '''',''layout'' for it to work for > example. It doesn''t know that nil can also count as a string object. > > > > There are a bunch of other things that are breaking for example it doesn''t > like protected internals as much as it used to anymore either. > > > > codeplex? > > > > --- > Met vriendelijke groeten - Best regards - Salutations > Ivan Porto Carrero > Blog: http://flanders.co.nz > Twitter: http://twitter.com/casualjim > Author of IronRuby in Action (http://manning.com/carrero) > > > > _______________________________________________ > Ironruby-core mailing list > Ironruby-core at rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core > > > > _______________________________________________ > Ironruby-core mailing list > Ironruby-core at rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core > > > > _______________________________________________ > Ironruby-core mailing list > Ironruby-core at rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/ironruby-core/attachments/20090606/4db7a3f6/attachment.html>