dvr 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/dvr/dvr_server.rb ADDED
@@ -0,0 +1,49 @@
1
+ require 'rubygems'
2
+ require 'sinatra'
3
+
4
+ before { request.path_info += '/'+ request.query_string if request.query_string && !request.query_string.empty? }
5
+
6
+ post 'api/v1/har_records' do
7
+ '{"job_id":"00c5ff51ca644e3f3de14dd5"}'
8
+ end
9
+
10
+ get '/api/v1/har_records/account_id=1' do
11
+ '{"count":1,"har_records":{"1940":{"id":"1940","source_url":null,"wait_time":null,"dns_time":null,"send_time":null,"connect_time":null,"blocked_time":null,"receive_time":null,"browser":null,"creator":null,"domain":null,"har_url":"https://s3.amazonaws.com/checkdata.rigor.com/49.harp","entry_count":null,"error_count":null,"dom_load_time":null,"page_load_time":null,"server_time":null,"page_size":null,"client_error_count":null,"server_error_count":null,"connection_error_count":null,"created_at":"2013-12-09T22:40:54Z","updated_at":"2013-12-09T22:40:54Z","started_date_time":null,"account_id":1,"check_id":1,"check_run_history_id":1,"location_id":1,"image_count":null,"javascript_count":null,"css_count":null,"html_count":null,"flash_count":null,"other_count":null,"run_record_id":null}},"results":[{"key":"har_records","id":"1940"}]}'
12
+ end
13
+
14
+ get '/api/v1/har_records/check_id=1' do
15
+ '{"count":1,"har_records":{"1941":{"id":"1941","source_url":null,"wait_time":null,"dns_time":null,"send_time":null,"connect_time":null,"blocked_time":null,"receive_time":null,"browser":null,"creator":null,"domain":null,"har_url":"https://s3.amazonaws.com/checkdata.rigor.com/50.harp","entry_count":null,"error_count":null,"dom_load_time":null,"page_load_time":null,"server_time":null,"page_size":null,"client_error_count":null,"server_error_count":null,"connection_error_count":null,"created_at":"2013-12-09T22:40:54Z","updated_at":"2013-12-09T22:40:54Z","started_date_time":null,"account_id":1,"check_id":1,"check_run_history_id":1,"location_id":1,"image_count":null,"javascript_count":null,"css_count":null,"html_count":null,"flash_count":null,"other_count":null,"run_record_id":null}},"results":[{"key":"har_records","id":"1941"}]}'
16
+ end
17
+
18
+ get '/api/v1/har_records/check_run_history_id=1' do
19
+ '{"count":1,"har_records":{"1937":{"id":"1937","source_url":null,"wait_time":null,"dns_time":null,"send_time":null,"connect_time":null,"blocked_time":null,"receive_time":null,"browser":null,"creator":null,"domain":null,"har_url":"https://s3.amazonaws.com/checkdata.rigor.com/46.harp","entry_count":null,"error_count":null,"dom_load_time":null,"page_load_time":null,"server_time":null,"page_size":null,"client_error_count":null,"server_error_count":null,"connection_error_count":null,"created_at":"2013-12-09T22:40:54Z","updated_at":"2013-12-09T22:40:54Z","started_date_time":null,"account_id":1,"check_id":1,"check_run_history_id":1,"location_id":1,"image_count":null,"javascript_count":null,"css_count":null,"html_count":null,"flash_count":null,"other_count":null,"run_record_id":null}},"results":[{"key":"har_records","id":"1937"}]}'
20
+ end
21
+
22
+ get '/api/v1/har_records/start=2013-11-11&end=2013-11-21' do
23
+ '{"count":1,"har_records":{"1936":{"id":"1936","source_url":null,"wait_time":null,"dns_time":null,"send_time":null,"connect_time":null,"blocked_time":null,"receive_time":null,"browser":null,"creator":null,"domain":null,"har_url":"https://s3.amazonaws.com/checkdata.rigor.com/45.harp","entry_count":null,"error_count":null,"dom_load_time":null,"page_load_time":null,"server_time":null,"page_size":null,"client_error_count":null,"server_error_count":null,"connection_error_count":null,"created_at":"2013-12-09T22:40:54Z","updated_at":"2013-12-09T22:40:54Z","started_date_time":null,"account_id":1,"check_id":1,"check_run_history_id":1,"location_id":1,"image_count":null,"javascript_count":null,"css_count":null,"html_count":null,"flash_count":null,"other_count":null,"run_record_id":null}},"results":[{"key":"har_records","id":"1936"}]}'
24
+ end
25
+
26
+ get '/api/v1/har_records/location_id=1' do
27
+ '{"count":1,"har_records":{"1939":{"id":"1939","source_url":null,"wait_time":null,"dns_time":null,"send_time":null,"connect_time":null,"blocked_time":null,"receive_time":null,"browser":null,"creator":null,"domain":null,"har_url":"https://s3.amazonaws.com/checkdata.rigor.com/48.harp","entry_count":null,"error_count":null,"dom_load_time":null,"page_load_time":null,"server_time":null,"page_size":null,"client_error_count":null,"server_error_count":null,"connection_error_count":null,"created_at":"2013-12-09T22:40:54Z","updated_at":"2013-12-09T22:40:54Z","started_date_time":null,"account_id":1,"check_id":1,"check_run_history_id":1,"location_id":1,"image_count":null,"javascript_count":null,"css_count":null,"html_count":null,"flash_count":null,"other_count":null,"run_record_id":null}},"results":[{"key":"har_records","id":"1939"}]}'
28
+ end
29
+
30
+ get '/api/v1/har_records' do
31
+ '{"count":1,"har_records":{"1938":{"id":"1938","source_url":null,"wait_time":null,"dns_time":null,"send_time":null,"connect_time":null,"blocked_time":null,"receive_time":null,"browser":null,"creator":null,"domain":null,"har_url":"https://s3.amazonaws.com/checkdata.rigor.com/47.harp","entry_count":null,"error_count":null,"dom_load_time":null,"page_load_time":null,"server_time":null,"page_size":null,"client_error_count":null,"server_error_count":null,"connection_error_count":null,"created_at":"2013-12-09T22:40:54Z","updated_at":"2013-12-09T22:40:54Z","started_date_time":null,"account_id":1,"check_id":1,"check_run_history_id":1,"location_id":1,"image_count":null,"javascript_count":null,"css_count":null,"html_count":null,"flash_count":null,"other_count":null,"run_record_id":null}},"results":[{"key":"har_records","id":"1938"}]}'
32
+ end
33
+
34
+ get '/api/v1/har_records/per_page=1&page=1' do
35
+ '{"count":1,"har_records":{"1935":{"id":"1935","source_url":null,"wait_time":null,"dns_time":null,"send_time":null,"connect_time":null,"blocked_time":null,"receive_time":null,"browser":null,"creator":null,"domain":null,"har_url":"https://s3.amazonaws.com/checkdata.rigor.com/44.harp","entry_count":null,"error_count":null,"dom_load_time":null,"page_load_time":null,"server_time":null,"page_size":null,"client_error_count":null,"server_error_count":null,"connection_error_count":null,"created_at":"2013-12-09T22:40:54Z","updated_at":"2013-12-09T22:40:54Z","started_date_time":null,"account_id":1,"check_id":1,"check_run_history_id":1,"location_id":1,"image_count":null,"javascript_count":null,"css_count":null,"html_count":null,"flash_count":null,"other_count":null,"run_record_id":null}},"results":[{"key":"har_records","id":"1935"}]}'
36
+ end
37
+
38
+ post 'api/v1/har_records_bulk' do
39
+ '{"job_id":"b48c6bd17724fd2324a97f4b"}'
40
+ end
41
+
42
+ delete 'api/v1/har_records_bulk/destroy_by_account_id' do
43
+ '{"job_id":"997743e056e5d75ef0a142b4"}'
44
+ end
45
+
46
+ delete 'api/v1/har_records_bulk/destroy_by_check_id' do
47
+ '{"job_id":"d29dcc8754dc997a182f15b5"}'
48
+ end
49
+
data/lib/dvr.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  require 'json'
2
+ require 'pathname'
3
+ require 'fileutils'
2
4
  require "dvr/version"
