arel_extensions 0.8.1 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e2104e8ef91fafcff70f47ea78a4cea88c637369
4
- data.tar.gz: 4e6ca2e45bb57191050efc6c39485c4c537f81d3
3
+ metadata.gz: 58bd1c5b91bc632c7697a918369ea19c99ed026b
4
+ data.tar.gz: d52eae92a11823a94d51eda6de44187199d0e738
5
5
  SHA512:
6
- metadata.gz: 2b2be3523655952655491ed46bc25f8edd11217ba50d41c6e96e0d02801d2c93664c288004dd02c7cb9ee3e45c9951507d5422ca0bd94a725196fa2757d9c09f
7
- data.tar.gz: 731327576e59131f48b77c76cc69f5ae65af6816342b01920b2d3fa658d157f551dfdbb728cd5cd9eab7d8f96b128de4d3da8ccdece71c691ec4f606a86fd52c
6
+ metadata.gz: 29438df3218c96066e2d1a76f1ccd00b315c0d0957c6cd321cb9db09fe19d12c966d3d825f536337d87a3bafc547e77e221b871fcf407b01831080d99d872eaf
7
+ data.tar.gz: b56534f4ff7e7cde0a7dc64756075cf8a5ed892c1fc35e1913adabba3bc3f1afc430fb3c07e9bfb461523077feb65b78df25ae75e98373cdaac4fe29d0ea06cc
data/.travis.yml CHANGED
@@ -7,8 +7,8 @@ before_install:
7
7
  #addons:
8
8
  # mariadb: '10.0'
9
9
  gemfile:
10
- - Gemfile
11
10
  - gemfiles/rails3.gemfile
11
+ - gemfiles/rails4.gemfile
12
12
  - gemfiles/rails5.gemfile
13
13
  services:
14
14
  - mysql
@@ -41,26 +41,38 @@ jdk:
41
41
  matrix:
42
42
  fast_finish: true
43
43
  exclude:
44
- - jdk: openjdk7
45
- rvm: rbx-2
46
- - jdk: oraclejdk7
47
- rvm: rbx-2
48
- - jdk: openjdk7
49
- rvm: 2.0.0
50
- - jdk: oraclejdk7
51
- rvm: 2.0.0
52
- - jdk: openjdk7
53
- rvm: 2.1
54
- - jdk: oraclejdk7
55
- rvm: 2.1
44
+ - rvm: rbx-2
45
+ jdk: openjdk7
46
+ - rvm: rbx-2
47
+ jdk: oraclejdk7
48
+ - rvm: 2.0.0
49
+ jdk: openjdk7
50
+ - rvm: 2.0.0
51
+ jdk: oraclejdk7
52
+ - rvm: 2.1
53
+ jdk: openjdk7
54
+ - rvm: 2.1
55
+ jdk: oraclejdk7
56
+ - rvm: 2.2.5
57
+ jdk: openjdk7
58
+ - rvm: 2.2.5
59
+ jdk: oraclejdk7
60
+ - rvm: 2.3.1
61
+ jdk: openjdk7
62
+ - rvm: 2.3.1
63
+ jdk: oraclejdk7
64
+ - rvm: ruby-head
65
+ jdk: openjdk7
66
+ - rvm: ruby-head
67
+ jdk: oraclejdk7
56
68
  allow_failures:
57
69
  # - rvm: jruby-9.0.5.0
58
70
  # - rvm: jruby-head
59
71
  - rvm: ruby-head
60
- gemfile: Gemfile
72
+ gemfile: gemfiles/rails4.gemfile
61
73
  - rvm: ruby-head
62
74
  gemfile: gemfiles/rails3.gemfile
63
75
  # - rvm: jruby-head
64
- bundler_args: --jobs 3 --retry 3
76
+ bundler_args: --jobs 2 --retry 2
65
77
  notifications:
66
78
  email: false
data/Gemfile CHANGED
@@ -4,7 +4,13 @@ gemspec
4
4
 
5
5
  group :test do
6
6
  gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
7
- # for JRuby
7
+ gem "mysql2", :platform => [:ruby, :mswin, :mingw]
8
8
  gem "jdbc-sqlite3", :platform => :jruby
