Module: Shared::Containable

Extended by:
ActiveSupport::Concern
Included in:
CollectionObject, Container
Defined in:
app/models/concerns/shared/containable.rb

Overview

Shared code for objects that maybe be placed in Container(s).

Instance Method Summary collapse

Instance Method Details

#containObject

What has been put in contained_in might be a container, or the id of a container: convert an id to a container, and put self into that container



22
23
24
25
26
27
28
29
30
31
# File 'app/models/concerns/shared/containable.rb', line 22

def contain
  c = nil
  if contained_in.is_a?(Container)
    c = contained_in
  else
    c = Container.find(contained_in)
  end

  put_in_container(c)
end

#containable?True

Returns this instance is containable.

Returns:

  • (True)

    this instance is containable



54
55
56
# File 'app/models/concerns/shared/containable.rb', line 54

def containable?
  true
end

#contained?Boolean

return [Boolean]

whether this item is contained in something else

Returns:

  • (Boolean)


60
61
62
# File 'app/models/concerns/shared/containable.rb', line 60

def contained?
  !container.nil?
end

#contained_by?(kontainer) ⇒ Boolean

return [Boolean]

whether this object is contained by the passed container

Returns:

  • (Boolean)


66
67
68
# File 'app/models/concerns/shared/containable.rb', line 66

def contained_by?(kontainer)
  enclosing_containers.include?(kontainer)
end

#contained_siblingsObject

Returns Array.

Returns:

  • Array



34
35
36
# File 'app/models/concerns/shared/containable.rb', line 34

def contained_siblings
  reload_container_item&.siblings&.map(&:contained_object) || []
end

#enclosing_containersArray

Return all Containers containing this container

Returns:

  • (Array)

    return all Containers containing this container



47
48
49
50
# File 'app/models/concerns/shared/containable.rb', line 47

def enclosing_containers
  return [] if !contained?
  container_item.ancestors.map(&:contained_object)
end

#put_in_container(kontainer) ⇒ Boolean

Returns true if item is placed in container, false if not.

Returns:

  • (Boolean)

    true if item is placed in container, false if not



40
41
42
43
# File 'app/models/concerns/shared/containable.rb', line 40

def put_in_container(kontainer)
  return false if self.new_record? || kontainer.new_record?
  kontainer.add_container_items([self])
end