tempest_time 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 45634f4e2d1ba9f4f640dbf13d59744f79d60cc8be2018bd5b85b5cba89c347f
4
- data.tar.gz: fd570fdd23d0bd81ca05e730a915fbc586bc8cc6e4a69be09b9e8e460e6544ea
3
+ metadata.gz: 6b26cfdc661706032cc5149b28b05fbf1f322324f0f845c00af8d3e5135546c8
4
+ data.tar.gz: 1cb5c84cf724531917ec9c759dc83cd47a7fba89a8dc9c74401c65f89b6ea207
5
5
  SHA512:
6
- metadata.gz: ba9a953f273044cb2ab23902af2c6fb81ec8a6b3efe81139278dd6dbfe75a45d4a1a0e845fd694718a28824819868abe743dbbec3684e121f0d394c48630d747
7
- data.tar.gz: c4b70af7542aa5d29d975ce71391c82b3b62277eb16aa7c69f40325cf617ddc9617f651f7c5647b889253a02fdab93706e85d2b48f7ac950bfa3147a252c58ca
6
+ metadata.gz: 1ac9e54ec617bae5c87fd405b1b1f6c5df82d47d668caa0a26deedfe52dc59352d5ce3e37b7e0cacb376562fbed3fcb670c1d6f92c737a81b911db2ff0658466
7
+ data.tar.gz: 502bf3a2a0d11b21167d4fa68305d4993477914462f6110d5dc930e44ceb7a8cf7528e98e135c68cee312d166ef75f571a3f2891a7fc9418b9fbcc7ddad5cf0f
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tempest_time (0.5.0)
4
+ tempest_time (0.5.1)
5
5
  git (~> 1.5)
6
6
  httparty (~> 0.16)
7
7
  pastel (~> 0.7.2)
@@ -7,11 +7,12 @@ module TempoAPI
7
7
  class SubmitTimesheet < TempoAPI::Request
8
8
  include TempestTime::Helpers::TimeHelper
9
9
 
10
- attr_reader :reviewer
10
+ attr_reader :reviewer, :week_number
11
11
 
12
- def initialize(reviewer)
12
+ def initialize(reviewer, week_number)
13
13
  super
14
14
  @reviewer = reviewer
15
+ @week_number = week_number
15
16
  end
16
17
 
17
18
  private
@@ -29,9 +30,10 @@ module TempoAPI
29
30
  end
30
31
 
31
32
  def query_params
33
+ dates = week_dates(week_number)
32
34
  {
33
- from: week_dates.first.strftime(DATE_FORMAT),
34
- to: week_dates.last.strftime(DATE_FORMAT)
35
+ from: dates.first.strftime(DATE_FORMAT),
36
+ to: dates.last.strftime(DATE_FORMAT)
35
37
  }
36
38
  end
37
39
 
@@ -40,10 +42,6 @@ module TempoAPI
40
42
  reviewerUsername: reviewer
41
43
  }
42
44
  end
43
-
44
- def week_dates
45
- parsed_date_input('week')
46
- end
47
45
  end
48
46
  end
49
47
  end
@@ -12,14 +12,17 @@ module TempestTime
12
12
 
13
13
  def initialize(users, options)
14
14
  @users = users || []
15
- @options = options
15
+ @team = options[:team]
16
+ @week = options[:week]
16
17
  end
17
18
 
18
19
  def execute(input: $stdin, output: $stdout)
19
- team = @options[:team]
20
- @users = prompt_for_input if @users.empty? && team.nil?
21
- @users.push(TempestTime::Settings::Teams.members(team)) if team
20
+ @users = user_prompt if @users.empty? && @team.nil?
21
+ @users.push(TempestTime::Settings::Teams.members(@team)) if @team
22
22
  abort('No users specified.') unless @users.any?
23
+
24
+ @week ||= week_prompt
25
+
23
26
  with_spinner('Generating report...') do |spinner|
24
27
  table = render_table
25
28
  spinner.stop(pastel.green('Your report is ready!'))
@@ -35,11 +38,11 @@ module TempestTime
35
38
 
36
39
  def report
37
40
  @report ||= TempestTime::Services::GenerateReport.new(
38
- @users.flatten, @options[:week]
41
+ @users.flatten, @week
39
42
  )
40
43
  end
41
44
 
