simple_nested_set 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
data/lib/simple_nested_set.rb
CHANGED
@@ -8,6 +8,7 @@ module SimpleNestedSet
|
|
8
8
|
autoload :ClassMethods, 'simple_nested_set/class_methods'
|
9
9
|
autoload :InstanceMethods, 'simple_nested_set/instance_methods'
|
10
10
|
autoload :NestedSet, 'simple_nested_set/nested_set'
|
11
|
+
autoload :SqlAbstraction, 'simple_nested_set/sql_abstraction.rb'
|
11
12
|
|
12
13
|
module Move
|
13
14
|
autoload :ByAttributes, 'simple_nested_set/move/by_attributes'
|
@@ -18,4 +19,4 @@ module SimpleNestedSet
|
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
21
|
-
ActiveRecord::Base.send :extend, SimpleNestedSet::ActMacro
|
22
|
+
ActiveRecord::Base.send :extend, SimpleNestedSet::ActMacro
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module SimpleNestedSet
|
2
2
|
class NestedSet < ActiveRecord::Relation
|
3
|
+
include SqlAbstraction
|
4
|
+
|
3
5
|
class_inheritable_accessor :node_class, :scope_names
|
4
6
|
|
5
7
|
class << self
|
@@ -36,7 +38,7 @@ module SimpleNestedSet
|
|
36
38
|
denormalize!
|
37
39
|
end
|
38
40
|
|
39
|
-
# FIXME we don't always want to call this on after_save, do we? it's only relevant when
|
41
|
+
# FIXME we don't always want to call this on after_save, do we? it's only relevant when
|
40
42
|
# either the structure or the slug has changed
|
41
43
|
def denormalize!
|
42
44
|
sql = []
|
@@ -106,11 +108,15 @@ module SimpleNestedSet
|
|
106
108
|
|
107
109
|
def denormalize_path_query
|
108
110
|
query = arel_table.as(:l)
|
109
|
-
query = query.project(
|
111
|
+
query = query.project(group_concat(db_adapter, :slug)).
|
110
112
|
where(query[:lft].lteq(arel_table[:lft])).
|
111
113
|
where(query[:rgt].gteq(arel_table[:rgt])).
|
112
114
|
where(where_clauses.map { |clause| clause.gsub(table_name, 'l') })
|
113
115
|
"path = (#{query.to_sql})"
|
114
116
|
end
|
117
|
+
|
118
|
+
def db_adapter
|
119
|
+
node.class.connection.instance_variable_get('@config')[:adapter].to_sym
|
120
|
+
end
|
115
121
|
end
|
116
|
-
end
|
122
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module SimpleNestedSet
|
2
|
+
module SqlAbstraction
|
3
|
+
# return a database-specific 'GROUP_CONCAT'-statement, ready to be
|
4
|
+
# inserted into arel.project()
|
5
|
+
def group_concat(database, field, separator = '/')
|
6
|
+
case database.to_sym
|
7
|
+
when :sqlite, :sqlite3
|
8
|
+
"GROUP_CONCAT(#{field}, '#{separator}')"
|
9
|
+
when :mysql
|
10
|
+
"GROUP_CONCAT(`#{field}`, '#{separator}')"
|
11
|
+
when :postgresql
|
12
|
+
"array_to_string(array_agg(\"#{field}\"), '#{separator}')"
|
13
|
+
else
|
14
|
+
raise ArgumentError, "#{database} is not supported by SimpleNestedSet::SqlAbstraction#group_concat"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_nested_set
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 8
|
10
|
+
version: 0.0.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sven Fuchs
|
@@ -109,6 +109,7 @@ files:
|
|
109
109
|
- lib/simple_nested_set/move/protection.rb
|
110
110
|
- lib/simple_nested_set/move/to_target.rb
|
111
111
|
- lib/simple_nested_set/nested_set.rb
|
112
|
+
- lib/simple_nested_set/sql_abstraction.rb
|
112
113
|
- lib/simple_nested_set/version.rb
|
113
114
|
has_rdoc: true
|
114
115
|
homepage: http://github.com/svenfuchs/simple_nested_set
|