baby_squeel 1.1.3 → 1.1.4

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: 4567e1ad82a18c7be246a9c76c51d97869dacdac
4
- data.tar.gz: c0fdfe706fad8048de09f7f4dbd714cbd1a86f32
3
+ metadata.gz: 3a93b2e6f4683805f7d23a2b7ce9ac30756052ac
4
+ data.tar.gz: 4179fa1811a17756568b82758ae9fa02267d3f98
5
5
  SHA512:
6
- metadata.gz: 560f14bb971c76e166d4ac673c483d7fcee7929ad13337fadcb40cb90f965709422745c402464703d634247c6ae03229f86da3be64ced4e20c50034287efb232
7
- data.tar.gz: c02dcaaf7afb4011dd364ba749f2bb0132ab61f3ad1a7cd3a52c708811044d7049b87969774808d8dc041784b0eab461548cd3ea7c5900a61ba4ed79a0480ce9
6
+ metadata.gz: 3e61f2a56c95418acbbd6abdad4aaf942cdb86f2ae88703e3a9ede99c8e133716145ce2b2d19109c2328c7aa208d5637fecb9478557e4d4492c78e31244323b5
7
+ data.tar.gz: 7b2b9836c944357c7e181baa5a463fc9948eabe2e4d30a6d9a1c135f38a61a5ef33df1fb9c4d5372baef6b660c3ecb280a3f313ea1ae1814cdcff419d574e42b
@@ -2,6 +2,10 @@
2
2
 
3
3
  Nothing to see here.
4
4
 
5
+ ## [1.1.4] - 2017-04-13
6
+ ### Fixed
7
+ - Nodes::Attribute#in and #not_in generate valid SQL when given ActiveRecord::NullRelations.
8
+
5
9
  ## [1.1.3] - 2017-03-31
6
10
  ### Fixed
7
11
  - Nodes::Attribute#in was not returning BabySqueel node. As a result, you couldn't chain on it. This fixes #61.
@@ -114,7 +118,8 @@ Nothing to see here.
114
118
  ### Added
115
119
  - Initial support for selects, orders, wheres, and joins.
116
120
 
117
- [Unreleased]: https://github.com/rzane/baby_squeel/compare/v1.1.2...HEAD
121
+ [Unreleased]: https://github.com/rzane/baby_squeel/compare/v1.1.4...HEAD
122
+ [1.1.3]: https://github.com/rzane/baby_squeel/compare/v1.1.3...v1.1.4
118
123
  [1.1.3]: https://github.com/rzane/baby_squeel/compare/v1.1.2...v1.1.3
119
124
  [1.1.2]: https://github.com/rzane/baby_squeel/compare/v1.1.1...v1.1.2
120
125
  [1.1.1]: https://github.com/rzane/baby_squeel/compare/v1.1.0...v1.1.1
@@ -11,8 +11,7 @@ module BabySqueel
11
11
 
12
12
  def in(rel)
13
13
  if rel.is_a? ::ActiveRecord::Relation
14
- expr = ::Arel.sql(rel.to_sql)
15
- Nodes.wrap ::Arel::Nodes::In.new(self, expr)
14
+ Nodes.wrap ::Arel::Nodes::In.new(self, sanitize_relation(rel))
16
15
  else
17
16
  super
18
17
  end
@@ -20,7 +19,7 @@ module BabySqueel
20
19
 
21
20
  def not_in(rel)
22
21
  if rel.is_a? ::ActiveRecord::Relation
23
- ::Arel::Nodes::NotIn.new(self, Arel.sql(rel.to_sql))
22
+ Nodes.wrap ::Arel::Nodes::NotIn.new(self, sanitize_relation(rel))
24
23
  else
25
24
  super
26
25
  end
@@ -33,6 +32,23 @@ module BabySqueel
33
32
  super
34
33
  end
35
34
  end
35
+
36
+ private
37
+
38
+ # NullRelation must be treated as a special case, because
39
+ # NullRelation#to_sql returns an empty string. As such,
40
+ # we need to convert the NullRelation to regular relation.
41
+ # Conveniently, this approach automatically adds a 1=0.
42
+ # I have literally no idea why, but I'll take it.
43
+ def sanitize_relation(rel)
44
+ if rel.kind_of? ::ActiveRecord::NullRelation
45
+ other = rel.spawn
46
+ other.extending_values -= [::ActiveRecord::NullRelation]
47
+ sanitize_relation rel.unscoped.merge(other)
48
+ else
49
+ Arel.sql rel.to_sql
50
+ end
51
+ end
36
52
  end
37
53
  end
38
54
  end
@@ -1,3 +1,3 @@
1
1
  module BabySqueel
2
- VERSION = '1.1.3'.freeze
2
+ VERSION = '1.1.4'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: baby_squeel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ray Zane
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-31 00:00:00.000000000 Z
11
+ date: 2017-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord