From 084085dd828e1fa2923030f85cbac814ef0294a1 Mon Sep 17 00:00:00 2001 From: Yasuo Honda Date: Tue, 29 Dec 2020 00:23:37 +0900 Subject: [PATCH] Add `test-ransack-scope-and-column-same-name.rb` This file is located at https://gist.github.com/jonatack/5df41a0edb53b7bad989 Co-authored-by: jonatack --- .../test-ransacker-arel-present-predicate.rb | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 bug_report_templates/test-ransacker-arel-present-predicate.rb diff --git a/bug_report_templates/test-ransacker-arel-present-predicate.rb b/bug_report_templates/test-ransacker-arel-present-predicate.rb new file mode 100644 index 0000000..db49468 --- /dev/null +++ b/bug_report_templates/test-ransacker-arel-present-predicate.rb @@ -0,0 +1,72 @@ +# test-ransacker-arel-present-predicate.rb + +# Run it in your console with: `ruby test-ransacker-arel-present-predicate.rb` + +# If you change the gem dependencies, run it with: +# `rm gemfile* && ruby test-ransacker-arel-present-predicate.rb` + +unless File.exist?('Gemfile') + File.write('Gemfile', <<-GEMFILE) + source 'https://rubygems.org' + + # Rails master + gem 'rails', github: 'rails/rails' + + # Rails last release + # gem 'rails' + + gem 'sqlite3' + gem 'ransack', github: 'activerecord-hackery/ransack' + gem 'polyamorous', github: 'activerecord-hackery/polyamorous' + GEMFILE + + system 'bundle install' +end + +require 'bundler' +Bundler.setup(:default) + +require 'active_record' +require 'minitest/autorun' +require 'logger' +require 'ransack' + +# This connection will do for database-independent bug reports. +ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:') +ActiveRecord::Base.logger = Logger.new(STDOUT) + +# Display versions. +message = "Running test case with Ruby #{RUBY_VERSION}, Active Record #{ + ::ActiveRecord::VERSION::STRING}, Arel #{Arel::VERSION} and #{ + ::ActiveRecord::Base.connection.adapter_name}" +line = '=' * message.length +puts line, message, line + +ActiveRecord::Schema.define do + create_table :projects, force: true do |t| + t.string :name + t.string :number + end +end + +class Project < ActiveRecord::Base + ransacker :name do + Arel.sql('projects.name') + end + + ransacker :number do |parent| + parent.table[:number] + end +end + +class BugTest < Minitest::Test + def test_ransackers + sql = Project.ransack({number_present: 1}).result.to_sql + puts sql + assert_equal "SELECT \"projects\".* FROM \"projects\" WHERE (\"projects\".\"number\" IS NOT NULL AND \"projects\".\"number\" != '')", sql + + sql = Project.ransack({name_present: 1}).result.to_sql + puts sql + assert_equal "SELECT \"projects\".* FROM \"projects\" WHERE (projects.name IS NOT NULL AND projects.name != '')", sql + end +end