simple_nested_set 0.0.20 → 0.0.21

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.
@@ -54,7 +54,8 @@ module SimpleNestedSet
54
54
  end
55
55
 
56
56
  def with_leaves
57
- where("#{arel_table[:lft].to_sql} = #{arel_table[:rgt].to_sql} - 1").order(:lft)
57
+ # where("#{arel_table[:lft].to_sql} = #{arel_table[:rgt].to_sql} - 1").order(:lft)
58
+ where("#{arel_table.name}.lft = #{arel_table.name}.rgt - 1").order(:lft)
58
59
  end
59
60
  end
60
61
  end
@@ -122,21 +122,43 @@ module SimpleNestedSet
122
122
  end
123
123
 
124
124
  def denormalize_level_query
125
- query = arel_table.as(:l)
126
- query = query.project('count(id)').
127
- where(query[:lft].lt(arel_table[:lft])).
128
- where(query[:rgt].gt(arel_table[:rgt])).
129
- where(where_clauses.map { |clause| clause.gsub(table_name, 'l') })
130
- "level = (#{query.to_sql})"
125
+ # query = arel_table.as(:l)
126
+ # query = query.project('count(id)').
127
+ # where(query[:lft].lt(arel_table[:lft])).
128
+ # where(query[:rgt].gt(arel_table[:rgt])).
129
+ # where(where_clauses.map { |clause| clause.gsub(table_name, 'l') })
130
+ # "level = (#{query.to_sql})"
131
+
132
+ %(
133
+ level = (
134
+ SELECT COUNT("l"."id")
135
+ FROM #{table_name} AS l
136
+ WHERE
137
+ l.lft < #{table_name}.lft AND
138
+ l.rgt > #{table_name}.rgt AND
139
+ #{where_clauses.map { |clause| clause.gsub(table_name, 'l') }.join(' AND ')}
140
+ )
141
+ )
131
142
  end
132
143
 
133
144
  def denormalize_path_query
134
- query = arel_table.as(:l)
135
- query = query.project(group_concat(db_adapter, :slug)).
136
- where(query[:lft].lteq(arel_table[:lft])).
137
- where(query[:rgt].gteq(arel_table[:rgt])).
138
- where(where_clauses.map { |clause| clause.gsub(table_name, 'l') })
139
- "path = (#{query.to_sql})"
145
+ # query = arel_table.as(:l)
146
+ # query = query.project(group_concat(db_adapter, :slug)).
147
+ # where(query[:lft].lteq(arel_table[:lft])).
148
+ # where(query[:rgt].gteq(arel_table[:rgt])).
149
+ # where(where_clauses.map { |clause| clause.gsub(table_name, 'l') })
150
+ # "path = (#{query.to_sql})"
151
+
152
+ %(
153
+ path = (
154
+ SELECT #{group_concat(db_adapter, :slug)}
155
+ FROM #{table_name} AS l
156
+ WHERE
157
+ l.lft <= #{table_name}.lft AND
158
+ l.rgt >= #{table_name}.rgt AND
159
+ #{where_clauses.map { |clause| clause.gsub(table_name, 'l') }.join(' AND ')}
160
+ )
161
+ )
140
162
  end
141
163
 
142
164
  def db_adapter
@@ -1,68 +1,100 @@
1
1
  require 'gem_patching'
2
2
 
