lib/filegen/options.rb in filegen-0.0.1 vs lib/filegen/options.rb in filegen-0.1.1
- old
+ new
@@ -1,24 +1,95 @@
# encoding: utf-8
module Filegen
+ # Commandline parser
class Options
- attr_reader :template
+ private
+ attr_reader :params
+
+ public
+
+ # Create commandline parser
+ #
+ # @param [Array] argv
+ # The array which contains the commandline arguments
def initialize(argv)
- @template = argv.first.to_s
+ @params = parse_options(argv)
end
+ # Source template
+ #
+ # @return [File]
+ # Returns a file handle for the template
def source
- return File.read(template) if valid_template?
+ validate_source
- fail "File does not exist or is not a erb file!"
+ File.new(params.template)
end
+ # Destination for output
+ #
+ # @return [IO]
+ # Returns a file handle for the output
def destination
$stdout
end
- def valid_template?
- File.exists?(template) && /.erb$/ === File.basename(template)
+ # The data sources which can be used
+ #
+ # @return [Array]
+ # An array of data sources which can be used
+ def data_sources
+ DataSourceBuilder.new(params).sources
+ end
+
+ private
+
+ def parse_options(argv)
+ params = OpenStruct.new
+ parser = OptionParser.new
+
+ params.data_sources = [:env]
+ params.data_source_builders = {}
+ params.data_source_builders[:env] = DataSources::Environment.new
+
+ parser.on('-y', '--yaml-file FILE', 'YAML-file to look for variables') do |f|
+ params.yaml_file = f
+ params.data_sources << :yaml
+ params.data_source_builders[:yaml] = DataSources::Yaml.new(params.yaml_file)
+ end
+
+ parser.on('-d', '--data-sources a,b', Array, 'Order for variable lookup: yaml, env (default: env or env,yaml if yaml-file-option is given)') do |l|
+ params.data_sources = l.map(&:to_sym)
+ end
+
+ parser.on_tail('-h', '--help', 'Show this message') do
+ $stderr.puts parser
+ exit
+ end
+
+ parser.on_tail('-v', '--version', 'Show version') do
+ $stderr.puts Filegen::VERSION
+ exit
+ end
+
+ params.template = parser.parse(argv).first
+
+ params
+ end
+
+ def validate_source
+ fail "File \"#{params.template}\" does not exist" unless exists?
+ fail "File \"#{params.template}\" is not a valid erb template: file ending erb" unless erb_template?
+ end
+
+ def exists?
+ File.exists?(params.template)
+ end
+
+ def erb_template?
+ # rubocop:disable CaseEquality
+ /.erb$/ === File.basename(params.template)
+ # rubocop:enable CaseEquality
end
end
end