9
- gem 'activerecord', '~> 4.0'
9
+ gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
10
+ gem "activerecord-jdbcmysql-adapter", :platform => :jruby
11
+ gem "activerecord-jdbcpostgresql-adapter", :platform => :jruby
12
+
13
+ gem 'activesupport', '~> 4.0'
14
+ gem 'activemodel', '~> 4.0'
15
+ gem 'activerecord', '~> 4.0'
10
16
  end
@@ -4,9 +4,9 @@ $:.push File.expand_path("../lib", __FILE__)
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "arel_extensions"
7
- s.version = '0.8.1'
7
+ s.version = '0.8.2'
8
8
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["Yann Azoury", "Mathilde Pechdi", "Félix Bellanger"]
9
+ s.authors = ["Yann Azoury", "Mathilde Pechdimaldjian", "Félix Bellanger"]
10
10
  s.email = ["yann.azoury@faveod.com", "mathilde.pechdimaldjian@gmail.com", "felix.bellanger@faveod.com"]
11
11
  s.homepage = "https://github.com/Faveod/arel-extensions"
12
12
  s.description = "Adds new features to Arel"
@@ -21,12 +21,9 @@ Gem::Specification.new do |s|
21
21
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
22
  s.require_paths = ["lib"]
23
23
 
24
- s.add_dependency('arel', '~> 6.0')
24
+ s.add_dependency('arel')
25
25
 
26
- s.add_development_dependency('minitest')
26
+ s.add_development_dependency('minitest', '~> 5.9')
27
27
  s.add_development_dependency('rdoc', '~> 4.0')
28
- s.add_development_dependency('rake')
29
- s.add_development_dependency('activesupport', '~> 4.0')
30
- s.add_development_dependency('activemodel', '~> 4.0')
31
- s.add_development_dependency('activerecord', '~> 4.0')
28
+ s.add_development_dependency('rake', '~> 11')
32
29
  end
@@ -1,11 +1,15 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem 'arel', '~> 5.0'
3
+ gem 'arel', '~> 3.0'
4
4
 
5
5
  group :development, :test do
6
6
  gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
7
+ gem "mysql2", :platform => [:ruby, :mswin, :mingw]
7
8
  # for JRuby
8
9
  gem "jdbc-sqlite3", :platform => :jruby
10
+ gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
11
+ gem "activerecord-jdbcmysql-adapter", :platform => :jruby
12
+ gem "activerecord-jdbcpostgresql-adapter", :platform => :jruby
9
13
  gem 'activesupport', '~> 3.2'
10
14
  gem 'activemodel', '~> 3.2'
11
15
  gem 'activerecord', '~> 3.2'
@@ -0,0 +1,20 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem 'arel', '~> 6.0'
4
+
5
+ group :development, :test do
6
+ gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
7
+ gem "mysql2", :platform => [:ruby, :mswin, :mingw]
8
+ # for JRuby
9
+ gem "jdbc-sqlite3", :platform => :jruby
10
+ gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
11
+ gem "activerecord-jdbcmysql-adapter", :platform => :jruby
12
+ gem "activerecord-jdbcpostgresql-adapter", :platform => :jruby
13
+ gem 'activesupport', '~> 4.0'
14
+ gem 'activemodel', '~> 4.0'
15
+ gem 'activerecord', '~> 4.0'
16
+ gem 'rdoc'
17
+ gem 'rake', '~> 11'
18
+ end
19
+
20
+ gemspec :path => "../"
@@ -4,8 +4,13 @@ gem 'arel', '~> 7.0'
4
4
 
5
5
  group :development, :test do
6
6
  gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
7
+ gem "mysql2", :platform => [:ruby, :mswin, :mingw]
7
8
  # for JRuby
8
9
  gem "jdbc-sqlite3", :platform => :jruby
10
+ gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
11
+ gem "activerecord-jdbcmysql-adapter", :platform => :jruby
12
+ gem "activerecord-jdbcpostgresql-adapter", :platform => :jruby
13
+
9
14
  gem 'activesupport', '~> 5'
10
15
  gem 'activemodel', '~> 5'
11
16
  gem 'activerecord', '~> 5'
@@ -12,6 +12,15 @@ module ArelExtensions
12
12
  def expr
13
13
  @expressions.first
14
14
  end
15
+
16
+ def left
17
+ @expressions.first
18
+ end
19
+
20
+ def right
21
+ @expressions.last
22
+ end
23
+
15
24
  end
