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