arel 4.0.1 → 4.0.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: 43df8ad0c214e6f273a245b06ad740700735eadb
4
- data.tar.gz: 15084841b2ad5743e4d81722bebbff6bc7471a2f
3
+ metadata.gz: fe1827bf9b3fb8d0df377a874b604c6d1fbb4387
4
+ data.tar.gz: 050b51b492c74c09be3aa3f4a58487ef3150c57b
5
5
  SHA512:
6
- metadata.gz: f8c37e0d0b37551a9b27cbce6d7c3b7509bdbb98847175446a57fae35198ab9c996153baed4f9d3f7c7df018d4efa0830c9c150fc9f413a59087aa73cb09eebe
7
- data.tar.gz: 439ace13cbdee92401d629c1874a82d9355c2a53a9fbc6b8b086a2fa1fac5a59fa9a6feb47163014bc452358154ded999b36fd2991a870c5557f5ea7ebe6fa3e
6
+ metadata.gz: 200b67f47b08b79e6b514035398fd8f00d810e786af0de57862ee68ec4ff228f68b036419273add78450df7c18f6da4b54b68e6b78eeacbb98575c40d426d2be
7
+ data.tar.gz: 692a06c47c099852541d12c6499ef2c9bbe0f943fc5f2023f6523e6a819c14d43e7add74e834b9aa0290a17156bc4bf38ba32d043daf6248e20765664104141c
@@ -2,7 +2,6 @@ script: "rake test"
2
2
  rvm:
3
3
  - rbx-19mode
4
4
  - jruby
5
- - 1.9.2
6
5
  - 1.9.3
7
6
  - 2.0.0
8
7
  notifications:
@@ -1,3 +1,10 @@
1
+ === 4.0.2 / 2014-02-05
2
+
3
+ * Bug Fixes
4
+
5
+ * Fix `SqlLiteral` YAML serialization
6
+ * PostgreSQL bugfix for invalid SQL in subqueries
7
+
1
8
  == 4.0.1 / 2013-10-22
2
9
 
3
10
  * Enhancements
@@ -1,12 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ # stub: arel 4.0.2.20140205180311 ruby lib
2
3
 
3
4
  Gem::Specification.new do |s|
4
5
  s.name = "arel"
5
- s.version = "4.0.1.20131022201058"
6
+ s.version = "4.0.2.20140205180311"
6
7
 
7
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
+ s.require_paths = ["lib"]
8
10
  s.authors = ["Aaron Patterson", "Bryan Halmkamp", "Emilio Tagua", "Nick Kallen"]
9
- s.date = "2013-10-22"
11
+ s.date = "2014-02-05"
10
12
  s.description = "Arel is a SQL AST manager for Ruby. It\n\n1. Simplifies the generation of complex SQL queries\n2. Adapts to various RDBMS systems\n\nIt is intended to be a framework framework; that is, you can build your own ORM\nwith it, focusing on innovative object and collection modeling as opposed to\ndatabase compatibility and query generation."
11
13
  s.email = ["aaron@tenderlovemaking.com", "bryan@brynary.com", "miloops@gmail.com", "nick@example.org"]
12
14
  s.extra_rdoc_files = ["History.txt", "MIT-LICENSE.txt", "Manifest.txt", "README.markdown"]
@@ -14,9 +16,8 @@ Gem::Specification.new do |s|
14
16
  s.homepage = "http://github.com/rails/arel"
15
17
  s.licenses = ["MIT"]
16
18
  s.rdoc_options = ["--main", "README.markdown"]
17
- s.require_paths = ["lib"]
18
19
  s.rubyforge_project = "arel"
19
- s.rubygems_version = "2.0.6"
20
+ s.rubygems_version = "2.2.0"
20
21
  s.summary = "Arel is a SQL AST manager for Ruby"