16
25
  end
17
26
  end
@@ -1,4 +1,4 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module ArelExtensions
3
- VERSION = "0.8.1".freeze
3
+ VERSION = "0.8.2".freeze
4
4
  end
@@ -36,26 +36,13 @@ module ArelExtensions
36
36
 
37
37
  #****************************************************************#
38
38
  def visit_ArelExtensions_Nodes_Concat o, collector
39
- arg = o.left.relation.engine.columns.find{|c| c.name == o.left.name.to_s}.type
40
- if(o.right.is_a?(Arel::Attributes::Attribute))
41
- collector << "CONCAT("
42
- collector = visit o.left, collector
43
- collector << ","
44
- collector = visit o.right, collector
45
- collector << ")"
46
- collector
47
- elsif (arg == :date || arg == :datetime)
48
- collector << "DATE_ADD("
49
- collector = visit o.left, collector
50
- collector << ",INTERVAL #{o.right} DAY)"
51
- collector
52
- else
53
- collector << "CONCAT("
54
- collector = visit o.left, collector
55
- collector << ",'"
56
- collector << "#{o.right}')"
57
- collector
58
- end
39
+ collector << "CONCAT("
40
+ o.expressions.each_with_index { |arg, i|
41
+ collector << Arel::Visitors::MySQL::COMMA unless i == 0
42
+ collector = visit arg, collector
43
+ }
44
+ collector << ")"
45
+ collector
59
46
  end
60
47
 
61
48
 
@@ -26,7 +26,8 @@ module ArelExtensions
26
26
  end
27
27
  end
28
28
 
29
- def visit_ArelExtensions_Nodes_Concat o, collector
29
+ #deprecated
30
+ def visit_ArelExtensions_Nodes_ConcatDep o, collector
30
31
  arg = o.left.relation.engine.columns.find{|c| c.name == o.left.name.to_s}.type
31
32
  if(o.right.is_a?(Arel::Attributes::Attribute))
32
33
  collector << "CONCAT("
@@ -99,10 +100,6 @@ module ArelExtensions
99
100
  end
100
101
 
101
102
 
102
- def visit_ArelExtensions_Nodes_Findis o,collector
103
-
104
- end
105
-
106
103
  def visit_ArelExtensions_Nodes_Length o, collector
107
104
  collector << "LENGTH("
108
105
  collector = visit o.expr, collector
@@ -111,19 +108,6 @@ module ArelExtensions
111
108
  end
112
109
 
113
110
 
114
- def visit_ArelExtensions_Nodes_Locate o, collector
115
- collector << "LOCATE("
116
- if(o.val.is_a?(Arel::Attributes::Attribute))
117
- collector = visit o.val, collector
118
- else
119
- collector << "'#{o.val}'"
120
- end
121
- collector << ","
122
- collector = visit o.expr, collector
123
- collector << ")"
124
- collector
125
- end
126
-
127
111
  def visit_ArelExtensions_Nodes_Isnull o, collector
128
112
  collector << "NVL("
129
113
  collector = visit o.left, collector
@@ -111,7 +111,7 @@ module ArelExtensions
111
111
  end
112
112
 
113
113
  # override
114
- remove_method :visit_Arel_Nodes_As
114
+ remove_method(:visit_Arel_Nodes_As) rescue nil # if Arel::Visitors::ToSql.method_defined?(:visit_Arel_Nodes_As)
115
115
  def visit_Arel_Nodes_As o, collector
116
116
  if o.left.is_a?(Arel::Nodes::Binary)
117
117
  collector << '('
@@ -125,7 +125,7 @@ module ArelExtensions
125
125
  collector
126
126
  end
127
127
 
128
- remove_method :visit_Arel_Nodes_Regexp
128
+ remove_method(:visit_Arel_Nodes_Regexp) rescue nil # if Arel::Visitors::ToSql.method_defined?(:visit_Arel_Nodes_Regexp)
129
129
  def visit_Arel_Nodes_Regexp o, collector
130
130
  collector = visit o.left, collector
131
131
  collector << " REGEXP "
@@ -133,7 +133,7 @@ module ArelExtensions
133
133
  collector
134
134
  end
135
135
 