3
- # Arel 1.0.0.rc1 Arel::Table#initialize and #table_exists? does not support
4
- # instantiating an Arel::Table before the database table has been created.
5
- #
6
- # This happens in adva-cms2 during the setup of the cucumber test application
7
- # where the environment has to be loaded (and thus models will be loaded) and
8
- # migrations will only be run afterwards.
9
- #
10
- # see http://github.com/rails/arel/commit/19c5a95f1093653d2628dfb2f53637b0425dbba4#commitcomment-133903
11
- #
12
- # Also, in Arel 1.0.0.rc1 Arel::Table#initialize @options won't be initialized
13
- # if the second argument is an engine, so #as will crash subsequently.
14
- #
15
- # These issues have been fixed in:
16
- #
17
- # http://github.com/svenfuchs/arel/commit/4b476404cbbecfedc255039c66c6eececb667d7f
18
- # http://github.com/svenfuchs/arel/commit/3b1b24551106bc116cba404c992b513c5fbd137b
3
+ if Arel::VERSION == '1.0.1'
4
+ Gem.patching('arel', '1.0.1') do
5
+ # Arel 1.0.0.rc1 Arel::Table#initialize and #table_exists? does not support
6
+ # instantiating an Arel::Table before the database table has been created.
7
+ #
8
+ # This happens in adva-cms2 during the setup of the cucumber test application
9
+ # where the environment has to be loaded (and thus models will be loaded) and
10
+ # migrations will only be run afterwards.
11
+ #
12
+ # see http://github.com/rails/arel/commit/19c5a95f1093653d2628dfb2f53637b0425dbba4#commitcomment-133903
13
+ #
14
+ # Also, in Arel 1.0.0.rc1 Arel::Table#initialize @options won't be initialized
15
+ # if the second argument is an engine, so #as will crash subsequently.
16
+ #
17
+ # These issues have been fixed in:
18
+ #
19
+ # http://github.com/svenfuchs/arel/commit/4b476404cbbecfedc255039c66c6eececb667d7f
20
+ # http://github.com/svenfuchs/arel/commit/3b1b24551106bc116cba404c992b513c5fbd137b
21
+ Arel::Table.class_eval do
22
+ def initialize(name, options = {})
23
+ @name = name.to_s
24
+ @table_exists = nil
25
+ @table_alias = nil
26
+ @christener = Arel::Sql::Christener.new
27
+ @attributes = nil
28
+ @matching_attributes = nil
19
29
 
20
- Gem.patching('arel', '1.0.1') do
21
- Arel::Table.class_eval do
22
- def initialize(name, options = {})
23
- @name = name.to_s
24
- @table_exists = nil
25
- @table_alias = nil
26
- @christener = Arel::Sql::Christener.new
27
- @attributes = nil
28
- @matching_attributes = nil
30
+ if options.is_a?(Hash)
31
+ @options = options
32
+ @engine = options[:engine] || Arel::Table.engine
29
33
 
30
- if options.is_a?(Hash)
31
- @options = options
32
- @engine = options[:engine] || Arel::Table.engine
33
-
34
- if options[:as]
35
- as = options[:as].to_s
36
- @table_alias = as unless as == @name
34
+ if options[:as]
35
+ as = options[:as].to_s
36
+ @table_alias = as unless as == @name
37
+ end
38
+ else
39
+ @engine = options # Table.new('foo', engine)
40
+ @options = {}
37
41
  end
38
- else
39
- @engine = options # Table.new('foo', engine)
40
- @options = {}
41
- end
42
42
 
43
- if @engine.connection
44
- begin
45
- require "arel/engines/sql/compilers/#{@engine.adapter_name.downcase}_compiler"
46
- rescue LoadError
43
+ if @engine.connection
47
44
  begin
48
- # try to load an externally defined compiler, in case this adapter has defined the compiler on its own.
49
- require "#{@engine.adapter_name.downcase}/arel_compiler"
45
+ require "arel/engines/sql/compilers/#{@engine.adapter_name.downcase}_compiler"
50
46
  rescue LoadError
51
- raise "#{@engine.adapter_name} is not supported by Arel."
47
+ begin
48
+ # try to load an externally defined compiler, in case this adapter has defined the compiler on its own.
49
+ require "#{@engine.adapter_name.downcase}/arel_compiler"
50
+ rescue LoadError
51
+ raise "#{@engine.adapter_name} is not supported by Arel."
52
+ end
52
53
  end
54
+
55
+ @@tables ||= engine.connection.tables
53
56
  end
57
+ end
54
58
 
55
- @@tables ||= engine.connection.tables
59
+ def as(table_alias)
60
+ @options ||= {}
61
+ Arel::Table.new(name, options.merge(:as => table_alias))
56
62
  end
57
- end
58
63
 
59
- def as(table_alias)
60
- @options ||= {}
61
- Arel::Table.new(name, options.merge(:as => table_alias))
64
+ def table_exists?
65
+ @table_exists ||= @@tables.include?(name) || engine.connection.table_exists?(name)
66
+ end
62
67
  end