42
- def prompt_for_input
45
+ def user_prompt
43
46
  type = prompt.select(
44
47
  "Generate a report for a #{pastel.green('user')} or #{pastel.green('team')}?",
45
48
  ['User', 'Team']
@@ -54,6 +57,16 @@ module TempestTime
54
57
  teams.members(team)
55
58
  end
56
59
 
60
+ def week_prompt
61
+ week = TTY::Prompt.new.select(
62
+ 'Please select the week to report.',
63
+ week_ranges,
64
+ default: current_week,
65
+ per_page: 5
66
+ )
67
+ week_ranges.find_index(week) + 1
68
+ end
69
+
57
70
  def table_headings
58
71
  %w[User COMP% UTIL%] + report.projects
59
72
  end
@@ -2,10 +2,13 @@
2
2
 
3
3
  require_relative '../command'
4
4
  require_relative '../api/tempo_api/requests/submit_timesheet'
5
+ require_relative '../helpers/time_helper'
5
6
 
6
7
  module TempestTime
7
8
  module Commands
8
9
  class Submit < TempestTime::Command
10
+ include TempestTime::Helpers::TimeHelper
11
+
9
12
  def initialize(options)
10
13
  @options = options
11
14
  end
@@ -13,14 +16,28 @@ module TempestTime
13
16
  def execute(input: $stdin, output: $stdout)
14
17
  # Command logic goes here ...
15
18
  reviewer = prompt.ask('Who should review this timesheet? (username)')
16
- message = "Submit this week's timesheet to " + pastel.green(reviewer) + '?'
19
+ week_number = week_prompt
20
+
21
+ message = 'Submit the selected timesheet to ' + pastel.green(reviewer) + '?'
17
22
  abort unless prompt.yes?(message)
18
23
  abort unless prompt.yes?('Are you sure? No edits can be made once submitted!')
19
24
 
20
- with_success_fail_spinner("Submitting this week's timesheet...") do
21
- TempoAPI::Requests::SubmitTimesheet.new(reviewer).send_request
25
+ with_success_fail_spinner("Submitting your timesheet...") do
26
+ TempoAPI::Requests::SubmitTimesheet.new(reviewer, week_number).send_request
22
27
  end
23
28
  end
29
+
30
+ private
31
+
32
+ def week_prompt
33
+ week = TTY::Prompt.new.select(
34
+ 'Please select the week to submit.',
35
+ week_ranges,
36
+ default: current_week,
37
+ per_page: 5
38
+ )
39
+ week_ranges.find_index(week) + 1
40
+ end
24
41
  end
25
42
  end
26
43
  end
@@ -21,7 +21,7 @@ module TempestTime
21
21
  end
22
22
 
23
23
  def formatted_date_range(start_date, end_date)
24
- return formatted_date(start_date) if end_date.nil? || end_date.empty?
24
+ return formatted_date(start_date) if end_date.nil?
25
25
  "#{formatted_date(start_date)} - #{formatted_date(end_date)}"
26
26
  end
27
27
 
@@ -35,29 +35,38 @@ module TempestTime
35
35
  [Date.today]
36
36
  when 'yesterday'
37
37
  [Date.today.prev_day]
38
- when 'week'
39
- this_week
38
+ when 'week', 'thisweek'
39
+ week_dates(current_week)
40
+ when 'lastweek'
41
+ week_dates(current_week - 1)
40
42
  else
41
43
  [Date.parse(date_input)]
42
44
  end
43
45
  end
44
46
 
45
- def beginning_of_this_week
46
- Date.today - Date.today.wday
47
+ def current_week
48
+ # Helper method to make weeks start on Sunday instead of Monday.
49
+ @current_week ||= (Date.today + 1).cweek
47
50
  end
48
51
 
49
52
  def beginning_of_week(week_number)
50
- this_week_number = (Date.today + 1).cweek # Add one so weeks begin on Sunday.
51
- return false unless week_number <= this_week_number
52
- days_in_the_past = (this_week_number - week_number) * 7
53
- beginning_of_this_week - days_in_the_past
53
+ return unless week_number.positive? && week_number < 53
54
+ (Date.today - Date.today.wday) - ((current_week - week_number) * 7)
54
55
  end
55
56
 
56
- def this_week
57
- (0..6).map do |n|
58
- beginning_of_this_week + n
57
+ def week_beginnings
58
+ @week_beginnings ||= (1..52).map { |week_number| beginning_of_week(week_number) }
59
+ end
60
+
61
+ def week_ranges
62
+ @week_ranges ||= week_beginnings.map do |start_date|
63
+ formatted_date_range(start_date, start_date + 6)
59
64
  end
60
65
  end
66
+
67
+ def week_dates(week_number)
68
+ (0..6).map { |days| beginning_of_week(week_number) + days }
69
+ end
61
70
  end
62
71
  end
63
72
  end
@@ -12,7 +12,7 @@ module TempestTime
12
12
  def initialize(users, week_number)
13
13
  @users = users
14
14
  @week_number = week_number || Date.today.cweek
15
- @reports = build_reports if valid?
15
+ @reports = build_reports
16
16
  end
17
17
 
18
18
  def projects
@@ -37,17 +37,12 @@ module TempestTime
37
37
 
38
38
  private
39
39
 
40
- def valid?
41
- return false unless week_number <= Date.today.cweek
42
- true
43
- end
44
-
45
40
  def build_reports
46
41
  users.map do |user|
47
42
  request = TempoAPI::Requests::ListWorklogs.new(start_date, end_date, user)
48
43
  request.send_request
49
44
  TempestTime::Models::Report.new(user, request.response.worklogs)
50
- end
45
+ end || []
51
46
  end
52
47
  end
53
48
  end
@@ -1,3 +1,3 @@
1
1
  module TempestTime
2
- VERSION = '0.5.1'.freeze
2
+ VERSION = '0.5.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tempest_time
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Devan Hurst