epodder 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 21e023301a7f8229e28c7d39d02a389e72091bdf
4
- data.tar.gz: 6aea7f349ead1585e114be3ef6592923924198ed
3
+ metadata.gz: d3e6c2fa3630be50d6529e958889d1033e7bbefe
4
+ data.tar.gz: b08d84f6d0b89c8983b92f554350de0f7bf46c81
5
5
  SHA512:
6
- metadata.gz: d01f7f2fcaeb061b369cf8d37b8ab1c447c330d2029dab4bc142030493bd9df0cf858e95ea3f9018a71cdd5e31629a57eb1ea1eb556e89cb0b441ef917a7343b
7
- data.tar.gz: 91fc8461eefa3b03e0263d4eef576b08587b5860344e23cae3298185a40b5a2dffbdd2a46cc8725cb9a744f43c322c88744ec33018e544d5082fd4873f2a2224
6
+ metadata.gz: 9327a39d1905c3fae8d7a96bb81af8691b9783dba48cb9c165dec2ab1c8b57669a499225ec42892c6a580b435254cc534550cff3e6cff5db9d4cd467b343cc4d
7
+ data.tar.gz: 28f535afc6306d253cd5888cb72d4d28c2d7b2a7628014869f29e01270b9a3e7f19e50bad9f35eac271c8be63292d633032c064cd6f624608009a5962d1dc103
data/lib/arguments.rb CHANGED
@@ -2,38 +2,38 @@ module Epodder
2
2
  class Arguments
3
3
  attr_accessor :args
4
4
 
5
- def initialize
6
- @args = Hash.new
5
+ def initialize
6
+ @args = {}
7
7
  @args[:arguments] = []
8
- verb = Struct.new(:name,:desc,:block)
8
+ verb = Struct.new(:name, :desc, :block)
9
9
  @verbs = [
10
- verb.new('add','Add a new podcast.', Proc.new {|args| @args[:action] = :add; @args[:arguments] = args}),
11
- verb.new('catchup','Mark older episodes as downloaded.', Proc.new {|args| @args[:action] = :catchup; @args[:arguments] = args}),
12
- verb.new('remove','Remove a feed by supplying an id.', Proc.new {|args| @args[:action] = :remove; @args[:arguments] = args}),
13
- verb.new('lscasts','List podcasts.', Proc.new {|args| @args[:action] = :list_podcast; @args[:arguments] = args}),
14
- verb.new('lseps','List episodes of a podcast by id.', Proc.new {|args| @args[:action] = :list_episodes; @args[:arguments] = args}),
15
- verb.new('fetch','Update then download podcasts', Proc.new {|args| @args[:action] = :fetch; @args[:arguments] = args}),
16
- verb.new('download','Download podcasts specified by a list of id or all podcasts', Proc.new {|args| @args[:action] = :download; @args[:arguments] = args}),
17
- verb.new('update','Update podcasts specified by a list of id or all podcasts', Proc.new {|args| @args[:action] = :update; @args[:arguments] = args}),
18
- verb.new("clean", "Remove old content from the database", Proc.new {|args| @args[:action] = :clean; @args[:arguments] = args})
10
+ verb.new('add', 'Add a new podcast.', Proc.new { |args| @args[:action] = :add; @args[:arguments] = args }),
11
+ verb.new('catchup', 'Mark older episodes as downloaded.', Proc.new { |args| @args[:action] = :catchup; @args[:arguments] = args }),
12
+ verb.new('remove', 'Remove a feed by supplying an id.', Proc.new { |args| @args[:action] = :remove; @args[:arguments] = args }),
13
+ verb.new('lscasts', 'List podcasts.', Proc.new { |args| @args[:action] = :list_podcast; @args[:arguments] = args }),
14
+ verb.new('lseps', 'List episodes of a podcast by id.', Proc.new { |args| @args[:action] = :list_episodes; @args[:arguments] = args }),
15
+ verb.new('fetch', 'Update then download podcasts', Proc.new { |args| @args[:action] = :fetch; @args[:arguments] = args }),
16
+ verb.new('download', 'Download podcasts specified by a list of id or all podcasts', Proc.new { |args| @args[:action] = :download; @args[:arguments] = args }),
17
+ verb.new('update', 'Update podcasts specified by a list of id or all podcasts', Proc.new { |args| @args[:action] = :update; @args[:arguments] = args }),
18
+ verb.new('clean', 'Remove old content from the database', Proc.new { |args| @args[:action] = :clean; @args[:arguments] = args })
19
19
  ]
20
20
  get_args
21
21
  end
22
22
 
23
23
  def get_args
24
- @args[:path] = "~/.epodder"
25
- cmd = CmdParse::CommandParser.new( true, true )
26
- cmd.program_name = "ePodder"
24
+ @args[:path] = '~/.epodder'
25
+ cmd = CmdParse::CommandParser.new(true, true)
26
+ cmd.program_name = 'ePodder'
27
27
  cmd.program_version = [0, 0, 8]