3
5
  require "dvr/configuration"
4
6
  require "dvr/episode"
@@ -27,13 +29,13 @@ module DVR
27
29
  end
28
30
 
29
31
  def download_location
30
- @download_location ||= File.join(DVR.configuration.destination, DVR.configuration.filename)
32
+ @download_location ||= File.join(DVR.configuration.full_destination, DVR.configuration.filename)
31
33
  end
32
34
 
33
35
  def prep_destination
34
36
  unless File.directory?(DVR.configuration.destination)
37
+ FileUtils.mkdir_p(DVR.configuration.destination)
35
38
  puts "Created destination directory at #{DVR.configuration.destination}"
36
- Dir.mkdir(DVR.configuration.destination)
37
39
  else
38
40
  puts "Used existing destination directory at #{DVR.configuration.destination}"
39
41
  end
data/lib/dvr/cli/app.rb CHANGED
@@ -3,21 +3,22 @@ module DVR
3
3
  class App < Thor
4
4
  namespace :dvr
5
5
 
6
- desc "record", "Record episodes from API docs and playback as a Sinatra server file"
7
- method_option :episode_location, :aliases => "-l", :desc => "The location of the JSON files to record", :required => true
6
+ desc "record FROM_DIRECTORY", "Record episodes from API docs and playback as a Sinatra server file"
8
7
  method_option :episode_format, :aliases => "-f", :desc => "The format of the provided files", :required => false
