Class: Ninetails::Section

Inherits:
Object
  • Object
show all
Defined in:
app/components/ninetails/section.rb

Constant Summary collapse

ALLOWED_POSITIONS =
[:head, :body]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#elements_instancesObject

Returns the value of attribute elements_instances.



5
6
7
# File 'app/components/ninetails/section.rb', line 5

def elements_instances
  @elements_instances
end

Class Method Details

.define_element(name, type, count) ⇒ Object



19
20
21
22
# File 'app/components/ninetails/section.rb', line 19

def self.define_element(name, type, count)
  @elements ||= []
  @elements << Ninetails::ElementDefinition.new(name, type, count)
end

.elementsObject



32
33
34
# File 'app/components/ninetails/section.rb', line 32

def self.elements
  @elements
end

.find_element(name) ⇒ Object



36
37
38
# File 'app/components/ninetails/section.rb', line 36

def self.find_element(name)
  elements.find { |element| element.name == name.to_sym }
end

.has_element(name, type) ⇒ Object



24
25
26
# File 'app/components/ninetails/section.rb', line 24

def self.has_element(name, type)
  define_element name, type, :single
end

.has_many_elements(name, type) ⇒ Object



28
29
30
# File 'app/components/ninetails/section.rb', line 28

def self.has_many_elements(name, type)
  define_element name, type, :multiple
end

.located_in(position) ⇒ Object



7
8
9
10
11
12
13
# File 'app/components/ninetails/section.rb', line 7

def self.located_in(position)
  unless ALLOWED_POSITIONS.include?(position)
    fail SectionConfigurationError, "position must be in #{ALLOWED_POSITIONS}"
  end

  @position = position
end

.positionObject



15
16
17
# File 'app/components/ninetails/section.rb', line 15

def self.position
  @position
end

Instance Method Details

#serializeObject



40
41
42
43
44
45
46
47
# File 'app/components/ninetails/section.rb', line 40

def serialize
  {
    name: "",
    type: self.class.name.demodulize,
    tags: tags,
    elements: serialize_elements
  }
end

#serialize_elementsObject



55
56
57
58
59
60
61
# File 'app/components/ninetails/section.rb', line 55

def serialize_elements
  elements = elements_instances || self.class.elements

  elements.each_with_object({}) do |element, hash|
    element.add_to_hash hash
  end
end

#tagsObject



49
50
51
52
53
# File 'app/components/ninetails/section.rb', line 49

def tags
  {
    position: self.class.position
  }
end