28
28
  cmd.options = CmdParse::OptionParserWrapper.new do |opt|
29
- opt.separator "Global options:"
30
- opt.on("-v", "--verbose", "Be verbose when outputting info") {|t| @args[:verbose] = true }
31
- opt.on("-c", "--conf-dir [PATH]", "Set the configuration directory") {|path| @args[:path] = path}
32
- opt.on("-l", "--log-path [PATH]", "Set logging to the specified file") {|path| @args[:log_file] = path}
29
+ opt.separator 'Global options:'
30
+ opt.on('-v', '--verbose', 'Be verbose when outputting info') { |t| @args[:verbose] = true }
31
+ opt.on('-c', '--conf-dir [PATH]', 'Set the configuration directory') { |path| @args[:path] = path }
32
+ opt.on('-l', '--log-path [PATH]', 'Set logging to the specified file') { |path| @args[:log_file] = path }
33
33
  end
34
34
 
35
- cmd.add_command( CmdParse::HelpCommand.new )
36
- cmd.add_command( CmdParse::VersionCommand.new)
35
+ cmd.add_command(CmdParse::HelpCommand.new)
36
+ cmd.add_command(CmdParse::VersionCommand.new)
37
37
 
38
38
  @verbs.each do |verb|
39
39
  command = CmdParse::Command.new(verb.name, false, false)
@@ -45,8 +45,8 @@ module Epodder
45
45
  cmd.parse
46
46
  end
47
47
 
48
- def method_missing(name, value=nil, *args)
49
- if @args.has_key? name
48
+ def method_missing(name, value = nil, *args)
49
+ if @args.key? name
50
50
  @args[name]
51
51
  end
52
52
  end
@@ -1,15 +1,15 @@
1
- #TODO clean up nil!!
1
+ # TODO clean up nil!!
2
2
  module Epodder
3
3
  class Configurator < Eclass
4
- @@default_path = "~/.epodder/"
5
- @@db_path = "epodder.db"
6
- @@yaml_path = "epodder.yaml"
4
+ @@default_path = '~/.epodder/'
5
+ @@db_path = 'epodder.db'
6
+ @@yaml_path = 'epodder.yaml'
7
7
  @@default = {
8
- :path_to_db => "epodder.db",
9
- :path_to_download => "~/podcasts"
8
+ path_to_db: 'epodder.db',
9
+ path_to_download: '~/podcasts'
10
10
  }
11
11
 
12
- def initialize args
12
+ def initialize(args)
13
13
  @args = args
14
14
  load_working_dir! @args.path
15
15
  load_config!
@@ -20,17 +20,17 @@ module Epodder
20
20
 
21
21
 
22
22
  def load_config!
23
- #Check to see if we have a config file or if we need to create it
23
+ # Check to see if we have a config file or if we need to create it
24
24
  if !File.exists? @@yaml_path
25
25
  begin
26
- File.open(@@yaml_path, "w") do |io|
26
+ File.open(@@yaml_path, 'w') do |io|
27
27
  YAML.dump(@@default, io)
28
28
  end
29
29
  rescue SystemCallError, NameError => error
30
30
  puts "Could not load #{@@yaml_path}: #{error}"
31
31
  exit
32
32
  end
33
- end
33
+ end
34
34
  @conf = YAML.load_file(@@yaml_path)
35
35
  end
36
36
 
@@ -38,17 +38,17 @@ module Epodder
38
38
 
39
39
  def load_download_dir!
40
40
  Dir.mkdir File.expand_path(@conf[:path_to_download]) unless Dir.exists?(File.expand_path(@conf[:path_to_download]))
41
- File.symlink(File.expand_path(@conf[:path_to_download]), "download") unless File.exists? "download"
41
+ File.symlink(File.expand_path(@conf[:path_to_download]), 'download') unless File.exists? 'download'
42
42
  end
43
43
 
44
44
  def load_database!
45
- #Datamapper magic goes here
45
+ # Datamapper magic goes here
46
46
  DataMapper.setup(:default, "sqlite://#{Dir.pwd}/#{@conf[:path_to_db]}")
47
47
  DataMapper.finalize
48
48
  DataMapper.auto_upgrade!
49
49
  end
50
50
 
51
- def load_working_dir! path
51
+ def load_working_dir!(path)
52
52
  @path = File.expand_path(path || @@default_path)
53
53
  Dir.mkdir @path unless Dir.exists? @path
54
54
  Dir.chdir @path unless file_error
@@ -64,22 +64,22 @@ module Epodder
64
64
 
65
65
 
66
66
  def start_logging
67
- logger = Yell.new :name => 'log' do |l|
67
+ logger = Yell.new name: 'log' do |l|
68
68
  if @args.log_file.nil?
69
69
  if @args.verbose