68
+ end
69
+ else
70
+ Gem.patching('arel', '2.0.4') do
71
+ Arel::Table.class_eval do
72
+ attr_reader :options
73
+
74
+ def initialize name, engine = Arel::Table.engine
75
+ @name = name.to_s
76
+ @engine = engine
77
+ @columns = nil
78
+ @aliases = []
79
+ @table_alias = nil
80
+ @primary_key = nil
63
81
 
64
- def table_exists?
65
- @table_exists ||= @@tables.include?(name) || engine.connection.table_exists?(name)
82
+ if Hash === engine
83
+ @options = engine
84
+ @engine = engine[:engine] || Arel::Table.engine
85
+ @columns = attributes_for engine[:columns]
86
+
87
+ # Sometime AR sends an :as parameter to table, to let the table know
88
+ # that it is an Alias. We may want to override new, and return a
89
+ # TableAlias node?
90
+ @table_alias = engine[:as] unless engine[:as].to_s == @name
91
+ end
92
+ end
93
+
94
+ def as(table_alias)
95
+ @options ||= {}
96
+ Arel::Table.new(name, options.merge(:as => table_alias))
97
+ end
66
98
  end
67
99
  end
68
100
  end
@@ -1,3 +1,3 @@
1
1
  module SimpleNestedSet
2
- VERSION = "0.0.20"
2
+ VERSION = "0.0.21"
3
3
  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: 55
4
+ hash: 53
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 20
10
- version: 0.0.20
9
+ - 21
10
+ version: 0.0.21
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sven Fuchs
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-09 00:00:00 +01:00
18
+ date: 2010-11-20 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -26,16 +26,16 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- hash: 7
29
+ hash: 1
30
30
  segments:
31
31
  - 3
32
32
  - 0
33
- - 0
34
- version: 3.0.0
33
+ - 3
34
+ version: 3.0.3
35
35
  type: :runtime
36
36
  version_requirements: *id001
37
37
  - !ruby/object:Gem::Dependency
38
- name: activesupport
38
+ name: gem_patching
39
39
  prerelease: false
40
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
41
  none: false
@@ -49,7 +49,7 @@ dependencies:
49
49
  type: :runtime
50
50
  version_requirements: *id002
51
51
  - !ruby/object:Gem::Dependency
52
- name: gem_patching
52
+ name: test_declarative
53
53
  prerelease: false
54
54
  requirement: &id003 !ruby/object:Gem::Requirement
55
55
  none: false
@@ -60,10 +60,10 @@ dependencies:
60
60
  segments:
61
61
  - 0
62
62
  version: "0"
63
- type: :runtime
63
+ type: :development
64
64
  version_requirements: *id003
65
65
  - !ruby/object:Gem::Dependency
66
- name: test_declarative
66
+ name: sqlite3-ruby
67
67
  prerelease: false
68
68
  requirement: &id004 !ruby/object:Gem::Requirement
69
69
  none: false
@@ -77,7 +77,7 @@ dependencies:
77
77
  type: :development
78
78
  version_requirements: *id004
79
79
  - !ruby/object:Gem::Dependency
80
- name: sqlite3-ruby
80
+ name: database_cleaner
81
81
  prerelease: false
82
82
  requirement: &id005 !ruby/object:Gem::Requirement
83
83
  none: false
@@ -91,7 +91,7 @@ dependencies:
91
91
  type: :development
92
92
  version_requirements: *id005
93
93
  - !ruby/object:Gem::Dependency
94
- name: database_cleaner
94
+ name: ruby-debug
95
95
  prerelease: false
96
96
  requirement: &id006 !ruby/object:Gem::Requirement
97
97
  none: false
@@ -104,20 +104,6 @@ dependencies:
104
104
  version: "0"
105
105
  type: :development
106
106
  version_requirements: *id006
107
- - !ruby/object:Gem::Dependency
108
- name: ruby-debug
109
- prerelease: false
110
- requirement: &id007 !ruby/object:Gem::Requirement
111
- none: false
112
- requirements:
113
- - - ">="
114
- - !ruby/object:Gem::Version
115
- hash: 3
116
- segments:
117
- - 0
118
- version: "0"
119
- type: :development
120
- version_requirements: *id007
121
107
  description: simple_nested_set allows to easily handle nested sets in ActiveRecord
122
108
  email: svenfuchs@artweb-design.de
123
109
  executables: []