Sha256: edaeae480249b06c0a85a9122f7d6a6a8f2b0fba8792ee1876c31147fbcd35d3

Contents?: true

Size: 992 Bytes

Versions: 9

Compression:

Stored size: 992 Bytes

Contents

# frozen_string_literal: true

require "active_record/relation"

module Heya
  module ActiveRecordRelationExtension
    TABLE_REGEXP = /heya_steps/

    def build_arel(aliases = nil)
      arel = super(aliases)

      if table_name == "heya_campaign_memberships" && arel.to_sql =~ TABLE_REGEXP
        # https://www.postgresql.org/docs/9.4/queries-values.html
        values = Heya
          .campaigns.reduce([]) { |steps, campaign| steps | campaign.steps }
          .map { |step|
            ActiveRecord::Base.sanitize_sql_array(
              ["(?, ?)", step.gid, step.wait.to_i]
            )
          }

        if values.any?
          arel.with(
            Arel::Nodes::As.new(
              Arel::Table.new(:heya_steps),
              Arel::Nodes::SqlLiteral.new("(SELECT * FROM (VALUES #{values.join(", ")}) AS heya_steps (gid,wait))")
            )
          )
        end
      end

      arel
    end
  end

  ActiveRecord::Relation.prepend(ActiveRecordRelationExtension)
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
heya-0.10.0 lib/heya/active_record_extension.rb
heya-0.9.0 lib/heya/active_record_extension.rb
heya-0.8.0 lib/heya/active_record_extension.rb
heya-0.7.0 lib/heya/active_record_extension.rb
heya-0.6.1 lib/heya/active_record_extension.rb
heya-0.6.0 lib/heya/active_record_extension.rb
heya-0.5.3 lib/heya/active_record_extension.rb
heya-0.5.2 lib/heya/active_record_extension.rb
heya-0.5.1 lib/heya/active_record_extension.rb