70
- l.adapter :stdout, "epodder.log", :level => Yell.level(:info)
70
+ l.adapter :stdout, 'epodder.log', level: Yell.level(:info)
71
71
  else
72
- l.adapter :stdout, "epodder.log", :level => Yell.level(:error)
72
+ l.adapter :stdout, 'epodder.log', level: Yell.level(:error)
73
73
  end
74
74
  else
75
75
  if @args.verbose
76
- l.adapter :datefile, "epodder.log", :level => Yell.level(:info)
76
+ l.adapter :datefile, 'epodder.log', level: Yell.level(:info)
77
77
  else
78
- l.adapter :datefile, "epodder.log", :level => Yell.level(:error)
78
+ l.adapter :datefile, 'epodder.log', level: Yell.level(:error)
79
79
  end
80
80
  end
81
81
  end
82
- logger.info "Loaded Logger"
82
+ logger.info 'Loaded Logger'
83
83
  end
84
84
 
85
85
  end
@@ -4,29 +4,29 @@ module Epodder
4
4
  include DataMapper::Resource
5
5
 
6
6
  property :id, Serial
7
- property :title, String, :length=> 500
7
+ property :title, String, length: 500
8
8
  property :url, URI
9
9
  property :downloaded, Boolean
10
10
  property :pub_date, DateTime
11
11
 
12
12
  belongs_to :podcast
13
13
 
14
- def self.lookup episode
14
+ def self.lookup(episode)
15
15
  if episode.enclosure
16
16
  @episode = Episode.first_or_create(
17
- :title => episode.title,
18
- :url => episode.enclosure.url,
19
- :pub_date => episode.pubdate,
20
- :downloaded => false
17
+ title: episode.title,
18
+ url: episode.enclosure.url,
19
+ pub_date: episode.pubdate,
20
+ downloaded: false
21
21
  )
22
22
  end
23
23
  end
24
24
 
25
25
  def mark_as_downloaded
26
26
  self.downloaded = true
27
- success = self.save
27
+ success = save
28
28
  if !success
29
- self.errors.each do |e|
29
+ errors.each do |e|
30
30
  puts e
31
31
  end
32
32
  end
@@ -2,9 +2,9 @@ module Epodder
2
2
  class Podcast < Eclass
3
3
  include DataMapper::Resource
4
4
  property :id, Serial
5
- property :title, String, :length=> 500
5
+ property :title, String, length: 500
6
6
  property :uri, URI
7
- has n, :episodes, :constraint => :destroy
7
+ has n, :episodes, constraint: :destroy
8
8
 
9
9
  end
10
10
  end
data/lib/epodder.rb CHANGED
@@ -7,11 +7,11 @@ module Epodder
7
7
  @@verbose
8
8
  end
9
9
 
10
- def verbose= state
10
+ def verbose=(state)
11
11
  @@verbose = state
12
12
  end
13
13
 
14
- def self.do_verb verb, args
14
+ def self.do_verb(verb, args)
15
15
  c = Epodder.const_get(verb.to_s.capitalize)
16
16
  verb_object = c.send :new
17
17
  verb_object.send verb, args
@@ -19,7 +19,7 @@ module Epodder
19
19
 
20
20
  def self.run
21
21
  args = Arguments.new
22
- Configurator.new(args)
22
+ Configurator.new(args)
23
23
  do_verb args.action, args.arguments
24
24
  end
25
25
 
data/lib/verb/add.rb CHANGED
@@ -1,27 +1,27 @@
1
1
  module Epodder
2
2
  class Add < Verb
3
3
  def initialize
4
- @mechanize = Mechanize.new
5
4
  end
6
5
 
7
- def add args
6
+ def add(args)
8
7
  args.each do |url|
9
8
  lookup_podcast url
10
9
  end
11
10
  end
12
11
 
13
- def lookup_podcast url
14
- @mechanize.get(url) do |feed|
12
+ def lookup_podcast(url)
13
+ feed = Feedzirra::Feed.fetch_and_parse(url)
14
+ unless feed.is_a?(Fixnum)
15
15
  save_podcast feed, url
16
+ else
17
+ puts "Error #{url} returned #{feed}"
16
18
  end
17
19
  end
18
20
 
19
- def save_podcast feed, url
20
- cast = FeedMe.parse feed.body
21
- cast.emulate_atom!
21
+ def save_podcast(feed, url)
22
22
  podcast = Podcast.first_or_create(
23
- :title => cast.title,
24
- :uri => url
23
+ title: feed.title,
24
+ uri: url
25
25
  )
26
26
  podcast.save
27
27
 
data/lib/verb/catchup.rb CHANGED
@@ -1,13 +1,13 @@
1
1
  module Epodder
2
2
  class Catchup < Verb
3
- def catchup args
3
+ def catchup(args)
4
4
  if args.empty?
5
5
  podcasts = Podcast.all
6
6
  else
7
- podcasts = args.map {|id| Podcast.get(id.to_i)}
7
+ podcasts = args.map { |id| Podcast.get(id.to_i) }
8
8
  end
