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



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

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



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

def containable?
  true
end

#contained?Boolean

return [Boolean]

whether this item is contained in something else

Returns:

  • (Boolean)


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

def contained?
  !container.nil?
end

#contained_by?(kontainer) ⇒ Boolean

return [Boolean]

whether this object is contained by the passed container

Returns:

  • (Boolean)


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

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

#contained_siblingsObject

Returns Array.

Returns:

  • Array



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

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



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

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



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

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