bin/dropcaster in dropcaster-0.0.1 vs bin/dropcaster in dropcaster-0.0.2

- old
+ new

@@ -6,71 +6,106 @@ require 'yaml' help = <<HELP Dropcaster is a podcast feed generator for the command line. +Author: Nicolas E. Rabenau nerab@gmx.at +Homepage: http://nerab.github.com/dropcaster/ + Basic Usage: - dropcaster Prints a podcast feed document for the mp3 files - in the current directory. The channel definition - is read from the current directory. - - dropcaster [<file>...] Prints a podcast feed documentfor the files - specified as argument. The channel definition - is read from the current directory. - dropcaster [<dir>...] Prints a podcast feed document for the files in - the directory specified as argument. The channel - definition is read from the current directory. + dropcaster Prints a podcast feed document for the mp3 files in the current directory. + dropcaster [FILE]... Prints a podcast feed document for FILES + dropcaster [DIR]... Prints a podcast feed document for the mp3 files in DIR -Options: +Options: + HELP def usage "Run '#{File.basename(__FILE__)} --help' for further help." end require 'optparse' require 'dropcaster' -channel_file = 'channel.yml' +options = Hash.new +options[:verbose] = false +options[:auto_detect_channel_file] = true -options = {} opts = OptionParser.new do |opts| opts.banner = help - opts.on("--channel FILE", "Read the channel information from FILE") do |file| - channel_file = file + opts.on("--verbose", "Verbose mode - displays additional diagnostic information") do |file| + options[:verbose] = true end - opts.on("--channel-template FILE", "Use FILE as template for the channel") do |file| - options[:channel_template] = file + opts.on("--channel FILE", "Read the channel definition from FILE instead of channel.yml in the current directory.") do |file| + begin + STDERR.puts "Reading channel definition from #{file}" if options[:verbose] + options = YAML.load_file(file).merge(options) + options[:auto_detect_channel_file] = false + rescue + STDERR.puts "Error loading channel definition: #{$!.message}" + STDERR.puts $!.backtrace if options[:verbose] + exit(1) + end end + opts.on("--title STRING", "Use STRING as the channel's title. Overrides settings read from channel definition file.") do |title| + STDERR.puts "Setting channel title to '#{title}' via command line" if options[:verbose] + options[:title] = title + end + + opts.on("--url URL", "Use URL as the channel's url. Overrides settings read from channel definition file.") do |url| + STDERR.puts "Setting channel URL to '#{url}' via command line" if options[:verbose] + options[:url] = url + end + + opts.on("--description STRING", "Use STRING as the channel's description. Overrides settings read from channel definition file.") do |description| + STDERR.puts "Setting channel description to '#{description}' via command line" if options[:verbose] + options[:description] = description + end + + opts.on("--enclosure_base URL", "Use URL as base URL for the channel's enclosures. Overrides settings read from channel definition file.") do |enclosure_base| + STDERR.puts "Setting enclosure base to '#{enclosure_base}' via command line" if options[:verbose] + options[:enclosure_base] = enclosure_base + end + + opts.on("--channel-template FILE", "Use FILE as template for generating the channel feed. Overrides the default that comes with Dropcaster.") do |file| + options[:template] = file + end + opts.on("--version", "Display current version") do puts "#{File.basename(__FILE__)} " + Dropcaster::VERSION exit 0 end end opts.parse! +sources = ARGV.blank? ? '.' : ARGV -begin - options.merge! YAML.load_file(channel_file) -rescue - STDERR.puts "Error: Could not find channel definition." - puts usage - exit 1 -end +if options[:auto_detect_channel_file] + # There was no channel file specified, so we try to load channel.yml from sources dir + channel_file = Dropcaster::ChannelFileLocator.locate(sources) -if ARGV.empty? - src_dir = '.' -else - src_dir = ARGV + if File.exists?(channel_file) + STDERR.puts "Auto-detected channel file at #{channel_file}" if options[:verbose] + options_from_yaml = YAML.load_file(channel_file) + options = options_from_yaml.merge(options) + else + STDERR.puts "No #{channel_file} found." + STDERR.puts usage + exit(1) # No way to continue without a channel definition + end end +STDERR.puts "Generating the channel with these options: #{options.inspect}" if options[:verbose] + begin - puts Dropcaster::Channel.new(src_dir, options).to_rss + puts Dropcaster::Channel.new(sources, options).to_rss rescue - puts "Error: #{$!.message}" - puts usage + STDERR.puts "Error generating the channel feed: #{$!.message}" + STDERR.puts usage + STDERR.puts $!.backtrace if options[:verbose] exit(1) end