9
8
  method_option :episode_source, :aliases => "-s", :desc => "The source of the JSON files", :required => false
10
9
  method_option :destination, :aliases => "-d", :desc => "The destination for the recorded server file", :required => false
11
10
  method_option :filename, :aliases => "-n", :desc => "The name for the recorded server file", :required => false
12
- def record
11
+ method_option :auto_create_directories, :aliases => "-a", :type => :boolean, :desc => "Flag to auto create directories", :required => false
12
+ def record(episode_location)
13
13
  configure_options!
14
+ DVR.configure {|c| c.episode_location = episode_location}
14
15
  DVR.record_and_download
15
16
  end
16
17
 
17
- desc "play", "Play back recorded episodes by starting a Sinatra server"
18
- method_option :recording_location, :aliases => "-r", :desc => "The location of the recorded Sinatra file", :required => true
19
- def play
20
- configure_options!
18
+ desc "play SERVER_FILE", "Play back recorded episodes by starting a Sinatra server"
19
+ def play(file)
20
+ puts "Playing episodes from #{file}"
21
+ DVR.configure {|c| c.recording_location = file}
21
22
  DVR.play
22
23
  end
23
24
 
@@ -1,7 +1,8 @@
1
+ require 'pry'
1
2
  module DVR
2
3
 
3
4
  class Configuration
4
- attr_accessor :episode_format, :episode_location, :episode_source, :filename, :destination, :recording_location
5
+ attr_accessor :episode_format, :episode_location, :episode_source, :filename, :destination, :auto_create_directories, :destination, :recording_location
5
6
 
6
7
  def initialize
7
8
  @episode_format = :rspec_api_documentation
@@ -10,6 +11,30 @@ module DVR
10
11
  @filename = 'dvr_server.rb'
11
12
  @destination = "#{Dir.pwd}/dvr"
12
13
  @recording_location = File.join(@destination, @filename)
14
+ @auto_create_directories = true
15
+ end
16
+
17
+ def recording_location
18
+ get_real_path(@recording_location)
19
+ end
20
+
21
+ def full_destination
22
+ get_real_path(@destination)
23
+ end
24
+
25
+ protected
26
+
27
+ def get_real_path path
28
+ begin
29
+ Pathname.new(path).realpath.to_s
30
+ rescue Errno::ENOENT => e
31
+ if @auto_create_directories
32
+ DVR.prep_destination
33
+ self.destination = get_real_path(path)
34
+ else
35
+ raise InvalidConfiguration, "Invalid path #{path}. No such directory."
36
+ end
37
+ end
13
38
  end
14
39
 
15
40
  end
@@ -25,6 +50,7 @@ module DVR
25
50
 
26
51
  def configure
27
52
  yield(configuration)
53
+ @configuration
28
54
  end
29
55
 
30
56
  end
