lib/thor/parser/option.rb in thor-0.13.7 vs lib/thor/parser/option.rb in thor-0.13.8

- old
+ new

@@ -1,15 +1,16 @@ class Thor class Option < Argument #:nodoc: - attr_reader :aliases, :group + attr_reader :aliases, :group, :lazy_default VALID_TYPES = [:boolean, :numeric, :hash, :array, :string] - def initialize(name, description=nil, required=nil, type=nil, default=nil, banner=nil, group=nil, aliases=nil) + def initialize(name, description=nil, required=nil, type=nil, default=nil, banner=nil, lazy_default=nil, group=nil, aliases=nil) super(name, description, required, type, default, banner) - @aliases = [*aliases].compact - @group = group.to_s.capitalize if group + @lazy_default = lazy_default + @group = group.to_s.capitalize if group + @aliases = [*aliases].compact end # This parse quick options given as method_options. It makes several # assumptions, but you can be more specific using the option method. # @@ -46,27 +47,26 @@ name = name.to_s default = value type = case value - when Symbol - default = nil - - if VALID_TYPES.include?(value) - value - elsif required = (value == :required) - :string - end - when TrueClass, FalseClass - :boolean - when Numeric - :numeric - when Hash, Array, String - value.class.name.downcase.to_sym + when Symbol + default = nil + if VALID_TYPES.include?(value) + value + elsif required = (value == :required) + :string + end + when TrueClass, FalseClass + :boolean + when Numeric + :numeric + when Hash, Array, String + value.class.name.downcase.to_sym end - self.new(name.to_s, nil, required, type, default, nil, nil, aliases) + self.new(name.to_s, nil, required, type, default, nil, nil, nil, aliases) end def switch_name @switch_name ||= dasherized? ? name : dasherize(name) end @@ -89,40 +89,32 @@ else "#{aliases.join(', ')}, #{sample}" end end - # Allow some type predicates as: boolean?, string? and etc. - # - def method_missing(method, *args, &block) - given = method.to_s.sub(/\?$/, '').to_sym - if valid_type?(given) - self.type == given - else - super - end + VALID_TYPES.each do |type| + class_eval <<-RUBY, __FILE__, __LINE__ + 1 + def #{type}? + self.type == #{type.inspect} + end + RUBY end - protected + protected - def validate! - raise ArgumentError, "An option cannot be boolean and required." if boolean? && required? - end + def validate! + raise ArgumentError, "An option cannot be boolean and required." if boolean? && required? + end - def valid_type?(type) - VALID_TYPES.include?(type.to_sym) - end + def dasherized? + name.index('-') == 0 + end - def dasherized? - name.index('-') == 0 - end + def undasherize(str) + str.sub(/^-{1,2}/, '') + end - def undasherize(str) - str.sub(/^-{1,2}/, '') - end - - def dasherize(str) - (str.length > 1 ? "--" : "-") + str.gsub('_', '-') - end - + def dasherize(str) + (str.length > 1 ? "--" : "-") + str.gsub('_', '-') + end end end