module EasyOrderable class Joiner def initialize(relation, args, custom_association_names) @relation = relation @args = args @custom_association_names = custom_association_names end def call association_names.present? ? relation.joins(*association_names) : relation end private attr_reader :relation, :args, :custom_association_names def association_names table_names.map do |name| if custom_association_names && custom_association_names.key?(name.to_sym) custom_association_names[name.to_sym].to_sym else name.to_sym end end end def table_names args .keys .select{ |e| e.include?('.') } .map { |e| e.split('.').first } end end end