awesome_nested_set 3.0.3 → 3.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: f5ab643ea1dfe98a3df89d5bf2c142fd22d8d96f
4
- data.tar.gz: 3f6089e375d849c9cb600eb4c776c40323b3e67e
3
+ metadata.gz: 886dba55e5efcba602756917fdd82ae57c3e6942
4
+ data.tar.gz: 0f17ad95fef44901498f7b21b2767b0b0e0d0259
5
5
  SHA512:
6
- metadata.gz: 3afe6283157bd9937196de7ffe4239dac7be930417b505b306c92685cfdd703d9cf7463317994bc822490f4a426c0c88f3f3425501036cd00b00025a6f81dc8c
7
- data.tar.gz: d96cf10ce68aa34ccee951f3b04beec6eebd960748c42502ba48016b3f559cf798c657b2b9b36d4238c38d1ba0dbca08f53dab5f39f3d3bb37044dcb4dafe902
6
+ metadata.gz: e52c139d7f15f8a9428ec22967c50899e9f31cdcbb301b59cdc322f796b2ce6ad51fa30e28e16cd975c76e73bc48c32e869ba24df06bad0a8e2a6e87b58169f7
7
+ data.tar.gz: 610280af1b3026696fd3980f7f6bb49d206ad255c770a9be9f0ab3372af455fa62c610cc8de3c68cfb6c8dcbd06431383a8082f8f9449157f668a7c13da8a6a9
data/CHANGELOG CHANGED
@@ -1,4 +1,20 @@
1
- 3.0.4
1
+ 3.1.4
2
+ * Add support for Rails 5.2 [John Hawthorn](https://github.com/jhawthorn) and [marocchino](https://github.com/marocchino)
3
+
4
+ 3.1.3
5
+ * Add support for Rails 5.1 [John Hawthorn](https://github.com/jhawthorn)
6
+
7
+ 3.1.2
8
+ * Make belongs_to relation optional again [Jan Matusz](https://marahin.pl/)
9
+
10
+ 3.1.1
11
+ * Fix a reloading bug when using default scope [Krzysztof Rybka](https://github.com/krzysiek1507)
12
+
13
+ 3.1.0
14
+ * Ensure that nested_set queries respect the model's default_scope. [oesgalha](https://github.com/oesgalha)
15
+ * Add Rails 5 support [Krzysztof Rybka](https://github.com/krzysiek1507)
16
+ * Drop support for ruby 1.9.3 [Krzysztof Rybka](https://github.com/krzysiek1507)
17
+ * Fix .all_roots_valid? method when model is ordered by default [Adam Hodowany](https://github.com/hodak)
2
18
  * Reuse the current model's connection when available [Tim Bugai] [#322](https://github.com/collectiveidea/awesome_nested_set/pull/322)
3
19
 
4
20
  3.0.3
data/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # Awesome Nested Set
2
2
 
3
- [![Build Status](https://travis-ci.org/collectiveidea/awesome_nested_set.png?branch=master)](https://travis-ci.org/collectiveidea/awesome_nested_set) [![Code Climate](https://codeclimate.com/github/collectiveidea/awesome_nested_set.png)](https://codeclimate.com/github/collectiveidea/awesome_nested_set) [![Dependency Status](https://gemnasium.com/collectiveidea/awesome_nested_set.svg)](https://gemnasium.com/collectiveidea/awesome_nested_set)
3
+ [![Build Status](https://travis-ci.org/collectiveidea/awesome_nested_set.svg?branch=master)](https://travis-ci.org/collectiveidea/awesome_nested_set) [![Code Climate](https://codeclimate.com/github/collectiveidea/awesome_nested_set.svg)](https://codeclimate.com/github/collectiveidea/awesome_nested_set) [![Dependency Status](https://gemnasium.com/collectiveidea/awesome_nested_set.svg)](https://gemnasium.com/collectiveidea/awesome_nested_set) [![Security](https://hakiri.io/github/collectiveidea/awesome_nested_set/master.svg)](https://hakiri.io/github/collectiveidea/awesome_nested_set/master)
4
4
 
5
5
 
6
6
  Awesome Nested Set is an implementation of the nested set pattern for ActiveRecord models.
7
7
  It is a replacement for acts_as_nested_set and BetterNestedSet, but more awesome.
8
8
 
9
- Version 3 supports Rails 4. Version 2 supports Rails 3. Gem versions prior to 2.0 support Rails 2.
9
+ Version 3.1 supports Rails 5 & 4. Version 2 supports Rails 3. Gem versions prior to 2.0 support Rails 2.
10
10
 
11
11
  ## What makes this so awesome?
12
12
 
@@ -26,6 +26,8 @@ gem 'awesome_nested_set'
26
26
  To make use of `awesome_nested_set` your model needs to have 3 fields:
27
27
  `lft`, `rgt`, and `parent_id`. The names of these fields are configurable.
28
28
  You can also have optional fields: `depth` and `children_count`. These fields are configurable.
29
+ Note that the `children_count` column must have `null: false` and `default: 0` to
30
+ function properly.
29
31
 
30
32
  ```ruby
31
33
  class CreateCategories < ActiveRecord::Migration
@@ -66,7 +68,7 @@ You can pass various options to `acts_as_nested_set` macro. Configuration option
66
68
  * `left_column`: column name for left boundary data (default: lft)
67
69
  * `right_column`: column name for right boundary data (default: rgt)
68
70
  * `depth_column`: column name for the depth data default (default: depth)
69
- * `scope`: restricts what is to be considered a list. Given a symbol, it'll attach _id (if it hasn't been already) and use that as the foreign key restriction. You can also pass an array to scope by multiple attributes. Example: `acts_as_nested_set :scope => [:notable_id, :notable_type]`
71
+ * `scope`: restricts what is to be considered a list. Given a symbol, it'll attach `_id` (if it hasn't been already) and use that as the foreign key restriction. You can also pass an array to scope by multiple attributes. Example: `acts_as_nested_set :scope => [:notable_id, :notable_type]`
70
72
  * `dependent`: behavior for cascading destroy. If set to :destroy, all the child objects are destroyed alongside this object by calling their destroy method. If set to :delete_all (default), all the child objects are deleted without calling their destroy method. If set to :nullify, all child objects will become orphaned and become roots themselves.
71
73
  * `counter_cache`: adds a counter cache for the number of children. defaults to false. Example: `acts_as_nested_set :counter_cache => :children_count`
72
74
  * `order_column`: on which column to do sorting, by default it is the left_column_name. Example: `acts_as_nested_set :order_column => :position`
@@ -133,7 +135,7 @@ class Category < ActiveRecord::Base
133
135
  end
134
136
  ```
135
137
 
136
- ## Protecting attributes from mass assignment
138
+ ## Protecting attributes from mass assignment (for Rails < 4)
137
139
 
138
140
  It's generally best to "whitelist" the attributes that can be used in mass assignment:
139
141
 
@@ -229,12 +231,8 @@ Example usage:
229
231
 
230
232
  See [CollectiveIdea::Acts::NestedSet::Helper](lib/awesome_nested_set/helper.rb) for more information about the helpers.
231
233
 
232
- ## References
233
-
234
- You can learn more about nested sets at: http://threebit.net/tutorials/nestedset/tutorial1.html
235
-
236
234
  ## How to contribute
237
235
 
238
236
  Please see the ['Contributing' document](CONTRIBUTING.md).
239
237
 
240
- Copyright © 2008 - 2014 Collective Idea, released under the MIT license
238
+ Copyright © 2008–2015 [Collective Idea](http://collectiveidea.com), released under the MIT license.
@@ -1,8 +1,11 @@
1
+ require 'active_support/lazy_load_hooks'
1
2
  require 'awesome_nested_set/awesome_nested_set'
2
- require 'active_record'
3
- ActiveRecord::Base.send :extend, CollectiveIdea::Acts::NestedSet
4
3
 
5
- if defined?(ActionView)
4
+ ActiveSupport.on_load(:active_record) do
5
+ ActiveRecord::Base.send :extend, CollectiveIdea::Acts::NestedSet
6
+ end
7
+
8
+ ActiveSupport.on_load(:action_view) do
6
9
  require 'awesome_nested_set/helper'
7
10
  ActionView::Base.send :include, CollectiveIdea::Acts::NestedSet::Helper
8
11
  end
@@ -5,7 +5,7 @@ module CollectiveIdea #:nodoc:
5
5
  module Acts #:nodoc:
6
6
  module NestedSet #:nodoc:
7
7
 
8
- # This acts provides Nested Set functionality. Nested Set is a smart way to implement
8
+ # This provides Nested Set functionality. Nested Set is a smart way to implement
9
9
  # an _ordered_ tree, with the added feature that you can select the children and all of their
10
10
  # descendants with a single query. The drawback is that insertion or move need some complex
11
11
  # sql queries. But everything is done here by this module!
@@ -15,8 +15,8 @@ module CollectiveIdea #:nodoc:
15
15
  #
16
16
  # == API
17
17
  #
18
- # Methods names are aligned with acts_as_tree as much as possible to make replacment from one
19
- # by another easier.
18
+ # Methods names are aligned with acts_as_tree as much as possible to make transition from one
19
+ # to another easier.
20
20
  #
21
21
  # item.children.create(:name => "child1")
22
22
  #
@@ -87,18 +87,22 @@ module CollectiveIdea #:nodoc:
87
87
  ) if acts_as_nested_set_options[ar_callback]
88
88
  end
89
89
 
90
- has_many :children, -> { order(quoted_order_column_full_name) },
90
+ has_many :children, -> { order(order_column => :asc) },
91
91
  has_many_children_options
92
92
  end
93
93
 
94
94
  def acts_as_nested_set_relate_parent!
95
- belongs_to :parent, :class_name => self.base_class.to_s,
96
- :foreign_key => parent_column_name,
97
- :primary_key => primary_column_name,
98
- :counter_cache => acts_as_nested_set_options[:counter_cache],
99
- :inverse_of => (:children unless acts_as_nested_set_options[:polymorphic]),
100
- :polymorphic => acts_as_nested_set_options[:polymorphic],
101
- :touch => acts_as_nested_set_options[:touch]
95
+ options = {
96
+ :class_name => self.base_class.to_s,
97
+ :foreign_key => parent_column_name,
98
+ :primary_key => primary_column_name,
99
+ :counter_cache => acts_as_nested_set_options[:counter_cache],
100
+ :inverse_of => (:children unless acts_as_nested_set_options[:polymorphic]),
101
+ :polymorphic => acts_as_nested_set_options[:polymorphic],
102
+ :touch => acts_as_nested_set_options[:touch]
103
+ }
104
+ options[:optional] = true if ActiveRecord::VERSION::MAJOR >= 5
105
+ belongs_to :parent, options
102
106
  end
103
107
 
104
108
  def acts_as_nested_set_default_options
@@ -31,6 +31,10 @@ module CollectiveIdea #:nodoc:
31
31
  Array(acts_as_nested_set_options[:scope])
32
32
  end
33
33
 
34
+ def counter_cache_column_name
35
+ acts_as_nested_set_options[:counter_cache]
36
+ end
37
+
34
38
  def quoted_left_column_name
35
39
  model_connection.quote_column_name(left_column_name)
36
40
  end
@@ -79,7 +79,7 @@ module CollectiveIdea #:nodoc:
79
79
  end
80
80
 
81
81
  def nested_set_scope(options = {})
82
- options = {:order => quoted_order_column_full_name}.merge(options)
82
+ options = {:order => { order_column => :asc }}.merge(options)
83
83
 
84
84
  where(options[:conditions]).order(options.delete(:order))
85
85
  end
@@ -145,7 +145,7 @@ module CollectiveIdea #:nodoc:
145
145
  end
146
146
  end
147
147
 
148
- self.class.base_class.unscoped.nested_set_scope options
148
+ self.class.base_class.nested_set_scope options
149
149
  end
150
150
 
151
151
  # Separate an other `nested_set_scope` for unscoped model
@@ -154,7 +154,7 @@ module CollectiveIdea #:nodoc:
154
154
  # And class level `nested_set_scope` seems just for query `root` `child` .. etc
155
155
  # I think we don't have to provide unscoped `nested_set_scope` in class level.
156
156
  def nested_set_scope_without_default_scope(*args)
157
- self.class.unscoped do
157
+ self.class.base_class.unscoped do
158
158
  nested_set_scope(*args)
159
159
  end
160
160
  end
@@ -182,8 +182,8 @@ module CollectiveIdea #:nodoc:
182
182
  end
183
183
 
184
184
  def right_most_node
185
- @right_most_node ||= nested_set_scope(
186
- :order => "#{quoted_right_column_full_name} desc"
185
+ @right_most_node ||= nested_set_scope_without_default_scope(
186
+ :order => {right_column_name => :desc}
187
187
  ).first
188
188
  end
189
189
 
@@ -232,6 +232,20 @@ module CollectiveIdea #:nodoc:
232
232
  end
233
233
  end
234
234
 
235
+ def update_counter_cache
236
+ return unless acts_as_nested_set_options[:counter_cache]
237
+
238
+ # Decrease the counter for all old parents
239
+ if old_parent = self.parent
240
+ self.class.decrement_counter(acts_as_nested_set_options[:counter_cache], old_parent)
241
+ end
242
+
243
+ # Increase the counter for all new parents
244
+ if new_parent = self.reload.parent
245
+ self.class.increment_counter(acts_as_nested_set_options[:counter_cache], new_parent)
246
+ end
247
+ end
248
+
235
249
  def set_default_left_and_right
236
250
  # adds the new node to the right of all existing nodes
237
251
  self[left_column_name] = right_most_bound + 1
@@ -250,7 +264,7 @@ module CollectiveIdea #:nodoc:
250
264
  if target.is_a? self.class.base_class
251
265
  target.reload
252
266
  elsif position != :root
253
- nested_set_scope.where(primary_column_name => target).first!
267
+ nested_set_scope_without_default_scope.where(primary_column_name => target).first!
254
268
  end
255
269
  end
256
270
  end
@@ -46,7 +46,7 @@ module CollectiveIdea #:nodoc:
46
46
  elsif node.children.count == index
47
47
  move_to_right_of(node.children.last)
48
48
  else
49
- my_position = node.children.index(self)
49
+ my_position = node.children.to_a.index(self)
50
50
  if my_position && my_position < index
51
51
  # e.g. if self is at position 0 and we want to move self to position 1 then self
52
52
  # needs to move to the *right* of the node at position 1. That's because the node
@@ -105,6 +105,7 @@ module CollectiveIdea #:nodoc:
105
105
  self.reload_nested_set
106
106
 
107
107
  Move.new(target, position, self).move
108
+ update_counter_cache
108
109
  end
109
110
  after_move_to(target, position)
110
111
  end
@@ -47,12 +47,12 @@ module CollectiveIdea #:nodoc:
47
47
  elsif acts_as_nested_set_options[:dependent] == :restrict_with_error
48
48
  unless leaf?
49
49
  record = self.class.human_attribute_name(:children).downcase
50
- errors.add(:base, :"restrict_dependent_destroy.many", record: record)
50
+ errors.add(:base, :"restrict_dependent_destroy.#{Rails::VERSION::MAJOR < 5 ? 'many' : 'has_many'}", record: record)
51
51
  return false
52
52
  end
53
53
  return true
54
54
  elsif acts_as_nested_set_options[:dependent] == :nullify
55
- descendants.update_all(parent_id: nil)
55
+ descendants.update_all(parent_column_name => nil)
56
56
  else
57
57
  descendants.delete_all
58
58
  end
@@ -32,7 +32,11 @@ module CollectiveIdea
32
32
  end
33
33
 
34
34
  def order_for_rebuild
35
- "#{quoted_left_column_full_name}, #{quoted_right_column_full_name}, #{primary_key}"
35
+ {
36
+ left_column_name => :asc,
37
+ right_column_name => :asc,
38
+ primary_key => :asc
39
+ }
36
40
  end
37
41
  end
38
42
 
@@ -17,7 +17,7 @@ module CollectiveIdea #:nodoc:
17
17
  rescue CollectiveIdea::Acts::NestedSet::Move::ImpossibleMove
18
18
  raise
19
19
  rescue ActiveRecord::StatementInvalid => error
20
- raise OpenTransactionsIsNotZero.new(error.message) unless connection.open_transactions.zero?
20
+ raise OpenTransactionsIsNotZero.new(error.message) unless self.class.connection.open_transactions.zero?
21
21
  raise unless error.message =~ /[Dd]eadlock|Lock wait timeout exceeded/
22
22
  raise DeadlockDetected.new(error.message) unless retry_count < 10
23
23
  retry_count += 1
@@ -20,7 +20,7 @@ module CollectiveIdea
20
20
  select("#{scope_string}#{column}, COUNT(#{column}) as _count").
21
21
  group("#{scope_string}#{column}", quoted_primary_key_column_full_name).
22
22
  having("COUNT(#{column}) > 1").
23
- order(quoted_primary_key_column_full_name).
23
+ order(primary_column_name => :asc).
24
24
  first.nil?
25
25
  end
26
26
  end
@@ -41,8 +41,10 @@ module CollectiveIdea
41
41
  end
42
42
 
43
43
  def each_root_valid?(roots_to_validate)
44
+ left_column = acts_as_nested_set_options[:left_column]
45
+ reordered_roots = roots_reordered_by_column(roots_to_validate, left_column)
44
46
  left = right = 0
45
- roots_to_validate.all? do |root|
47
+ reordered_roots.all? do |root|
46
48
  (root.left > left && root.right > right).tap do
47
49
  left = root.left
48
50
  right = root.right
@@ -57,12 +59,21 @@ module CollectiveIdea
57
59
  }
58
60
  end
59
61
 
62
+ def roots_reordered_by_column(roots_to_reorder, column)
63
+ if roots_to_reorder.respond_to?(:reorder) # ActiveRecord's relation
64
+ roots_to_reorder.reorder(column)
65
+ elsif roots_to_reorder.respond_to?(:sort) # Array
66
+ roots_to_reorder.sort { |a, b| a.send(column) <=> b.send(column) }
67
+ else
68
+ roots_to_reorder
69
+ end
70
+ end
71
+
60
72
  def scope_string
61
73
  Array(acts_as_nested_set_options[:scope]).map do |c|
62
74
  connection.quote_column_name(c)
63
75
  end.push(nil).join(", ")
64
76
  end
65
-
66
77
  end
67
78
  end
68
79
  end
@@ -6,7 +6,7 @@ module CollectiveIdea #:nodoc:
6
6
  attr_accessor :indices
7
7
 
8
8
  delegate :left_column_name, :right_column_name, :quoted_parent_column_full_name,
9
- :order_for_rebuild, :scope_for_rebuild,
9
+ :order_for_rebuild, :scope_for_rebuild, :counter_cache_column_name,
10
10
  :to => :model
11
11
 
12
12
  def initialize(model, validate_nodes)
@@ -23,6 +23,7 @@ module CollectiveIdea #:nodoc:
23
23
  # setup index for this scope
24
24
  indices[scope_for_rebuild.call(root_node)] ||= 0
25
25
  set_left_and_rights(root_node)
26
+ reset_counter_cache(root_node)
26
27
  end
27
28
  end
28
29
 
@@ -57,6 +58,15 @@ module CollectiveIdea #:nodoc:
57
58
  def set_right!(node)
58
59
  node[right_column_name] = increment_indice!(node)
59
60
  end
61
+
62
+ def reset_counter_cache(node)
63
+ return unless counter_cache_column_name
64
+ node.class.reset_counters(node.id, :children)
65
+
66
+ node.children.each do |child|
67
+ reset_counter_cache(child)
68
+ end
69
+ end
60
70
  end
61
71
  end
62
72
  end
@@ -1,3 +1,3 @@
1
1
  module AwesomeNestedSet
2
- VERSION = '3.0.3' unless defined?(::AwesomeNestedSet::VERSION)
2
+ VERSION = '3.1.4' unless defined?(::AwesomeNestedSet::VERSION)
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awesome_nested_set
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.3
4
+ version: 3.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Keepers
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-01-19 00:00:00.000000000 Z
13
+ date: 2018-02-03 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 4.0.0
22
22
  - - "<"
23
23
  - !ruby/object:Gem::Version
24
- version: '5'
24
+ version: '5.3'
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
@@ -31,21 +31,63 @@ dependencies:
31
31
  version: 4.0.0
32
32
  - - "<"
33
33
  - !ruby/object:Gem::Version
34
- version: '5'
34
+ version: '5.3'
35
+ - !ruby/object:Gem::Dependency
36
+ name: appraisal
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ type: :development
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ - !ruby/object:Gem::Dependency
50
+ name: pry
51
+ requirement: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: pry-nav
65
+ requirement: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
35
77
  - !ruby/object:Gem::Dependency
36
78
  name: rspec-rails
37
79
  requirement: !ruby/object:Gem::Requirement
38
80
  requirements:
39
81
  - - "~>"
40
82
  - !ruby/object:Gem::Version
41
- version: '3.0'
83
+ version: 3.5.0
42
84
  type: :development
43
85
  prerelease: false
44
86
  version_requirements: !ruby/object:Gem::Requirement
45
87
  requirements:
46
88
  - - "~>"
47
89
  - !ruby/object:Gem::Version
48
- version: '3.0'
90
+ version: 3.5.0
49
91
  - !ruby/object:Gem::Dependency
50
92
  name: rake
51
93
  requirement: !ruby/object:Gem::Requirement
@@ -67,6 +109,9 @@ dependencies:
67
109
  - - ">="
68
110
  - !ruby/object:Gem::Version
69
111
  version: 0.5.2
112
+ - - "<"
113
+ - !ruby/object:Gem::Version
114
+ version: 0.5.5
70
115
  type: :development
71
116
  prerelease: false
72
117
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,6 +119,9 @@ dependencies:
74
119
  - - ">="
75
120
  - !ruby/object:Gem::Version
76
121
  version: 0.5.2
122
+ - - "<"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.5.5
77
125
  - !ruby/object:Gem::Dependency
78
126
  name: database_cleaner
79
127
  requirement: !ruby/object:Gem::Requirement
@@ -130,7 +178,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
130
178
  requirements:
131
179
  - - ">="
132
180
  - !ruby/object:Gem::Version
133
- version: 1.9.3
181
+ version: 2.0.0
134
182
  required_rubygems_version: !ruby/object:Gem::Requirement
135
183
  requirements:
136
184
  - - ">="
@@ -138,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
186
  version: '0'
139
187
  requirements: []
140
188
  rubyforge_project:
141
- rubygems_version: 2.5.1
189
+ rubygems_version: 2.6.13
142
190
  signing_key:
143
191
  specification_version: 4
144
192
  summary: An awesome nested set implementation for Active Record