Change exposed_ports to array
This commit is contained in:
@@ -107,8 +107,15 @@ class ExecutionEnvironmentsController < ApplicationController
|
||||
|
||||
def execution_environment_params
|
||||
if params[:execution_environment].present?
|
||||
params[:execution_environment].permit(:docker_image, :exposed_ports, :editor_mode, :file_extension, :file_type_id, :help, :indent_size, :memory_limit, :cpu_limit, :name, :network_enabled, :permitted_execution_time, :pool_size, :run_command, :test_command, :testing_framework).merge(
|
||||
user_id: current_user.id, user_type: current_user.class.name
|
||||
exposed_ports = if params[:execution_environment][:exposed_ports_list].present?
|
||||
# Transform the `exposed_ports_list` to `exposed_ports` array
|
||||
params[:execution_environment].delete(:exposed_ports_list).scan(/\d+/)
|
||||
else
|
||||
[]
|
||||
end
|
||||
|
||||
params[:execution_environment].permit(:docker_image, :editor_mode, :file_extension, :file_type_id, :help, :indent_size, :memory_limit, :cpu_limit, :name, :network_enabled, :permitted_execution_time, :pool_size, :run_command, :test_command, :testing_framework).merge(
|
||||
user_id: current_user.id, user_type: current_user.class.name, exposed_ports: exposed_ports
|
||||
)
|
||||
end
|
||||
end
|
||||
|
@@ -28,7 +28,8 @@ class ExecutionEnvironment < ApplicationRecord
|
||||
validates :pool_size, numericality: {only_integer: true}, presence: true
|
||||
validates :run_command, presence: true
|
||||
validates :cpu_limit, presence: true, numericality: {greater_than: 0, only_integer: true}
|
||||
validates :exposed_ports, format: {with: /\A(([[:digit:]]{1,5},)*([[:digit:]]{1,5}))?\z/}
|
||||
before_validation :clean_exposed_ports
|
||||
validates :exposed_ports, array: {numericality: {greater_than_or_equal_to: 0, less_than: 65_536, only_integer: true}}
|
||||
|
||||
def set_default_values
|
||||
set_default_values_if_present(permitted_execution_time: 60, pool_size: 0)
|
||||
@@ -47,14 +48,19 @@ class ExecutionEnvironment < ApplicationRecord
|
||||
cpuLimit: cpu_limit,
|
||||
memoryLimit: memory_limit,
|
||||
networkAccess: network_enabled,
|
||||
exposedPorts: exposed_ports_list,
|
||||
exposedPorts: exposed_ports,
|
||||
}.to_json
|
||||
end
|
||||
|
||||
def exposed_ports_list
|
||||
(exposed_ports || '').split(',').map(&:to_i)
|
||||
exposed_ports.join(', ')
|
||||
end
|
||||
|
||||
def clean_exposed_ports
|
||||
self.exposed_ports = exposed_ports.uniq.sort
|
||||
end
|
||||
private :clean_exposed_ports
|
||||
|
||||
def valid_test_setup?
|
||||
if test_command? ^ testing_framework?
|
||||
errors.add(:test_command,
|
||||
|
@@ -14,9 +14,9 @@
|
||||
= f.text_field(:docker_image, class: 'alternative-input form-control', disabled: true)
|
||||
.help-block.form-text == t('.hints.docker_image')
|
||||
.form-group
|
||||
= f.label(:exposed_ports)
|
||||
= f.text_field(:exposed_ports, class: 'form-control', placeholder: '3000,4000', pattern: '^((\d{1,5},)*(\d{1,5}))?$')
|
||||
.help-block.form-text == t('.hints.exposed_ports')
|
||||
= f.label(:exposed_ports_list)
|
||||
= f.text_field(:exposed_ports_list, class: 'form-control', placeholder: '3000, 4000', pattern: '^(\s*(\d{1,5},\s*)*(\d{1,5}\s*))?$')
|
||||
.help-block.form-text = t('.hints.exposed_ports_list')
|
||||
.form-group
|
||||
= f.label(:memory_limit)
|
||||
= f.number_field(:memory_limit, class: 'form-control', min: DockerClient::MINIMUM_MEMORY_LIMIT, value: f.object.memory_limit || DockerClient::DEFAULT_MEMORY_LIMIT)
|
||||
|
@@ -5,7 +5,7 @@ h1
|
||||
= row(label: 'execution_environment.name', value: @execution_environment.name)
|
||||
= row(label: 'execution_environment.user', value: link_to_if(policy(@execution_environment.author).show?, @execution_environment.author, @execution_environment.author))
|
||||
= row(label: 'execution_environment.file_type', value: @execution_environment.file_type.present? ? link_to(@execution_environment.file_type, @execution_environment.file_type) : nil)
|
||||
- [:docker_image, :exposed_ports, :memory_limit, :cpu_limit, :network_enabled, :permitted_execution_time, :pool_size].each do |attribute|
|
||||
- [:docker_image, :exposed_ports_list, :memory_limit, :cpu_limit, :network_enabled, :permitted_execution_time, :pool_size].each do |attribute|
|
||||
= row(label: "execution_environment.#{attribute}", value: @execution_environment.send(attribute))
|
||||
- [:run_command, :test_command].each do |attribute|
|
||||
= row(label: "execution_environment.#{attribute}") do
|
||||
|
Reference in New Issue
Block a user