9
9
  podcasts.each do |podcast|
10
- Episode.all(:downloaded => false, :podcast => podcast).update(:downloaded => true)
10
+ Episode.all(downloaded: false, podcast: podcast).update(downloaded: true)
11
11
  end
12
12
  end
13
13
  end
data/lib/verb/clean.rb CHANGED
@@ -1,46 +1,46 @@
1
1
  module Epodder
2
2
  class Clean < Verb
3
3
  def initialize
4
- @mechanize = @mechanize = Mechanize.new
5
4
  end
6
5
 
7
- def clean args
6
+ def clean(args)
8
7
  if args.empty?
9
8
  podcasts = Podcast.all
10
9
  else
11
- podcasts = args.map{|podcast| Podcast.get(podcast.to_i)}
10
+ podcasts = args.map { |podcast| Podcast.get(podcast.to_i) }
12
11
  end
13
12
  podcasts.each do |podcast|
14
- known_episodes = Episode.all(:downloaded => true, :podcast => podcast)
13
+ known_episodes = Episode.all(downloaded: true, podcast: podcast)
15
14
  feed_episodes = open_podcast podcast, DateTime.now
16
- known_episodes = known_episodes.map{|episode| episode.url.to_s}
17
- feed_episodes = feed_episodes.map{|episode|@episode = episode; episode.enclosure.url}
15
+ known_episodes = known_episodes.map { |episode| episode.url.to_s }
16
+ feed_episodes = feed_episodes.map {|episode| @episode = episode; episode.enclosure_url }
18
17
  episodes = (known_episodes - feed_episodes)
19
18
  episodes_length = episodes.length
20
- episodes.map{|episode| Episode.all(:url => episode)}.each do |episode|
19
+ episodes.map { |episode| Episode.all(url: episode) }.each do |episode|
21
20
  if !episode.destroy
22
- episode.errors.each {|error| puts error}
21
+ episode.errors.each { |error| puts error }
23
22
  end
24
23
  end
25
24
  puts "#{podcast.title} -- cleaned #{episodes_length} episodes"
26
25
  end
27
26
  end
28
27
 
29
- def open_podcast podcast, max_pub
28
+ def open_podcast(podcast, max_pub)
30
29
  begin
31
- @mechanize.get(podcast.uri) do |feed|
30
+ feed = Feedzirra::Feed.fetch_and_parse(podcast.uri.to_s)
31
+ unless feed.is_a? Fixnum
32
32
  return parse_feed feed, max_pub
33
+ else
34
+ raise "Error #{podcast.title} returned #{feed}"
33
35
  end
34
- rescue Exception => e
36
+ rescue StandardError => e
35
37
  puts e
38
+ []
36
39
  end
37
40
  end
38
41
 
39
- def parse_feed feed, max_pub
40
- podcast = FeedMe.parse feed.body
41
- podcast.emulate_atom!
42
- temp = podcast.items.select {|item| !item.enclosure.nil?}
43
- temp.select {|item| !item.enclosure.empty?}
42
+ def parse_feed(feed, max_pub)
43
+ feed.entries.select { |item| item.respond_to? :enclosure_url}
44
44
  end
45
45
  end
46
46
  end
data/lib/verb/download.rb CHANGED
@@ -2,15 +2,15 @@ require 'downspout'
2
2
  module Epodder
3
3
  class Download < Verb
4
4
 
5
- def download args
5
+ def download(args)
6
6
  each_argument(args) do |podcast|
7
7
  look_for_episodes podcast
8
8
  end
9
9
  end
10
10
 
11
- def look_for_episodes podcast
12
- episodes = Episode.all(:downloaded => false, :podcast => podcast)
13
- episodes.select{|ep| !ep.nil?}.each do |episode|
11
+ def look_for_episodes(podcast)
12
+ episodes = Episode.all(downloaded: false, podcast: podcast)
13
+ episodes.select { |ep| !ep.nil? }.each do |episode|
14
14
  puts episode.podcast.title
15
15
  title = (episode.podcast.title).strip
16
16
  Dir.mkdir "download/#{title}" unless Dir.exists? "download/#{title}"
@@ -19,7 +19,7 @@ module Epodder
19
19
  end
20
20
  end
21
21
 
22
- def download_episode episode
22
+ def download_episode(episode)
23
23
  begin
24
24
  Downspout::Config.max_redirects = 100
25
25
  Downspout::Config.enable_curb! if Downspout::Config.curb_available?
data/lib/verb/fetch.rb CHANGED
@@ -1,10 +1,10 @@
1
1
  module Epodder
2
2
  class Fetch < Verb
3
3
  def initialize
4
- #Nothing to do in initalize
4
+ # Nothing to do in initalize
5
5
  end
6
6
 
7
- def fetch args
7
+ def fetch(args)
8
8
  Update.new.update args
9
9
  Download.new.download args
10
10
  end
