Class: Jirawatch::CLI::Track
- Inherits:
-
Dry::CLI::Command
- Object
- Dry::CLI::Command
- Jirawatch::CLI::Track
- Includes:
- AuthenticatedCommand
- Defined in:
- lib/jirawatch/cli/track.rb
Instance Method Summary collapse
- #call(issue_key:, **options) ⇒ Object
-
#initialize(reader: TTY::Reader.new, worklogger: Jirawatch::Interactors::Worklogger.new) ⇒ Track
constructor
A new instance of Track.
Methods included from AuthenticatedCommand
Methods included from Jira::Provisioning
Constructor Details
#initialize(reader: TTY::Reader.new, worklogger: Jirawatch::Interactors::Worklogger.new) ⇒ Track
Returns a new instance of Track.
12 13 14 15 16 17 18 |
# File 'lib/jirawatch/cli/track.rb', line 12 def initialize( reader: TTY::Reader.new, worklogger: Jirawatch::Interactors::Worklogger.new ) @reader = reader @worklogger = worklogger end |
Instance Method Details
#call(issue_key:, **options) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/jirawatch/cli/track.rb', line 20 def call(issue_key:, **) tracking_started_at = Time.parse(.fetch(:tracking_started_at, Time.now.to_s)) fail! Jirawatch.strings.error_invalid_tracking_start if tracking_started_at > Time.now issue = @jira_client.Issue.find(issue_key) # Fails if issue doesn't exist paused = false tracking_restarted_at = tracking_started_at.to_i partial_time_spent = 0 worked_hours = ((issue.attrs["fields"]["timetracking"]["timeSpentSeconds"].presence || 0)/60)/60 worked_minutes = ((issue.attrs["fields"]["timetracking"]["timeSpentSeconds"].presence || 0)/60)%60 estimate_hours = ((issue.attrs["fields"]["timetracking"]["originalEstimateSeconds"].presence || 0)/60)/60 estimate_minutes = ((issue.attrs["fields"]["timetracking"]["originalEstimateSeconds"].presence || 0)/60)%60 puts Jirawatch.strings.tracking_cli_name % [issue_key, issue.attrs["fields"]["summary"]] puts Jirawatch.strings.tracking_cli_time % [tracking_started_at.strftime("%Y-%m-%d %H:%M:%S"), worked_hours, worked_minutes, estimate_hours, estimate_minutes] puts Jirawatch.strings.tracking_cli_inputs @reader.on(:keyctrl_p) do unless paused partial_time_spent += Time.now.to_i - tracking_restarted_at time_unit = partial_time_spent / 60 == 1 ? "minute" : "minutes" puts Jirawatch.strings.tracking_paused % [partial_time_spent / 60, time_unit] else tracking_restarted_at = Time.now.to_i puts Jirawatch.strings.tracking_restarted end paused = !paused end begin loop do @reader.read_line("") end rescue Interrupt total_time_spent = partial_time_spent + (Time.now.to_i - tracking_restarted_at) unless paused total_time_spent = partial_time_spent if paused @worklogger.call @jira_client, issue_key, total_time_spent, tracking_started_at, default_message: .fetch(:worklog_message, "") end end |