Sha256: 727c36d11185e068f3af05928e9b6dbaba1f15484fb8ec0ded39709652aa4d5d

Contents?: true

Size: 1.32 KB

Versions: 3

Compression:

Stored size: 1.32 KB

Contents

module RocketJobMissionControl
  module JobSanitizer
    # Returns [Hash] the permissible params for the specified job class, after sanitizing.
    # Parameters
    #   properties [Hash]
    #     Parameters to extract the values from.
    #
    #   job_class [RocketJob::Job]
    #     Job class from which the user editable fields and types will be retrieved.
    #
    #   target [ActiveModel::Base]
    #     Model to set the errors on.
    #
    #   nil_blank [Boolean]
    #     true: Nil out blank fields.
    #     false: Do not return blank fields.
    #     Default: true
    def self.sanitize(properties, job_class, target, nil_blank = true)
      permissible_params = {}
      job_class.user_editable_fields.each do |field_name|
        next unless value = properties[field_name]

        field = job_class.fields[field_name.to_s]
        next unless field&.type

        case field.type.name
        when "Hash"
          begin
            value = value.blank? ? nil : JSON.parse(value)
          rescue JSON::ParserError => e
            target.errors.add(:properties, e.message)
          end
        end

        if value.blank? && !value.is_a?(Hash)
          permissible_params[field_name] = nil if nil_blank
        else
          permissible_params[field_name] = value
        end
      end
      permissible_params
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rocketjob_mission_control-5.0.1 app/models/rocket_job_mission_control/job_sanitizer.rb
rocketjob_mission_control-5.0.0 app/models/rocket_job_mission_control/job_sanitizer.rb
rocketjob_mission_control-5.0.0.beta1 app/models/rocket_job_mission_control/job_sanitizer.rb