left_join 0.1.0 → 0.2.0
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 +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +28 -27
- data/VERSION +1 -1
- data/left_join.gemspec +7 -8
- data/lib/left_join.rb +0 -19
- data/lib/left_join/adapters/active_record_adapter.rb +1 -23
- data/spec/left_join_spec.rb +13 -20
- data/spec/spec_helper.rb +5 -0
- metadata +5 -6
- data/lib/left_join/node.rb +0 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cbd1e1087f2324c39141cdd48a47dd51e89b842c
|
|
4
|
+
data.tar.gz: 561a76881876900b8f5d71b0026d1c899724324c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 14c930afa5688b049a8c021e7d98d4b67f3132e8ed51834b4df83daf38934a6d52d2400f94ae0c98dc397bb45e4956facd7404b043e05df811ea0849ab887457
|
|
7
|
+
data.tar.gz: 62f3d176a8f5fbb308bd81317d559386c52dffdd61dee2510c100f409a81935e5698cf689042e150f2d47c50d47ba4570bf7f67b9289e57e4de08a21eecc0174
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
GEM
|
|
2
2
|
remote: http://rubygems.org/
|
|
3
3
|
specs:
|
|
4
|
-
activemodel (4.2.
|
|
5
|
-
activesupport (= 4.2.
|
|
4
|
+
activemodel (4.2.6)
|
|
5
|
+
activesupport (= 4.2.6)
|
|
6
6
|
builder (~> 3.1)
|
|
7
|
-
activerecord (4.2.
|
|
8
|
-
activemodel (= 4.2.
|
|
9
|
-
activesupport (= 4.2.
|
|
7
|
+
activerecord (4.2.6)
|
|
8
|
+
activemodel (= 4.2.6)
|
|
9
|
+
activesupport (= 4.2.6)
|
|
10
10
|
arel (~> 6.0)
|
|
11
|
-
activesupport (4.2.
|
|
11
|
+
activesupport (4.2.6)
|
|
12
12
|
i18n (~> 0.7)
|
|
13
13
|
json (~> 1.7, >= 1.7.7)
|
|
14
14
|
minitest (~> 5.1)
|
|
15
15
|
thread_safe (~> 0.3, >= 0.3.4)
|
|
16
16
|
tzinfo (~> 1.1)
|
|
17
|
-
addressable (2.
|
|
17
|
+
addressable (2.4.0)
|
|
18
18
|
arel (6.0.3)
|
|
19
19
|
builder (3.2.2)
|
|
20
20
|
descendants_tracker (0.0.4)
|
|
@@ -23,19 +23,18 @@ GEM
|
|
|
23
23
|
docile (1.1.5)
|
|
24
24
|
faraday (0.9.2)
|
|
25
25
|
multipart-post (>= 1.2, < 3)
|
|
26
|
-
git (1.
|
|
27
|
-
github_api (0.
|
|
28
|
-
addressable (~> 2.
|
|
26
|
+
git (1.3.0)
|
|
27
|
+
github_api (0.13.1)
|
|
28
|
+
addressable (~> 2.4.0)
|
|
29
29
|
descendants_tracker (~> 0.0.4)
|
|
30
30
|
faraday (~> 0.8, < 0.10)
|
|
31
31
|
hashie (>= 3.4)
|
|
32
32
|
multi_json (>= 1.7.5, < 2.0)
|
|
33
|
-
nokogiri (~> 1.6.6)
|
|
34
33
|
oauth2
|
|
35
|
-
hashie (3.4.
|
|
36
|
-
highline (1.7.
|
|
34
|
+
hashie (3.4.4)
|
|
35
|
+
highline (1.7.8)
|
|
37
36
|
i18n (0.7.0)
|
|
38
|
-
jeweler (2.
|
|
37
|
+
jeweler (2.1.1)
|
|
39
38
|
builder
|
|
40
39
|
bundler (>= 1.0)
|
|
41
40
|
git (>= 1.2.5)
|
|
@@ -44,23 +43,24 @@ GEM
|
|
|
44
43
|
nokogiri (>= 1.5.10)
|
|
45
44
|
rake
|
|
46
45
|
rdoc
|
|
46
|
+
semver
|
|
47
47
|
json (1.8.3)
|
|
48
48
|
jwt (1.5.1)
|
|
49
|
-
|
|
50
|
-
minitest (5.
|
|
51
|
-
multi_json (1.
|
|
49
|
+
mini_portile2 (2.0.0)
|
|
50
|
+
minitest (5.9.0)
|
|
51
|
+
multi_json (1.12.0)
|
|
52
52
|
multi_xml (0.5.5)
|
|
53
53
|
multipart-post (2.0.0)
|
|
54
|
-
nokogiri (1.6.
|
|
55
|
-
|
|
56
|
-
oauth2 (1.
|
|
54
|
+
nokogiri (1.6.7.2)
|
|
55
|
+
mini_portile2 (~> 2.0.0.rc2)
|
|
56
|
+
oauth2 (1.1.0)
|
|
57
57
|
faraday (>= 0.8, < 0.10)
|
|
58
|
-
jwt (~> 1.0)
|
|
58
|
+
jwt (~> 1.0, < 1.5.2)
|
|
59
59
|
multi_json (~> 1.3)
|
|
60
60
|
multi_xml (~> 0.5)
|
|
61
|
-
rack (
|
|
61
|
+
rack (>= 1.2, < 3)
|
|
62
62
|
rack (1.6.4)
|
|
63
|
-
rake (
|
|
63
|
+
rake (11.1.2)
|
|
64
64
|
rdoc (3.12.2)
|
|
65
65
|
json (~> 1.4)
|
|
66
66
|
rspec (3.3.0)
|
|
@@ -76,12 +76,13 @@ GEM
|
|
|
76
76
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
77
77
|
rspec-support (~> 3.3.0)
|
|
78
78
|
rspec-support (3.3.0)
|
|
79
|
-
|
|
79
|
+
semver (1.0.1)
|
|
80
|
+
simplecov (0.11.2)
|
|
80
81
|
docile (~> 1.1.0)
|
|
81
82
|
json (~> 1.8)
|
|
82
83
|
simplecov-html (~> 0.10.0)
|
|
83
84
|
simplecov-html (0.10.0)
|
|
84
|
-
sqlite3 (1.3.
|
|
85
|
+
sqlite3 (1.3.11)
|
|
85
86
|
thread_safe (0.3.5)
|
|
86
87
|
tzinfo (1.2.2)
|
|
87
88
|
thread_safe (~> 0.1)
|
|
@@ -92,11 +93,11 @@ PLATFORMS
|
|
|
92
93
|
DEPENDENCIES
|
|
93
94
|
activerecord
|
|
94
95
|
bundler (~> 1.0)
|
|
95
|
-
jeweler (~> 2.0
|
|
96
|
+
jeweler (~> 2.1.0)
|
|
96
97
|
rdoc (~> 3.12)
|
|
97
98
|
rspec (~> 3.3.0)
|
|
98
99
|
simplecov
|
|
99
100
|
sqlite3
|
|
100
101
|
|
|
101
102
|
BUNDLED WITH
|
|
102
|
-
1.
|
|
103
|
+
1.12.2
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.2.0
|
data/left_join.gemspec
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
|
-
# stub: left_join 0.
|
|
5
|
+
# stub: left_join 0.2.0 ruby lib
|
|
6
6
|
|
|
7
7
|
Gem::Specification.new do |s|
|
|
8
8
|
s.name = "left_join"
|
|
9
|
-
s.version = "0.
|
|
9
|
+
s.version = "0.2.0"
|
|
10
10
|
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
12
12
|
s.require_paths = ["lib"]
|
|
13
13
|
s.authors = ["Diego Aguir Selzlein"]
|
|
14
|
-
s.date = "
|
|
14
|
+
s.date = "2016-05-18"
|
|
15
15
|
s.description = "This gem helps doing LEFT JOIN's between ActiveRecord associations"
|
|
16
16
|
s.email = "diegoselzlein@gmail.com"
|
|
17
17
|
s.extra_rdoc_files = [
|
|
@@ -30,13 +30,12 @@ Gem::Specification.new do |s|
|
|
|
30
30
|
"left_join.gemspec",
|
|
31
31
|
"lib/left_join.rb",
|
|
32
32
|
"lib/left_join/adapters/active_record_adapter.rb",
|
|
33
|
-
"lib/left_join/node.rb",
|
|
34
33
|
"spec/left_join_spec.rb",
|
|
35
34
|
"spec/spec_helper.rb"
|
|
36
35
|
]
|
|
37
36
|
s.homepage = "http://github.com/nerde/left_join"
|
|
38
37
|
s.licenses = ["MIT"]
|
|
39
|
-
s.rubygems_version = "2.
|
|
38
|
+
s.rubygems_version = "2.5.1"
|
|
40
39
|
s.summary = "LEFT JOIN with ActiveRecord"
|
|
41
40
|
|
|
42
41
|
if s.respond_to? :specification_version then
|
|
@@ -46,7 +45,7 @@ Gem::Specification.new do |s|
|
|
|
46
45
|
s.add_development_dependency(%q<rspec>, ["~> 3.3.0"])
|
|
47
46
|
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
|
48
47
|
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
|
49
|
-
s.add_development_dependency(%q<jeweler>, ["~> 2.0
|
|
48
|
+
s.add_development_dependency(%q<jeweler>, ["~> 2.1.0"])
|
|
50
49
|
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
|
51
50
|
s.add_development_dependency(%q<sqlite3>, [">= 0"])
|
|
52
51
|
s.add_development_dependency(%q<activerecord>, [">= 0"])
|
|
@@ -54,7 +53,7 @@ Gem::Specification.new do |s|
|
|
|
54
53
|
s.add_dependency(%q<rspec>, ["~> 3.3.0"])
|
|
55
54
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
|
56
55
|
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
|
57
|
-
s.add_dependency(%q<jeweler>, ["~> 2.0
|
|
56
|
+
s.add_dependency(%q<jeweler>, ["~> 2.1.0"])
|
|
58
57
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
|
59
58
|
s.add_dependency(%q<sqlite3>, [">= 0"])
|
|
60
59
|
s.add_dependency(%q<activerecord>, [">= 0"])
|
|
@@ -63,7 +62,7 @@ Gem::Specification.new do |s|
|
|
|
63
62
|
s.add_dependency(%q<rspec>, ["~> 3.3.0"])
|
|
64
63
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
|
65
64
|
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
|
66
|
-
s.add_dependency(%q<jeweler>, ["~> 2.0
|
|
65
|
+
s.add_dependency(%q<jeweler>, ["~> 2.1.0"])
|
|
67
66
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
|
68
67
|
s.add_dependency(%q<sqlite3>, [">= 0"])
|
|
69
68
|
s.add_dependency(%q<activerecord>, [">= 0"])
|
data/lib/left_join.rb
CHANGED
|
@@ -1,23 +1,4 @@
|
|
|
1
1
|
module LeftJoin
|
|
2
|
-
autoload :Node, 'left_join/node'
|
|
3
|
-
|
|
4
|
-
def self.parse_to_nodes(arguments, context)
|
|
5
|
-
[].tap do |result|
|
|
6
|
-
case arguments
|
|
7
|
-
when Hash
|
|
8
|
-
arguments.each do |key, value|
|
|
9
|
-
result.concat parse_to_nodes(key, context)
|
|
10
|
-
result.concat parse_to_nodes(value, context.left_join_subcontext(key))
|
|
11
|
-
end
|
|
12
|
-
when Array
|
|
13
|
-
arguments.each do |value|
|
|
14
|
-
result.concat parse_to_nodes(value, context)
|
|
15
|
-
end
|
|
16
|
-
else
|
|
17
|
-
result << context.node_for_left_join(arguments)
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
2
|
end
|
|
22
3
|
|
|
23
4
|
require 'left_join/adapters/active_record_adapter'
|
|
@@ -12,32 +12,10 @@ module LeftJoin
|
|
|
12
12
|
#
|
|
13
13
|
# Book.left_join(category: :master_category)
|
|
14
14
|
def left_join(*columns)
|
|
15
|
-
|
|
16
|
-
table = association.active_record.arel_table
|
|
17
|
-
join_table = association.klass.arel_table
|
|
18
|
-
foreign_key = association.foreign_key
|
|
19
|
-
primary_key = association.association_primary_key.to_sym
|
|
20
|
-
unless association.belongs_to?
|
|
21
|
-
foreign_key, primary_key = primary_key, foreign_key
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
arel_join = table.join(join_table, Arel::Nodes::OuterJoin) \
|
|
25
|
-
.on(table[foreign_key].eq(join_table[primary_key]))
|
|
26
|
-
acc.joins(arel_join.join_sources)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def node_for_left_join(key)
|
|
31
|
-
reflect_on_association(key) ||
|
|
32
|
-
fail("#{self} has no association: #{key}.")
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def left_join_subcontext(key)
|
|
36
|
-
node_for_left_join(key).klass
|
|
15
|
+
joins(ActiveRecord::Associations::JoinDependency.new(self, columns, []))
|
|
37
16
|
end
|
|
38
17
|
end
|
|
39
18
|
|
|
40
19
|
ActiveRecord::Base.extend ActiveRecordAdapter if defined?(ActiveRecord)
|
|
41
20
|
end
|
|
42
21
|
end
|
|
43
|
-
|
data/spec/left_join_spec.rb
CHANGED
|
@@ -11,40 +11,33 @@ end
|
|
|
11
11
|
class Book < ActiveRecord::Base
|
|
12
12
|
belongs_to :author
|
|
13
13
|
belongs_to :category
|
|
14
|
+
has_many :tags, as: :taggable
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class Tag < ActiveRecord::Base
|
|
18
|
+
belongs_to :taggable, polymorphic: true
|
|
14
19
|
end
|
|
15
20
|
|
|
16
21
|
describe 'LeftJoin' do
|
|
17
22
|
it 'generates a LEFT OUTER JOIN SQL' do
|
|
18
23
|
expect(Book.left_join(:category).to_sql).to eq(
|
|
19
24
|
"SELECT \"books\".* FROM \"books\" LEFT OUTER JOIN \"categories\" ON "\
|
|
20
|
-
"\"
|
|
25
|
+
"\"categories\".\"id\" = \"books\".\"category_id\"")
|
|
21
26
|
end
|
|
22
27
|
|
|
23
28
|
it 'works with nested associations' do
|
|
24
29
|
expect(Category.left_join(books: :author).to_sql).to eq(
|
|
25
30
|
"SELECT \"categories\".* FROM \"categories\" "\
|
|
26
31
|
"LEFT OUTER JOIN \"books\" ON "\
|
|
27
|
-
"\"
|
|
32
|
+
"\"books\".\"category_id\" = \"categories\".\"id\" "\
|
|
28
33
|
"LEFT OUTER JOIN \"authors\" ON "\
|
|
29
|
-
"\"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it 'parses single argument to nodes' do
|
|
33
|
-
expect(LeftJoin.parse_to_nodes(:category, Book)).to eq [
|
|
34
|
-
Book.reflect_on_association(:category)]
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it 'parses array argument to nodes' do
|
|
38
|
-
expect(LeftJoin.parse_to_nodes([:category, :author], Book)).to eq [
|
|
39
|
-
Book.reflect_on_association(:category),
|
|
40
|
-
Book.reflect_on_association(:author)
|
|
41
|
-
]
|
|
34
|
+
"\"authors\".\"id\" = \"books\".\"author_id\"")
|
|
42
35
|
end
|
|
43
36
|
|
|
44
|
-
it '
|
|
45
|
-
expect(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
37
|
+
it 'works with polymorphic associations' do
|
|
38
|
+
expect(Book.left_join(:tags).to_sql).to eq(
|
|
39
|
+
"SELECT \"books\".* FROM \"books\" LEFT OUTER JOIN \"tags\" ON "\
|
|
40
|
+
"\"tags\".\"taggable_id\" = \"books\".\"id\" AND "\
|
|
41
|
+
"\"tags\".\"taggable_type\" = 'Book'")
|
|
49
42
|
end
|
|
50
43
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: left_join
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Diego Aguir Selzlein
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2016-05-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rspec
|
|
@@ -58,14 +58,14 @@ dependencies:
|
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 2.0
|
|
61
|
+
version: 2.1.0
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: 2.0
|
|
68
|
+
version: 2.1.0
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: simplecov
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -127,7 +127,6 @@ files:
|
|
|
127
127
|
- left_join.gemspec
|
|
128
128
|
- lib/left_join.rb
|
|
129
129
|
- lib/left_join/adapters/active_record_adapter.rb
|
|
130
|
-
- lib/left_join/node.rb
|
|
131
130
|
- spec/left_join_spec.rb
|
|
132
131
|
- spec/spec_helper.rb
|
|
133
132
|
homepage: http://github.com/nerde/left_join
|
|
@@ -150,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
150
149
|
version: '0'
|
|
151
150
|
requirements: []
|
|
152
151
|
rubyforge_project:
|
|
153
|
-
rubygems_version: 2.
|
|
152
|
+
rubygems_version: 2.5.1
|
|
154
153
|
signing_key:
|
|
155
154
|
specification_version: 4
|
|
156
155
|
summary: LEFT JOIN with ActiveRecord
|
data/lib/left_join/node.rb
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
LeftJoin::Node = Struct.new(:key, :context)
|