21
22
  s.test_files = ["test/attributes/test_attribute.rb", "test/nodes/test_and.rb", "test/nodes/test_as.rb", "test/nodes/test_ascending.rb", "test/nodes/test_bin.rb", "test/nodes/test_count.rb", "test/nodes/test_delete_statement.rb", "test/nodes/test_descending.rb", "test/nodes/test_distinct.rb", "test/nodes/test_equality.rb", "test/nodes/test_extract.rb", "test/nodes/test_false.rb", "test/nodes/test_grouping.rb", "test/nodes/test_infix_operation.rb", "test/nodes/test_insert_statement.rb", "test/nodes/test_named_function.rb", "test/nodes/test_node.rb", "test/nodes/test_not.rb", "test/nodes/test_or.rb", "test/nodes/test_over.rb", "test/nodes/test_select_core.rb", "test/nodes/test_select_statement.rb", "test/nodes/test_sql_literal.rb", "test/nodes/test_sum.rb", "test/nodes/test_table_alias.rb", "test/nodes/test_true.rb", "test/nodes/test_update_statement.rb", "test/nodes/test_window.rb", "test/test_activerecord_compat.rb", "test/test_attributes.rb", "test/test_crud.rb", "test/test_delete_manager.rb", "test/test_factory_methods.rb", "test/test_insert_manager.rb", "test/test_select_manager.rb", "test/test_table.rb", "test/test_update_manager.rb", "test/visitors/test_bind_visitor.rb", "test/visitors/test_depth_first.rb", "test/visitors/test_dispatch_contamination.rb", "test/visitors/test_dot.rb", "test/visitors/test_ibm_db.rb", "test/visitors/test_informix.rb", "test/visitors/test_join_sql.rb", "test/visitors/test_mssql.rb", "test/visitors/test_mysql.rb", "test/visitors/test_oracle.rb", "test/visitors/test_postgres.rb", "test/visitors/test_sqlite.rb", "test/visitors/test_to_sql.rb"]
22
23
 
@@ -24,17 +25,17 @@ Gem::Specification.new do |s|
24
25
  s.specification_version = 4
25
26
 
26
27
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
27
- s.add_development_dependency(%q<minitest>, ["~> 5.0"])
28
+ s.add_development_dependency(%q<minitest>, ["~> 5.2"])
28
29
  s.add_development_dependency(%q<rdoc>, ["~> 4.0"])
29
- s.add_development_dependency(%q<hoe>, ["~> 3.7"])
30
+ s.add_development_dependency(%q<hoe>, ["~> 3.8"])
30
31
  else
31
- s.add_dependency(%q<minitest>, ["~> 5.0"])
32
+ s.add_dependency(%q<minitest>, ["~> 5.2"])
32
33
  s.add_dependency(%q<rdoc>, ["~> 4.0"])
33
- s.add_dependency(%q<hoe>, ["~> 3.7"])
34
+ s.add_dependency(%q<hoe>, ["~> 3.8"])
34
35
  end
35
36
  else
36
- s.add_dependency(%q<minitest>, ["~> 5.0"])
37
+ s.add_dependency(%q<minitest>, ["~> 5.2"])
37
38
  s.add_dependency(%q<rdoc>, ["~> 4.0"])
38
- s.add_dependency(%q<hoe>, ["~> 3.7"])
39
+ s.add_dependency(%q<hoe>, ["~> 3.8"])
39
40
  end
40
41
  end
@@ -32,7 +32,7 @@ require 'arel/sql_literal'
32
32
  ####
33
33
 
34
34
  module Arel
35
- VERSION = '4.0.1'
35
+ VERSION = '4.0.2'
36
36
 
37
37
  def self.sql raw_sql
38
38
  Arel::Nodes::SqlLiteral.new raw_sql
@@ -5,6 +5,10 @@ module Arel
5
5
  include Arel::Predications
6
6
  include Arel::AliasPredication
7
7
  include Arel::OrderPredications
8
+
9
+ def encode_with(coder)
10
+ coder.scalar = self.to_s
11
+ end
8
12
  end
9
13
 
10
14
  class BindParam < SqlLiteral
@@ -4,10 +4,12 @@ module Arel
4
4
  private
5
5
 