136
- remove_method :visit_Arel_Nodes_NotRegexp
136
+ remove_method(:visit_Arel_Nodes_NotRegexp) rescue nil # if Arel::Visitors::ToSql.method_defined?(:visit_Arel_Nodes_NotRegexp)
137
137
  def visit_Arel_Nodes_NotRegexp o, collector
138
138
  collector = visit o.left, collector
139
139
  collector << " NOT REGEXP "
data/test/database.yml ADDED
@@ -0,0 +1,22 @@
1
+ sqlite:
2
+ adapter: sqlite3
3
+ database: ":memory:"
4
+ timeout: 500
5
+ jdbc-sqlite:
6
+ adapter: jdbcsqlite3
7
+ database: ":memory:"
8
+ timeout: 500
9
+ mysql:
10
+ adapter: mysql2
11
+ database: arext_test
12
+ username:
13
+ encoding: utf8
14
+ jdbc-mysql:
15
+ adapter: jdbcmysql
16
+ database: arext_test
17
+ username:
18
+ encoding: utf8
19
+ postgres:
20
+ adapter: postgresql
21
+ database: arext_test
22
+ username: postgres
@@ -1,46 +1,42 @@
1
1
  require 'helper'
2
2
 
3
- module Arel
3
+ module ArelExtensions
4
4
  module Nodes
5
5
 
6
6
  describe ArelExtensions::Comparators do
7
+
8
+ before do
9
+ @conn = FakeRecord::Base.new
10
+ Arel::Table.engine = @conn
11
+ @visitor = Arel::Visitors::ToSql.new @conn.connection
12
+ @table = Arel::Table.new(:users)
13
+ @attr = @table[:id]
14
+ @date = Date.new(2016, 3, 31)
15
+ @price = Arel::Table.new(:products)[:price]
16
+ end
17
+
18
+ def compile node
19
+ @visitor.accept(node, Arel::Collectors::SQLString.new).value
20
+ end
21
+
7
22
  it "< is equal lt" do
8
- relation = Arel::Table.new(:users)
9
- mgr = relation.project relation[:id]
10
- mgr.where relation[:id]<(10)
11
- res = mgr.to_sql
12
- res.must_be_like('SELECT "users"."id" FROM "users" WHERE "users"."id" < 10')
23
+ compile(@table[:id] < 10).must_be_like('"users"."id" < 10')
13
24
  end
14
25
 
15
26
  it "<= is equal lteq" do
16
- relation = Arel::Table.new(:users)
17
- mgr = relation.project relation[:id]
18
- mgr.where relation[:id]<=(10)
19
- res = mgr.to_sql
20
- res.must_be_like('SELECT "users"."id" FROM "users" WHERE "users"."id" <= 10')
27
+ compile(@table[:id] <= 10).must_be_like('"users"."id" <= 10')
21
28
  end
22
29
 
23
30
  it "> is equal gt" do
24
- relation = Arel::Table.new(:users)
25
- mgr = relation.project relation[:id]
26
- mgr.where relation[:id]>(10)
27
- res = mgr.to_sql
28
- res.must_be_like('SELECT "users"."id" FROM "users" WHERE "users"."id" > 10')
31
+ compile(@table[:id] > 10).must_be_like('"users"."id" > 10')
29
32
  end
30
33
 
31
34
  it "< is equal gteq" do
32
- relation = Arel::Table.new(:users)
33
- mgr = relation.project relation[:id]
34
- mgr.where relation[:id]>=(10)
35
- res = mgr.to_sql
36
- res.must_be_like('SELECT "users"."id" FROM "users" WHERE "users"."id" >= 10')
35
+ compile(@table[:id] >= 10).must_be_like('"users"."id" >= 10')
37
36
  end
38
37
 
39
38
  it "should compare with dates" do
40
- relation = Table.new(:users)
41
- mgr = relation.project relation[:created_at]
42
- mgr.where(relation[:created_at] >= Date.new(2016, 3, 31))
43
- mgr.to_sql.must_match %{"users"."created_at" >= '2016-03-31'}
39
+ compile(@table[:created_at] >= Date.new(2016, 3, 31)).must_be_like %{"users"."created_at" >= '2016-03-31'}
44
40
  end
45
41
 
46
42
  end
@@ -19,7 +19,7 @@ module ArelExtensions
19
19
  end
20
20
 
21
21
  it "should import large set of data in Oracle" do
