ifocustt 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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