data/lib/dvr/season.rb CHANGED
@@ -18,7 +18,6 @@ module DVR
18
18
  protected
19
19
 
20
20
  def save
21
- DVR.prep_destination
22
21
  File.open(DVR.download_location, 'w') do |f|
23
22
  f.write(sinatra_file_headers)
24
23
  f.write(before_hooks)
data/lib/dvr/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dvr
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,49 @@
1
+ require 'rubygems'
2
+ require 'sinatra'
3
+
4
+ before { request.path_info += '/'+ request.query_string if request.query_string && !request.query_string.empty? }
5
+
6
+ post 'api/v1/har_records' do
7
+ '{"job_id":"00c5ff51ca644e3f3de14dd5"}'
8
+ end
9
+
10
+ get '/api/v1/har_records/account_id=1' do
11
+ '{"count":1,"har_records":{"1940":{"id":"1940","source_url":null,"wait_time":null,"dns_time":null,"send_time":null,"connect_time":null,"blocked_time":null,"receive_time":null,"browser":null,"creator":null,"domain":null,"har_url":"https://s3.amazonaws.com/checkdata.rigor.com/49.harp","entry_count":null,"error_count":null,"dom_load_time":null,"page_load_time":null,"server_time":null,"page_size":null,"client_error_count":null,"server_error_count":null,"connection_error_count":null,"created_at":"2013-12-09T22:40:54Z","updated_at":"2013-12-09T22:40:54Z","started_date_time":null,"account_id":1,"check_id":1,"check_run_history_id":1,"location_id":1,"image_count":null,"javascript_count":null,"css_count":null,"html_count":null,"flash_count":null,"other_count":null,"run_record_id":null}},"results":[{"key":"har_records","id":"1940"}]}'
12
+ end
13
+
14
+ get '/api/v1/har_records/check_id=1' do
15
+ '{"count":1,"har_records":{"1941":{"id":"1941","source_url":null,"wait_time":null,"dns_time":null,"send_time":null,"connect_time":null,"blocked_time":null,"receive_time":null,"browser":null,"creator":null,"domain":null,"har_url":"https://s3.amazonaws.com/checkdata.rigor.com/50.harp","entry_count":null,"error_count":null,"dom_load_time":null,"page_load_time":null,"server_time":null,"page_size":null,"client_error_count":null,"server_error_count":null,"connection_error_count":null,"created_at":"2013-12-09T22:40:54Z","updated_at":"2013-12-09T22:40:54Z","started_date_time":null,"account_id":1,"check_id":1,"check_run_history_id":1,"location_id":1,"image_count":null,"javascript_count":null,"css_count":null,"html_count":null,"flash_count":null,"other_count":null,"run_record_id":null}},"results":[{"key":"har_records","id":"1941"}]}'
16
+ end
17
+
18
+ get '/api/v1/har_records/check_run_history_id=1' do
19
+ '{"count":1,"har_records":{"1937":{"id":"1937","source_url":null,"wait_time":null,"dns_time":null,"send_time":null,"connect_time":null,"blocked_time":null,"receive_time":null,"browser":null,"creator":null,"domain":null,"har_url":"https://s3.amazonaws.com/checkdata.rigor.com/46.harp","entry_count":null,"error_count":null,"dom_load_time":null,"page_load_time":null,"server_time":null,"page_size":null,"client_error_count":null,"server_error_count":null,"connection_error_count":null,"created_at":"2013-12-09T22:40:54Z","updated_at":"2013-12-09T22:40:54Z","started_date_time":null,"account_id":1,"check_id":1,"check_run_history_id":1,"location_id":1,"image_count":null,"javascript_count":null,"css_count":null,"html_count":null,"flash_count":null,"other_count":null,"run_record_id":null}},"results":[{"key":"har_records","id":"1937"}]}'
20
+ end
21
+
22
+ get '/api/v1/har_records/start=2013-11-11&end=2013-11-21' do
23
+ '{"count":1,"har_records":{"1936":{"id":"1936","source_url":null,"wait_time":null,"dns_time":null,"send_time":null,"connect_time":null,"blocked_time":null,"receive_time":null,"browser":null,"creator":null,"domain":null,"har_url":"https://s3.amazonaws.com/checkdata.rigor.com/45.harp","entry_count":null,"error_count":null,"dom_load_time":null,"page_load_time":null,"server_time":null,"page_size":null,"client_error_count":null,"server_error_count":null,"connection_error_count":null,"created_at":"2013-12-09T22:40:54Z","updated_at":"2013-12-09T22:40:54Z","started_date_time":null,"account_id":1,"check_id":1,"check_run_history_id":1,"location_id":1,"image_count":null,"javascript_count":null,"css_count":null,"html_count":null,"flash_count":null,"other_count":null,"run_record_id":null}},"results":[{"key":"har_records","id":"1936"}]}'
24
+ end
25
+
26
+ get '/api/v1/har_records/location_id=1' do
27
+ '{"count":1,"har_records":{"1939":{"id":"1939","source_url":null,"wait_time":null,"dns_time":null,"send_time":null,"connect_time":null,"blocked_time":null,"receive_time":null,"browser":null,"creator":null,"domain":null,"har_url":"https://s3.amazonaws.com/checkdata.rigor.com/48.harp","entry_count":null,"error_count":null,"dom_load_time":null,"page_load_time":null,"server_time":null,"page_size":null,"client_error_count":null,"server_error_count":null,"connection_error_count":null,"created_at":"2013-12-09T22:40:54Z","updated_at":"2013-12-09T22:40:54Z","started_date_time":null,"account_id":1,"check_id":1,"check_run_history_id":1,"location_id":1,"image_count":null,"javascript_count":null,"css_count":null,"html_count":null,"flash_count":null,"other_count":null,"run_record_id":null}},"results":[{"key":"har_records","id":"1939"}]}'
28
+ end
29
+
30
+ get '/api/v1/har_records' do
31
+ '{"count":1,"har_records":{"1938":{"id":"1938","source_url":null,"wait_time":null,"dns_time":null,"send_time":null,"connect_time":null,"blocked_time":null,"receive_time":null,"browser":null,"creator":null,"domain":null,"har_url":"https://s3.amazonaws.com/checkdata.rigor.com/47.harp","entry_count":null,"error_count":null,"dom_load_time":null,"page_load_time":null,"server_time":null,"page_size":null,"client_error_count":null,"server_error_count":null,"connection_error_count":null,"created_at":"2013-12-09T22:40:54Z","updated_at":"2013-12-09T22:40:54Z","started_date_time":null,"account_id":1,"check_id":1,"check_run_history_id":1,"location_id":1,"image_count":null,"javascript_count":null,"css_count":null,"html_count":null,"flash_count":null,"other_count":null,"run_record_id":null}},"results":[{"key":"har_records","id":"1938"}]}'
32
+ end
33
+
34
+ get '/api/v1/har_records/per_page=1&page=1' do
35
+ '{"count":1,"har_records":{"1935":{"id":"1935","source_url":null,"wait_time":null,"dns_time":null,"send_time":null,"connect_time":null,"blocked_time":null,"receive_time":null,"browser":null,"creator":null,"domain":null,"har_url":"https://s3.amazonaws.com/checkdata.rigor.com/44.harp","entry_count":null,"error_count":null,"dom_load_time":null,"page_load_time":null,"server_time":null,"page_size":null,"client_error_count":null,"server_error_count":null,"connection_error_count":null,"created_at":"2013-12-09T22:40:54Z","updated_at":"2013-12-09T22:40:54Z","started_date_time":null,"account_id":1,"check_id":1,"check_run_history_id":1,"location_id":1,"image_count":null,"javascript_count":null,"css_count":null,"html_count":null,"flash_count":null,"other_count":null,"run_record_id":null}},"results":[{"key":"har_records","id":"1935"}]}'
36
+ end
37
+
38
+ post 'api/v1/har_records_bulk' do
39
+ '{"job_id":"b48c6bd17724fd2324a97f4b"}'
40
+ end
41
+
42
+ delete 'api/v1/har_records_bulk/destroy_by_account_id' do
43
+ '{"job_id":"997743e056e5d75ef0a142b4"}'
44
+ end
45
+
46
+ delete 'api/v1/har_records_bulk/destroy_by_check_id' do
47
+ '{"job_id":"d29dcc8754dc997a182f15b5"}'
48
+ end
49
+
@@ -1,26 +1,46 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe DVR::Configuration do
4
-
4
+ def test_path(path)
5
+ File.exists?(path)
6
+ end
7
+
8
+ before :all do
9
+ @tmp_path = File.expand_path('../../tmp_dvr_destination', __FILE__)
10
+ tmp_dir = Dir.mkdir(@tmp_path)
11
+ @configuration = DVR.configure do |c|
12
+ c.destination = @tmp_path
13
+ c.recording_location = @tmp_path
14
+ end
15
+ end
16
+
17
+ after :all do
18
+ Dir.rmdir(@tmp_path)
19
+ end
20
+
5
21
  describe 'default options' do
