[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Fwd: Please Forward: Ruby Quiz Submission

James Gray

11/12/2006 5:09:00 PM

Begin forwarded message:

> From: "Dan Weinand" <dweinand@gmail.com>
> Date: November 11, 2006 7:17:59 PM CST
> To: submission@rubyquiz.com
> Subject: Please Forward: Ruby Quiz Submission
>
> Here is my submission for the VCR Manager. It should pass all of the
> provided unit tests.
>
> -- Dan Weinand
>
> ---
> program_manager.rb
> ---
>
> class ProgramManager
> # Query to determine if we should be recording at any particular
> # moment. It can be assumed that the VCR will query the program
> # manager at most twice per minute, and with always increasing
> minutes.
> # New programs may be added between two calls to #record?.
> #
> # This method must return either a +nil+, indicating to stop
> recording,
> # or don't start, or an +Integer+, which is the channel number we
> should
> # be recording.
> def record?(time)
> secs = convert_to_secs(time)
> specific_programs = @programs.select {|p| p.specific? &&
> p.starts_at <= time && p.ends_at >= time}
> weekly_programs = @programs.select {|p| p.weekly? && p.starts_at
> <= secs && p.ends_at >= secs && p.days.include?(time.strftime("%a")) }
> if !specific_programs.empty?
> specific_programs.last.channel
> elsif !weekly_programs.empty?
> weekly_programs.last.channel
> end
> end
>
> # Adds a new Program to the list of programs to record.
> def add(program_details)
> @programs ||= []
> program = Program.new
> program.starts_at = program_details[:start].is_a?(Time) ?
> program_details[:start] : program_details[:start].to_i
> program.ends_at = program_details[:end].is_a?(Time) ?
> program_details[:end] : program_details[:end].to_i
> program.channel = program_details[:channel].to_i
> program.days = program_details[:days] ?
> program_details[:days].collect {|d| d.capitalize} : []
> @programs << program
> end
>
> protected
>
> # Converts a time object to the number of seconds since midnight
> def convert_to_secs(time)
> ((time.hour*60)*60) + (time.min*60) + time.sec
> end
> end
>
> ---
> program.rb
> ---
>
> class Program
> attr_accessor :starts_at, :ends_at, :channel, :days
>
> # Specific programs use Time objects representing a specific date
> def specific?
> starts_at.is_a?(Time) && ends_at.is_a?(Time)
> end
>
> # Weekly programs use Fixnum objects representing the number of
> seconds from midnight
> def weekly?
> starts_at.is_a?(Fixnum) && ends_at.is_a?(Fixnum)
> end
> end
>
> ---