Sha256: 2cc6b90477cbb70684515286346d46b143ddcce370a64e1cd31868f9968f8d7d

Contents?: true

Size: 1.93 KB

Versions: 1

Compression:

Stored size: 1.93 KB

Contents

#++
# Базовый контроллер для всех remedy-запросов.
#
# Базовый action-методы описываются тут, если в конкретном подклассе необходимо,
# то всегда базовый метод можно переопределить.
#--
class RemedyController < Tehportal.config.parent_controller.constantize
  # before_filter :specify_params, only: %i(index search)
  # respond_with_params only: %i(index search)

  def send_request
    model = "Tehportal::#{params[:model].capitalize}".constantize
    render_remedy_json model.send(params[:method], params[:data])
  end

  # ВСЕВОЗМОЖНЫЕ СПИСКИ
  def index
    result = model.list(params[:operation], list_params)
    result['getListValues'] = Array.wrap(result['getListValues'])

    render_remedy_json result
  end

  # СВЯЗИ
  def associations
    render_remedy_json model.associations('GetList_Association', association_params)
  end

  private

  # Получение класса модели, через которую будут делаться запросы
  def model
    @model ||= "Tehportal::#{params[:controller].split('/').last.capitalize}".constantize
  end

  def model_class(name)
    "Tehportal::#{name.capitalize}".constantize
  end

  # Запрос на получение связей, имя ID объекта у всех разный
  def association_params
    data = {}
    model_name = params[:controller].split('/').last.downcase.to_sym
    params_map = {incidents: 'IncidentNumber', problems: 'ProblemInvestigationID', changes: 'Infrastructure_Change_ID'}

    data[params_map[model_name]] = params[:id]
    data
  end

  private

  def render_remedy_json(data)
    if data.is_a? Array
      render json: data
    else
      prepared = data.except!('@xmlns:ns0', '@xmlns:xsd', '@xmlns:xsi')
      render json: (prepared.blank? && data.length != 3) ? {} : prepared
    end
  end

end


Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tehportal-0.1.3 app/controllers/remedy_controller.rb