data/lib/verb/list.rb CHANGED
@@ -1,10 +1,10 @@
1
1
  module Epodder
2
2
  class List_podcast < Verb
3
3
  def initialize
4
- #Nothing to do in initalize
4
+ # Nothing to do in initalize
5
5
  end
6
6
 
7
- def list_podcast *args
7
+ def list_podcast(*args)
8
8
  Podcast.all.each do |pod|
9
9
  puts "#{pod.id} : \"#{pod.title}\""
10
10
  end
data/lib/verb/remove.rb CHANGED
@@ -5,16 +5,16 @@ module Epodder
5
5
 
6
6
  end
7
7
 
8
- def remove args
8
+ def remove(args)
9
9
  each_argument(args) do |podcast|
10
10
  input = ask("Remove #{podcast.id} : #{podcast.title}? Type \"YES\" to remove")
11
- if input == "YES"
11
+ if input == 'YES'
12
12
  podcast.destroy
13
13
  end
14
14
  end
15
- args.map{|id| Podcast.get(id)}.each do |podcast|
15
+ args.map { |id| Podcast.get(id) }.each do |podcast|
16
16
  input = ask("Remove #{podcast.id} : #{podcast.title}? Type \"YES\" to remove")
17
- if input == "YES"
17
+ if input == 'YES'
18
18
  podcast.destroy
19
19
  end
20
20
  end
data/lib/verb/update.rb CHANGED
@@ -1,72 +1,72 @@
1
1
  require 'date'
2
- require 'feedme'
3
- require 'mechanize'
4
- #require 'progress'
2
+ require 'feedzirra'
5
3
  module Epodder
6
- class Update < Verb
4
+ class Update < Verb
7
5
 
8
- def initialize
9
- super
10
- @mechanize = Mechanize.new
11
- end
6
+ def initialize
7
+ super
8
+ end
12
9
 
13
- def update args
14
- each_argument(args) do |podcast|
15
- check_for_new_episodes podcast
16
- end
17
- end
10
+ def update(args)
11
+ each_argument(args) do |podcast|
12
+ check_for_new_episodes podcast
13
+ end
14
+ end
18
15
 
19
- def check_for_new_episodes podcast
20
- max_pub = get_max_pubdate podcast
21
- open_podcast podcast, max_pub
22
- end
16
+ def check_for_new_episodes(podcast)
17
+ max_pub = get_max_pubdate podcast
18
+ open_podcast podcast, max_pub
19
+ end
23
20
 
24
- def get_max_pubdate podcast
25
- Episode.max(:pub_date, :conditions => { :podcast => podcast }) || Time.at(0).to_date
26
- end
21
+ def get_max_pubdate(podcast)
22
+ Episode.max(:pub_date, conditions: { podcast: podcast }) || Time.at(0).to_date
23
+ end
27
24
 
28
- def open_podcast podcast, max_pub
29
- begin
30
- @mechanize.get(podcast.uri) do |feed|
31
- @log.info "Maximum pubdate for #{podcast.title} - #{podcast.id} is #{max_pub}"
32
- parse_feed feed, podcast, max_pub
25
+ def open_podcast(podcast, max_pub)
26
+ begin
27
+ @log.info "Maximum pubdate for #{podcast.title} - #{podcast.id} is #{max_pub}"
28
+ parse_feed podcast.uri, podcast, max_pub
29
+ rescue StandardError => e
30
+ puts "#{podcast.title} - #{e}"
31
+ end
33
32
  end
34
- rescue StandardError => e
35
- puts "#{podcast.title} - #{e}"
36
- end
37
- end
38
33
 
39
- def parse_feed feed, database_podcast, max_pub
40
- podcast = FeedMe.parse feed.body
41
- podcast.emulate_atom!
42
- pending_episodes = podcast.items.select {|item| is_valid? item, max_pub}
43
- pending_episodes.each {|pending_episode| add_eligible_episode database_podcast, pending_episode }
44
- length = pending_episodes.length
45
- puts "#{database_podcast.title} has #{length} new episodes" if length > 0
46
- end
47
-
48
- def is_valid? item, max_pub
49
- item.enclosure && item.pubdate.to_date > max_pub.to_date
50
- end
34
+ def parse_feed(feed, database_podcast, max_pub)
35
+ podcast = Feedzirra::Feed.fetch_and_parse(feed.to_s)
36
+ unless podcast.is_a? Fixnum
37
+ pending_episodes = podcast.entries.select {|item| is_valid? item, max_pub}
38
+ else
39
+ raise "HTTP Error #{podcast}"
40
+ end
41
+ pending_episodes.each {|episode| add_eligible_episode database_podcast, episode }
42
+ length = pending_episodes.length
43
+ puts "#{database_podcast.title} has #{length} new episodes" if length > 0
44
+ end
51
45
 
