arel_extensions 0.9.6 → 0.9.7

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: 709b543bdf84952b555236ce66c94f37e33b4183
4
- data.tar.gz: 053561c6aa304247471bf9effb7712eb913ec281
3
+ metadata.gz: e6b6035bcab431e9db110bac526dba5d7ae50cf9
4
+ data.tar.gz: afb3bd312dbcd6ecc15ba1658b4ad2229f47e8d7
5
5
  SHA512:
6
- metadata.gz: 72d08bc341ea513e51f0650cc1677b781929f4af3a2aff55af45c5044643cecd9d7fd82caaa353e4cf8a807477d46c8c2fe394d741d607df9726eb29c623c0a9
7
- data.tar.gz: 647156dfc77c72a0bef98112815ed16b050a7523402608c439ddbb704345bea69d990a4df8bc08600426bf92de24f2358cdd0196e1c423166d59378ea20719da
6
+ metadata.gz: f98fda0e062afc38ab6b9b10d9f72c857b348551095f396e0821b953296c9097067593ccdc50b764f35e5fb30e8994ef5c445491e7a0fc94a16ca19ed251da9f
7
+ data.tar.gz: e616f743571bde26c649646067dc3d25f8a60abdf8c479c204761ea2851824536534ba5d31d519ff3bc3b8b3fd04dc6056e696688fc732dfe2003282bb908742
data/SQL_Challenges.md CHANGED
@@ -7,7 +7,7 @@ A good way could be to create user defined functions to ensure a total transpare
7
7
 
8
8
  ## SQLite (without extension)
9
9
  - FIND_IN_SET
10
- - LOCATE
10
+ - LOCATE / instr
11
11
  - REGEXP
12
12
  - SOUNDEX
13
13
 
data/TODO CHANGED
@@ -17,7 +17,6 @@ Code quality:
17
17
 
18
18
 
19
19
  New features:
20
- - UPCASE / DOWNCASE
21
20
  - POSIX format numbers (%.2f)
22
21
  - easy unions
23
22
  - cast, to_char
@@ -12,6 +12,13 @@ module ArelExtensions
12
12
  #Date and integer adds or subtracts a specified time interval from a date.
13
13
  def +(other)
14
14
  return ArelExtensions::Nodes::Concat.new [self, other] if self.is_a?(Arel::Nodes::Quoted)
15
+ if self.is_a?(Arel::Nodes::Grouping)
16
+ if self.expr.left.is_a?(String) || self.expr.right.is_a?(String)
17
+ return ArelExtensions::Nodes::Concat.new [self, other]
18
+ else
19
+ return Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
20
+ end
21
+ end
15
22
  return case self.class.return_type
16
23
  when :string, :text
17
24
  ArelExtensions::Nodes::Concat.new [self, other]
@@ -0,0 +1,11 @@
1
+ module ArelExtensions
2
+ module Nodes
3
+ class Downcase < Function
4
+ @@return_type = :string
5
+ end
6
+
7
+ class Upcase < Function
8
+ @@return_type = :string
9
+ end
10
+ end
11
+ end
@@ -1,6 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class Locate < Function
4
+ @@return_type = :integer
4
5
 
5
6
  def initialize expr
6
7
  tab = expr.map do |arg|
@@ -9,10 +10,6 @@ module ArelExtensions
9
10
  return super(tab)
10
11
  end
11
12
 
12
- def +(other)
13
- return ArelExtensions::Nodes::Concat.new(self.expressions + [other])
14
- end
15
-
16
13
  end
17
14
  end
18
15
  end
@@ -1,6 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class Substring < Function
4
+ @@return_type = :string
4
5
 
5
6
  def initialize expr
6
7
  tab = [convert_to_node(expr[0]), convert_to_node(expr[1])]
@@ -12,9 +13,10 @@ module ArelExtensions
12
13
  return super(tab)
13
14
  end
14
15
 
15
- def +(other)
16
- return ArelExtensions::Nodes::Concat.new(self.expressions + [other])
17
- end
16
+ # def +(other)
17
+ # puts "[Substring] : #{other.inspect} (#{self.expressions.inspect})"
18
+ # return ArelExtensions::Nodes::Concat.new(self.expressions + [other])
19
+ # end
18
20
 