6
6
  def visit_Arel_Nodes_Matches o, a
7
+ a = o.left if Arel::Attributes::Attribute === o.left
7
8
  "#{visit o.left, a} ILIKE #{visit o.right, a}"
8
9
  end
9
10
 
10
11
  def visit_Arel_Nodes_DoesNotMatch o, a
12
+ a = o.left if Arel::Attributes::Attribute === o.left
11
13
  "#{visit o.left, a} NOT ILIKE #{visit o.right, a}"
12
14
  end
13
15
 
@@ -9,8 +9,8 @@ module Arel
9
9
 
10
10
  DISPATCH = Hash.new do |hash, visitor_class|
11
11
  hash[visitor_class] =
12
- Hash.new do |hash, node_class|
13
- hash[node_class] = "visit_#{(node_class.name || '').gsub('::', '_')}"
12
+ Hash.new do |method_hash, node_class|
13
+ method_hash[node_class] = "visit_#{(node_class.name || '').gsub('::', '_')}"
14
14
  end
15
15
  end
16
16
 
@@ -1,4 +1,5 @@
1
1
  require 'helper'
2
+ require 'yaml'
2
3
 
3
4
  module Arel
4
5
  module Nodes
@@ -56,6 +57,13 @@ module Arel
56
57
  @visitor.accept(node).must_be_like %{ (foo = 1 AND foo = 2) }
57
58
  end
58
59
  end
60
+
61
+ describe 'serialization' do
62
+ it 'serializes into YAML' do
63
+ yaml_literal = SqlLiteral.new('foo').to_yaml
64
+ assert_equal('foo', YAML.load(yaml_literal))
65
+ end
66
+ end
59
67
  end
60
68
  end
61
69
  end
@@ -5,6 +5,8 @@ module Arel
5
5
  describe 'the postgres visitor' do
6
6
  before do
7
7
  @visitor = PostgreSQL.new Table.engine.connection
8
+ @table = Table.new(:users)
9
+ @attr = @table[:id]
8
10
  end
9
11
 
10
12
  describe 'locking' do
@@ -43,6 +45,40 @@ module Arel
43
45
  core.set_quantifier = Arel::Nodes::Distinct.new
44
46
  assert_equal 'SELECT DISTINCT', @visitor.accept(core)
45
47
  end
48
+
49
+ describe "Nodes::Matches" do
50
+ it "should know how to visit" do
51
+ node = @table[:name].matches('foo%')
52
+ @visitor.accept(node).must_be_like %{
53
+ "users"."name" ILIKE 'foo%'
54
+ }
55
+ end
56
+
57
+ it 'can handle subqueries' do
58
+ subquery = @table.project(:id).where(@table[:name].matches('foo%'))
59
+ node = @attr.in subquery
60
+ @visitor.accept(node).must_be_like %{
61
+ "users"."id" IN (SELECT id FROM "users" WHERE "users"."name" ILIKE 'foo%')
62
+ }
63
+ end
64
+ end
65
+
66
+ describe "Nodes::DoesNotMatch" do
67
+ it "should know how to visit" do
68
+ node = @table[:name].does_not_match('foo%')
69
+ @visitor.accept(node).must_be_like %{
70
+ "users"."name" NOT ILIKE 'foo%'
71
+ }
72
+ end
73
+
74
+ it 'can handle subqueries' do
75
+ subquery = @table.project(:id).where(@table[:name].does_not_match('foo%'))
76
+ node = @attr.in subquery
77
+ @visitor.accept(node).must_be_like %{
78
+ "users"."id" IN (SELECT id FROM "users" WHERE "users"."name" NOT ILIKE 'foo%')
79
+ }
80
+ end
81
+ end
46
82
  end
47
83
  end
48
84
  end
@@ -194,6 +194,40 @@ module Arel
194
194
  @visitor.accept(test).must_be_like %{ "users"."bool" = 't' }
195
195
  end
196
196
 
