ancestry 4.3.0 → 4.3.1
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 +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/ancestry/has_ancestry.rb +1 -6
- data/lib/ancestry/instance_methods.rb +4 -8
- data/lib/ancestry/materialized_path.rb +8 -0
- data/lib/ancestry/version.rb +1 -1
- metadata +3 -6
- data/lib/ancestry/array_pattern_validator.rb +0 -27
- data/lib/ancestry/materialized_path_string.rb +0 -46
- data/lib/ancestry/materialized_path_string2.rb +0 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1628363389f64272d25675e727b155ba36c221404a95fc7d7d41de12b2185614
|
4
|
+
data.tar.gz: 2a76d777929b18efa86bde34b969f11ab58c3f44424e82c97e69ef8f348d1c96
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ece87f9d1577748ffbaaf8617afdc4bf4094f653300b4a2df043a5f16822b267da877f0689b7d792f5f2174f1b4e1b41333e89c0e9dc23c388af30712267953
|
7
|
+
data.tar.gz: a12ce97c69b384100eecf3a347dcd3fea0abb60193c71b0e6a83d667c8f6a4cfdeba7e401e743bf95cf59f4d87ddc550d63b258ac294dd057ca7c518f1c8540f
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,11 @@
|
|
3
3
|
Doing our best at supporting [SemVer](http://semver.org/) with
|
4
4
|
a nice looking [Changelog](http://keepachangelog.com).
|
5
5
|
|
6
|
+
## Version [4.3.1] <sub><sup>2023-03-19</sub></sup>
|
7
|
+
* Fix: added back fields that were removed in #589 [#637](https://github.com/stefankroes/ancestry/pull/637) (thx @znz)
|
8
|
+
- ancestor_ids_in_database
|
9
|
+
- parent_id_in_database
|
10
|
+
|
6
11
|
## Version [4.3.0] <sub><sup>2023-03-09</sub></sup>
|
7
12
|
|
8
13
|
* Fix: materialized_path2 strategy [#597](https://github.com/stefankroes/ancestry/pull/597) (thx @kshnurov)
|
@@ -83,12 +83,7 @@ module Ancestry
|
|
83
83
|
# Create counter cache column accessor and set to option or default
|
84
84
|
if options[:counter_cache]
|
85
85
|
cattr_accessor :counter_cache_column
|
86
|
-
|
87
|
-
if options[:counter_cache] == true
|
88
|
-
self.counter_cache_column = :children_count
|
89
|
-
else
|
90
|
-
self.counter_cache_column = options[:counter_cache]
|
91
|
-
end
|
86
|
+
self.counter_cache_column = options[:counter_cache] == true ? 'children_count' : options[:counter_cache].to_s
|
92
87
|
|
93
88
|
after_create :increase_parent_counter_cache, if: :has_parent?
|
94
89
|
after_destroy :decrease_parent_counter_cache, if: :has_parent?
|
@@ -62,7 +62,7 @@ module Ancestry
|
|
62
62
|
|
63
63
|
# Counter Cache
|
64
64
|
def increase_parent_counter_cache
|
65
|
-
self.ancestry_base_class.increment_counter
|
65
|
+
self.ancestry_base_class.increment_counter counter_cache_column, parent_id
|
66
66
|
end
|
67
67
|
|
68
68
|
def decrease_parent_counter_cache
|
@@ -74,7 +74,7 @@ module Ancestry
|
|
74
74
|
return if defined?(@_trigger_destroy_callback) && !@_trigger_destroy_callback
|
75
75
|
return if ancestry_callbacks_disabled?
|
76
76
|
|
77
|
-
self.ancestry_base_class.decrement_counter
|
77
|
+
self.ancestry_base_class.decrement_counter counter_cache_column, parent_id
|
78
78
|
end
|
79
79
|
|
80
80
|
def update_parent_counter_cache
|
@@ -83,14 +83,10 @@ module Ancestry
|
|
83
83
|
return unless changed
|
84
84
|
|
85
85
|
if parent_id_was = parent_id_before_last_save
|
86
|
-
self.ancestry_base_class.decrement_counter
|
86
|
+
self.ancestry_base_class.decrement_counter counter_cache_column, parent_id_was
|
87
87
|
end
|
88
88
|
|
89
|
-
parent_id &&
|
90
|
-
end
|
91
|
-
|
92
|
-
def _counter_cache_column
|
93
|
-
self.ancestry_base_class.counter_cache_column.to_s
|
89
|
+
parent_id && increase_parent_counter_cache
|
94
90
|
end
|
95
91
|
|
96
92
|
# Ancestors
|
@@ -124,10 +124,18 @@ module Ancestry
|
|
124
124
|
parse_ancestry_column(read_attribute(self.ancestry_base_class.ancestry_column))
|
125
125
|
end
|
126
126
|
|
127
|
+
def ancestor_ids_in_database
|
128
|
+
parse_ancestry_column(attribute_in_database(self.class.ancestry_column))
|
129
|
+
end
|
130
|
+
|
127
131
|
def ancestor_ids_before_last_save
|
128
132
|
parse_ancestry_column(attribute_before_last_save(self.ancestry_base_class.ancestry_column))
|
129
133
|
end
|
130
134
|
|
135
|
+
def parent_id_in_database
|
136
|
+
parse_ancestry_column(attribute_in_database(self.class.ancestry_column)).last
|
137
|
+
end
|
138
|
+
|
131
139
|
def parent_id_before_last_save
|
132
140
|
parse_ancestry_column(attribute_before_last_save(self.ancestry_base_class.ancestry_column)).last
|
133
141
|
end
|
data/lib/ancestry/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ancestry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.3.
|
4
|
+
version: 4.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Kroes
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-03-
|
12
|
+
date: 2023-03-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -112,7 +112,6 @@ files:
|
|
112
112
|
- MIT-LICENSE
|
113
113
|
- README.md
|
114
114
|
- lib/ancestry.rb
|
115
|
-
- lib/ancestry/array_pattern_validator.rb
|
116
115
|
- lib/ancestry/class_methods.rb
|
117
116
|
- lib/ancestry/exceptions.rb
|
118
117
|
- lib/ancestry/has_ancestry.rb
|
@@ -121,8 +120,6 @@ files:
|
|
121
120
|
- lib/ancestry/materialized_path.rb
|
122
121
|
- lib/ancestry/materialized_path2.rb
|
123
122
|
- lib/ancestry/materialized_path_pg.rb
|
124
|
-
- lib/ancestry/materialized_path_string.rb
|
125
|
-
- lib/ancestry/materialized_path_string2.rb
|
126
123
|
- lib/ancestry/version.rb
|
127
124
|
homepage: https://github.com/stefankroes/ancestry
|
128
125
|
licenses:
|
@@ -148,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
145
|
- !ruby/object:Gem::Version
|
149
146
|
version: '0'
|
150
147
|
requirements: []
|
151
|
-
rubygems_version: 3.
|
148
|
+
rubygems_version: 3.2.32
|
152
149
|
signing_key:
|
153
150
|
specification_version: 4
|
154
151
|
summary: Organize ActiveRecord model into a tree structure
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module Ancestry
|
2
|
-
class ArrayPatternValidator < ActiveModel::EachValidator
|
3
|
-
def initialize(options)
|
4
|
-
raise ArgumentError, "Pattern unspecified, Specify using :pattern" unless options[:pattern]
|
5
|
-
|
6
|
-
options[:pattern] = /\A#{options[:pattern].to_s}\Z/ unless options[:pattern].to_s.include?('\A')
|
7
|
-
options[:id] = true unless options.key?(:id)
|
8
|
-
options[:integer] = true unless options.key?(:integer)
|
9
|
-
|
10
|
-
super
|
11
|
-
end
|
12
|
-
|
13
|
-
def validate_each(record, attribute, value)
|
14
|
-
if options[:id] && value.include?(record.id)
|
15
|
-
record.errors.add(attribute, I18n.t("ancestry.exclude_self", {:class_name => self.class.name.humanize}))
|
16
|
-
end
|
17
|
-
|
18
|
-
if value.any? { |v| v.to_s !~ options[:pattern] }
|
19
|
-
record.errors.add(attribute, "illegal characters")
|
20
|
-
end
|
21
|
-
|
22
|
-
if options[:integer] && value.any? { |v| v < 1 }
|
23
|
-
record.errors.add(attribute, "non positive ancestor id")
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module Ancestry
|
2
|
-
class MaterializedPathString < ActiveRecord::Type::Value
|
3
|
-
def initialize(casting: :to_i, delimiter: '/')
|
4
|
-
@casting = casting&.to_proc
|
5
|
-
@delimiter = delimiter
|
6
|
-
end
|
7
|
-
|
8
|
-
def type
|
9
|
-
:materialized_path_string
|
10
|
-
end
|
11
|
-
|
12
|
-
# convert to database type
|
13
|
-
def serialize(value)
|
14
|
-
if value.kind_of?(Array)
|
15
|
-
value.map(&:to_s).join(@delimiter).presence
|
16
|
-
elsif value.kind_of?(Integer)
|
17
|
-
value.to_s
|
18
|
-
elsif value.nil? || value.kind_of?(String)
|
19
|
-
value
|
20
|
-
else
|
21
|
-
byebug
|
22
|
-
puts "curious type: #{value.class}"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def cast(value)
|
27
|
-
cast_value(value) #unless value.nil? (want to get rid of this - fix default value)
|
28
|
-
end
|
29
|
-
|
30
|
-
# called by cast (form or setter) or deserialize (database)
|
31
|
-
def cast_value(value)
|
32
|
-
if value.kind_of?(Array)
|
33
|
-
super
|
34
|
-
elsif value.nil?
|
35
|
-
# would prefer to use default here
|
36
|
-
# but with default, it kept thinking the field had changed when it hadn't
|
37
|
-
# (that may be a rails bug though)
|
38
|
-
super([])
|
39
|
-
else
|
40
|
-
#TODO: test ancestry=1
|
41
|
-
super(value.to_s.split(@delimiter).map(&@casting))
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
ActiveRecord::Type.register(:materialized_path_string, Ancestry::MaterializedPathString)
|
@@ -1,46 +0,0 @@
|
|
1
|
-
# used for materialized path
|
2
|
-
class MaterializedPathString2 < ActiveRecord::Type::Value
|
3
|
-
def initialize(casting: :to_i, delimiter: '/')
|
4
|
-
@casting = casting&.to_proc
|
5
|
-
@delimiter = delimiter
|
6
|
-
end
|
7
|
-
|
8
|
-
def type
|
9
|
-
:materialized_path_string2
|
10
|
-
end
|
11
|
-
|
12
|
-
# convert to database type
|
13
|
-
def serialize(value)
|
14
|
-
if value.kind_of?(Array)
|
15
|
-
# TODO: check all values to ensure no extra slashes
|
16
|
-
value.empty? ? @delimiter : "#{@delimiter}#{value.map(&:to_s).join(@delimiter)}#{@delimiter}"
|
17
|
-
elsif value.kind_of?(Integer)
|
18
|
-
value.to_s
|
19
|
-
elsif value.nil? || value.kind_of?(String)
|
20
|
-
value
|
21
|
-
else
|
22
|
-
byebug
|
23
|
-
puts "curious type: #{value.class}"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def cast(value)
|
28
|
-
cast_value(value) #unless value.nil? (want to get rid of this - fix default value)
|
29
|
-
end
|
30
|
-
|
31
|
-
# called by cast (form or setter) or deserialize (database)
|
32
|
-
def cast_value(value)
|
33
|
-
if value.kind_of?(Array)
|
34
|
-
super
|
35
|
-
elsif value.nil?
|
36
|
-
# would prefer to use default here
|
37
|
-
# but with default, it kept thinking the field had changed when it hadn't
|
38
|
-
super([])
|
39
|
-
else
|
40
|
-
#TODO: test ancestry=1
|
41
|
-
super(value.to_s.split(@delimiter).map(&@casting))
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
ActiveRecord::Type.register(:materialized_path_string2, Ancestry::MaterializedPathString)
|