awesome_nested_set 3.0.3 → 3.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +17 -1
- data/README.md +7 -9
- data/lib/awesome_nested_set.rb +6 -3
- data/lib/awesome_nested_set/awesome_nested_set.rb +15 -11
- data/lib/awesome_nested_set/columns.rb +4 -0
- data/lib/awesome_nested_set/model.rb +20 -6
- data/lib/awesome_nested_set/model/movable.rb +2 -1
- data/lib/awesome_nested_set/model/prunable.rb +2 -2
- data/lib/awesome_nested_set/model/rebuildable.rb +5 -1
- data/lib/awesome_nested_set/model/transactable.rb +1 -1
- data/lib/awesome_nested_set/model/validatable.rb +14 -3
- data/lib/awesome_nested_set/tree.rb +11 -1
- data/lib/awesome_nested_set/version.rb +1 -1
- metadata +56 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 886dba55e5efcba602756917fdd82ae57c3e6942
|
4
|
+
data.tar.gz: 0f17ad95fef44901498f7b21b2767b0b0e0d0259
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e52c139d7f15f8a9428ec22967c50899e9f31cdcbb301b59cdc322f796b2ce6ad51fa30e28e16cd975c76e73bc48c32e869ba24df06bad0a8e2a6e87b58169f7
|
7
|
+
data.tar.gz: 610280af1b3026696fd3980f7f6bb49d206ad255c770a9be9f0ab3372af455fa62c610cc8de3c68cfb6c8dcbd06431383a8082f8f9449157f668a7c13da8a6a9
|
data/CHANGELOG
CHANGED
@@ -1,4 +1,20 @@
|
|
1
|
-
3.
|
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.
|
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
|
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
|
238
|
+
Copyright © 2008–2015 [Collective Idea](http://collectiveidea.com), released under the MIT license.
|
data/lib/awesome_nested_set.rb
CHANGED
@@ -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
|
-
|
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
|
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
|
19
|
-
#
|
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(
|
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
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
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 =>
|
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.
|
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 ||=
|
186
|
-
:order =>
|
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
|
-
|
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
|
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(
|
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
|
-
|
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(
|
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
|
-
|
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
|
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.
|
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:
|
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:
|
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:
|
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:
|
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.
|
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
|