Jesper Rønn-Jensen
2006-Sep-30 21:12 UTC
Fwd: Inconsistency between date_select and datetime_select (patch proposal)
[sorry for posting this twice, but i can't see the first post on the
list...]
Help needed:
I'm working on a patch to datetime_select that covers two inconsistencies
compared to date_select:
* should support :order
* should support :discard_year
I have basically copied and worked with code from date_select and copied the
relevant down to datetime_select. But in my opinion, it's not as beautiful
as it could be. So, I'm posting here to get more eyes on it before
submitting as a patch.
Any feedback appreciated.
Background on why we should eliminate these inconsitencies in rails core:
http://groups.google.com/group/rubyonrails-core/browse_frm/thread/346cda3cd39e6fa9
/Jesper
File: actionpack/lib/helpers/date_helper.rb:310 (trunk version 5212)
=========changed from:================= def to_datetime_select_tag(options
= {})
defaults = { :discard_type => true }
options = defaults.merge(options)
options_with_prefix = Proc.new { |position|
options.merge(:prefix =>
"#{@object_name}[#{@method_name}(#{position}i)]") }
value = value(object)
datetime = options[:include_blank] ? (value || nil) : (value ||
Time.now)
datetime_select = select_year(datetime,
options_with_prefix.call(1))
datetime_select << select_month(datetime,
options_with_prefix.call(2)) unless options[:discard_month]
datetime_select << select_day(datetime,
options_with_prefix.call(3))
unless options[:discard_day] || options[:discard_month]
datetime_select << ' — ' + select_hour(datetime,
options_with_prefix.call(4)) unless options[:discard_hour]
datetime_select << ' : ' + select_minute(datetime,
options_with_prefix.call(5)) unless options[:discard_minute] ||
options[:discard_hour]
datetime_select
end
end
=========suggest changed to:======== def to_datetime_select_tag(options =
{})
defaults = { :discard_type => true }
options = defaults.merge(options)
options_with_prefix = Proc.new { |position|
options.merge(:prefix =>
"#{@object_name}[#{@method_name}(#{position}i)]") }
datetime = options[:include_blank] ? (value || nil) : (value ||
Time.now)
datetime_select = ''
options[:order] ||= [:year, :month, :day]
position = {:year => 1, :month => 2, :day => 3}
discard = {}
discard[:year] = true if options[:discard_year]
discard[:month] = true if options[:discard_month]
discard[:day] = true if options[:discard_day] or
options[:discard_month]
options[:order].each do |param|
datetime_select << self.send("select_#{param}",
datetime,
options_with_prefix.call(position[param])) unless discard[param]
end
datetime_select << " — " +
select_hour(datetime,
options_with_prefix.call(4)) unless options[:discard_hour]
datetime_select << " : " + select_minute(datetime,
options_with_prefix.call(5)) unless options[:discard_minute] ||
options[:discard_hour]
datetime_select
end
end
--
--
Jesper Rønn-Jensen
http://justaddwater.dk/ (weblog)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Core" group.
To post to this group, send email to rubyonrails-core@googlegroups.com
To unsubscribe from this group, send email to
rubyonrails-core-unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-core
-~----------~----~----~----~------~----~------~--~---