class XSemVer::Runner

Contains the logic for performing SemVer operations from the command line.

def self.help_text

Return the text to be displayed when the 'help' command is run.
def self.help_text
  <<-HELP
er commands
-----------
[ialze]                        # initialize semantic version tracking
rement] major | minor | patch  # increment a specific version number
release] [STRING]              # set a pre-release version suffix
cial] [STRING]                 # set a pre-release version suffix (deprecated)
[data] [STRING]                # set a metadata version suffix
at                             # printf like format: %M, %m, %p, %s
                               # equivalent to format 'v%M.%m.%p%s'

SE READ http://semver.org
  HELP
end

def initialize(*args)

Expects an array of commands, such as ARGV.
Run a semver command. Raise a CommandError if the command does not exist.
def initialize(*args)
  @args = args
  command = @args.shift || :tag
  method = "run_#{command}"
  raise CommandError, "invalid command #{command}" unless self.class.method_defined?(method)
  send method
end

def run_format

See: SemVer#format
Output the semver as specified by a format string.
def run_format
  version = SemVer.find
  format_str = @args.shift or raise CommandError, "required: format string"
  puts version.format(format_str)
end

def run_help

Output instructions for using the semvar command.
def run_help
  puts self.class.help_text
end

def run_increment

Increment the major, minor, or patch of the .semver file.
def run_increment
  version = SemVer.find
  dimension = @args.shift or raise CommandError, "required: major | minor | patch"
  case dimension
  when 'major'
    version.major += 1
    version.minor =  0
    version.patch =  0
  when 'minor'
    version.minor += 1
    version.patch =  0
  when 'patch'
    version.patch += 1
  else
    raise CommandError, "#{dimension} is invalid: major | minor | patch"
  end
  version.special = ''
  version.metadata = ''
  version.save
end

def run_initialize

Create a new .semver file if the file does not exist.
def run_initialize
  file = SemVer.file_name
  if File.exist? file
    puts "#{file} already exists"
  else
    version = SemVer.new
    version.save file
  end
end

def run_metadata

Set the metadata of the .semver file.
def run_metadata
  version = SemVer.find
  special_str = @args.shift or raise CommandError, "required: an arbitrary string (beta, alfa, romeo, etc)"
  version.metadata = special_str
  version.save
end

def run_special

Set the pre-release of the .semver file.
def run_special
  version = SemVer.find
  special_str = @args.shift or raise CommandError, "required: an arbitrary string (beta, alfa, romeo, etc)"
  version.special = special_str
  version.save
end

def run_tag

See: SemVer#to_s
Output the semver with the default formatting.
def run_tag
  version = SemVer.find
  puts version.to_s
end