categoryz3 0.3 → 0.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.
- data/app/models/categoryz3/category.rb +25 -6
- data/app/models/categoryz3/item.rb +10 -3
- data/lib/categoryz3/version.rb +1 -1
- metadata +3 -3
@@ -8,6 +8,9 @@ module Categoryz3
|
|
8
8
|
|
9
9
|
scope :parent_categories, -> { where(parent_id: nil) }
|
10
10
|
attr_accessible :name, :parent, :parent_id
|
11
|
+
|
12
|
+
before_update :mark_as_dirty_if_parent_changed
|
13
|
+
after_update :update_children_if_parent_changed
|
11
14
|
|
12
15
|
# Public: Returns the full categories path from the root category until this category
|
13
16
|
#
|
@@ -17,13 +20,29 @@ module Categoryz3
|
|
17
20
|
# #=> [category, subcategory1, subcategory2, subcategory3]
|
18
21
|
#
|
19
22
|
def path
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
23
|
+
@path_array ||= parent ? [parent.path, self].flatten : [self]
|
24
|
+
end
|
25
|
+
|
26
|
+
# Public: Reprocess all items from this category
|
27
|
+
#
|
28
|
+
def reprocess_items!
|
29
|
+
@path_array = nil
|
30
|
+
self.direct_items.each { |item| item.reprocess_child_items! }
|
31
|
+
self.children.each { |category| category.reprocess_items! }
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def mark_as_dirty_if_parent_changed
|
37
|
+
@dirty_parent = parent_id_changed?
|
38
|
+
end
|
39
|
+
|
40
|
+
# Private: Reprocess all items in case the parent category
|
41
|
+
# of this category has changed.
|
42
|
+
def update_children_if_parent_changed
|
43
|
+
if @dirty_parent
|
44
|
+
reprocess_items!
|
25
45
|
end
|
26
|
-
@path_array
|
27
46
|
end
|
28
47
|
|
29
48
|
end
|
@@ -10,20 +10,27 @@ module Categoryz3
|
|
10
10
|
after_create :create_child_items
|
11
11
|
attr_accessible :categorizable
|
12
12
|
|
13
|
+
# Public: Destroy the child items and recreate them
|
14
|
+
#
|
15
|
+
def reprocess_child_items!
|
16
|
+
self.child_items.destroy_all
|
17
|
+
create_child_items
|
18
|
+
end
|
19
|
+
|
13
20
|
private
|
14
21
|
|
15
22
|
# Private: Creates a child item for the category
|
16
23
|
#
|
17
24
|
def create_child_item_for_category(category)
|
18
|
-
category.child_items.
|
25
|
+
category.child_items.find_or_create_by_categorizable_type_and_categorizable_id_and_master_item_id( self.categorizable.class.name, self.categorizable.id, self.id)
|
19
26
|
end
|
20
27
|
|
21
28
|
# Private: Create a child_item for each subcategory the category from this item have
|
22
29
|
# Also creates a child_item for this category
|
23
30
|
#
|
24
31
|
def create_child_items
|
25
|
-
category.path.each do |
|
26
|
-
create_child_item_for_category
|
32
|
+
self.category.path.each do |parent_category|
|
33
|
+
create_child_item_for_category parent_category
|
27
34
|
end
|
28
35
|
end
|
29
36
|
|
data/lib/categoryz3/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: categoryz3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.4'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -131,7 +131,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
131
|
version: '0'
|
132
132
|
segments:
|
133
133
|
- 0
|
134
|
-
hash:
|
134
|
+
hash: 2265189143857855117
|
135
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
136
|
none: false
|
137
137
|
requirements:
|
@@ -140,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
140
140
|
version: '0'
|
141
141
|
segments:
|
142
142
|
- 0
|
143
|
-
hash:
|
143
|
+
hash: 2265189143857855117
|
144
144
|
requirements: []
|
145
145
|
rubyforge_project:
|
146
146
|
rubygems_version: 1.8.24
|