activerecord-hierarchical_query 0.2.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +1 -16
- data/lib/active_record/hierarchical_query/cte/non_recursive_term.rb +1 -1
- data/lib/active_record/hierarchical_query/cte/query_builder.rb +1 -1
- data/lib/active_record/hierarchical_query/cte/recursive_term.rb +1 -1
- data/lib/active_record/hierarchical_query/join_builder.rb +8 -4
- data/lib/active_record/hierarchical_query/orderings.rb +6 -5
- data/lib/active_record/hierarchical_query/query.rb +1 -2
- data/lib/active_record/hierarchical_query/version.rb +1 -1
- data/spec/active_record/hierarchical_query_spec.rb +0 -13
- metadata +19 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 13f2aad576b516e9b2235f1e3776a6f5bd52b11b
|
4
|
+
data.tar.gz: e76658b0c6ffe75f4a4e0e0cc889290b1270957f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7fa854231ce99498de1046ab02c709523fe489a20b1ec8ba9c3bbda430a2bd894ac5dc5107b3333dc561328300ef111c668292b89b0ebd5c7659eed1dd78d55b
|
7
|
+
data.tar.gz: ea1b27e86b7eb26a7f025d59be55e4fe2e83046f50ceedb56940af267d3ccb28be8bfa7665240caf5904731906b5d0fc23de6b30f714edd01901f83edf701d57
|
data/README.md
CHANGED
@@ -6,21 +6,6 @@
|
|
6
6
|
[![Dependency Status](https://gemnasium.com/take-five/activerecord-hierarchical_query.png)](https://gemnasium.com/take-five/activerecord-hierarchical_query)
|
7
7
|
[![Gem Version](https://badge.fury.io/rb/activerecord-hierarchical_query.png)](http://badge.fury.io/rb/activerecord-hierarchical_query)
|
8
8
|
|
9
|
-
## Rails 4 Only
|
10
|
-
|
11
|
-
This is the README for the **Rails 4 version**. Support for Rails 4 is
|
12
|
-
ending soon. Please upgrade to Rails 5 which is supported on the
|
13
|
-
master branch.
|
14
|
-
|
15
|
-
Be aware that this README and the gems dependencies for Rails 4
|
16
|
-
may be out of date. If you must use Rails 4 please monitor this
|
17
|
-
branch's requirements for security releases.
|
18
|
-
|
19
|
-
If you are on a ruby version greater than 2.3 be sure that you
|
20
|
-
are on Rails 4.2.
|
21
|
-
|
22
|
-
## Introduction
|
23
|
-
|
24
9
|
Create hierarchical queries using simple DSL, recursively traverse trees using single SQL query.
|
25
10
|
|
26
11
|
If a table contains hierarchical data, then you can select rows in hierarchical order using hierarchical query builder.
|
@@ -80,7 +65,7 @@ crumbs = records.pluck(:name).join(' / ')
|
|
80
65
|
|
81
66
|
## Requirements
|
82
67
|
|
83
|
-
* ActiveRecord >=
|
68
|
+
* ActiveRecord >= 3.1.0 (Rails 5.0 not supported yet)
|
84
69
|
* PostgreSQL >= 8.4
|
85
70
|
|
86
71
|
## Installation
|
@@ -11,17 +11,21 @@ module ActiveRecord
|
|
11
11
|
@query = query
|
12
12
|
@builder = CTE::QueryBuilder.new(query, options: options)
|
13
13
|
@relation = join_to
|
14
|
-
@alias = Arel::Table.new(subquery_alias
|
14
|
+
@alias = Arel::Table.new(subquery_alias)
|
15
15
|
@options = options
|
16
16
|
end
|
17
17
|
|
18
18
|
def build
|
19
|
-
relation = @relation
|
20
|
-
|
21
|
-
relation.bind_values += bind_values
|
19
|
+
relation = @relation
|
20
|
+
|
22
21
|
# add ordering by "__order_column"
|
23
22
|
relation.order_values += order_columns if ordered?
|
24
23
|
|
24
|
+
relation = relation.joins(joined_arel_node)
|
25
|
+
|
26
|
+
# copy bound variables from inner subquery
|
27
|
+
relation.bind_values += bind_values
|
28
|
+
|
25
29
|
relation
|
26
30
|
end
|
27
31
|
|
@@ -100,15 +100,16 @@ module ActiveRecord
|
|
100
100
|
def order_column
|
101
101
|
table = order_attribute.relation
|
102
102
|
|
103
|
-
|
103
|
+
engine = table.class.engine
|
104
|
+
if engine == ActiveRecord::Base
|
104
105
|
columns =
|
105
|
-
if
|
106
|
-
|
106
|
+
if engine.connection.respond_to?(:schema_cache)
|
107
|
+
engine.connection.schema_cache.columns_hash(table.name)
|
107
108
|
else
|
108
|
-
|
109
|
+
engine.connection_pool.columns_hash[table.name]
|
109
110
|
end
|
110
111
|
else
|
111
|
-
columns =
|
112
|
+
columns = engine.columns_hash
|
112
113
|
end
|
113
114
|
|
114
115
|
columns[order_attribute.name.to_s]
|
@@ -24,7 +24,7 @@ module ActiveRecord
|
|
24
24
|
:distinct_value
|
25
25
|
|
26
26
|
# @api private
|
27
|
-
CHILD_SCOPE_METHODS = :where, :joins, :group, :having
|
27
|
+
CHILD_SCOPE_METHODS = :where, :joins, :group, :having
|
28
28
|
|
29
29
|
def initialize(klass)
|
30
30
|
@klass = klass
|
@@ -178,7 +178,6 @@ module ActiveRecord
|
|
178
178
|
# @!method joins(*tables)
|
179
179
|
# @!method group(*values)
|
180
180
|
# @!method having(*conditions)
|
181
|
-
# @!method bind(value)
|
182
181
|
CHILD_SCOPE_METHODS.each do |method|
|
183
182
|
define_method(method) do |*args|
|
184
183
|
@child_scope_value = @child_scope_value.public_send(method, *args)
|
@@ -218,19 +218,6 @@ describe ActiveRecord::HierarchicalQuery do
|
|
218
218
|
).to match_array [child_4, child_5]
|
219
219
|
end
|
220
220
|
end
|
221
|
-
|
222
|
-
describe 'binding values' do
|
223
|
-
it 'binds values' do
|
224
|
-
expect(
|
225
|
-
klass.join_recursive do |query|
|
226
|
-
query.start_with('id = $1')
|
227
|
-
.connect_by(id: :parent_id)
|
228
|
-
.where(nil)
|
229
|
-
.bind([nil, child_4.id])
|
230
|
-
end
|
231
|
-
).to match_array([child_4, child_5])
|
232
|
-
end
|
233
|
-
end
|
234
221
|
end
|
235
222
|
|
236
223
|
describe '#join_recursive options' do
|
metadata
CHANGED
@@ -1,110 +1,108 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-hierarchical_query
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexei Mikhailov
|
8
|
-
- Zach Aysan
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2017-04-10 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activerecord
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
16
|
requirements:
|
18
|
-
- - "
|
17
|
+
- - ">="
|
19
18
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
19
|
+
version: 3.1.0
|
21
20
|
- - "<"
|
22
21
|
- !ruby/object:Gem::Version
|
23
|
-
version: '5.
|
22
|
+
version: '5.1'
|
24
23
|
type: :runtime
|
25
24
|
prerelease: false
|
26
25
|
version_requirements: !ruby/object:Gem::Requirement
|
27
26
|
requirements:
|
28
|
-
- - "
|
27
|
+
- - ">="
|
29
28
|
- !ruby/object:Gem::Version
|
30
|
-
version:
|
29
|
+
version: 3.1.0
|
31
30
|
- - "<"
|
32
31
|
- !ruby/object:Gem::Version
|
33
|
-
version: '5.
|
32
|
+
version: '5.1'
|
34
33
|
- !ruby/object:Gem::Dependency
|
35
34
|
name: bundler
|
36
35
|
requirement: !ruby/object:Gem::Requirement
|
37
36
|
requirements:
|
38
37
|
- - "~>"
|
39
38
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
39
|
+
version: '1.5'
|
41
40
|
type: :development
|
42
41
|
prerelease: false
|
43
42
|
version_requirements: !ruby/object:Gem::Requirement
|
44
43
|
requirements:
|
45
44
|
- - "~>"
|
46
45
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
46
|
+
version: '1.5'
|
48
47
|
- !ruby/object:Gem::Dependency
|
49
48
|
name: rake
|
50
49
|
requirement: !ruby/object:Gem::Requirement
|
51
50
|
requirements:
|
52
51
|
- - "~>"
|
53
52
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
53
|
+
version: 10.4.2
|
55
54
|
type: :development
|
56
55
|
prerelease: false
|
57
56
|
version_requirements: !ruby/object:Gem::Requirement
|
58
57
|
requirements:
|
59
58
|
- - "~>"
|
60
59
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
60
|
+
version: 10.4.2
|
62
61
|
- !ruby/object:Gem::Dependency
|
63
62
|
name: rspec
|
64
63
|
requirement: !ruby/object:Gem::Requirement
|
65
64
|
requirements:
|
66
65
|
- - "~>"
|
67
66
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
67
|
+
version: 3.1.0
|
69
68
|
type: :development
|
70
69
|
prerelease: false
|
71
70
|
version_requirements: !ruby/object:Gem::Requirement
|
72
71
|
requirements:
|
73
72
|
- - "~>"
|
74
73
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
74
|
+
version: 3.1.0
|
76
75
|
- !ruby/object:Gem::Dependency
|
77
76
|
name: database_cleaner
|
78
77
|
requirement: !ruby/object:Gem::Requirement
|
79
78
|
requirements:
|
80
79
|
- - "~>"
|
81
80
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
81
|
+
version: 1.3.0
|
83
82
|
type: :development
|
84
83
|
prerelease: false
|
85
84
|
version_requirements: !ruby/object:Gem::Requirement
|
86
85
|
requirements:
|
87
86
|
- - "~>"
|
88
87
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
88
|
+
version: 1.3.0
|
90
89
|
- !ruby/object:Gem::Dependency
|
91
90
|
name: simplecov
|
92
91
|
requirement: !ruby/object:Gem::Requirement
|
93
92
|
requirements:
|
94
93
|
- - "~>"
|
95
94
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
95
|
+
version: 0.9.1
|
97
96
|
type: :development
|
98
97
|
prerelease: false
|
99
98
|
version_requirements: !ruby/object:Gem::Requirement
|
100
99
|
requirements:
|
101
100
|
- - "~>"
|
102
101
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
102
|
+
version: 0.9.1
|
104
103
|
description:
|
105
104
|
email:
|
106
105
|
- amikhailov83@gmail.com
|
107
|
-
- zachaysan@gmail.com
|
108
106
|
executables: []
|
109
107
|
extensions: []
|
110
108
|
extra_rdoc_files: []
|
@@ -150,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
148
|
version: '0'
|
151
149
|
requirements: []
|
152
150
|
rubyforge_project:
|
153
|
-
rubygems_version: 2.
|
151
|
+
rubygems_version: 2.4.8
|
154
152
|
signing_key:
|
155
153
|
specification_version: 4
|
156
154
|
summary: Recursively traverse trees using a single SQL query
|