6
22
  it 'uses filesystem as the episode source' do
7
- expect(subject.episode_source).to eq(:filesystem)
23
+ expect(@configuration.episode_source).to eq(:filesystem)
8
24
  end
9
25
 
10
26
  it 'uses rspec api documentation as the episode format' do
11
- expect(subject.episode_format).to eq(:rspec_api_documentation)
27
+ expect(@configuration.episode_format).to eq(:rspec_api_documentation)
12
28
  end
13
29
 
14
30
  it 'has no default location from which to record episodes' do
15
- expect(subject.episode_location).to be_nil
31
+ expect(@configuration.episode_location).to be_nil
16
32
  end
17
33
 
18
34
  it 'has a destination directory to record to' do
19
- expect(subject.destination).to be_a(String)
35
+ expect(test_path(@configuration.destination)).to be_true
20
36
  end
21
37
 
22
38
  it 'has a server name to use for the recorded file' do
23
- expect(subject.filename).to be_a(String)
39
+ expect(@configuration.filename).to be_a(String)
40
+ end
41
+
42
+ it 'has a recording location to use for playback' do
43
+ expect(test_path(@configuration.recording_location)).to be_true
24
44
  end
25
45
  end
26
46
 
@@ -1,7 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe DVR::Season do
4
- before { DVR.configure {|c| c.destination = '/my/destination' } }
4
+ before :all do
5
+ @destination_path = File.expand_path('../../tmp_dvr_dir', __FILE__)
6
+ tmp_dir = Dir.mkdir(@destination_path)
7
+ DVR.configure {|c| c.destination = @destination_path }
8
+ end
9
+
10
+ after :all do
11
+ Dir.rmdir(@destination_path)
12
+ end
5
13
 
