at-shakil/rtime

View on GitHub
bin/rtime

Summary

Maintainability
Test Coverage
#!/usr/bin/env ruby
require "thor"
require "rtime"

module RTime
  # RTime command-line interface base class
  class CLI < Thor
    class_option(
      :night_only,
      aliases: ["-n"], type: :boolean,
      desc: "Only generates timestamp between 20:00 - 06:00"
    )
    class_option(
      :version,
      aliases: ["-v"], type: :boolean, desc: "Prints the version of rtime"
    )

    desc "generate <date1> <date2> <coverage>", "Generates random timestamp"
    def generate date1, date2, coverage
      date_matcher = /^\d{4}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])$/
      coverage_match = /^(?<coverage>\d|[1-9][0-9]|10{2})%$/.match coverage

      if date_matcher =~ date1 && date_matcher =~ date2 && coverage_match
        timestamps = RTime::RTS.timestamps(
          { start: date1, end: date2 },
          coverage_match[:coverage].to_f / 100,
          options
        )
        timestamps.each { |timestamp| puts "\n#{timestamp}" }
      else
        puts "Error: invalid argument!\n\n\
Example: rtime gen 20170417 20170423 85%"
      end
    end

    desc "", "Describe available commands"
    def default
      options[:version] ? puts(RTime::VERSION) : help
    end

    map %W[gen g] => :generate
    default_task :default
  end
end

RTime::CLI.start(ARGV)