
Combot
06.04.2017
19:13:22
combot.org/chat/-1001033680683

Denis
06.04.2017
19:17:32
Ооп в примерах?!

Vlad
06.04.2017
21:56:06
Время охуительных историй:
[3] pry(#<Hash>)> v.class
=> Hash
[4] pry(#<Hash>)> v.is_a?(Hash)
=> false
[5] pry(#<Hash>)> v.kind_of?(Hash)
=> false
[6] pry(#<Hash>)>
Все потому, что module lookup

Google

Vlad
06.04.2017
22:01:43
::Hash - вот так вот надо не забывать

Alexander
06.04.2017
22:14:05

Vlad
06.04.2017
22:14:22
Рельсы?
module Refinements
module Hash
module Path
refine ::Hash do
def path(value)
self.inject(nil) do |path, (k, v)|
if v.is_a?(::Hash)
_k = v.path(value)
(path ||= []) << [k, _k] if _k
else
break k if v == value
end
path&.flatten
end
end
end
end
end
end

Alexander
06.04.2017
22:14:58

Vlad
06.04.2017
22:15:31
Не очень совет. Неймспейс-то другой

Alexander
06.04.2017
22:16:02
Из своего опыта: сначала называл HashExt, а потом перешёл на смысловые названия: Blank, Symbolize и подобное
Никто не запрещает в одном модуле делать несколько рефайнов
А using становится понятнее и нагляднее

Vlad
06.04.2017
22:18:14
Я нихрена не понял, извините
Что не так в моём коде? Мне удобно рассовать все по папочкам и использовать using Refinements::Hash::Path

Danila
06.04.2017
23:03:20
> парни, смотрите, я жру землю, а она чёт скрипит на зубах
> зачем ты это делаешь, просто не жри землю
> просто люблю вкус земли

Nomaniba
07.04.2017
01:21:09
Но там же не земля была

Alexander
07.04.2017
06:03:21

Google

Roman
07.04.2017
07:35:35
непонятно чего ты взбудоражился
рельсы ни при чем, это типичный кейс констант лукапа в руби
когда ты Hash внутри вызываешь
константы ищутся по порядку вхождения в Module.nesting в месте вызова константы
а там будет
[Refinements::Hash::Path, Refinements::Hash, Refinements]
к каждому он добавляет искомую константу
то есть поиск будет выглядеть так

Vasiliy
07.04.2017
07:37:46
кстати переопределять поведение стандартных классов вроде как плохая практика

Roman
07.04.2017
07:37:48
Refinements::Hash::Path::Hash (нету такого), Refinements::Hash::Hash (тоже пусто), Refinements::Hash (нашли, вернули)

Vasiliy
07.04.2017
07:37:58
ну и называть свои классы как стандартные

Roman
07.04.2017
07:38:04
так что никакой магии тут нет
ну в данном случае модуль так назвать ниче страшного

Alexander
07.04.2017
07:38:18

Roman
07.04.2017
07:38:23
прост надо понимать как работает поиск констант

Alexander
07.04.2017
07:38:25
юзайте реплаи, а то нифига непонятно

Roman
07.04.2017
07:38:48
ну там сверху удивляются что надо ::Hash писать
окей

Alexander
07.04.2017
07:39:10

Roman
07.04.2017
07:39:34
охуительные истории кто то упомянул даже

Google

Alexander
07.04.2017
07:39:37

Roman
07.04.2017
07:39:40
собственно ОП и упомянул
нормально он работает
давай кейс тогда

Alexander
07.04.2017
07:39:57

Roman
07.04.2017
07:40:18
там алгоритм же максимально простой

Nikolay
07.04.2017
07:40:56
давай кейс тогда
http://stem.ps/rails/2015/01/25/ruby-gotcha-toplevel-constant-referenced-by.html

Alexander
07.04.2017
07:41:41
class UsersController; end
module Admin; end
Admin.const_get('Admin::UsersController')
=> UsersController
Вот где mess начинается
Я как-то раз проебался так
Часа четыре дебажил

Alexander
07.04.2017
07:41:41
Пока опечатку не нашел
и у меня было что-то типа
module Admin
class UsresController; end
end
И я 4 часа не мог понять какого хера мне обычную страницу показывает

Vasiliy
07.04.2017
07:44:12
вот за этим нужен рубимайн

Alexander
07.04.2017
07:45:29

Vasiliy
07.04.2017
07:46:01
пушто глаза не подсвечивают грамматические ошибки
глаза вообще не подсвечивают ничего

Alexander
07.04.2017
07:46:52
зато замечают, не?

Google

Alexander
07.04.2017
07:47:10
зачем подсветка, если глаза будут замечать?

Roman
07.04.2017
07:47:26
интересно кстати зачем так было сделано
было бы конечно более однообразно если б такой вызов бросал ту же ошибку что и обычный референс несуществующей константы

Alexander
07.04.2017
07:48:29

Vasiliy
07.04.2017
07:48:40
затем что если есть инструмент который помогает при ошибках то почему бы не пользоваться им?

Nikolay
07.04.2017
07:49:37

Admin
ERROR: S client not available

Alexander
07.04.2017
07:49:52

Nikolay
07.04.2017
07:50:01
When you write Foo::Bar in Ruby, it does not mean Bar within namespace Foo, but rather Bar as “seen” from Foo

Roman
07.04.2017
07:50:30
там написано почему а не зачем
но кстати и это объяснение похоже на булшит

Alexander
07.04.2017
07:52:13

Vasiliy
07.04.2017
07:53:40

Roman
07.04.2017
07:56:35
странно это потому, что в руби в остальных случаях работает в общем очень стройная модель поиска констант
и вопрос в том зачем им понадобилось в этом случае от нее отходить
https://cirw.in/blog/constant-lookup.html здесь эта модель подробно описана
но вот этого квирка там нет

Alexander
07.04.2017
08:03:29

Aleserche
07.04.2017
10:11:23
какие системы управления проектами используете?

I
07.04.2017
10:12:17
штрафную :D

Google

Rustam
07.04.2017
10:16:10
кто нибудь использует хук post-receive? чет он у меня не запускается по пушу

Шамиль
07.04.2017
13:57:20
/stat@combot

Combot
07.04.2017
13:57:21
combot.org/chat/-1001033680683

Шамиль
07.04.2017
13:57:22
/stat@combot

Combot
07.04.2017
13:57:23
combot.org/chat/-1001033680683

Ivan
07.04.2017
14:07:12

Alex
07.04.2017
14:07:55
это где и о чем?

Ivan
07.04.2017
14:08:09
https://twitter.com/search?q=Стокгольме&src=tren

Alex
07.04.2017
14:08:30
ухты, фигасе.

Dimon
07.04.2017
14:09:05
давно говорю, что рад муслимы не должны жить на этой планете
иншалла

Roman
07.04.2017
16:25:22
слышьте ваххабиты
такая ситуация
нужно в тестах застабить реквест к стороннему сервису, который возвращает файлик бинарный
в коде это выглядит как open(URL) #=> File:/path/to/downloaded/file
если делать вебмоком stub_request(:any, URL).to_return(body: File.new('some/fixture/file'), status: 200)
он возвращает StringIO вместо файла
чет ниче в голову не приходит как это обойти