ifocustt 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/config/default.yml +1 -1
- data/lib/focus/action.rb +16 -1
- data/lib/focus/actions/log_work_for_jira.rb +2 -2
- data/lib/focus/actions/start_focus_time.rb +30 -26
- data/lib/focus/config.rb +13 -1
- data/lib/focus/formatter.rb +1 -1
- data/lib/focus/stdout.rb +10 -1
- data/lib/focus/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0dfe2365976e3a78b145968a9fab127547b5ac71
|
4
|
+
data.tar.gz: baa95c3b6ef52e3ce59fdb2b1dc8c3d3c44a61a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c40175f09eb1a141a0e9ed408b65749f619431070a422e5ee1a9bd5be45c1e42867dad4390cbbcdfd8d72992dfd5833e652df197494651a111b0304bdeffc69d
|
7
|
+
data.tar.gz: 616585264fe4dda64aa48cd16f07a795f17e69dbcaf9ac6137fa517a90c9d195660df4159ff8cb832d3b80d8493f482cca1aa6f03c76a655724bd9e6c4fb3546
|
data/config/default.yml
CHANGED
data/lib/focus/action.rb
CHANGED
@@ -2,6 +2,8 @@ require "httparty"
|
|
2
2
|
require "interactor"
|
3
3
|
|
4
4
|
module Focus
|
5
|
+
class FailedActionError < StandardError; end
|
6
|
+
|
5
7
|
class Action
|
6
8
|
include Interactor
|
7
9
|
|
@@ -19,6 +21,10 @@ module Focus
|
|
19
21
|
context.minutes.to_f * 60
|
20
22
|
end
|
21
23
|
|
24
|
+
def seconds_focused
|
25
|
+
Time.now.to_i - context.focus_start
|
26
|
+
end
|
27
|
+
|
22
28
|
def break_seconds
|
23
29
|
focus_seconds * 0.2
|
24
30
|
end
|
@@ -28,12 +34,21 @@ module Focus
|
|
28
34
|
step = "Running #{action}..."
|
29
35
|
|
30
36
|
Focus::STDOUT.step(step, quiet: context.quiet) do
|
31
|
-
klass.call(args)
|
37
|
+
result = klass.call(args)
|
38
|
+
raise FailedActionError, error_message(result) unless result.success?
|
32
39
|
end
|
33
40
|
end
|
34
41
|
|
42
|
+
def error_message(obj)
|
43
|
+
"#{obj.action}: #{obj.error}"
|
44
|
+
end
|
45
|
+
|
35
46
|
def debug_output(*args)
|
36
47
|
Focus::STDOUT.debug_output args
|
37
48
|
end
|
49
|
+
|
50
|
+
def fail_action!(opts = {})
|
51
|
+
context.fail!(opts.merge(action: self.class.to_s.split("::").last))
|
52
|
+
end
|
38
53
|
end
|
39
54
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Focus
|
2
2
|
class PostWorkLogToJira < Action
|
3
3
|
def call
|
4
|
-
return unless jira_ticket &&
|
4
|
+
return unless jira_ticket && seconds_focused >= 60
|
5
5
|
HTTParty.post(issue_url, options)
|
6
6
|
end
|
7
7
|
|
@@ -20,7 +20,7 @@ module Focus
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def body
|
23
|
-
{ timeSpentSeconds:
|
23
|
+
{ timeSpentSeconds: seconds_focused, comment: context.comment.to_s }
|
24
24
|
end
|
25
25
|
|
26
26
|
def auth
|
@@ -3,47 +3,43 @@ require "tty"
|
|
3
3
|
|
4
4
|
module Focus
|
5
5
|
class StartFocusTime < Action
|
6
|
-
DEFAULT_CONTEXT_KEYS = %i(minutes target quiet daemonize).freeze
|
6
|
+
DEFAULT_CONTEXT_KEYS = %i(minutes target quiet daemonize focus_start).freeze
|
7
7
|
|
8
8
|
attr_reader :action
|
9
9
|
|
10
10
|
def call
|
11
11
|
context.actions = ConfigLoader.load("actions")
|
12
|
+
context.daemonize ? fork { _actions } : _actions
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def _actions
|
12
18
|
focus
|
13
19
|
take_break
|
20
|
+
rescue SystemExit, Interrupt
|
21
|
+
context.quiet = false
|
22
|
+
Focus::STDOUT.title "Shutting down gracefully..."
|
23
|
+
ensure
|
14
24
|
cleanup
|
15
25
|
happy_message
|
16
26
|
end
|
17
27
|
|
18
|
-
private
|
19
|
-
|
20
28
|
def focus
|
21
29
|
@action = :focus
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
else
|
26
|
-
perform_actions "OnFocus"
|
27
|
-
handle_progress_bar
|
28
|
-
end
|
30
|
+
perform_actions "OnFocus"
|
31
|
+
context.focus_start = Time.now.to_i
|
32
|
+
handle_progress_bar
|
29
33
|
end
|
30
34
|
|
31
35
|
def take_break
|
32
36
|
@action = :break
|
33
|
-
|
34
|
-
|
35
|
-
else
|
36
|
-
perform_actions "OnBreak"
|
37
|
-
handle_progress_bar
|
38
|
-
end
|
37
|
+
perform_actions "OnBreak"
|
38
|
+
handle_progress_bar
|
39
39
|
end
|
40
40
|
|
41
41
|
def cleanup
|
42
|
-
|
43
|
-
fork { perform_actions "OnCompletion" }
|
44
|
-
else
|
45
|
-
perform_actions "OnCompletion"
|
46
|
-
end
|
42
|
+
perform_actions "Cleanup"
|
47
43
|
end
|
48
44
|
|
49
45
|
def progress_bar
|
@@ -75,18 +71,22 @@ module Focus
|
|
75
71
|
|
76
72
|
while Time.now < end_time
|
77
73
|
timestamp = Time.now
|
78
|
-
yield
|
74
|
+
yield if block_given?
|
79
75
|
interval = 1 - (Time.now - timestamp)
|
80
76
|
sleep(interval) if interval.positive?
|
81
77
|
end
|
82
78
|
end
|
83
79
|
|
84
80
|
def handle_progress_bar
|
85
|
-
|
81
|
+
if context.daemonize
|
82
|
+
every_second # sleep
|
83
|
+
else
|
84
|
+
every_second { progress_bar.advance }
|
85
|
+
end
|
86
86
|
end
|
87
87
|
|
88
88
|
def perform_actions(event)
|
89
|
-
actions =
|
89
|
+
actions = actions_to_perform(event)
|
90
90
|
return unless actions
|
91
91
|
Focus::STDOUT.print_line "Starting #{event}...\r", quiet: context.quiet
|
92
92
|
|
@@ -100,6 +100,11 @@ module Focus
|
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
+
def actions_to_perform(event)
|
104
|
+
actions = context.actions.find { |x| x.keys.include? event }
|
105
|
+
actions[event] if actions
|
106
|
+
end
|
107
|
+
|
103
108
|
def with_default_context(args)
|
104
109
|
hsh = args.to_h
|
105
110
|
hsh.merge default_hsh
|
@@ -125,8 +130,7 @@ module Focus
|
|
125
130
|
|
126
131
|
def happy_message
|
127
132
|
return if context.quiet
|
128
|
-
Focus::STDOUT.puts_line
|
129
|
-
Focus::STDOUT.puts_line "Complete!"
|
133
|
+
Focus::STDOUT.puts_line "\nProcess complete."
|
130
134
|
end
|
131
135
|
|
132
136
|
def constantize(str)
|
data/lib/focus/config.rb
CHANGED
@@ -1,15 +1,22 @@
|
|
1
1
|
require "dotenv"
|
2
2
|
|
3
3
|
module Focus
|
4
|
+
class MissingConfiguration < ArgumentError; end
|
5
|
+
|
4
6
|
class Config < OpenStruct
|
5
7
|
class << self
|
6
8
|
def method_missing(m, *args, &block) # rubocop:disable MethodMissing
|
7
|
-
|
9
|
+
config.env(m) || config.send(m, *args, &block) || raise_undefined_config(m)
|
8
10
|
end
|
9
11
|
|
10
12
|
def config
|
11
13
|
@config ||= new
|
12
14
|
end
|
15
|
+
|
16
|
+
def raise_undefined_config(m)
|
17
|
+
error = "(#{m}) neither `ENV['#{m.to_s.upcase}']` or `.focus.yml#config.#{m}` are defined"
|
18
|
+
raise MissingConfiguration, error
|
19
|
+
end
|
13
20
|
end
|
14
21
|
|
15
22
|
def initialize
|
@@ -18,6 +25,10 @@ module Focus
|
|
18
25
|
ingest _hardcoded
|
19
26
|
end
|
20
27
|
|
28
|
+
def env(m)
|
29
|
+
ENV[m.to_s.upcase]
|
30
|
+
end
|
31
|
+
|
21
32
|
private
|
22
33
|
|
23
34
|
def configurations
|
@@ -61,5 +72,6 @@ module Focus
|
|
61
72
|
return unless File.exist?(path)
|
62
73
|
Dotenv.load path
|
63
74
|
end
|
75
|
+
|
64
76
|
end
|
65
77
|
end
|
data/lib/focus/formatter.rb
CHANGED
data/lib/focus/stdout.rb
CHANGED
@@ -14,8 +14,17 @@ module Focus
|
|
14
14
|
def step(string, opts = { quiet: false })
|
15
15
|
quiet = opts[:quiet]
|
16
16
|
print_line(Focus::Formatter.step(string), quiet: quiet)
|
17
|
-
yield
|
17
|
+
yield if block_given?
|
18
18
|
puts_line Focus::Formatter.ok, quiet: quiet
|
19
|
+
rescue FailedActionError, MissingConfiguration => error
|
20
|
+
puts_line Focus::Formatter.error error.to_s
|
21
|
+
end
|
22
|
+
|
23
|
+
def title(string)
|
24
|
+
puts
|
25
|
+
puts "-" * 50
|
26
|
+
puts string
|
27
|
+
puts "-" * 50
|
19
28
|
end
|
20
29
|
|
21
30
|
def debug_output(str)
|
data/lib/focus/version.rb
CHANGED