arel_extensions 0.8.1 → 0.8.2

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 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