Sha256: f260ee8c9f00e3e7c5f1385e93453f5498d3e83ab7367258040accbb4996e18d

Contents?: true

Size: 802 Bytes

Versions: 3

Compression:

Stored size: 802 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 = get_association_names
      association_names.present? ? relation.joins(*association_names) : relation
    end

    private

    attr_reader :relation, :args, :custom_association_names

    def get_association_names
      table_names.map do |name|
        if custom_association_names&.key?(name)
          custom_association_names[name].to_sym
        else
          name
        end
      end
    end

    def table_names
      args
        .keys
        .select{ |e| e.include?('.') }
        .map { |e| e.split('.').first.to_sym }
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
easy_orderable-1.2.0 lib/easy_orderable/joiner.rb
easy_orderable-1.1.1 lib/easy_orderable/joiner.rb
easy_orderable-1.0.0 lib/easy_orderable/joiner.rb