22
- insert_manager = Arel::InsertManager.new(@conn).into(@table)
22
+ insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new().into(@table) : Arel::InsertManager.new(@conn).into(@table)
23
23
  insert_manager.bulk_insert(@cols, @data)
24
24
  sql = compile(insert_manager.ast)
25
25
  sql.must_be_like %Q[INSERT ALL INTO "users" ("id", "name", "comments", "created_at") VALUES (23, 'nom1', 'sdfdsfdsfsdf', '2016-01-01') INTO "users" ("id", "name", "comments", "created_at") VALUES (25, 'nom2', 'sdfdsfdsfsdf', '2016-01-01') SELECT 1 FROM dual]
@@ -20,7 +20,7 @@ module ArelExtensions
20
20
  end
21
21
 
22
22
  it "should import large set of data" do
23
- insert_manager = Arel::InsertManager.new(@conn).into(@table)
23
+ insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new().into(@table) : Arel::InsertManager.new(@conn).into(@table)
24
24
  insert_manager.bulk_insert(@cols, @data)
25
25
  sql = compile(insert_manager.ast)
26
26
  sql.must_be_like %Q[INSERT INTO "users" ("id", "name", "comments", "created_at") VALUES (23, 'nom1', 'sdfdsfdsfsdf', '2016-01-01'), (25, 'nom2', 'sdfdsfdsfsdf', '2016-01-01')]
@@ -5,6 +5,7 @@ module ArelExtensions
5
5
  describe 'the to_sql visitor can bulk insert' do
6
6
  before do
7
7
  @conn = FakeRecord::Base.new
8
+ Arel::Table.engine = @conn
8
9
  @visitor = Arel::Visitors::ToSql.new @conn.connection
9
10
  @table = Arel::Table.new(:users)
10
11
  @cols = ['id', 'name', 'comments', 'created_at']
@@ -20,10 +21,10 @@ module ArelExtensions
20
21
 
21
22
 
22
23
  it "should import large set of data using ToSql" do
23
- insert_manager = Arel::InsertManager.new(@conn).into(@table)
24
+ insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new().into(@table) : Arel::InsertManager.new(@conn).into(@table)
24
25
  insert_manager.bulk_insert(@cols, @data)
25
26
  sql = compile(insert_manager.ast)
26
- sql.must_be_like %Q[INSERT INTO "users" ("id", "name", "comments", "created_at") VALUES (23, 'nom1', 'sdfdsfdsfsdf', '2016-01-01'), (25, 'nom2', 'sdfdsfdsfsdf', '2016-01-01')]
27
+ sql.must_be_like %Q[INSERT INTO "users" ("id", "name", "comments", "created_at") VALUES (23, 'nom1', 'sdfdsfdsfsdf', '2016-01-01'), (25, 'nom2', 'sdfdsfdsfsdf', '2016-01-01')]
27
28
  end
28
29
 
29
30
 
@@ -5,6 +5,7 @@ module ArelExtensions
5
5
  describe 'the Oracle visitor' do
6
6
  before do
7
7
  @conn = FakeRecord::Base.new
8
+ Arel::Table.engine = @conn
8
9
  @visitor = Arel::Visitors::Oracle.new @conn.connection
9
10
  @table = Arel::Table.new(:users)
10
11
  @attr = @table[:id]
@@ -6,8 +6,11 @@ module ArelExtensions
6
6
  describe 'the sqlite visitor' do
7
7
 
8
8
  before do
9
- ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
9
+ ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
10
+ ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
11
+ ActiveRecord::Base.default_timezone = :utc
10
12
  @cnx = ActiveRecord::Base.connection
13
+ Arel::Table.engine = ActiveRecord::Base
11
14
  @cnx.drop_table(:users) rescue nil
12
15
  @cnx.create_table :users do |t|
13
16
  t.column :age, :integer
@@ -15,7 +18,7 @@ module ArelExtensions
15
18
  t.column :comments, :text
16
19
  t.column :created_at, :date
17
20
  t.column :updated_at, :date
18
- t.column :score, :floor
21
+ t.column :score, :decimal
19
22
  end
20
23
  @cnx.create_table :products do |t|
21
24
  t.column :price, :decimal
@@ -32,7 +35,7 @@ module ArelExtensions
32
35
  end
33
36
 
34
37
  it "should import large set of data" do