6
14
  let(:content) { JSON.parse(File.open(example_request_file).read) }
7
15
  let(:episode) { DVR::Episode.new(content) }
data/spec/dvr_spec.rb CHANGED
@@ -7,6 +7,20 @@ module Kernel
7
7
  end
8
8
 
9
9
  describe DVR do
10
+
11
+ before :all do
12
+ @tmp_path = File.expand_path('../../tmp_dvr_destination', __FILE__)
13
+ tmp_dir = Dir.mkdir(@tmp_path)
14
+ @configuration = DVR.configure do |c|
15
+ c.destination = @tmp_path
16
+ c.recording_location = @tmp_path
17
+ end
18
+ end
19
+
20
+ after :all do
21
+ Dir.rmdir(@tmp_path)
22
+ end
23
+
10
24
  describe '#play' do
11
25
  it 'plays back a recorded server' do
12
26
  expect(DVR.play).to eq("bundle exec ruby #{DVR.configuration.recording_location}")
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dvr
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kyle Conarro
@@ -134,6 +134,7 @@ files:
134
134
  - Rakefile
135
135
  - bin/dvr
136
136
  - dvr.gemspec
137
+ - dvr/dvr_server.rb
137
138
  - lib/dvr.rb
138
139
  - lib/dvr/cli.rb
139
140
  - lib/dvr/cli/app.rb
@@ -142,6 +143,7 @@ files:
142
143
  - lib/dvr/recorder.rb
143
144
  - lib/dvr/season.rb
144
145
  - lib/dvr/version.rb
146
+ - my_downloads/dvr_server.rb
145
147
  - spec/dvr/configuration_spec.rb
146
148
  - spec/dvr/episode_spec.rb
147
149
  - spec/dvr/recorder_spec.rb