
Oleg
14.03.2017
12:29:38
Я имею в виду что если в файле что-то объявлено - оно вовне не видно
Оке

Alexander
14.03.2017
12:30:05

Oleg
14.03.2017
12:30:59
Правильным ли будет решение паковать всё в модули со вложенностью аналогичной расположению файла?

Google

Oleg
14.03.2017
12:31:31
Есть ли способы победить тогда 100500 уровней вложенности при объявлении?
Модули умеют частично объявляться, ведь так?

Alexander
14.03.2017
12:32:19

Oleg
14.03.2017
12:33:09
Хорошо, спасибо
Но это тлен и боль ?

ojab
14.03.2017
12:37:01
так что лучше переименовать один из классов

Oleg
14.03.2017
12:37:32
Тогда будет неудобный нейминг

ojab
14.03.2017
12:38:07
вряд ли два разных класса с одинаковыми именами являются удобным неймингом

Oleg
14.03.2017
12:38:26
Но в целом было время когда писал классы с префиксом от пути вложения

ojab
14.03.2017
12:38:48
модули как раз для этого созданы

Google

Oleg
14.03.2017
12:38:49
Они лежат физически в сильно разных папках

ojab
14.03.2017
12:39:21
модулям пофиг что где лежит

Oleg
14.03.2017
12:40:51
С модулями пугает необходимость множественной вложенности
Вся прелесть лаконичности теряется ?

ojab
14.03.2017
12:42:11
очевидно что большую вложенность можно не создавать, если не хочется

Oleg
14.03.2017
12:42:23
Эх, попробую разные способы, всем спасибо за помощь

ojab
14.03.2017
12:45:27
для решения проблемы выше достаточно одного уровня, First::MyClass & Second::MyClass, никто же не заставляет для каждого класса модуль создавать

Oleg
14.03.2017
12:49:12
Ммммм, нашёл для себя как решение объявлять вложенность где-то в одном из файлов а-ля заголовочный, а потом класс объявлять как class A::B::C

Alex
14.03.2017
12:50:05
Только надо чтобы A::B ьыл объявлен до реквайра

Oleg
14.03.2017
12:50:06
Всё в целом лаконично выходит
Ага

Alex
14.03.2017
12:50:35

Oleg
14.03.2017
12:50:57
Ну тогда точно так и буду делать ?

Alexander
14.03.2017
12:52:49
на SO можно найти, уже не помню. но и rubocop вроде бесится

Alex
14.03.2017
12:53:06
Ну так он по дефолту на это бесится, я от ключил.

Alexander
14.03.2017
12:53:38

Alex
14.03.2017
12:53:41
Километровые отступы мне не интересныю

Google

Alex
14.03.2017
12:53:51
С чего таки он бесится?
Конкретную причину назови.

Alexander
14.03.2017
12:57:39
влияет на lookup констант. я помнил, но не конкретно, сказал про SO. раз ленитесь, вот пример: http://stackoverflow.com/a/24393133/2630849
вот статья: http://blog.honeybadger.io/avoid-these-traps-when-nesting-ruby-modules/

Oleg
14.03.2017
13:07:18
По сути нужно помнить что то что было объявлено до этого может быть доступно только юзая полный путь с двоеточиями, верно?
В моем кейсе тогда это не проблема потому что мне просто нужны неймспейсы
Но если вдруг нужны будут константы и всё такое - нужно будет не забыть что нельзя юзать их без полного пути

Lupsick
14.03.2017
14:54:11
тут вроде был чувак из cryptopay?

Oleg
14.03.2017
15:02:52
В общем я решил всё это таким способом - в каждой папке файл _.rb, внутри объявление модуля папки, внутри рекваеры всех файлов в папке, если есть вложенные папки - реквайр их _ файла. Помимо этого в начале рекваер _ файла папки выше, если это не корень приложения. Во всех файлах лаконичная одна строчка require_relative '_' и названия классов с двоеточиями нужными. Итого у меня всё перелинковалось и без сюрпризов. Не знаю на сколько это верный способ для руби, но вот как-то вот так ?

Dima
14.03.2017
15:06:23
Выглядит как питонвей костыль.

Oleg
14.03.2017
15:07:16
Не писал на питоне, но в целом может и правда костыль

Alex
14.03.2017
15:07:57
ага, тоже подумал про пейтон
@oPavlov а к чему такие сложности? чего ты хочешь получить?

Dima
14.03.2017
15:08:26
Вот да

Oleg
14.03.2017
15:08:33
С другой стороны желания он исполняет - нет вложенностей модулей, не склеиваются классы, бонусом рекваер 1 строка

Alex
14.03.2017
15:09:02
с чего бы классам склеиваться?
класс/модуль определяется ровно в одном месте. Это решает проблему, нет?

Oleg
14.03.2017
15:09:17
Названия одинаковые когда

Alex
14.03.2017
15:09:27
Под разными неймспейсами их делай тогда

Google

Oleg
14.03.2017
15:09:48
Неймспейсы - это же в модуль положить?
Положил ?

Alex
14.03.2017
15:10:05
В неймспейс ...

Tim
14.03.2017
15:10:10
Кто-нить знает как вернуть данные если сделали git push -f ? )

Alex
14.03.2017
15:10:16
class A::B технический в неймспейсе A

Oleg
14.03.2017
15:10:31
Типа того и выглядит

Alex
14.03.2017
15:10:33
мусор при git gc удаляется.

Oleg
14.03.2017
15:11:00
Вложенностью же

Admin
ERROR: S client not available

Alex
14.03.2017
15:11:16
а то что у тебя глобально два класса с одним именем тебя не смущает?

Oleg
14.03.2017
15:11:22
Короче - сейчас выглядит начало моего кода так:
require_relative '_'

Alex
14.03.2017
15:12:03
Зачем?

Dima
14.03.2017
15:12:04
Если честно
Вот честно

Oleg
14.03.2017
15:12:08
class Model::Utils

Alex
14.03.2017
15:12:16
Какие то костыльчики.

Dima
14.03.2017
15:12:22
Мне хочется сказать "что это за пиздец блять"

Google

Dima
14.03.2017
15:12:26
Уж простить

Oleg
14.03.2017
15:12:29
?

Dima
14.03.2017
15:12:34
Простите*

Oleg
14.03.2017
15:12:49
Но я пока не нашёл варианта удобнее

Alex
14.03.2017
15:12:49

Oleg
14.03.2017
15:13:06
Нормально это как?

Alex
14.03.2017
15:13:09
class Entity::Directory
class Office::Directory
не понимаю чем оно тебя не устраивает

Oleg
14.03.2017
15:13:30
Так и выглядит

Alex
14.03.2017
15:13:42
а зачем тогда костыли в виде require_relative "_' ?
require 'entity/directory' и усе.
Если лень каждый раз импорты писать - подключи автолодер
Либо автолодер, либо каждый раз нужные импорты перечислять.

Oleg
14.03.2017
15:14:37
Возможно рубимайн конечно так реагирует, но он начинает не понимать наследуемые классы

Alex
14.03.2017
15:14:57
вносим костыли в код проекта изза IDE, ахах. Папку .idea уже закомитил?
Наследование кстати стоит очень аккуратно использовать.

Oleg
14.03.2017
15:15:16
Это первым делом гитигнор

Alex
14.03.2017
15:15:35

Oleg
14.03.2017
15:15:46
Да

Alex
14.03.2017
15:15:55
а про глобальный .gitignore я думаю ты не слышал.

Oleg
14.03.2017
15:16:23
Собственно одна из причин почему вот это всё - наследование