35
- insert_manager = Arel::InsertManager.new(ActiveRecord::Base).into(@table)
38
+ insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new().into(@table) : Arel::InsertManager.new(ActiveRecord::Base).into(@table)
36
39
  insert_manager.bulk_insert(@cols, @data)
37
40
  sql = insert_manager.to_sql
38
41
  sql.must_be_like %Q[INSERT INTO "users" ("id", "name", "comments", "created_at") VALUES (23, 'nom1', 'sdfdsfdsfsdf', '2016-01-01'), (25, 'nom2', 'sdfdsfdsfsdf', '2016-01-01')]
@@ -6,7 +6,9 @@ module ArelExtensions
6
6
  describe 'the sqlite visitor can do maths' do
7
7
 
8
8
  before do
9
- ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
9
+ ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
10
+ ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
11
+ ActiveRecord::Base.default_timezone = :utc
10
12
  Arel::Table.engine = ActiveRecord::Base
11
13
  @cnx = ActiveRecord::Base.connection
12
14
  @cnx.drop_table(:users) rescue nil
@@ -17,7 +19,7 @@ module ArelExtensions
17
19
  t.column :comments, :text
18
20
  t.column :created_at, :date
19
21
  t.column :updated_at, :date
20
- t.column :score, :floor
22
+ t.column :score, :decimal
21
23
  end
22
24
  @cnx.create_table :products do |t|
23
25
  t.column :price, :decimal
@@ -49,8 +51,8 @@ module ArelExtensions
49
51
  #CEIL # require extensions
50
52
 
51
53
  # RAND
52
- assert_equal 5, User.where(User.arel_table[:score].eq(20.16)).select(User.arel_table[:id]).order(Arel.rand).take(50).count
53
- assert_equal 8, User.select(User.arel_table[:name]).order(Arel.rand).take(50).count
54
+ assert_equal 5, User.where(@table[:score].eq(20.16)).order(Arel.rand).limit(50).count
55
+ assert_equal 8, User.order(Arel.rand).limit(50).count
54
56
  end
55
57
 
56
58
  end
@@ -0,0 +1,78 @@
1
+ require 'helper'
2
+ require 'date'
3
+
4
+ module ArelExtensions
5
+ module WthAr
6
+
7
+ describe 'the mysql visitor can do string operations' do
8
+
9
+ before do
10
+ ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
11
+ ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-mysql" : :mysql))
12
+ ActiveRecord::Base.default_timezone = :utc
13
+ begin
14
+ @cnx = ActiveRecord::Base.connection
15
+ Arel::Table.engine = ActiveRecord::Base
16
+ rescue => e
17
+ puts e.inspect
18
+ ActiveRecord::Base.establish_connection(ENV['DB'] || :sqlite)
19
+ @cnx = ActiveRecord::Base.connection
20
+ end
21
+ @cnx.drop_table(:users) rescue nil
22
+ @cnx.create_table :users do |t|
23
+ t.column :age, :integer
24
+ t.column :name, :string
25
+ t.column :comments, :text
26
+ t.column :created_at, :date
27
+ t.column :updated_at, :date
28
+ t.column :score, :decimal
29
+ end
30
+ @cnx.create_table :products do |t|
31
+ t.column :price, :decimal
32
+ end
33
+ class User < ActiveRecord::Base
34
+ end
35
+ d = Date.new(2016, 5,23)
36
+ @lucas = User.create! :age => 5, :name => "Lucas", :created_at => d, :score => 20.16
37
+ sophie = User.create :age => 15, :name => "Sophie", :created_at => d, :score => 20.16
38
+ @sophie = User.where(:id => sophie.id)
39
+ User.create! :age => 20, :name => "Camille", :created_at => d, :score => 20.16
40
+ User.create! :age => 21, :name => "Arthur", :created_at => d, :score => 65.62
41
+ User.create! :age => 23, :name => "Myung", :created_at => d, :score => 20.16
42
+ @laure = User.create :age => 25, :name => "Laure", :created_at => d, :score =>20.16
43
+ User.create! :age => nil, :name => "Test", :created_at => d, :score => 1.62
44
+ @neg = User.create :age => -20, :name => "Negatif", :created_at => d, :score => 0.17
45
+ @table = Arel::Table.new(:users)
46
+ @name = @table[:name]
47
+ end
48
+ after do
49
+ @cnx.drop_table(:users)
50
+ end
51
+
52
+ it "should do string operations" do
53
+ # concat
54
+ d = Date.new(1997, 6, 15)
55
+ assert_equal "SophiePhan", @sophie.select((@name + "Phan").as("res")).first.res
56
+ assert_equal "Sophie2", @sophie.select((@name + 2).as("res")).first.res
57
+ assert_equal "Sophie1997-06-15", @sophie.select((@name + d).as("res")).first.res
58
+ assert_equal "Sophie15", @sophie.select((User.arel_table[:name] + User.arel_table[:age]).as("res")).first.res
59
+ assert_equal "SophieSophie", @sophie.select((User.arel_table[:name] + User.arel_table[:name]).as("res")).first.res
60
+ assert_equal "Sophie2016-05-23", @sophie.select((User.arel_table[:name] + User.arel_table[:created_at]).as("res")).first.res
61
+ #concat Integer
62
+ assert_equal 1, User.where((User.arel_table[:age] + 10).eq(33)).count
63
+ assert_equal 1, User.where((User.arel_table[:age] + "1").eq(6)).count
64
+ assert_equal 1, User.where((User.arel_table[:age] + User.arel_table[:age]).eq(10)).count
65
+
66
+
67
+
68
+ # Replace
69
+ assert_equal "LucaX", User.where(:id => @lucas).select(@name.replace("s","X").as("res")).first.res
70
+ assert_equal "replace", User.where(:id => @lucas).select(@name.replace(@name,"replace").as("res")).first.res
71
+
72
+ #
73
+ end
74
+
75
+ end
76
+
77
+ end
78
+ end
@@ -7,10 +7,11 @@ module ArelExtensions
7
7
  describe 'the sqlite visitor can do string operations' do
