command_proposal 1.0.2 → 1.0.3
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/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
|