Module: Shared::Containable

Extended by:
ActiveSupport::Concern
Included in:
CollectionObject, Container, Extract
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



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

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



52
53
54
# File 'app/models/concerns/shared/containable.rb', line 52

def containable?
  true
end

#contained?Boolean

return [Boolean]

whether this item is contained in something else

Returns:

  • (Boolean)


58
59
60
# File 'app/models/concerns/shared/containable.rb', line 58

def contained?
  !container.nil?
end

#contained_by?(kontainer) ⇒ Boolean

return [Boolean]

whether this object is contained by the passed container

Returns:

  • (Boolean)


64
65
66
# File 'app/models/concerns/shared/containable.rb', line 64

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

#contained_siblingsObject

Returns Array.

Returns:

  • Array



32
33
34
# File 'app/models/concerns/shared/containable.rb', line 32

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



45
46
47
48
# File 'app/models/concerns/shared/containable.rb', line 45

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



38
39
40
41
# File 'app/models/concerns/shared/containable.rb', line 38

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