8
8
 
9
9
  before do
10
- ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
11
- class User < ActiveRecord::Base
12
- end
10
+ ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
11
+ ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
12
+ ActiveRecord::Base.default_timezone = :utc
13
13
  @cnx = ActiveRecord::Base.connection
14
+ Arel::Table.engine = ActiveRecord::Base
14
15
  @cnx.drop_table(:users) rescue nil
15
16
  @cnx.create_table :users do |t|
16
17
  t.column :age, :integer
@@ -18,11 +19,13 @@ module ArelExtensions
18
19
  t.column :comments, :text
19
20
  t.column :created_at, :date
20
21
  t.column :updated_at, :date
21
- t.column :score, :floor
22
+ t.column :score, :decimal
22
23
  end
23
24
  @cnx.create_table :products do |t|
24
25
  t.column :price, :decimal
25
26
  end
27
+ class User < ActiveRecord::Base
28
+ end
26
29
  d = Date.new(2016, 5,23)
27
30
  @lucas = User.create! :age => 5, :name => "Lucas", :created_at => d, :score => 20.16
28
31
  sophie = User.create :age => 15, :name => "Sophie", :created_at => d, :score => 20.16
metadata CHANGED
@@ -1,67 +1,25 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arel_extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yann Azoury
8
- - Mathilde Pechdi
8
+ - Mathilde Pechdimaldjian
9
9
  - Félix Bellanger
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-08-29 00:00:00.000000000 Z
13
+ date: 2016-08-30 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: arel
17
- requirement: !ruby/object:Gem::Requirement
18
- requirements:
19
- - - "~>"
20
- - !ruby/object:Gem::Version
21
- version: '6.0'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- requirements:
26
- - - "~>"
27
- - !ruby/object:Gem::Version
28
- version: '6.0'
29
- - !ruby/object:Gem::Dependency
30
- name: minitest
31
17
  requirement: !ruby/object:Gem::Requirement
32
18
  requirements:
33
19
  - - ">="
34
20
  - !ruby/object:Gem::Version
35
21
  version: '0'
36
- type: :development
37
- prerelease: false
38
- version_requirements: !ruby/object:Gem::Requirement
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: '0'
43
- - !ruby/object:Gem::Dependency
44
- name: rdoc
45
- requirement: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - "~>"
48
- - !ruby/object:Gem::Version
49
- version: '4.0'
50
- type: :development
51
- prerelease: false
52
- version_requirements: !ruby/object:Gem::Requirement
53
- requirements:
54
- - - "~>"
55
- - !ruby/object:Gem::Version
56
- version: '4.0'
57
- - !ruby/object:Gem::Dependency
58
- name: rake
59
- requirement: !ruby/object:Gem::Requirement
60
- requirements:
61
- - - ">="
62
- - !ruby/object:Gem::Version
63
- version: '0'
64
- type: :development
22
+ type: :runtime
65
23
  prerelease: false
