Size: a a a

2020 January 30

k

kapkapbopoh in pro.ruby
Alex Ilizarov
тебе это обязательно в текущем потоке делать?
Неа
источник

k

kapkapbopoh in pro.ruby
Alex Ilizarov
b.on(:success, Attack)

Ты уверен что он его дернет в этом же потоке?
Под колбек сайдик создаёт новый воркер
источник

k

kapkapbopoh in pro.ruby
Меня устраивает батч, который автоматически следит за джобами, проблема вот была только с тем как ему сообщить, чтобы он вызывал метод класса, а не инстанса
Даже в документации, в примерах тестирования батча, там создаётся инстанс воркера и на нем вызывается калбек, а не на классе:

Sidekiq::Testing.inline! do
 b = Sidekiq::Batch.new         b.on(:success, "Something#done", "foo" => "bar")
b.jobs do
# these jobs will execute immediately due to inline! mode
SomeWorker.perform_async
SomeWorker.perform_async
end
# now simulate the callback
Something.new.done(Sidekiq::Batch::Status.new(b.bid), {"foo" => "bar"})
end

Передаем Something#done, а вызываем как Something.new.done
источник

AI

Alex Ilizarov in pro.ruby
kapkapbopoh
Меня устраивает батч, который автоматически следит за джобами, проблема вот была только с тем как ему сообщить, чтобы он вызывал метод класса, а не инстанса
Даже в документации, в примерах тестирования батча, там создаётся инстанс воркера и на нем вызывается калбек, а не на классе:

Sidekiq::Testing.inline! do
 b = Sidekiq::Batch.new         b.on(:success, "Something#done", "foo" => "bar")
b.jobs do
# these jobs will execute immediately due to inline! mode
SomeWorker.perform_async
SomeWorker.perform_async
end
# now simulate the callback
Something.new.done(Sidekiq::Batch::Status.new(b.bid), {"foo" => "bar"})
end

Передаем Something#done, а вызываем как Something.new.done
сделай класс/джоб который не требует аргументов при инициализации
источник

AI

Alex Ilizarov in pro.ruby
там точно нельзя никак аргументы инициализации передать?
источник

k

kapkapbopoh in pro.ruby
Alex Ilizarov
сделай класс/джоб который не требует аргументов при инициализации
Да, тоже о таком подумал)
источник

k

kapkapbopoh in pro.ruby
Alex Ilizarov
там точно нельзя никак аргументы инициализации передать?
Пока не получилось)
источник

BO

Black Olive in pro.ruby
Ребята, как решается проблема, когда ты парсишь xls-файл и в ячейках есть данные, а точнее числа с 0 вначале, так вот, они когда спарсим, то без нуля берутся. Как решить эту проблему?
источник

SD

Sunny Daily in pro.ruby
Black Olive
Ребята, как решается проблема, когда ты парсишь xls-файл и в ячейках есть данные, а точнее числа с 0 вначале, так вот, они когда спарсим, то без нуля берутся. Как решить эту проблему?
регулярками?
источник

E

Evgeny in pro.ruby
Black Olive
Ребята, как решается проблема, когда ты парсишь xls-файл и в ячейках есть данные, а точнее числа с 0 вначале, так вот, они когда спарсим, то без нуля берутся. Как решить эту проблему?
Парси как стринг, а не как число 🙂
источник

BO

Black Olive in pro.ruby
Не все просто так, и не в этом дело.
источник

AI

Alex Ilizarov in pro.ruby
Black Olive
Не все просто так, и не в этом дело.
Да, дело в библиотеке которую ты используешь.
источник

СБ

Сергей Блохин in pro.ruby
Собственно, какая библиотека-то используется и какой именно формат файлов разбираете (.xls или .xlsx)?
источник

СБ

Сергей Блохин in pro.ruby
Есть метод, который принимает источник и назначение.
Внутри метода берутся данные из источника, обрабатываются и кладутся в назначение.

ruby
def main(source, distention)
 entities = source.get_entities
 entities.each do |entity|
   entity.property += 1

   distention.put_entity entity
 end
end


Появилась необходимость добавить условие при обработке данных.
В результате работы условия будет два назначения.
Я вижу два варианта решения.

Первый — добавить в метод (любым образом (дополнительным аргументов или массивом назначений)) дополнительное назначение.
Добавить в методе условие, в результате которого будет выбираться то или иное назначение.
Плюсы: Меньше дублирования кода (см. второй вариант).
Минусы: Обработка данных может сильно отличаться, в зависимости от выбранного назначения.
       Кодовая база метода может сильно вырасти и стать менее универсальной.

ruby
def main(source, distention_1, distention_2)
 entities = source.get_entities
 entities.each do |entity|    
   if entity.is_property
     entity.property += 1
     distention_1.put_entity entity
   else
     entity.property -= 1
     distention_2.put_entity entity
   end
 end
 @log.info :some_log_info
end


Второй — сделать метод-дублёр.
Оба метода принимают источник и пишут данные каждый в своё назначение.
Плюсы: Каждый метод делать только свою работу.
      Более универсальное решение, т. к. при добавлении новых условий/назначений,
           создаются новые методы под конкретное условие.
Минусы: Дублирование большого участка кода между методами.
       Двойной запрос данных у источника (оба раза забираются все данные).

ruby
def main_for_distention_1(source, distention)
 entities = source.get_entities
 entities.each do |entity|
   if entity.is_property
     entity.property += 1
     distention.put_entity entity
   else
     next
   end
 end
 @log.info :some_log_info
end


ruby
def main_for_distention_2(source, distention)
 entities = source.get_entities
 entities.each do |entity|
   if entity.is_property
     next
   else
     entity.property -= 1
     distention.put_entity entity
   end
 end
 @log.info :some_log_info
end


Что выбрать?
источник

СБ

Сергей Блохин in pro.ruby
*destination, конечно. Во все примеры вкралась опечатка...
источник

MC

Mikhail Churakov in pro.ruby
def main(source, destination, &block)
 entities = source.get_entities.select(&block)
 entities.each do |entity|
   entity.property += 1

   distention.put_entity entity
 end

main(source, destination1, proc{ |i| i < 3 })
main(source, destination2, proc{ |i| i >= 3 })
источник

MC

Mikhail Churakov in pro.ruby
такой вариант не рассматриваете ?
источник

СБ

Сергей Блохин in pro.ruby
@mch735 я правильно понимаю, что proc{|i|} вы вложили условие, по которому будет выбираться назначение?
источник

MC

Mikhail Churakov in pro.ruby
да ...
источник

BO

Black Olive in pro.ruby
Парсинг xls с помощью Spreadsheet. Если в ячейке есть число с нулем в начале, то выводит без нуля, т. е. 0512 выведет 512. Как решить эту проблему?
источник