command_proposal 1.0.5 → 1.0.9

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: 1095c2b3d7207326a44dd3474916e7d3ce51008c95fd2005e30fa7a2b535d729
4
- data.tar.gz: e96c62233dbab18e5cc6c8cb33d53bb1fbe8f9b6bd8012b660cb0cfe834dd764
3
+ metadata.gz: 5ae6c3b31f79557ffddfc4cc86435547b0523e204ff618d88160b4b7caa16da7
4
+ data.tar.gz: e2fdfb9505a9c10815f5503a3db917ef63b019b83a2f86b4f5d5dd30e704a8c1
5
5
  SHA512:
6
- metadata.gz: 7c862c39b1e7349cbd286c457d858ad8fb101f0ed723afaaf9e3ababa8187cec993a0e53339d898e0a7b2a38488c510bf443b02f78b58c6108354862979d0f55
7
- data.tar.gz: 8b552be1f3e06b6d2292a4ea30dab48cdb71c99b32a3493d5ef636b283add4d736d8b8917c1c6c43630bbd5a5e039d5fa93b9c45175565ecc3e0327927c5f8aa
6
+ metadata.gz: 7199f95ffb1a7f26b8c58f96bc7d249d2d9429b7104fba4016aedcc3fcf0a355ea6748de16a7e136d0ab5c2bd927df14c173e5a84439b49993500031abd43601
7
+ data.tar.gz: 3d9c1bf0cbfa570679e8d149402278cfb34a453368ea8e5da72744ec93043ef199cfe92eac2233f91d692f4aa8a7d882245a15bc6c132271dd4438616a41a711
@@ -48,7 +48,7 @@ class ::CommandProposal::IterationsController < ::CommandProposal::EngineControl
48
48
  begin
49
49
  alter_command if params.dig(:command_proposal_iteration, :command).present?
50
50
  rescue ::CommandProposal::Services::CommandInterpreter::Error => e
51
- return redirect_to cmd_path(:tasks, :error), alert: e.message
51
+ return redirect_to cmd_path(:error, :tasks), alert: e.message
52
52
  end
53
53
 
54
54
  sleep 0.2
@@ -21,9 +21,13 @@ module CommandProposal
21
21
  args << { host: host, port: nil } if host.present?
22
22
 
23
23
  begin
24
- command_proposal_engine.url_for(args.compact)
24
+ engine.url_for(args.compact)
25
25
  rescue NoMethodError => e