66
24
  version_requirements: !ruby/object:Gem::Requirement
67
25
  requirements:
@@ -69,21 +27,21 @@ dependencies:
69
27
  - !ruby/object:Gem::Version
70
28
  version: '0'
71
29
  - !ruby/object:Gem::Dependency
72
- name: activesupport
30
+ name: minitest
73
31
  requirement: !ruby/object:Gem::Requirement
74
32
  requirements:
75
33
  - - "~>"
76
34
  - !ruby/object:Gem::Version
77
- version: '4.0'
35
+ version: '5.9'
78
36
  type: :development
79
37
  prerelease: false
80
38
  version_requirements: !ruby/object:Gem::Requirement
81
39
  requirements:
82
40
  - - "~>"
83
41
  - !ruby/object:Gem::Version
84
- version: '4.0'
42
+ version: '5.9'
85
43
  - !ruby/object:Gem::Dependency
86
- name: activemodel
44
+ name: rdoc
87
45
  requirement: !ruby/object:Gem::Requirement
88
46
  requirements:
89
47
  - - "~>"
@@ -97,19 +55,19 @@ dependencies:
97
55
  - !ruby/object:Gem::Version
98
56
  version: '4.0'
99
57
  - !ruby/object:Gem::Dependency
100
- name: activerecord
58
+ name: rake
101
59
  requirement: !ruby/object:Gem::Requirement
102
60
  requirements:
103
61
  - - "~>"
104
62
  - !ruby/object:Gem::Version
105
- version: '4.0'
63
+ version: '11'
106
64
  type: :development
107
65
  prerelease: false
108
66
  version_requirements: !ruby/object:Gem::Requirement
109
67
  requirements:
110
68
  - - "~>"
111
69
  - !ruby/object:Gem::Version
112
- version: '4.0'
70
+ version: '11'
113
71
  description: Adds new features to Arel
114
72
  email:
115
73
  - yann.azoury@faveod.com
@@ -129,8 +87,9 @@ files:
129
87
  - Rakefile
130
88
  - arel_extensions.gemspec
131
89
  - functions.html
90
+ - gemfiles/rails3.gemfile
91
+ - gemfiles/rails4.gemfile
132
92
  - gemfiles/rails5.gemfile
133
- - gemfiles/rasil3.gemfile
134
93
  - init/mssql.sql
135
94
  - init/mysql.sql
136
95
  - init/oracle.sql
@@ -177,6 +136,7 @@ files:
177
136
  - lib/arel_extensions/visitors/postgresql.rb
178
137
  - lib/arel_extensions/visitors/sqlite.rb
179
138
  - lib/arel_extensions/visitors/to_sql.rb
139
+ - test/database.yml
180
140
  - test/helper.rb
181
141
  - test/real_db_test.rb
182
142
  - test/support/fake_record.rb
@@ -188,6 +148,7 @@ files:
188
148
  - test/visitors/test_to_sql.rb
189
149
  - test/with_ar/test_bulk_sqlite.rb
190
150
  - test/with_ar/test_math_sqlite.rb
151
+ - test/with_ar/test_string_mysql.rb
191
152
  - test/with_ar/test_string_sqlite.rb
192
153
  homepage: https://github.com/Faveod/arel-extensions
193
154
  licenses:
@@ -216,6 +177,7 @@ signing_key:
216
177
  specification_version: 4
217
178
  summary: Extending Arel
218
179
  test_files:
180
+ - test/database.yml
219
181
  - test/helper.rb
220
182
  - test/real_db_test.rb
221
183
  - test/support/fake_record.rb
@@ -227,4 +189,5 @@ test_files:
227
189
  - test/visitors/test_to_sql.rb
228
190
  - test/with_ar/test_bulk_sqlite.rb
229
191
  - test/with_ar/test_math_sqlite.rb
192
+ - test/with_ar/test_string_mysql.rb
230
193
  - test/with_ar/test_string_sqlite.rb