52
- def add_eligible_episode podcast, item
53
- begin
54
- ep = Episode.first_or_create(
55
- :title => item.title,
56
- :url => item.enclosure.url,
57
- :pub_date => item.pubdate.to_date,
58
- :downloaded => false,
59
- :podcast => podcast
60
- )
61
- ep.errors.each do |error|
62
- @log.error error
63
- end
46
+ def is_valid?(item, max_pub)
47
+ enclosure = item.respond_to? :enclosure_url
48
+ published = item.published.to_date
49
+ enclosure && (published > max_pub.to_date)
50
+ end
51
+
52
+ def add_eligible_episode(podcast, item)
53
+ begin
54
+ ep = Episode.first_or_create(
55
+ title: item.title,
56
+ url: item.enclosure_url,
57
+ pub_date: item.published.to_date,
58
+ downloaded: false,
59
+ podcast: podcast
60
+ )
61
+ ep.errors.each do |error|
62
+ @log.error error
63
+ end
64
64
 
65
- rescue Exception => e
66
- @log.error e
67
- raise e
65
+ rescue StandardError => e
66
+ @log.error e
67
+ raise e
68
+ end
68
69
  end
69
- end
70
70
 
71
- end
71
+ end
72
72
  end
data/lib/verb/verb.rb CHANGED
@@ -2,31 +2,27 @@ module Epodder
2
2
  class Verb < Eclass
3
3
  def verb_struct
4
4
  super
5
- Struct.new(:name,:description,:block)
5
+ Struct.new(:name, :description, :block)
6
6
  end
7
7
 
8
- def add_command (cmd, args)
9
- command = CmdParse::Command.new(@verb.name,false,false)
8
+ def add_command(cmd, args)
9
+ command = CmdParse::Command.new(@verb.name, false, false)
10
10
  command.short_desc = @verb.description
11
11
  command.set_execution_block(&@verb.block)
12
12
  cmd.add_command(command)
13
13
  end
14
14
 
15
- def lookup_args args
15
+ def lookup_args(args)
16
16
  if args.empty?
17
17
  podcasts = Podcast.all
18
18
  else
19
- podcasts = args.map {|id| Podcast.get(id.to_i)}
19
+ podcasts = args.map { |id| Podcast.get(id.to_i) }
20
20
  end
21
+ podcasts
21
22
  end
22
23
 
23
- def each_argument args, &block
24
- podcasts = nil
25
- if args.empty?
26
- podcasts = Podcast.all
27
- else
28
- podcasts = args.map {|id| Podcast.get(id.to_i)}
29
- end
24
+ def each_argument(args, &block)
25
+ podcasts = lookup_args(args) || nil
30
26
  podcasts.each do |podcast|
31
27
  yield podcast
32
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: epodder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Bergstrom
@@ -11,283 +11,255 @@ cert_chain: []
11
11
  date: 2013-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: nokogiri
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '>='
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '>='
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: feedme
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '>='
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '>='
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: mechanize
14
+ name: bundler
43
15
  requirement: !ruby/object:Gem::Requirement
44
16
  requirements:
45
- - - '>='
17
+ - - ">="
46
18
  - !ruby/object:Gem::Version
47
19
  version: '0'
48
20
  type: :runtime
49
21
  prerelease: false
50
22
  version_requirements: !ruby/object:Gem::Requirement
51
23
  requirements:
52
- - - '>='
24
+ - - ">="
53
25
  - !ruby/object:Gem::Version
54
26
  version: '0'
55
27
  - !ruby/object:Gem::Dependency
56
28
  name: cmdparse
57
29
  requirement: !ruby/object:Gem::Requirement
58
30
  requirements:
59
- - - '>='
31
+ - - ">="
60
32
  - !ruby/object:Gem::Version
61
33
  version: '0'
62
34
  type: :runtime
63
35
  prerelease: false
64
36
  version_requirements: !ruby/object:Gem::Requirement
65
37
  requirements:
66
- - - '>='
38
+ - - ">="
67
39
  - !ruby/object:Gem::Version
68
40
  version: '0'
69
41
  - !ruby/object:Gem::Dependency
70
42
  name: data_mapper
71
43
  requirement: !ruby/object:Gem::Requirement
72
44
  requirements:
73
- - - '>='
45
+ - - ">="
74
46
  - !ruby/object:Gem::Version
75
47
  version: '0'
76
48
  type: :runtime
77
49
  prerelease: false
78
50
  version_requirements: !ruby/object:Gem::Requirement
79
51
  requirements:
80
- - - '>='
52
+ - - ">="
81
53
  - !ruby/object:Gem::Version
82
54
  version: '0'
83
55
  - !ruby/object:Gem::Dependency
84
56
  name: dm-sqlite-adapter
85
57
  requirement: !ruby/object:Gem::Requirement
86
58
  requirements:
87
- - - '>='
59
+ - - ">="
88
60
  - !ruby/object:Gem::Version
89
61
  version: '0'
90
62
  type: :runtime
91
63
  prerelease: false