19
21
  end
20
22
  end
@@ -7,6 +7,7 @@ require 'arel_extensions/nodes/find_in_set'
7
7
  require 'arel_extensions/nodes/replace'
8
8
  require 'arel_extensions/nodes/soundex'
9
9
  require 'arel_extensions/nodes/trim'
10
+ require 'arel_extensions/nodes/change_case'
10
11
  require 'arel_extensions/nodes/blank'
11
12
  require 'arel_extensions/nodes/format'
12
13
 
@@ -94,6 +95,14 @@ module ArelExtensions
94
95
  ArelExtensions::Nodes::Rtrim.new [self, other]
95
96
  end
96
97
 
98
+ def downcase
99
+ ArelExtensions::Nodes::Downcase.new [self]
100
+ end
101
+
102
+ def upcase
103
+ ArelExtensions::Nodes::Upcase.new [self]
104
+ end
105
+
97
106
  def blank
98
107
  ArelExtensions::Nodes::Blank.new [self]
99
108
  end
@@ -1,12 +1,12 @@
1
- namespace :arelextensions do
2
- desc 'Install DB functions'
1
+ namespace :arel_extensions do
2
+ desc 'Install DB functions into current DB'
3
3
  task :install_functions => :environment do
4
- if ENV['DB'] == 'oracle' && ((defined?(RUBY_ENGINE) && RUBY_ENGINE == "rbx") || (RUBY_PLATFORM == 'java')) # not supported
4
+ if ENV['DB'] == 'oracle' && ((defined?(RUBY_ENGINE) && RUBY_ENGINE == "rbx") || (RUBY_PLATFORM == 'java')) # not supported
5
5
  @env_db = (RUBY_PLATFORM == 'java' ? "jdbc-sqlite" : 'sqlite')
6
6
  else
7
- @env_db = ENV['DB']
7
+ @env_db = ENV['DB'] || ActiveRecord::Base.connection.adapter_name
8
8
  end
