Учитывая следующий пример:
apply_filter_a(
apply_filter_b(
apply_filter_c(
active_record_dataset
)
)
)
...
def apply_filter_a(records)
# some more complex than
...
end
def apply_filter_b(records)
# some other complex logic filtering the active record dataset
...
end
def apply_filter_c(records)
# some other complex logic filtering the active record dataset
...
end
Как упростить синтаксис вложенного метода (apply_filter_a(apply_filter_b(...)) более простым способом? можно ли применять методы из массива методов?

Вы можете выполнить такую операцию складывания с помощью Enumerable#inject.
Во-первых, нам нужен массив методов. Мы можем получить их, используя method.
my_filters = [method(:apply_filter_c), method(:apply_filter_b), method(:apply_filter_a)]
Затем мы можем использовать inject в списке фильтров для применения к начальному значению.
my_filters.inject(active_record_dataset) { |acc, f| f.call acc }
Существует метод yield_self, или вы можете использовать его псевдоним then. Вы можете направлять вызовы один за другим, каждый из ваших методов фильтра должен возвращать отношение активной записи.
apply_filter_a(active_record_dataset)
.then { |records| apply_filter_b(records) }
.then { |records| apply_filter_c(records) }