Size: a a a

2020 April 27

AM

Anton Mishkevich in RubyRush
спасибо
источник

E

Eugene in RubyRush
Anton
А предполагается, что филда в модели сама по себе хеш? Немного странно, если пришел хеш, почему для этого нет отдельный модели через ассоциацию, которая в свою очередь для свой односложной (не nested) филды вернет такую же односложную ошибку. Да, если мы храним JSON в БД, ошибку обработать посложнее. Но первое решение что приходит такое - этот гем для каждого parama принимает proc через ключ transform: proc -> .... В прок дать что-то что валидирует кастомно и выкидывает exception
Да разная бывает логика.

Например, в зависимости от разного типа этого entity дальше надо лезть в разные внешние API и проверять или регистрировать это физлицо или юрлицо у них, прежде чем (завершить) регистрацию у себя.
источник

E

Eugene in RubyRush
Anton
...
 param! :nested_param, String, transform: proc -> (field) { raise StandardError if field.not_valid? }
ну это не спортивно - я могу и изначально прописать

unless params[:nested_param].is_a?(String)
 raise StandardError
end
источник

E

Eugene in RubyRush
Anton Mishkevich
Добрый вечер! Может кто-нибудь подскажет? на компе в vs code код работает, на сайте codewars выдает ошибку https://www.codewars.com/kata/54e6533c92449cc251001667/train/ruby

def unique_in_order(iterable)
   arr1 = iterable.split("")
   arr2 = []
   arr2[0] = arr1[0]
   i = 0
   while i < (arr1.length - 1) do
       if arr1[i] != arr1[i + 1]
           arr2 << arr1[i + 1]    
       end
       i += 1
   end
   return arr2.to_s
end

puts unique_in_order('AAAABBBCCDAABBB')
массив надо вернуть, а вы вернули строку
источник

E

Eugene in RubyRush
а, уже подсказали
источник

A

Anton in RubyRush
@eugzol в любом случае придется где-то это лепить, в валидации параметров или в модели. Для dryинга мог бы сослаться на form object pattern. Но и так и так где-то будет сидеть сложная логика вытаскивания инфы по ключу и возвращения ошибки в случае невалидности. Только если я не знаю о какой-то панацеи
источник

E

Eugene in RubyRush
Anton
@eugzol в любом случае придется где-то это лепить, в валидации параметров или в модели. Для dryинга мог бы сослаться на form object pattern. Но и так и так где-то будет сидеть сложная логика вытаскивания инфы по ключу и возвращения ошибки в случае невалидности. Только если я не знаю о какой-то панацеи
это понятно - хотелось бы, чтобы эта логика:
- была там же, где вся прочая "предвалидация" параметров
- была декларативной
источник

E

Eugene in RubyRush
в моём варианте это как-то так описывается:

validator =
 Typecaster.schema do
   private_fields = hash(
     name: string,
     last_name: string
   )

   legal_entity_fields = hash(
     title: string,
     inn: integer
   )
     
   private_or_legal_field = hash(
     type: validate(in: [:private, :legal]),
   )

   private_or_legal_entity = hash(type: exact(:private)).then_else(
     private_fields,
     legal_entity_fields
   )

   private_or_legal_field & private_or_legal_entity
 end
источник

E

Eugene in RubyRush
что, конечно, далеко от идеала, но соответствует двум вышеприведённым пожеланиям
источник

A

Anton in RubyRush
Что такое Typecaster?
источник

E

Eugene in RubyRush
проверка через call делается:

validator.call(
 type: :legal,
 name: "Vasya",
 last_name: "Vasiliev"
)
источник

E

Eugene in RubyRush
Anton
Что такое Typecaster?
ну выше писал - гем, который надо допилить
источник

A

Anton in RubyRush
Аа
источник

E

Eugene in RubyRush
Eugene
проверка через call делается:

validator.call(
 type: :legal,
 name: "Vasya",
 last_name: "Vasiliev"
)
при этом все кейсы закрыты и "все ходы записаны" - если аккуратно всё прописать, то все случаи автоматически разбираются как надо:

* Если передать не хеш, а чёрти что, то скажет, что должен быть хеш
* Если передать хеш, где не будет поля type (или оно будет иметь не то значение), то скажет, что нужно поле type, принимающее одно из двух значений (и дальнейших проверок не будет)
* Если передать верный type, но не те поля валидируемого хеша (не подходящее под entity), то вернёт ошибку, мол, добавьте такие-то поля
источник

E

Eugene in RubyRush
это типа элементарный кейс, у меня в реальном проекте на две страницы эти декларации типов идут
источник

E

Eugene in RubyRush
но в целом вполне поддерживаемое вышло, потом через пару месяцев смотришь и легко нужное место найти, где что-то добавить/поменять надо
источник

VV

Vadim Venediktov in RubyRush
Про вино и Беларусь/Белоруссию потер, дождитесь выходных
источник

А

Александр in RubyRush
сорри))
источник
2020 April 28

А

Алексей in RubyRush
Александр
А кто в видео на счет сокращения бенча ЕПАМА сообщил? По нашим сведениям Бенч в епаме живее всезх живых
Я, речь про Могилёв. И узнал я от работника Епама в Могилёве
источник

А

Александр in RubyRush
Алексей
Я, речь про Могилёв. И узнал я от работника Епама в Могилёве
Обалдеть, нам только в пятницу говорили, что нету сокращений
источник