Sha256: 3bc14e75302c57dcc5ad98582f6c9934c2f3f0d2eb5a9d83cda0b5db764b434f

Contents?: true

Size: 791 Bytes

Versions: 1

Compression:

Stored size: 791 Bytes

Contents

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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
easy_orderable-0.2.2 lib/easy_orderable/joiner.rb