197
+ describe "Nodes::Matches" do
198
+ it "should know how to visit" do
199
+ node = @table[:name].matches('foo%')
200
+ @visitor.accept(node).must_be_like %{
201
+ "users"."name" LIKE 'foo%'
202
+ }
203
+ end
204
+
205
+ it 'can handle subqueries' do
206
+ subquery = @table.project(:id).where(@table[:name].matches('foo%'))
207
+ node = @attr.in subquery
208
+ @visitor.accept(node).must_be_like %{
209
+ "users"."id" IN (SELECT id FROM "users" WHERE "users"."name" LIKE 'foo%')
210
+ }
211
+ end
212
+ end
213
+
214
+ describe "Nodes::DoesNotMatch" do
215
+ it "should know how to visit" do
216
+ node = @table[:name].does_not_match('foo%')
217
+ @visitor.accept(node).must_be_like %{
218
+ "users"."name" NOT LIKE 'foo%'
219
+ }
220
+ end
221
+
222
+ it 'can handle subqueries' do
223
+ subquery = @table.project(:id).where(@table[:name].does_not_match('foo%'))
224
+ node = @attr.in subquery
225
+ @visitor.accept(node).must_be_like %{
226
+ "users"."id" IN (SELECT id FROM "users" WHERE "users"."name" NOT LIKE 'foo%')
227
+ }
228
+ end
229
+ end
230
+
197
231
  describe "Nodes::Ordering" do
198
232
  it "should know how to visit" do
199
233
  node = @attr.desc
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arel
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.1
4
+ version: 4.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Patterson
@@ -11,50 +11,50 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-10-22 00:00:00.000000000 Z
14
+ date: 2014-02-05 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: minitest
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
- - - ~>
20
+ - - "~>"
21
21
  - !ruby/object:Gem::Version
22
- version: '5.0'
22
+ version: '5.2'
23
23
  type: :development
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ~>
27
+ - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '5.0'
29
+ version: '5.2'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: rdoc
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
- - - ~>
34
+ - - "~>"
35
35
  - !ruby/object:Gem::Version
36
36
  version: '4.0'
37
37
  type: :development
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - ~>
41
+ - - "~>"
42
42
  - !ruby/object:Gem::Version
43
43
  version: '4.0'
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: hoe
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
- - - ~>
48
+ - - "~>"
49
49
  - !ruby/object:Gem::Version
50
- version: '3.7'
50
+ version: '3.8'
51
51
  type: :development
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - ~>
55
+ - - "~>"
56
56
  - !ruby/object:Gem::Version
57
- version: '3.7'
57
+ version: '3.8'
58
58
  description: |-
59
59
  Arel is a SQL AST manager for Ruby. It
60
60
 
@@ -77,9 +77,9 @@ extra_rdoc_files:
77
77
  - Manifest.txt
78
78
  - README.markdown
79
79
  files:
80
- - .autotest
81
- - .gemtest
82
- - .travis.yml
80
+ - ".autotest"
81
+ - ".gemtest"
82
+ - ".travis.yml"
83
83
  - Gemfile
84
84
  - History.txt
85
85
  - MIT-LICENSE.txt
@@ -217,23 +217,23 @@ licenses:
217
217
  metadata: {}
218
218
  post_install_message:
219
219
  rdoc_options:
220
- - --main
220
+ - "--main"
221
221
  - README.markdown
222
222
  require_paths:
223
223
  - lib
224
224
  required_ruby_version: !ruby/object:Gem::Requirement
225
225
  requirements:
226
- - - '>='
226
+ - - ">="
227
227
  - !ruby/object:Gem::Version
228
228
  version: '0'
229
229
  required_rubygems_version: !ruby/object:Gem::Requirement
230
230
  requirements:
231
- - - '>='
231
+ - - ">="
232
232
  - !ruby/object:Gem::Version
233
233
  version: '0'
234
234
  requirements: []
235
235
  rubyforge_project: arel
236
- rubygems_version: 2.0.6
236
+ rubygems_version: 2.2.0
237
237
  signing_key:
238
238
  specification_version: 4
239
239
  summary: Arel is a SQL AST manager for Ruby