Steven Harms
2013-Dec-09 17:44 UTC
Add variable argument length second argument to ActiveSupport pluralize(?)
In most languages that I know (English, Dutch), the plural case can be derived from the singular – modulo a few irregularities e.g. boy/boys, sheep/sheep, straat/straten, auto/auto''s, etc. In a great many other languages, however, it is not possible to know the plural without some additional datum e.g. the genitive singular form. As implemented, the arity of `pluralize` is strictly one. If it were to permit variable arguments *after* that single required argument an enterprising soul might alter the behavior of pluralize to take those additional data into consideration when performing the pluralization. What would the feeling be about changing this behavior? While the applicability of Latin to modern development is dubious, the fact that there are languages whose plurals can''t be derived from the nominative has wider applicability. If this idea were deemed to be too niche merely altering the method''s interface would allow something like ActiveSupport::CasedLanguage.pluralize(singular, *args) to implement these features for those who desire it. Let me give more specifics: in Latin, for example, there are ambiguities around some endings, particularly a noun ending in ''us''. Consider ''dominus'' and ''currus''. Simply matching a RegEx on /us$/ would give us dominus -> domini (right) but also currus -> curri (wrong). Latin students memorize dominus as: ''dominus, domini (singular genitive), masculine'' and currus as ''currus, currūs, masculine''. This is how students disambiguate the two. So, now, how to handle that in ActiveSupport? Well, hmph. It seems like we should be able to say: ''currus''.pluralize(:la) #=> ''currūs'' dominus''.pluralize(:la) #=> ''domini'' But this produces the wrong results, as mentioned above. If pluralize took a second argument of an array we might be able to do something like: ''currus''.pluralize(:la, <optional genitive>currūs) #=> ''currūs'' then: dominus''.pluralize(:la) #=> ''domini'' - WORKS ''currus''.pluralize(:la, ''currūs'') #=> ''currūs'' - WORKS This design would also allow me to support the 3rd declension of Latin verbs which are identified *by the genitive* not *by the nominative*. A list of rules based on the nominative ending will fail to catch this one arx''.pluralize(:la) #=> wtf? whereas ''arx''.pluralize(:la, ''arcis'') #=> ''arces'' - WORKS It *also* might allow a gateway to something like ''arx''.pluralize(:la, ''arcis'', :ablative) # => ''arcibus'' -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/ee3fcf41-bb19-4618-b629-a6e02c7370ba%40googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.