arel_extensions 1.6.0 → 2.0.0.rc3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.codeclimate.yml +2 -1
- data/.gitignore +6 -7
- data/.rubocop.yml +3 -67
- data/.travis/oracle/download.js +152 -0
- data/.travis/oracle/download.sh +30 -0
- data/.travis/oracle/download_ojdbc.js +116 -0
- data/.travis/oracle/install.sh +34 -0
- data/.travis/setup_accounts.sh +9 -0
- data/.travis/sqlite3/extension-functions.sh +6 -0
- data/.travis.yml +223 -0
- data/Gemfile +28 -2
- data/README.md +91 -258
- data/Rakefile +30 -48
- data/TODO +1 -0
- data/appveyor.yml +22 -60
- data/arel_extensions.gemspec +14 -13
- data/functions.html +3 -3
- data/gemfiles/rails3.gemfile +20 -0
- data/gemfiles/rails4.gemfile +29 -0
- data/gemfiles/rails5_0.gemfile +29 -0
- data/gemfiles/rails5_1_4.gemfile +14 -14
- data/gemfiles/rails5_2.gemfile +14 -16
- data/init/mssql.sql +4 -4
- data/init/mysql.sql +38 -38
- data/init/oracle.sql +0 -0
- data/init/postgresql.sql +25 -24
- data/init/sqlite.sql +0 -0
- data/lib/arel_extensions/attributes.rb +3 -7
- data/lib/arel_extensions/boolean_functions.rb +14 -53
- data/lib/arel_extensions/common_sql_functions.rb +17 -16
- data/lib/arel_extensions/comparators.rb +28 -29
- data/lib/arel_extensions/date_duration.rb +13 -17
- data/lib/arel_extensions/insert_manager.rb +15 -18
- data/lib/arel_extensions/math.rb +53 -55
- data/lib/arel_extensions/math_functions.rb +39 -46
- data/lib/arel_extensions/nodes/abs.rb +1 -0
- data/lib/arel_extensions/nodes/blank.rb +2 -1
- data/lib/arel_extensions/nodes/case.rb +19 -20
- data/lib/arel_extensions/nodes/cast.rb +8 -10
- data/lib/arel_extensions/nodes/ceil.rb +1 -1
- data/lib/arel_extensions/nodes/coalesce.rb +4 -3
- data/lib/arel_extensions/nodes/collate.rb +10 -9
- data/lib/arel_extensions/nodes/concat.rb +18 -9
- data/lib/arel_extensions/nodes/date_diff.rb +26 -42
- data/lib/arel_extensions/nodes/duration.rb +3 -0
- data/lib/arel_extensions/nodes/find_in_set.rb +1 -0
- data/lib/arel_extensions/nodes/floor.rb +1 -1
- data/lib/arel_extensions/nodes/format.rb +8 -35
- data/lib/arel_extensions/nodes/formatted_number.rb +23 -22
- data/lib/arel_extensions/nodes/function.rb +37 -46
- data/lib/arel_extensions/nodes/is_null.rb +0 -0
- data/lib/arel_extensions/nodes/json.rb +39 -52
- data/lib/arel_extensions/nodes/length.rb +0 -5
- data/lib/arel_extensions/nodes/levenshtein_distance.rb +1 -1
- data/lib/arel_extensions/nodes/locate.rb +2 -1
- data/lib/arel_extensions/nodes/log10.rb +2 -1
- data/lib/arel_extensions/nodes/matches.rb +8 -6
- data/lib/arel_extensions/nodes/md5.rb +1 -0
- data/lib/arel_extensions/nodes/power.rb +5 -5
- data/lib/arel_extensions/nodes/rand.rb +1 -0
- data/lib/arel_extensions/nodes/repeat.rb +5 -3
- data/lib/arel_extensions/nodes/replace.rb +8 -16
- data/lib/arel_extensions/nodes/round.rb +6 -5
- data/lib/arel_extensions/nodes/soundex.rb +15 -15
- data/lib/arel_extensions/nodes/std.rb +21 -18
- data/lib/arel_extensions/nodes/substring.rb +16 -8
- data/lib/arel_extensions/nodes/then.rb +1 -1
- data/lib/arel_extensions/nodes/trim.rb +6 -4
- data/lib/arel_extensions/nodes/union.rb +8 -5
- data/lib/arel_extensions/nodes/union_all.rb +7 -4
- data/lib/arel_extensions/nodes/wday.rb +4 -0
- data/lib/arel_extensions/nodes.rb +1 -1
- data/lib/arel_extensions/null_functions.rb +5 -19
- data/lib/arel_extensions/predications.rb +44 -45
- data/lib/arel_extensions/railtie.rb +5 -5
- data/lib/arel_extensions/set_functions.rb +7 -5
- data/lib/arel_extensions/string_functions.rb +35 -91
- data/lib/arel_extensions/tasks.rb +6 -6
- data/lib/arel_extensions/version.rb +1 -1
- data/lib/arel_extensions/visitors/ibm_db.rb +31 -24
- data/lib/arel_extensions/visitors/mssql.rb +194 -440
- data/lib/arel_extensions/visitors/mysql.rb +212 -368
- data/lib/arel_extensions/visitors/oracle.rb +179 -236
- data/lib/arel_extensions/visitors/oracle12.rb +31 -18
- data/lib/arel_extensions/visitors/postgresql.rb +173 -271
- data/lib/arel_extensions/visitors/sqlite.rb +127 -157
- data/lib/arel_extensions/visitors/to_sql.rb +238 -300
- data/lib/arel_extensions/visitors.rb +62 -83
- data/lib/arel_extensions.rb +31 -235
- data/test/database.yml +10 -20
- data/test/helper.rb +18 -0
- data/test/real_db_test.rb +118 -121
- data/test/support/fake_record.rb +3 -11
- data/test/test_comparators.rb +17 -14
- data/test/visitors/test_bulk_insert_oracle.rb +12 -12
- data/test/visitors/test_bulk_insert_sqlite.rb +14 -13
- data/test/visitors/test_bulk_insert_to_sql.rb +13 -11
- data/test/visitors/test_oracle.rb +55 -55
- data/test/visitors/test_to_sql.rb +226 -419
- data/test/with_ar/all_agnostic_test.rb +370 -773
- data/test/with_ar/insert_agnostic_test.rb +22 -28
- data/test/with_ar/test_bulk_sqlite.rb +17 -18
- data/test/with_ar/test_math_sqlite.rb +27 -27
- data/test/with_ar/test_string_mysql.rb +34 -32
- data/test/with_ar/test_string_sqlite.rb +35 -31
- metadata +38 -52
- data/.github/workflows/publish.yml +0 -30
- data/.github/workflows/release.yml +0 -30
- data/.github/workflows/ruby.yml +0 -452
- data/CONTRIBUTING.md +0 -102
- data/Makefile +0 -18
- data/NEWS.md +0 -116
- data/bin/build +0 -15
- data/bin/publish +0 -8
- data/dev/arelx.dockerfile +0 -41
- data/dev/compose.yaml +0 -69
- data/dev/postgres.dockerfile +0 -5
- data/dev/rbenv +0 -189
- data/gemfiles/rails5.gemfile +0 -29
- data/gemfiles/rails6.gemfile +0 -34
- data/gemfiles/rails6_1.gemfile +0 -42
- data/gemfiles/rails7.gemfile +0 -42
- data/gemfiles/rails7_1.gemfile +0 -41
- data/gemfiles/rails7_2.gemfile +0 -41
- data/gemfiles/rails8.gemfile +0 -40
- data/gemfiles/rails8_1.gemfile +0 -41
- data/gemspecs/arel_extensions-v1.gemspec +0 -27
- data/gemspecs/arel_extensions-v2.gemspec +0 -27
- data/generate_gems.sh +0 -15
- data/lib/arel_extensions/aliases.rb +0 -14
- data/lib/arel_extensions/constants.rb +0 -13
- data/lib/arel_extensions/helpers.rb +0 -61
- data/lib/arel_extensions/nodes/aggregate_function.rb +0 -13
- data/lib/arel_extensions/nodes/byte_size.rb +0 -11
- data/lib/arel_extensions/nodes/char_length.rb +0 -11
- data/lib/arel_extensions/nodes/formatted_date.rb +0 -42
- data/lib/arel_extensions/nodes/rollup.rb +0 -36
- data/lib/arel_extensions/nodes/select.rb +0 -10
- data/lib/arel_extensions/nodes/sum.rb +0 -7
- data/lib/arel_extensions/visitors/convert_format.rb +0 -37
- data/lib/arel_extensions/warning.rb +0 -42
- data/test/arelx_test_helper.rb +0 -94
- data/test/config_loader.rb +0 -9
- data/version_v1.rb +0 -3
- data/version_v2.rb +0 -3
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
$:.push File.expand_path('../lib', __FILE__)
|
|
2
|
-
require 'arel_extensions/version'
|
|
3
|
-
|
|
4
|
-
Gem::Specification.new do |s|
|
|
5
|
-
s.name = 'arel_extensions'
|
|
6
|
-
s.version = ArelExtensions::VERSION
|
|
7
|
-
s.platform = Gem::Platform::RUBY
|
|
8
|
-
s.authors = ['Yann Azoury', 'Félix Bellanger', 'Julien Delporte']
|
|
9
|
-
s.email = ['yann.azoury@faveod.com', 'felix.bellanger@faveod.com', 'julien.delporte@faveod.com']
|
|
10
|
-
s.homepage = 'https://github.com/Faveod/arel-extensions'
|
|
11
|
-
s.description = 'Adds new features to Arel'
|
|
12
|
-
s.summary = 'Extending Arel'
|
|
13
|
-
s.license = 'MIT'
|
|
14
|
-
|
|
15
|
-
s.rdoc_options = ['--main', 'README.md']
|
|
16
|
-
s.extra_rdoc_files = ['MIT-LICENSE.txt', 'README.md', 'functions.html']
|
|
17
|
-
|
|
18
|
-
# Manifest
|
|
19
|
-
s.files = `git ls-files`.split("\n")
|
|
20
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
21
|
-
s.require_paths = ['lib']
|
|
22
|
-
|
|
23
|
-
s.add_dependency('activerecord', '>= 6.0')
|
|
24
|
-
|
|
25
|
-
s.add_development_dependency('minitest', '~> 5.9')
|
|
26
|
-
s.add_development_dependency('rake', '~> 12.3.3')
|
|
27
|
-
end
|
data/generate_gems.sh
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
#gem uninstall arel_extensions
|
|
3
|
-
|
|
4
|
-
# VERSION ~> 1
|
|
5
|
-
cp ./version_v1.rb lib/arel_extensions/version.rb
|
|
6
|
-
cp ./gemspecs/arel_extensions-v1.gemspec ./arel_extensions.gemspec
|
|
7
|
-
gem build ./arel_extensions.gemspec
|
|
8
|
-
|
|
9
|
-
# VERSION ~> 2
|
|
10
|
-
cp ./version_v2.rb lib/arel_extensions/version.rb
|
|
11
|
-
mv ./arel_extensions.gemspec ./arel_extensions.gemspec.bck
|
|
12
|
-
cp ./gemspecs/arel_extensions-v2.gemspec ./arel_extensions.gemspec
|
|
13
|
-
gem build ./arel_extensions.gemspec
|
|
14
|
-
cp ./version_v1.rb lib/arel_extensions/version.rb
|
|
15
|
-
cp ./gemspecs/arel_extensions-v1.gemspec ./arel_extensions.gemspec
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
module ArelExtensions
|
|
2
|
-
ACTIVE_RECORD_VERSION = Gem::Version.new(ActiveRecord::VERSION::STRING).freeze
|
|
3
|
-
AREL_VERSION = Gem::Version.new(Arel::VERSION).freeze
|
|
4
|
-
V10 = Gem::Version.new('10.0').freeze
|
|
5
|
-
V5 = Gem::Version.new('5.0').freeze
|
|
6
|
-
V6 = Gem::Version.new('6.0').freeze
|
|
7
|
-
V7 = Gem::Version.new('7.0').freeze
|
|
8
|
-
V7_0 = Gem::Version.new('7.0').freeze
|
|
9
|
-
V7_1 = Gem::Version.new('7.1').freeze
|
|
10
|
-
V7_2 = Gem::Version.new('7.2').freeze
|
|
11
|
-
V8_1 = Gem::Version.new('8.1').freeze
|
|
12
|
-
V9_0 = Gem::Version.new('9.0').freeze
|
|
13
|
-
end
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
module ArelExtensions
|
|
2
|
-
#
|
|
3
|
-
# column_of
|
|
4
|
-
#
|
|
5
|
-
# Before the creation of these methods, getting the column name was done
|
|
6
|
-
# uniquely through the code found in `column_of_via_arel_table`.
|
|
7
|
-
#
|
|
8
|
-
# This turned out to be unreliable, most notably when using adapters that do
|
|
9
|
-
# not come with activerecord standard batteries. SQL Server is the most
|
|
10
|
-
# notorious example.
|
|
11
|
-
#
|
|
12
|
-
# Currently, we're using a needlessly complicated way to address this issue.
|
|
13
|
-
# Different versions of activerecord are behaving differently; the public APIs
|
|
14
|
-
# do not seem to come with any guarantees, so we need to be sure that we're
|
|
15
|
-
# coveing all these cases.
|
|
16
|
-
|
|
17
|
-
def self.column_of_via_arel_table(table_name, column_name)
|
|
18
|
-
Arel::Table.engine.connection.schema_cache.columns_hash(table_name)[column_name]
|
|
19
|
-
rescue NoMethodError
|
|
20
|
-
nil
|
|
21
|
-
rescue => e
|
|
22
|
-
warn("Warning: Unexpected exception caught while fetching column name for #{table_name}.#{column_name} in `column_of_via_arel_table`\n#{e.class}")
|
|
23
|
-
warn(e.backtrace)
|
|
24
|
-
nil
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def self.column_of(table_name, column_name)
|
|
28
|
-
pool = ActiveRecord::Base.connection.pool
|
|
29
|
-
use_arel_table = !ActiveRecord::Base.connected? || \
|
|
30
|
-
(pool.respond_to?(:schema_cache) && pool.schema_cache.nil?)
|
|
31
|
-
|
|
32
|
-
if use_arel_table
|
|
33
|
-
column_of_via_arel_table(table_name, column_name)
|
|
34
|
-
else
|
|
35
|
-
if pool.respond_to?(:pool_config)
|
|
36
|
-
if pool.pool_config.respond_to?(:schema_reflection)
|
|
37
|
-
if ACTIVE_RECORD_VERSION >= V7_2
|
|
38
|
-
pool.pool_config.schema_reflection.columns_hash(pool, table_name)[column_name]
|
|
39
|
-
else
|
|
40
|
-
pool.pool_config.schema_reflection.columns_hash(ActiveRecord::Base.connection, table_name)[column_name]
|
|
41
|
-
end
|
|
42
|
-
else
|
|
43
|
-
pool.pool_config.schema_cache.columns_hash(table_name)[column_name]
|
|
44
|
-
end
|
|
45
|
-
elsif pool.respond_to?(:schema_cache) # activerecord < 6.1
|
|
46
|
-
pool.schema_cache.columns_hash(table_name)[column_name]
|
|
47
|
-
else # activerecord < 5.0
|
|
48
|
-
column_of_via_arel_table(table_name, column_name)
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
rescue ActiveRecord::ConnectionNotEstablished
|
|
52
|
-
column_of_via_arel_table(table_name, column_name)
|
|
53
|
-
rescue ActiveRecord::StatementInvalid
|
|
54
|
-
nil
|
|
55
|
-
rescue => e
|
|
56
|
-
warn("Warning: Unexpected exception caught while fetching column name for #{table_name}.#{column_name} in `column_of`")
|
|
57
|
-
warn(e)
|
|
58
|
-
warn(e.backtrace)
|
|
59
|
-
nil
|
|
60
|
-
end
|
|
61
|
-
end
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
module ArelExtensions
|
|
2
|
-
module Nodes
|
|
3
|
-
class AggregateFunction < Function
|
|
4
|
-
attr_accessor :order, :group
|
|
5
|
-
|
|
6
|
-
def initialize node, **opts
|
|
7
|
-
@order = Array.wrap(opts[:order]).map{|e| convert_to_node(e)}
|
|
8
|
-
@group = Array.wrap(opts[:group]).map{|e| convert_to_node(e)}
|
|
9
|
-
super [node]
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
require 'strscan'
|
|
2
|
-
|
|
3
|
-
module ArelExtensions
|
|
4
|
-
module Nodes
|
|
5
|
-
class FormattedDate < Function
|
|
6
|
-
RETURN_TYPE = :string
|
|
7
|
-
|
|
8
|
-
attr_accessor :col_type, :iso_format, :time_zone
|
|
9
|
-
|
|
10
|
-
def initialize expr
|
|
11
|
-
col = expr[0]
|
|
12
|
-
@iso_format = convert_format(expr[1])
|
|
13
|
-
@time_zone = expr[2]
|
|
14
|
-
@col_type = type_of_attribute(col)
|
|
15
|
-
super [col, convert_to_string_node(@iso_format)]
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
private
|
|
19
|
-
|
|
20
|
-
# Address portability issues with some of the formats.
|
|
21
|
-
def convert_format(fmt)
|
|
22
|
-
s = StringScanner.new fmt
|
|
23
|
-
res = StringIO.new
|
|
24
|
-
while !s.eos?
|
|
25
|
-
res <<
|
|
26
|
-
case
|
|
27
|
-
when s.scan(/%D/) then '%m/%d/%y'
|
|
28
|
-
when s.scan(/%F/) then '%Y-%m-%d'
|
|
29
|
-
when s.scan(/%R/) then '%H:%M'
|
|
30
|
-
when s.scan(/%r/) then '%I:%M:%S %p'
|
|
31
|
-
when s.scan(/%T/) then '%H:%M:%S'
|
|
32
|
-
when s.scan(/%v/) then '%e-%b-%Y'
|
|
33
|
-
|
|
34
|
-
when s.scan(/[^%]+/) then s.matched
|
|
35
|
-
when s.scan(/./) then s.matched
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
res.string
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# The following is a patch to activerecord when it doesn't
|
|
2
|
-
# have RollUp defined, i.e. for rails < 5.2
|
|
3
|
-
|
|
4
|
-
begin
|
|
5
|
-
Arel::Nodes.const_get('RollUp')
|
|
6
|
-
rescue NameError => _
|
|
7
|
-
module Arel
|
|
8
|
-
module Nodes
|
|
9
|
-
class RollUp < Arel::Nodes::Unary
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
module Arel
|
|
15
|
-
module Visitors
|
|
16
|
-
class PostgreSQL
|
|
17
|
-
# Utilized by GroupingSet, Cube & RollUp visitors to
|
|
18
|
-
# handle grouping aggregation semantics
|
|
19
|
-
def grouping_array_or_grouping_element(o, collector)
|
|
20
|
-
if o.expr.is_a? Array
|
|
21
|
-
collector << "( "
|
|
22
|
-
visit o.expr, collector
|
|
23
|
-
collector << " )"
|
|
24
|
-
else
|
|
25
|
-
visit o.expr, collector
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def visit_Arel_Nodes_RollUp(o, collector)
|
|
30
|
-
collector << "ROLLUP"
|
|
31
|
-
grouping_array_or_grouping_element o, collector
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
module ArelExtensions
|
|
2
|
-
module Visitors
|
|
3
|
-
# Convert date format in strftime syntax to whatever the RDBMs
|
|
4
|
-
# wants, based on the table of conversion +mapping+.
|
|
5
|
-
def self.strftime_to_format format, mapping
|
|
6
|
-
@mapping_regexps ||= {}
|
|
7
|
-
@mapping_regexps[mapping] ||=
|
|
8
|
-
Regexp.new(
|
|
9
|
-
mapping
|
|
10
|
-
.keys
|
|
11
|
-
.map{|k| Regexp.escape(k)}
|
|
12
|
-
.join('|')
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
regexp = @mapping_regexps[mapping]
|
|
16
|
-
s = StringScanner.new format
|
|
17
|
-
res = StringIO.new
|
|
18
|
-
while !s.eos?
|
|
19
|
-
res <<
|
|
20
|
-
case
|
|
21
|
-
when s.scan(regexp)
|
|
22
|
-
if v = mapping[s.matched]
|
|
23
|
-
v
|
|
24
|
-
else
|
|
25
|
-
# Should never happen.
|
|
26
|
-
s.matched
|
|
27
|
-
end
|
|
28
|
-
when s.scan(/[^%]+/)
|
|
29
|
-
s.matched
|
|
30
|
-
when s.scan(/./)
|
|
31
|
-
s.matched
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
res.string
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
module ArelExtensions
|
|
2
|
-
class RubyDeprecator
|
|
3
|
-
if RUBY_VERSION.split('.')[0].to_i < 3
|
|
4
|
-
def warn msg
|
|
5
|
-
Kernel.warn(msg)
|
|
6
|
-
end
|
|
7
|
-
else
|
|
8
|
-
def warn msg
|
|
9
|
-
Kernel.warn(msg, category: :deprecated)
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
# To configure deprecations in a Rails application, you can do something
|
|
15
|
-
# like this:
|
|
16
|
-
#
|
|
17
|
-
# ```ruby
|
|
18
|
-
# ArelExtensions.deprecator.behavior =
|
|
19
|
-
# (Rails.application.config.active_support.deprecation || :stderr)
|
|
20
|
-
# ```
|
|
21
|
-
#
|
|
22
|
-
# See ActiveSupport's deprecation documentation for more details.
|
|
23
|
-
def self.deprecator
|
|
24
|
-
@deprecator ||=
|
|
25
|
-
if defined?(ActiveSupport::Deprecation)
|
|
26
|
-
major, minor = Gem::Version.create(ArelExtensions::VERSION).segments
|
|
27
|
-
ActiveSupport::Deprecation.new("#{major}.#{minor}", 'arel_extensions')
|
|
28
|
-
else
|
|
29
|
-
RubyDeprecator::new
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
module Warning
|
|
34
|
-
def deprecated msg, what: nil
|
|
35
|
-
kaller = caller(2..2).first
|
|
36
|
-
return if /lib\/(:?arel(?:_extensions)?|active_record)\// =~ kaller && ENV['AREL_EXTENSIONS_IN_TEST'] != '1'
|
|
37
|
-
|
|
38
|
-
what = caller_locations(1, 1).first.label if what.nil?
|
|
39
|
-
ArelExtensions.deprecator.warn "#{kaller}: `#{what}` is now deprecated. #{msg}"
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
data/test/arelx_test_helper.rb
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
require 'active_record'
|
|
2
|
-
require 'arel'
|
|
3
|
-
require 'arel_extensions/constants'
|
|
4
|
-
require 'fileutils'
|
|
5
|
-
require 'minitest/autorun'
|
|
6
|
-
require 'rubygems'
|
|
7
|
-
require 'support/fake_record'
|
|
8
|
-
|
|
9
|
-
require_relative './config_loader'
|
|
10
|
-
|
|
11
|
-
ENV['AREL_EXTENSIONS_IN_TEST'] = '1' # Useful for deprecation warnings.
|
|
12
|
-
|
|
13
|
-
def colored(color, msg)
|
|
14
|
-
/^xterm|-256color$/.match?(ENV['TERM']) ? "\x1b[#{color}m#{msg}\x1b[89m\x1b[0m" : "#{msg}"
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
YELLOW = '33'
|
|
18
|
-
|
|
19
|
-
# Load gems specific to databases.
|
|
20
|
-
#
|
|
21
|
-
# NOTE:
|
|
22
|
-
# It's strongly advised to test each database on its own. Loading multiple
|
|
23
|
-
# backend gems leads to undefined behavior according to tests; the backend
|
|
24
|
-
# might not recognize the correct DB visitor and will fallback to `ToSQL`
|
|
25
|
-
# and screw all tests.
|
|
26
|
-
#
|
|
27
|
-
# The issue also seems to be related to arel version: at some point, arel
|
|
28
|
-
# dropped its wide support for DBs and kept Postgres, MySQL and SQLite.
|
|
29
|
-
# Here, we're just trying to load the correct ones.
|
|
30
|
-
#
|
|
31
|
-
# NOTE:
|
|
32
|
-
# As of jruby 9.4 (and maybe 9.3, but I couldn't test it given the state of
|
|
33
|
-
# the alt-adapter), we need to load jdbc/mssql manually.
|
|
34
|
-
db_and_gem =
|
|
35
|
-
if RUBY_PLATFORM == 'java'
|
|
36
|
-
{
|
|
37
|
-
'oracle' => ['activerecord-oracle_enhanced-adapter'],
|
|
38
|
-
'mssql' => ['jdbc/mssql', 'activerecord-jdbcsqlserver-adapter'],
|
|
39
|
-
}
|
|
40
|
-
else
|
|
41
|
-
{
|
|
42
|
-
'oracle' => ['activerecord-oracle_enhanced-adapter'],
|
|
43
|
-
'mssql' => ['activerecord-sqlserver-adapter'],
|
|
44
|
-
}
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
module Warning
|
|
48
|
-
ARELX_IGNORED = [
|
|
49
|
-
'PG::Coder.new(hash)',
|
|
50
|
-
'rb_check_safe_obj', # ruby 3.0
|
|
51
|
-
'rb_tainted_str_new', # ruby 3.0
|
|
52
|
-
'Using the last argument', # ruby < 3.0
|
|
53
|
-
].freeze
|
|
54
|
-
|
|
55
|
-
def self.warn(message)
|
|
56
|
-
return if ARELX_IGNORED.any? { |msg| message.include?(msg) }
|
|
57
|
-
|
|
58
|
-
super
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
def load_lib(gems)
|
|
64
|
-
if gems && (RUBY_PLATFORM == 'java' || ArelExtensions::AREL_VERSION > ArelExtensions::V9_0)
|
|
65
|
-
gems.each do |gem|
|
|
66
|
-
begin
|
|
67
|
-
require gem
|
|
68
|
-
rescue Exception => e
|
|
69
|
-
warn "Warning: failed to load gem #{gem}. Are you sure it's installed?"
|
|
70
|
-
warn e.message
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
load_lib(db_and_gem[ENV['DB']])
|
|
77
|
-
|
|
78
|
-
require 'arel_extensions'
|
|
79
|
-
|
|
80
|
-
$arel_silence_type_casting_deprecation = true
|
|
81
|
-
|
|
82
|
-
module Minitest::Assertions
|
|
83
|
-
#
|
|
84
|
-
# Fails unless +expected and +actual are the same string, modulo extraneous spaces.
|
|
85
|
-
#
|
|
86
|
-
def assert_like(expected, actual, msg = nil)
|
|
87
|
-
msg ||= "Expected #{expected.inspect} and #{actual.inspect} to be alike"
|
|
88
|
-
assert_equal expected.gsub(/\s+/, ' ').strip, actual.gsub(/\s+/, ' ').strip
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
module Minitest::Expectations
|
|
93
|
-
infect_an_assertion :assert_like, :must_be_like
|
|
94
|
-
end
|
data/test/config_loader.rb
DELETED
data/version_v1.rb
DELETED
data/version_v2.rb
DELETED