# Re: VCR Program Manager (#101)

**URL:** <https://www.ruby-forum.com/t/re-vcr-program-manager-101/75751>\
**Category:** Ruby\
**Created:** [November 13, 2006, 4:15am UTC](https://www.ruby-forum.com/t/re-vcr-program-manager-101/75751 "2006-11-13T04:15:52Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![gordon321](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/d2c977/32.png) [@gordon321](https://www.ruby-forum.com/u/gordon321)\
**Post date:** [November 13, 2006, 4:15am UTC](https://www.ruby-forum.com/t/re-vcr-program-manager-101/75751/1 "2006-11-13T04:15:52Z")

</div>

Here is my solution. I used runt for handling scheduling. The most  
recently added program wins in a conflict.

require ‘runt’

class Time

include Runt::DPrecision

attr\_accessor :date\_precision

def date\_precision  
return @date\_precision unless @date\_precision.nil?  
return Runt::DPrecision::DEFAULT  
end  
end

class ProgramManager \< Runt::Schedule  
include Runt

alias\_method :orig\_init, :initialize

def initialize  
@count = 0  
orig\_init  
end

def record?(time)  
result = []  
@elems.each{|k, elem| elem.each{ |e| result \<\< k if e.include?(k,  
time) } }  
result.sort{|x,y| y.last \<=\> x.last }.first.first unless  
result.empty?  
end

alias\_method :create, :add

def add(program)  
@count +=1  
if program[:days]  
event = recurring program  
else  
event = one\_time program  
end  
create([program[:channel], @count], event)  
end

private

def recurring(program)  
days = program[:days].map{|d|  
DIWeek.new(Runt.const\_get(d.capitalize))}.inject{|v, d| v | d }  
time = REDay.new \*(convert\_time(program[:start]) +  
convert\_time(program[:end]) )  
days & time  
end

def one\_time(program)  
program[:start]…program[:end]  
end

def convert\_time(sec)  
t = Time.local(2000) + sec  
[t.hour, t.min]  
end

end
