Class: DeedCategory

Inherits:
ApplicationRecord show all
Includes:
Checkable, HasUuid, NestedPriority, Toggleable
Defined in:
app/models/deed_category.rb

Overview

Deed category

Attributes:

children_cache [Array<Integer>]
created_at [DateTime]
data [JSON]
deeds_count [Integer]
name [String]
parent_id [DeedCategory], optional
parents_cache [String]
priority [Integer]
updated_at [DateTime]
uuid [UUID]
visible [Boolean]

Constant Summary collapse

NAME_LIMIT =
75

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.creation_parametersObject



53
54
55
# File 'app/models/deed_category.rb', line 53

def self.creation_parameters
  entity_parameters + i[parent_id]
end

.entity_parametersObject



49
50
51
# File 'app/models/deed_category.rb', line 49

def self.entity_parameters
  i[name priority visible]
end

.siblings(entity) ⇒ Object

Parameters:



45
46
47
# File 'app/models/deed_category.rb', line 45

def self.siblings(entity)
  where(parent_id: entity&.parent_id)
end

Instance Method Details

#add_deed(deed) ⇒ Object

Parameters:



63
64
65
# File 'app/models/deed_category.rb', line 63

def add_deed(deed)
  deed_deed_categories.create(deed: deed)
end

#cache_children!(new_cache = []) ⇒ Object

Parameters:

  • new_cache (Array) (defaults to: [])


84
85
86
87
88
89
90
91
92
93
94
# File 'app/models/deed_category.rb', line 84

def cache_children!(new_cache = [])
  if new_cache.blank?
    new_cache = child_categories.order('id asc').pluck(:id, :children_cache)
  end

  self.children_cache += new_cache.flatten
  self.children_cache.uniq!

  save!
  parent&.cache_children!([id] + children_cache)
end

#cache_parents!Object



76
77
78
79
80
81
# File 'app/models/deed_category.rb', line 76

def cache_parents!
  return if parent.nil?

  self.parents_cache = "#{parent.parents_cache},#{parent_id}".gsub(/\A,/, '')
  save!
end

#deed?(deed) ⇒ Boolean

Parameters:

Returns:

  • (Boolean)


58
59
60
# File 'app/models/deed_category.rb', line 58

def deed?(deed)
  deed_deed_categories.where(deed: deed).exists?
end

#depthObject



72
73
74
# File 'app/models/deed_category.rb', line 72

def depth
  parents_cache.split(',').count
end

#remove_deed(deed) ⇒ Object

Parameters:



68
69
70
# File 'app/models/deed_category.rb', line 68

def remove_deed(deed)
  deed_deed_categories.where(deed: deed).destroy_all
end