railscasts_download 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -8,18 +8,25 @@ Downloader use Railscasts rss feed to get list of all videos. Automatic download
8
8
 
9
9
  All railscasts including revised and pro (pro account required):
10
10
 
11
- railscasts_download --revised -l my_login@railscasts.com
11
+ railscasts_download --pro -login my_login@railscasts.com
12
12
  > Enter your password: *********
13
13
 
14
14
  custom railscasts list:
15
15
 
16
16
  railscasts_download --rss_uri /home/yourname/custom_railscasts_list.rss
17
17
 
18
+
18
19
  or simply put:
19
20
 
20
21
  railscasts_download
21
22
 
22
- to get only free railscasts.
23
+ to get all free railscasts.
24
+ You can also download only latest railscasts providing option --after.
25
+ Put:
26
+
27
+ railscasts_download --help
28
+
29
+ to get available options list.
23
30
 
24
31
  ## Installation
25
32
 
@@ -10,17 +10,23 @@ optparse = OptionParser.new do|opts|
10
10
  opts.banner = "Usage: railscasts_download [options][--revised --login LOGIN --password PASSWORD]"
11
11
 
12
12
  options[:rss_uri] = false
13
- opts.on( '-rss', '--rss_uri RSS_URI', 'Get file specified by URI as videos list source.' ) do |rss_uri|
13
+ opts.on( '-r', '--rss_uri RSS_URI', 'Get file specified by URI as videos list source.
14
+ This could be a remote url or local file system path.' ) do |rss_uri|
14
15
  options[:rss_uri] = rss_uri
15
16
  end
16
17
 
17
- options[:revised] = false
18
- opts.on( '-r', '--revised', 'Get all railscasts with revised and pro (login required).' ) do
19
- options[:revised] = true
18
+ options[:after] = false
19
+ opts.on( '-a', '--after YYYY-MM-DD', 'Get only files published after entered date.' ) do |date|
20
+ options[:after] = date
21
+ end
22
+
23
+ options[:pro] = false
24
+ opts.on( '-p', '--pro', 'Get all railscasts with revised and pro (login to pro account required).' ) do
25
+ options[:pro] = true
20
26
  end
21
27
 
22
28
  options[:login_uri] = false
23
- opts.on( '-luri', '--login_uri LOGIN_URI', 'Specify Login URI (required if it`s has been changed`).' ) do |login_uri|
29
+ opts.on( '-u', '--login_uri LOGIN_URI', 'Specify Login URI (required if it`s has been changed`).' ) do |login_uri|
24
30
  options[:login_uri] = login_uri
25
31
  end
26
32
 
@@ -29,16 +35,21 @@ optparse = OptionParser.new do|opts|
29
35
  options[:login] = login
30
36
  end
31
37
 
38
+ opts.on( '-v','--version', 'Display version info' ) do
39
+ puts "#{RailscastsDownload::VERSION}"
40
+ exit!
41
+ end
42
+
32
43
  opts.on( '-h', '--help', 'Display this screen' ) do
33
44
  puts opts
34
- puts "RSS_URI could be a remote url or local file system path"
45
+ puts "\nReleased under the MIT license. Copyright (C) 2012 Karol Nowicki"
35
46
  exit
36
47
  end
48
+
37
49
  end
38
50
 
39
51
  optparse.parse!
40
52
 
41
- options[:password] = ask("Enter your password: ") { |q| q.echo = "*" } if options[:revised]
42
-
53
+ options[:password] = ask("Enter your password: ") { |q| q.echo = "*" } if options[:pro]
43
54
  saver = RailscastsDownload::Saver.new( options )
44
55
  saver.get_all
@@ -3,7 +3,7 @@ module RailscastsDownload
3
3
  require 'mechanize'
4
4
 
5
5
  def initialize( options = {} )
6
- if options[:revised]
6
+ if options[:pro]
7
7
  @login_uri = options[:login_uri]
8
8
  @login = options[:login]
9
9
  @password = options[:password]
@@ -1,14 +1,16 @@
1
1
  module RailscastsDownload
2
2
  class RssExplorer
3
3
  require 'rss'
4
+ require 'date'
4
5
 
5
6
  def initialize( rss_body )
6
7
  @body = rss_body
7
8
  get_rss
8
9
  end
9
10
 
10
- def get_uris
11
- @rss.items.map{ |it| it.enclosure.url }.reverse
11
+ def get_uris( options = {} )
12
+ @after = Date.parse( options[:after] || '2000-01-01' )
13
+ @rss.items.reject{ |it| it.pubDate.to_date < @after }.map{ |it| it.enclosure.url }.reverse
12
14
  end
13
15
 
14
16
  private
@@ -6,10 +6,11 @@ module RailscastsDownload
6
6
  class Saver
7
7
  def initialize( options={} )
8
8
  @downloader = options[:downloader] || Downloader.new
9
- options[:rss_uri] ||= "http://feeds.feedburner.com/railscasts" unless options[:revised]
10
- options[:login_uri] ||= "http://railscasts.com/login" if options[:revised]
9
+ options[:rss_uri] ||= "http://feeds.feedburner.com/railscasts" unless options[:pro]
10
+ options[:login_uri] ||= "http://railscasts.com/login" if options[:pro]
11
11
  @page = options[:page_explorer] || PageExplorer.new( options )
12
12
  @rss = options[:rss_explorer] || RssExplorer.new( @page.get_rss_body )
13
+ @after = options[:after]
13
14
  end
14
15
 
15
16
  def get_all
@@ -21,7 +22,7 @@ module RailscastsDownload
21
22
  end
22
23
 
23
24
  def videos_uris
24
- @rss.get_uris
25
+ @rss.get_uris( after: @after )
25
26
  end
26
27
 
27
28
  def missing_videos_uris
@@ -1,3 +1,3 @@
1
1
  module RailscastsDownload
2
- VERSION = "0.2.2"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -13,4 +13,9 @@ class RssExplorerbTest < Test::Unit::TestCase
13
13
  assert_equal( "http://media.railscasts.com/assets/episodes/videos/001-caching-with-instance-variables.mp4",
14
14
  @rss.get_uris.first )
15
15
  end
16
- end
16
+
17
+ def test_get_uris_after_returns_correct_uris
18
+ assert_equal( "http://media.railscasts.com/assets/episodes/videos/336-copycopter.mp4",
19
+ @rss.get_uris( after: '2012-03-22' ).first )
20
+ end
21
+ end
@@ -2,7 +2,7 @@ class StubRssExplorer
2
2
  def initialize
3
3
  end
4
4
 
5
- def get_uris
5
+ def get_uris( options = {} )
6
6
  source_file = File.dirname( __FILE__ ) + '/../fixtures/uris.txt'
7
7
  open( source_file ).read.each_line.map{ |l| l[0, ( l.length-1) ] }
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: railscasts_download
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-03-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mechanize
16
- requirement: &17771200 !ruby/object:Gem::Requirement
16
+ requirement: &10965140 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *17771200
24
+ version_requirements: *10965140
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: highline
27
- requirement: &17770260 !ruby/object:Gem::Requirement
27
+ requirement: &10964720 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *17770260
35
+ version_requirements: *10964720
36
36
  description: Download all revised and pro railscasts with oneline command.
37
37
  email:
38
38
  - karol@knowicki.pl
@@ -78,7 +78,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
78
78
  version: '0'
79
79
  segments:
80
80
  - 0
81
- hash: 4169054339208887493
81
+ hash: 2868771744563319319
82
82
  required_rubygems_version: !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
@@ -87,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
87
  version: '0'
88
88
  segments:
89
89
  - 0
90
- hash: 4169054339208887493
90
+ hash: 2868771744563319319
91
91
  requirements: []
92
92
  rubyforge_project: railscasts_download
93
93
  rubygems_version: 1.8.17