92
64
  version_requirements: !ruby/object:Gem::Requirement
93
65
  requirements:
94
- - - '>='
66
+ - - ">="
95
67
  - !ruby/object:Gem::Version
96
68
  version: '0'
97
69
  - !ruby/object:Gem::Dependency
98
70
  name: yell
99
71
  requirement: !ruby/object:Gem::Requirement
100
72
  requirements:
101
- - - '>='
73
+ - - ">="
102
74
  - !ruby/object:Gem::Version
103
75
  version: '0'
104
76
  type: :runtime
105
77
  prerelease: false
106
78
  version_requirements: !ruby/object:Gem::Requirement
107
79
  requirements:
108
- - - '>='
80
+ - - ">="
109
81
  - !ruby/object:Gem::Version
110
82
  version: '0'
111
83
  - !ruby/object:Gem::Dependency
112
84
  name: highline
113
85
  requirement: !ruby/object:Gem::Requirement
114
86
  requirements:
115
- - - '>='
87
+ - - ">="
116
88
  - !ruby/object:Gem::Version
117
89
  version: '0'
118
90
  type: :runtime
119
91
  prerelease: false
120
92
  version_requirements: !ruby/object:Gem::Requirement
121
93
  requirements:
122
- - - '>='
94
+ - - ">="
123
95
  - !ruby/object:Gem::Version
124
96
  version: '0'
125
97
  - !ruby/object:Gem::Dependency
126
98
  name: require_all
127
99
  requirement: !ruby/object:Gem::Requirement
128
100
  requirements:
129
- - - '>='
101
+ - - ">="
130
102
  - !ruby/object:Gem::Version
131
103
  version: '0'
132
104
  type: :runtime
133
105
  prerelease: false
134
106
  version_requirements: !ruby/object:Gem::Requirement
135
107
  requirements:
136
- - - '>='
108
+ - - ">="
137
109
  - !ruby/object:Gem::Version
138
110
  version: '0'
139
111
  - !ruby/object:Gem::Dependency
140
112
  name: curb
141
113
  requirement: !ruby/object:Gem::Requirement
142
114
  requirements:
143
- - - '>='
115
+ - - ">="
144
116
  - !ruby/object:Gem::Version
145
117
  version: '0'
146
118
  type: :runtime
147
119
  prerelease: false
148
120
  version_requirements: !ruby/object:Gem::Requirement
149
121
  requirements:
150
- - - '>='
122
+ - - ">="
151
123
  - !ruby/object:Gem::Version
152
124
  version: '0'
153
125
  - !ruby/object:Gem::Dependency
154
126
  name: downspout
155
127
  requirement: !ruby/object:Gem::Requirement
156
128
  requirements:
157
- - - '>='
129
+ - - ">="
158
130
  - !ruby/object:Gem::Version
159
131
  version: '0'
160
132
  type: :runtime
161
133
  prerelease: false
162
134
  version_requirements: !ruby/object:Gem::Requirement
163
135
  requirements:
164
- - - '>='
136
+ - - ">="
165
137
  - !ruby/object:Gem::Version
166
138
  version: '0'
167
139
  - !ruby/object:Gem::Dependency
168
140
  name: home_run
169
141
  requirement: !ruby/object:Gem::Requirement
170
142
  requirements:
171
- - - '>='
143
+ - - ">="
172
144
  - !ruby/object:Gem::Version
173
145
  version: '0'
174
146
  type: :runtime
175
147
  prerelease: false
176
148
  version_requirements: !ruby/object:Gem::Requirement
177
149
  requirements:
178
- - - '>='
150
+ - - ">="
179
151
  - !ruby/object:Gem::Version
180
152
  version: '0'
181
153
  - !ruby/object:Gem::Dependency
182
154
  name: feedzirra
183
155
  requirement: !ruby/object:Gem::Requirement
184
156
  requirements:
185
- - - '>='
157
+ - - ">="
186
158
  - !ruby/object:Gem::Version
187
159
  version: '0'
188
160
  type: :runtime
189
161
  prerelease: false
190
162
  version_requirements: !ruby/object:Gem::Requirement
191
163
  requirements:
192
- - - '>='
164
+ - - ">="
193
165
  - !ruby/object:Gem::Version
194
166
  version: '0'
195
167
  - !ruby/object:Gem::Dependency
196
- name: bundler
168
+ name: simplecov
197
169
  requirement: !ruby/object:Gem::Requirement
198
170
  requirements:
199
- - - '>='
171
+ - - ">="
200
172
  - !ruby/object:Gem::Version
201
173
  version: '0'
202
174
  type: :development
203
175
  prerelease: false
204
176
  version_requirements: !ruby/object:Gem::Requirement
205
177
  requirements:
206
- - - '>='
178
+ - - ">="
207
179
  - !ruby/object:Gem::Version
208
180
  version: '0'
209
181
  - !ruby/object:Gem::Dependency