26
- raise "Error generating route! Please make sure `config.action_mailer.default_url_options` are set."
26
+ if e.message.match?(/\_(url|path)\'/)
27
+ raise e
28
+ else
29
+ raise "Error generating route! Please make sure `config.action_mailer.default_url_options` are set."
30
+ end
27
31
  end
28
32
  end
29
33
 
@@ -40,24 +44,28 @@ module CommandProposal
40
44
  end
41
45
 
42
46
  def string_path(*args)
43
- [command_proposal_engine.command_proposal_tasks_url + args.shift, args.to_param.presence].compact.join("?")
47
+ [engine.command_proposal_tasks_url + args.shift, args.to_param.presence].compact.join("?")
48
+ end
49
+
50
+ def engine
51
+ @engine ||= send(::CommandProposal.engine_name)
44
52
  end
45
53
 
46
54
  # Runner controller doesn't map to a model, so needs special handling
47
55
  def runner_path(task, iteration=nil)
48
56
  if iteration.present?
49
- command_proposal_engine.command_proposal_task_runner_path(task, iteration)
57
+ engine.command_proposal_task_runner_path(task, iteration)
50
58
  else
51
- command_proposal_engine.command_proposal_task_runner_index_path(task)
59
+ engine.command_proposal_task_runner_index_path(task)
52
60
  end
53
61
  end
54
62
 
55
63
  # Runner controller doesn't map to a model, so needs special handling
56
64
  def runner_url(task, iteration=nil)
57
65
  if iteration.present?
58
- command_proposal_engine.command_proposal_task_runner_url(task, iteration)
66
+ engine.command_proposal_task_runner_url(task, iteration)
59
67
  else
60
- command_proposal_engine.command_proposal_task_runner_index_url(task)
68
+ engine.command_proposal_task_runner_index_url(task)
61
69
  end
62
70
  end
63
71
  end
@@ -1,4 +1,7 @@
1
1
  module CommandProposal
2
2
  class ApplicationJob < ActiveJob::Base
3
+ rescue_from(StandardError) do |exception|
4
+ Rails.logger.error "[#{self.class.name}] Job failed and will not retry: #{exception.to_s}"
5
+ end
3
6
  end
4
7
  end
@@ -42,7 +42,7 @@ class ::CommandProposal::Iteration < ApplicationRecord
42
42
  delegate :session_type, to: :task
43
43
 
44
44
  def params
45
- code.scan(/params\[[:\"\'](.*?)[\'\"]?\]/).flatten
45
+ code.scan(/params\[[:\"\'](.*?)[\'\"]?\]/).flatten.uniq
46
46
  end
47
47
 
48
48
  def brings
@@ -18,8 +18,8 @@
18
18
  <% end %>
19
19
  </td>
20
20
  <td><%= iteration.status.capitalize %></td>
21
- <!-- <td><%= iteration.comments.count %></td> -->
22
- <!-- <td><%= link_to "Diff", cmd_path(@task, iteration: @iteration.id, diff: iteration.id) %></td> -->
21
+ <!-- <td><%#= iteration.comments.count %></td> -->
22
+ <!-- <td><%#= link_to "Diff", cmd_path(@task, iteration: @iteration.id, diff: iteration.id) %></td> -->
23
23
  </tr>
24
24
  <% end %>
25
25
  </tbody>
@@ -10,6 +10,7 @@ module CommandProposal
10
10
  :approval_required,
11
11
  # Optional
12
12
  :proposal_callback,
13
+ :approval_callback,
13
14
  :success_callback,
14
15
  :failed_callback,
15
16
  )
@@ -26,6 +27,7 @@ module CommandProposal
26
27
 
27
28
  # Optional
28
29
  @proposal_callback = nil
30
+ @approval_callback = nil
29
31
  @success_callback = nil
30
32
  @failed_callback = nil
31
33
  end
@@ -56,6 +56,8 @@ module CommandProposal
56
56
  check_can_command? && check_can_approve?
57
57
 
58
58
  @iteration.update(status: :approved, approver: @user, approved_at: Time.current)
59
+ proposal = ::CommandProposal::Service::ProposalPresenter.new(@iteration)
60
+ ::CommandProposal.configuration.approval_callback&.call(proposal)
59
61
  end
60
62
 
61
63
  def command_run
@@ -86,7 +88,11 @@ module CommandProposal
86
88
  check_can_command?
87
89
  return unless @iteration.task.console?
88
90
 
89
- @task.first_iteration.update(status: :success, completed_at: Time.current)
91
+ if ::CommandProposal.sessions.key?("task:#{@task.id}")
92
+ @task.first_iteration.update(status: :success, completed_at: Time.current)
93
+ else
94
+ @task.first_iteration.update(status: :terminated, completed_at: Time.current)
95
+ end
90
96
  ::CommandProposal.sessions.delete("task:#{@task.id}")
91
97
  end
92
98
 
@@ -125,7 +125,8 @@ module CommandProposal
125
125
 
126
126
  def results_from_exception(exc)
127
127
  klass = exc.class
128
- msg = exc.try(:message) || exc.try(:body) || exc.to_s
128
+ # Dup to avoid frozen string errors
129
+ msg = (exc.try(:message) || exc.try(:body) || exc.to_s).dup
129
130
  # Remove proposal context
130
131
  msg.gsub!(/ for \#\<CommandProposal.*/, "")
131
132
  msg.gsub!(/(::)?CommandProposal::Services::Runner(::)?/, "")
@@ -142,7 +143,7 @@ module CommandProposal
142
143
 
143
144
  eval_trace = backtrace.select { |row| row.include?("(eval)") }.presence || []
144
145
  eval_trace = eval_trace.map do |row|
145
- eval_row_number = row[/\(eval\)\:\d+/].to_s[7..-1]
146
+ eval_row_number = row[/\(eval\)\:\d+/].to_s.dup[7..-1]
146
147
  next if eval_row_number.blank?
147
148
 
148
149
  error_line = @iteration.code.split("\n")[eval_row_number.to_i - 1]
@@ -1,8 +1,3 @@
1
- # gem build command_proposal.gemspec
2
- # gam "Built version __ of gem."
3
- # gpo
4
- # gem push command_proposal-__.gem
5
-
6
1
  module CommandProposal
7
- VERSION = '1.0.5'
2
+ VERSION = "1.0.9"
8
3
  end
@@ -22,6 +22,12 @@ module CommandProposal
22
22
  @configuration = ::CommandProposal::Configuration.new
23
23
  end
24
24
 
25
+ def self.engine_name
26
+ @engine_name ||= begin
27
+ `rails routes | grep command_proposal_engine`[/\w*command_proposal_engine/]
28
+ end
29
+ end
30
+
25
31
  def self.configure
26
32
  yield(configuration)
27
33
  end
@@ -43,6 +43,10 @@
43
43
  config.proposal_callback = Proc.new { |proposal|
44
44
  # Slack.notify("#{proposal.requester} has proposed #{proposal.name}.\n<#{proposal.url}|Click Here> to view this proposal and approve.")
45
45
  }
46
+ # Called when a command is approved
47
+ config.approval_callback = Proc.new { |proposal|
48
+ # Slack.notify("The task #{proposal.name} has been approved and is now ready to run.\n<#{proposal.url}|Click Here> to view.")
49
+ }
46
50
  # Called when a command runs and completes successfully
47
51
  config.success_callback = Proc.new { |proposal|
48
52
  # Slack.notify("The task #{proposal.name} has completed in #{proposal.duration}s.\n<#{proposal.url}|Click Here> to view the results.")
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.5
4
+ version: 1.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rocco Nicholls
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-31 00:00:00.000000000 Z
11
+ date: 2021-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5.0'
19
+ version: 5.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '5.0'
26
+ version: 5.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: font-awesome-rails
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -147,7 +147,7 @@ metadata:
147
147
  homepage_uri: https://github.com/Rockster160/command_proposal
148
148
  source_code_uri: https://github.com/Rockster160/command_proposal
149
149
  changelog_uri: https://github.com/Rockster160/command_proposal/blob/master/README.md
150
- post_install_message:
150
+ post_install_message:
151
151
  rdoc_options: []
152
152
  require_paths:
153
153
  - lib
@@ -162,8 +162,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
162
  - !ruby/object:Gem::Version
163
163
  version: '0'
164
164
  requirements: []
165
- rubygems_version: 3.1.4
166
- signing_key:
165
+ rubygems_version: 3.2.22
166
+ signing_key:
167
167
  specification_version: 4
168
168
  summary: Gives the ability to run approved commands through a UI in your browser
169
169
  test_files: []