class ForeignInputSet

def check_circular_dependency

def check_circular_dependency
  self.inputs
  true
rescue CircularDependencyError => e
  self.errors.add :base, e.message
end

def comma_separated_names(value)

def comma_separated_names(value)
  value.to_s.split(',').map(&:strip)
end

def excluded_names

def excluded_names
  comma_separated_names(self.exclude)
end

def included_names

def included_names
  comma_separated_names(self.include)
end

def inputs(templates_stack = [])

def inputs(templates_stack = [])
  return [] unless target_template
  if templates_stack.include?(target_template) || template&.id == target_template&.id
    raise CircularDependencyError.new(N_("Circular dependency detected in foreign input set '%{template}' -> '%{target_template}'. Templates stack: %{templates_stack}"),
      :template => template.name, :target_template => target_template.name, :templates_stack => templates_stack.map(&:name).inspect)
  end
  inputs = target_template.template_inputs_with_foreign(templates_stack + [target_template])
  unless self.include_all?
    inputs = inputs.select { |input| included_names.include?(input.name) }
  end
  inputs = inputs.reject { |input| excluded_names.include?(input.name) }
  return inputs
end