210
- name: simplecov
182
+ name: excellent
211
183
  requirement: !ruby/object:Gem::Requirement
212
184
  requirements:
213
- - - '>='
185
+ - - ">="
214
186
  - !ruby/object:Gem::Version
215
187
  version: '0'
216
188
  type: :development
217
189
  prerelease: false
218
190
  version_requirements: !ruby/object:Gem::Requirement
219
191
  requirements:
220
- - - '>='
192
+ - - ">="
221
193
  - !ruby/object:Gem::Version
222
194
  version: '0'
223
195
  - !ruby/object:Gem::Dependency
224
- name: excellent
196
+ name: flog
225
197
  requirement: !ruby/object:Gem::Requirement
226
198
  requirements:
227
- - - '>='
199
+ - - ">="
228
200
  - !ruby/object:Gem::Version
229
201
  version: '0'
230
202
  type: :development
231
203
  prerelease: false
232
204
  version_requirements: !ruby/object:Gem::Requirement
233
205
  requirements:
234
- - - '>='
206
+ - - ">="
235
207
  - !ruby/object:Gem::Version
236
208
  version: '0'
237
209
  - !ruby/object:Gem::Dependency
238
- name: flog
210
+ name: flay
239
211
  requirement: !ruby/object:Gem::Requirement
240
212
  requirements:
241
- - - '>='
213
+ - - ">="
242
214
  - !ruby/object:Gem::Version
243
215
  version: '0'
244
216
  type: :development
245
217
  prerelease: false
246
218
  version_requirements: !ruby/object:Gem::Requirement
247
219
  requirements:
248
- - - '>='
220
+ - - ">="
249
221
  - !ruby/object:Gem::Version
250
222
  version: '0'
251
223
  - !ruby/object:Gem::Dependency
252
- name: flay
224
+ name: rubocop
253
225
  requirement: !ruby/object:Gem::Requirement
254
226
  requirements:
255
- - - '>='
227
+ - - ">="
256
228
  - !ruby/object:Gem::Version
257
229
  version: '0'
258
230
  type: :development
259
231
  prerelease: false
260
232
  version_requirements: !ruby/object:Gem::Requirement
261
233
  requirements:
262
- - - '>='
234
+ - - ">="
263
235
  - !ruby/object:Gem::Version
264
236
  version: '0'
265
237
  - !ruby/object:Gem::Dependency
266
- name: rubocop
238
+ name: rspec
267
239
  requirement: !ruby/object:Gem::Requirement
268
240
  requirements:
269
- - - '>='
241
+ - - ">="
270
242
  - !ruby/object:Gem::Version
271
243
  version: '0'
272
244
  type: :development
273
245
  prerelease: false
274
246
  version_requirements: !ruby/object:Gem::Requirement
275
247
  requirements:
276
- - - '>='
248
+ - - ">="
277
249
  - !ruby/object:Gem::Version
278
250
  version: '0'
279
251
  - !ruby/object:Gem::Dependency
280
- name: rspec
252
+ name: pry
281
253
  requirement: !ruby/object:Gem::Requirement
282
254
  requirements:
283
- - - '>='
255
+ - - ">="
284
256
  - !ruby/object:Gem::Version
285
257
  version: '0'
286
258
  type: :development
287
259
  prerelease: false
288
260
  version_requirements: !ruby/object:Gem::Requirement
289
261
  requirements:
290
- - - '>='
262
+ - - ">="
291
263
  - !ruby/object:Gem::Version
292
264
  version: '0'
293
265
  description:
@@ -297,6 +269,7 @@ executables:
297
269
  extensions: []
298
270
  extra_rdoc_files: []
299
271
  files:
272
+ - bin/epodder
300
273
  - lib/arguments.rb
301
274
  - lib/configuration/configurator.rb
302
275
  - lib/database/episode.rb
@@ -312,7 +285,6 @@ files:
312
285
  - lib/verb/remove.rb
313
286
  - lib/verb/update.rb
314
287
  - lib/verb/verb.rb
315
- - bin/epodder
316
288
  homepage: http://github.com/scribe/epodder
317
289
  licenses: []
318
290
  metadata: {}
@@ -322,17 +294,17 @@ require_paths:
322
294
  - lib
323
295
  required_ruby_version: !ruby/object:Gem::Requirement
324
296
  requirements:
325
- - - '>='
297
+ - - ">="
326
298
  - !ruby/object:Gem::Version
327
299
  version: '0'
328
300
  required_rubygems_version: !ruby/object:Gem::Requirement
329
301
  requirements:
330
- - - '>='
302
+ - - ">="
331
303
  - !ruby/object:Gem::Version
332
304
  version: '0'
333
305
  requirements: []
334
306
  rubyforge_project:
335
- rubygems_version: 2.0.6
307
+ rubygems_version: 2.2.0
336
308
  signing_key:
337
309
  specification_version: 4
338
310
  summary: Ruby re-do of hpodder