command_proposal 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/app/helpers/command_proposal/icons_helper.rb +1 -0
- data/app/models/command_proposal/iteration.rb +6 -1
- data/app/views/command_proposal/tasks/_function_show.html.erb +6 -1
- data/app/views/command_proposal/tasks/_past_iterations_list.html.erb +0 -1
- data/app/views/command_proposal/tasks/_task_show.html.erb +7 -7
- data/app/views/command_proposal/tasks/form.html.erb +1 -1
- data/lib/command_proposal/services/command_interpreter.rb +3 -0
- data/lib/command_proposal/services/runner.rb +13 -4
- data/lib/command_proposal/services/shut_down.rb +25 -0
- data/lib/command_proposal/version.rb +1 -1
- data/lib/command_proposal.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0fe3241c83226bc2aebbc46b3b8deaec5886dcd6ed8dea95d53e4d84510fb9c5
|
4
|
+
data.tar.gz: '09e82ce7d547624f6da07c2536c0c235e4205ff70e76bc8c4e20c07dcbb818da'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57055fced9213819d5d0b9dfbcd3d1d28430a3f34bae8ff6b16b7b48034d68ae71e50411d5d4db90c83502fa7a1bd7ceb02e6861da8f16a558f952d16dbba7d8
|
7
|
+
data.tar.gz: 2288b1576b1019d3d1c937d9fa6e346e2facc4b7e58756bed2b6517fb453733c2ec256eda3dec0973c9ffff6ac5331e7b3ff7ee8d8415c241b02543737fe1209
|
data/README.md
CHANGED
@@ -59,7 +59,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
59
59
|
|
60
60
|
## Contributing
|
61
61
|
|
62
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
62
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/rockster160/command_proposal. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/rockster160/command_proposal/blob/master/CODE_OF_CONDUCT.md).
|
63
63
|
|
64
64
|
## TODO
|
65
65
|
|
@@ -74,4 +74,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
74
74
|
|
75
75
|
## Code of Conduct
|
76
76
|
|
77
|
-
Everyone interacting in the CommandProposal project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/
|
77
|
+
Everyone interacting in the CommandProposal project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/rockster160/command_proposal/blob/master/CODE_OF_CONDUCT.md).
|
@@ -7,6 +7,7 @@ module CommandProposal
|
|
7
7
|
started: "cmd-icon-grey fa fa-clock-o",
|
8
8
|
cancelling: "cmd-icon-yellow fa fa-hourglass-half",
|
9
9
|
cancelled: "cmd-icon-yellow fa fa-stop-circle",
|
10
|
+
terminated: "cmd-icon-red fa fa-stop-circle",
|
10
11
|
failed: "cmd-icon-red fa fa-times-circle",
|
11
12
|
success: "cmd-icon-green fa fa-check-circle",
|
12
13
|
}[status&.to_sym] || "cmd-icon-yellow fa fa-question"
|
@@ -34,6 +34,7 @@ class ::CommandProposal::Iteration < ApplicationRecord
|
|
34
34
|
cancelling: 4, # Running, but told to stop
|
35
35
|
cancelled: 5,
|
36
36
|
success: 6,
|
37
|
+
terminated: 7, # Closed via server restart
|
37
38
|
}
|
38
39
|
|
39
40
|
delegate :name, to: :task
|
@@ -52,13 +53,17 @@ class ::CommandProposal::Iteration < ApplicationRecord
|
|
52
53
|
end
|
53
54
|
|
54
55
|
def complete?
|
55
|
-
success? || failed? || cancelled?
|
56
|
+
success? || failed? || cancelled? || terminated?
|
56
57
|
end
|
57
58
|
|
58
59
|
def pending?
|
59
60
|
created?
|
60
61
|
end
|
61
62
|
|
63
|
+
def running?
|
64
|
+
started? || cancelling?
|
65
|
+
end
|
66
|
+
|
62
67
|
def duration
|
63
68
|
return unless started_at?
|
64
69
|
|
@@ -1,6 +1,11 @@
|
|
1
1
|
<%= render partial: "task_detail_table" %>
|
2
2
|
|
3
3
|
<%= form_for @iteration, url: cmd_path(@iteration), html: { id: "edit-form-1" } do |f| %>
|
4
|
+
<% @iteration.brings.each do |bring_module| %>
|
5
|
+
<% needs_approval_str = " -- Module needs approval before running Task" unless bring_module.approved? %>
|
6
|
+
<%= link_to "Module: #{bring_module.name}#{needs_approval_str}", cmd_path("#{bring_module.friendly_id}") %>
|
7
|
+
<br>
|
8
|
+
<% end %>
|
4
9
|
<% if @task.approved? && @iteration.params.any? %>
|
5
10
|
<div class="form-field">
|
6
11
|
<% @iteration.params.each do |param_key| %>
|
@@ -24,7 +29,7 @@
|
|
24
29
|
<% if current_is_author?(@iteration) %>
|
25
30
|
|
26
31
|
<% case @iteration.status&.to_sym %>
|
27
|
-
<% when :created, :failed, :cancelled %>
|
32
|
+
<% when :created, :failed, :cancelled, :terminated %>
|
28
33
|
<% unless @iteration.approved_at? %>
|
29
34
|
<% if can_approve?(@iteration) %>
|
30
35
|
<%= f.hidden_field :command, value: :approve %>
|
@@ -2,17 +2,17 @@
|
|
2
2
|
|
3
3
|
<% if @iteration.present? %>
|
4
4
|
<%= form_for @iteration, url: cmd_path(@iteration) do |f| %>
|
5
|
-
<%
|
6
|
-
<%
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
<% end %>
|
5
|
+
<% @iteration.brings.each do |bring_module| %>
|
6
|
+
<% needs_approval_str = " -- Module needs approval before running Task" unless bring_module.approved? %>
|
7
|
+
<%= link_to "Module: #{bring_module.name}#{needs_approval_str}", cmd_path("#{bring_module.friendly_id}") %>
|
8
|
+
<br>
|
9
|
+
<% end %>
|
11
10
|
|
11
|
+
<% unless params.key?(:iteration) %>
|
12
12
|
<% if current_is_author?(@iteration) %>
|
13
13
|
|
14
14
|
<% case @iteration.status&.to_sym %>
|
15
|
-
<% when :created, :cancelled %>
|
15
|
+
<% when :created, :cancelled, :terminated %>
|
16
16
|
<% if can_approve?(@iteration) %>
|
17
17
|
<%= f.hidden_field :command, value: :approve %>
|
18
18
|
<%= f.submit "Approve!" %>
|
@@ -9,7 +9,7 @@
|
|
9
9
|
|
10
10
|
<%= form_for(@task, url: cmd_path(@task)) do |f| %>
|
11
11
|
<div class="cmd-field">
|
12
|
-
<%= f.text_field :name, placeholder: "Title", class: "cmd-input" %>
|
12
|
+
<%= f.text_field :name, placeholder: "Title", class: "cmd-input", required: true %>
|
13
13
|
</div>
|
14
14
|
|
15
15
|
<div class="cmd-field">
|
@@ -77,6 +77,9 @@ module CommandProposal
|
|
77
77
|
return if @iteration.complete?
|
78
78
|
|
79
79
|
@iteration.update(status: :cancelling)
|
80
|
+
return if ::CommandProposal.sessions.key?("task:#{@task.id}")
|
81
|
+
|
82
|
+
::CommandProposal::Services::ShutDown.terminate(@iteration)
|
80
83
|
end
|
81
84
|
|
82
85
|
def command_close
|
@@ -4,6 +4,12 @@ module CommandProposal
|
|
4
4
|
attr_accessor :session
|
5
5
|
# Add expiration and things like that...
|
6
6
|
|
7
|
+
def self.execute(friendly_id)
|
8
|
+
task = ::CommandProposal::Task.find_by!(friendly_id: friendly_id)
|
9
|
+
|
10
|
+
new.execute(task.primary_iteration)
|
11
|
+
end
|
12
|
+
|
7
13
|
def initialize
|
8
14
|
@session = session
|
9
15
|
end
|
@@ -20,8 +26,11 @@ module CommandProposal
|
|
20
26
|
proposal
|
21
27
|
end
|
22
28
|
|
23
|
-
def quick_run(
|
24
|
-
|
29
|
+
def quick_run(friendly_id)
|
30
|
+
task = ::CommandProposal::Task.module.find_by!(friendly_id: friendly_id)
|
31
|
+
iteration = task&.primary_iteration
|
32
|
+
|
33
|
+
raise CommandProposal::Error, ":#{friendly_id} does not have approval to run." unless iteration&.approved?
|
25
34
|
|
26
35
|
@session.eval(iteration.code)
|
27
36
|
end
|
@@ -77,7 +86,7 @@ module CommandProposal
|
|
77
86
|
status = :cancelled
|
78
87
|
end
|
79
88
|
|
80
|
-
sleep
|
89
|
+
sleep 0.4
|
81
90
|
end
|
82
91
|
|
83
92
|
output = $stdout.try(:string)
|
@@ -90,7 +99,7 @@ module CommandProposal
|
|
90
99
|
end
|
91
100
|
|
92
101
|
def bring_function
|
93
|
-
"def bring(*func_names); func_names.each { |f| self.quick_run(
|
102
|
+
"def bring(*func_names); func_names.each { |f| self.quick_run(f) }; end"
|
94
103
|
end
|
95
104
|
|
96
105
|
def complete
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module CommandProposal
|
2
|
+
module Services
|
3
|
+
module ShutDown
|
4
|
+
module_function
|
5
|
+
|
6
|
+
def reset_all
|
7
|
+
pending = ::CommandProposal::Iteration.where(status: [:started, :cancelling])
|
8
|
+
pending.find_each do |iteration|
|
9
|
+
terminate(iteration)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def terminate(iteration)
|
14
|
+
return unless iteration.running?
|
15
|
+
|
16
|
+
terminated_result = iteration.result + "\n\n~~~~~ TERMINATED ~~~~~"
|
17
|
+
iteration.update(
|
18
|
+
status: :terminated,
|
19
|
+
result: terminated_result,
|
20
|
+
completed_at: Time.current
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/command_proposal.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: command_proposal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rocco Nicholls
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-08-
|
11
|
+
date: 2021-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -134,6 +134,7 @@ files:
|
|
134
134
|
- lib/command_proposal/engine.rb
|
135
135
|
- lib/command_proposal/services/command_interpreter.rb
|
136
136
|
- lib/command_proposal/services/runner.rb
|
137
|
+
- lib/command_proposal/services/shut_down.rb
|
137
138
|
- lib/command_proposal/version.rb
|
138
139
|
- lib/generators/command_proposal/install/install_generator.rb
|
139
140
|
- lib/generators/command_proposal/install/templates/initializer.rb
|