Class: ValidateResponse

Inherits:
Object
  • Object
show all
Defined in:
lib/validate-response.rb,
lib/validate-response/version.rb

Overview


Класс приводит к единообразной структуре сообщения об ошибках одного или нескольких объектов ActiveRecord.

Пример использования:

render json: {
  result: @user.update_attributes(params[:user]),
  validates: ValidateResponse.new(@user.contacts)
}

Поддерживаются объекты разных моделей

a.update_attributes(...)
b.update_attributes(...)
ValidateResponse.new(a, b)

nil - Используется для обозначения new_record записей (еще не сохраненных в базе)

Примеры заполнения:

Пример 1:
  ValidateResponse.new(@user.contacts)

Пример 2:
  ValidateResponse.new(@room)

Пример 3:
  x = ValidateResponse.new()
  x << contact1
  x << contact2
  x << contact3 << contact4

Пример 4 (ручное заполнение):
  x = ValidateResponse.new()
  x[:users, 1] = {
    name: 'ошибка такая-то',
    age: ['несоответствие 1', 'несоответствие 2']
  }
  x[:users, nil] = {
    name: 'ошибка такая-то',
    age: ['несоответствие 1', 'несоответствие 2']
  }

Пример 5 (ручное заполнение):
  x = ValidateResponse.new()
  x[:users] = {
    1 => {
      name: 'ошибка такая-то',
      age: ['несоответствие 1', 'несоответствие 2']
    },
    nil => {
      name: 'ошибка такая-то',
      age: ['несоответствие 1', 'несоответствие 2']
    }
  }

Defined Under Namespace

Classes: Engine, InvalidErrorsObject

Constant Summary collapse

VERSION =
'0.0.5'

Instance Method Summary collapse

Constructor Details

#initialize(*errors_objects) ⇒ ValidateResponse

Returns a new instance of ValidateResponse.

Parameters:

  • *errors_object (ActiveModel::Base, ...)


64
65
66
67
# File 'lib/validate-response.rb', line 64

def initialize(*errors_objects)
  @errors = {}
  add *errors_objects
end

Instance Method Details

#<<(errors_object) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/validate-response.rb', line 95

def <<(errors_object)
  check_errors_object errors_object
  return self if errors_object.errors.count.zero?
  record_type = errors_object.class.name.tableize.to_sym
  record_id   = errors_object.id
  @errors[record_type] ||= {}
  @errors[record_type][record_id] ||= {}
  #@errors[record_type][record_id] = Hash[errors_object.errors]
  record_errors = (@errors[record_type][record_id] ||= {})
  Hash[errors_object.errors].each do |field, messages|
    record_errors[field] ||= []
    record_errors[field] |= messages
  end
  self
end

#[](*key) ⇒ Object



77
78
79
80
81
82
# File 'lib/validate-response.rb', line 77

def [](*key)
  case key.length
    when 1 then @errors[key[0].to_sym]
    when 2 then ((@errors[key[0].to_sym] ||= {})[key[1]] ||= {})
  end
end

#[]=(*key, content) ⇒ Object



84
85
86
87
88
89
# File 'lib/validate-response.rb', line 84

def []=(*key, content)
  case key.length
    when 1 then (@errors[key[0].to_sym] ||= {}).merge!(prepare_group content)
    when 2 then (@errors[key[0].to_sym] ||= {})[key[1]] = prepare_hash_with_messages content
  end
end

#add(*errors_objects) ⇒ Object



91
92
93
# File 'lib/validate-response.rb', line 91

def add(*errors_objects)
  errors_objects.flatten.each{ |errors_object| self << errors_object }
end

#to_hashObject Also known as: to_s, inspect, errors



73
74
75
# File 'lib/validate-response.rb', line 73

def to_hash
  @errors
end

#to_jsonObject



69
70
71
# File 'lib/validate-response.rb', line 69

def to_json
  @errors.to_json
end