9
- ActiveRecord::Base.establish_connection(@env_db.try(:to_sym) || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
9
+ ActiveRecord::Base.establish_connection(Rails.env)
10
10
  @cnx = ActiveRecord::Base.connection
11
11
  if File.exist?("init/#{@env_db}.sql")
12
12
  sql = File.read("init/#{@env_db}.sql")
@@ -1,4 +1,4 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module ArelExtensions
3
- VERSION = "0.9.6".freeze
3
+ VERSION = "0.9.7".freeze
4
4
  end
@@ -72,7 +72,7 @@ module ArelExtensions
72
72
  collector << "instr("
73
73
  collector = visit o.expr, collector
74
74
  collector << Arel::Visitors::SQLite::COMMA
75
- collector = visit o.val, collector
75
+ collector = visit o.right, collector
76
76
  collector << ")"
77
77
  collector
78
78
  end
@@ -80,7 +80,7 @@ module ArelExtensions
80
80
  def visit_ArelExtensions_Nodes_Substring o, collector
81
81
  collector << "SUBSTR("
82
82
  o.expressions.each_with_index { |arg, i|
83
- collector << Arel::Visitors::ToSql::COMMA unless i == 0
83
+ collector << Arel::Visitors::SQLite::COMMA unless i == 0
84
84
  collector = visit arg, collector
85
85
  }
86
86
  collector << ")"
@@ -131,6 +131,26 @@ module ArelExtensions
131
131
  collector
132
132
  end
133
133
 
134
+ def visit_ArelExtensions_Nodes_Downcase o, collector
135
+ collector << "LOWER("
136
+ o.expressions.each_with_index { |arg, i|
137
+ collector << Arel::Visitors::ToSql::COMMA unless i == 0
138
+ collector = visit arg, collector
139
+ }
140
+ collector << ")"
141
+ collector
142
+ end
143
+
144
+ def visit_ArelExtensions_Nodes_Upcase o, collector
145
+ collector << "UPPER("
146
+ o.expressions.each_with_index { |arg, i|
147
+ collector << Arel::Visitors::ToSql::COMMA unless i == 0
148
+ collector = visit arg, collector
149
+ }
150
+ collector << ")"
151
+ collector
152
+ end
153
+
134
154
  def visit_ArelExtensions_Nodes_Trim o, collector
135
155
  collector << "TRIM("
136
156
  o.expressions.each_with_index { |arg, i|
data/test/real_db_test.rb CHANGED
@@ -21,7 +21,7 @@ def setup_db
21
21
  db.enable_load_extension(0)
22
22
  rescue => e
23
23
  $load_extension_disabled = true
24
- puts "can not load extensions #{e.inspect}"
24
+ $stderr << "can not load extensions #{e.inspect}\n"
25
25
  end
26
26
  end
27
27
  #function find_in_set
@@ -241,6 +241,12 @@ module ArelExtensions
241
241
  assert_equal "replace", t(@lucas, @name.replace(@name, "replace"))
242
242
  end
243
243
 
244
+ def test_replace_once
245
+ skip "TODO"
246
+ # skip "Sqlite version can't load extension for locate" if $sqlite && $load_extension_disabled
247
+ assert_equal "LuCas", t(@lucas, @name.substring(1, @name.locate('c') - 1) + 'C' + @name.substring(@name.locate('c') + 1, @name.length))
248
+ end
249
+
244
250
  def test_soundex
245
251
  skip "Sqlite version can't load extension for soundex" if $sqlite && $load_extension_disabled
246
252
  skip "PostgreSql version can't load extension for soundex" if @env_db == 'postgresql'
@@ -248,6 +254,12 @@ module ArelExtensions
248
254
  assert_equal 8, User.where(@name.soundex.eq(@name.soundex)).count
249
255
  end
250
256
 
257
+ def test_change_case
258
+ assert_equal "myung", t(@myung, @name.downcase)
259
+ assert_equal "MYUNG", t(@myung, @name.upcase)
260
+ assert_equal "myung", t(@myung, @name.upcase.downcase)
261
+ end
262
+
251
263
  def test_trim
252
264
  assert_equal "Myung", t(@myung, @name.trim)
253
265
  assert_equal "Myung", t(@myung, @name.trim.ltrim.rtrim)
@@ -290,7 +302,7 @@ module ArelExtensions
290
302
 
291
303
  assert_equal ' ', t(@myung, @comments.coalesce("Myung").coalesce('ignored'))
292
304
  assert_equal 'Laure', t(@laure, @comments.coalesce("Laure"))
293
- assert_equal '', t(@laure, @comments.coalesce(""))
305
+ assert_equal (@env_db == 'oracle' ? nil : ''), t(@laure, @comments.coalesce(""))
294
306
 
295
307
  if @env_db == 'postgresql'
296
308
  assert_equal 100, t(@test, @age.coalesce(100))
@@ -20,7 +20,7 @@ module ArelExtensions
20
20
  if File.exist?("init/#{@env_db}.sql")
21
21
  sql = File.read("init/#{@env_db}.sql")
22
22
  unless sql.blank?
23
- @cnx.execute(sql) rescue $stderr << "can't create functions"
23
+ @cnx.execute(sql) rescue $stderr << "can't create functions\n"
24
24
  end
25
25
  end
26
26
  @cnx.drop_table(:user_tests) rescue nil
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arel_extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.6
4
+ version: 0.9.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yann Azoury
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-03-18 00:00:00.000000000 Z
13
+ date: 2017-03-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: arel
@@ -116,6 +116,7 @@ files:
116
116
  - lib/arel_extensions/nodes/abs.rb
117
117
  - lib/arel_extensions/nodes/blank.rb
118
118
  - lib/arel_extensions/nodes/ceil.rb
119
+ - lib/arel_extensions/nodes/change_case.rb
119
120
  - lib/arel_extensions/nodes/coalesce.rb
120
121
  - lib/arel_extensions/nodes/concat.rb
121
122
  - lib/arel_extensions/nodes/date_diff.rb