Class: RailroadDiagrams::SeparatedList

Inherits:
DiagramItem show all
Includes:
ExpandedNode
Defined in:
lib/railroad_diagrams/separated_list.rb,
sig/generated/railroad_diagrams/separated_list.rbs

Overview

Draws items separated by a delimiter.

Examples:

SeparatedList.new(NonTerminal.new('column'), ',')

Instance Attribute Summary

Attributes inherited from DiagramItem

#attrs, #children, #down, #height, #needs_space, #up, #width

Instance Method Summary collapse

Methods included from ExpandedNode

#adopt_expansion, #expanded, #format, #measure, #render_svg, #render_text, #text_diagram, #walk

Methods inherited from DiagramItem

#==, #add, #apply_user_attributes, #container_element?, #determine_gaps, #each_node, #format, #hash, inherited, #inspect, #structural_state, #text_diagram, #to_str, #walk, #wrap_string, #write_children, #write_opening_tag, #write_standalone, #write_svg

Constructor Details

#initialize(item, separator, min: 1, trailing: false, id: nil, cls: nil, attrs: {}) ⇒ Object

rubocop:disable-next Metrics/ParameterLists

Parameters:

  • item (Object)
  • separator (Object)
  • min: (Object) (defaults to: 1)
  • trailing: (Object) (defaults to: false)
  • id: (Object) (defaults to: nil)
  • cls: (Object) (defaults to: nil)
  • attrs: (Object) (defaults to: {})


12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/railroad_diagrams/separated_list.rb', line 12

def initialize(item, separator, min: 1, trailing: false, id: nil, cls: nil, attrs: {})
  super('g', id: id, cls: cls, data_attrs: attrs)
  raise InvalidArgument, 'min must be a non-negative integer' unless min.is_a?(Integer) && min >= 0
  raise InvalidArgument, 'trailing must be a boolean' unless [true, false].include?(trailing)

  @item = wrap_string(item)
  @separator = wrap_string(separator)
  @min = min
  @trailing = trailing
  repeated = min > 1 ? Repeat.new(@item, min: min, separator: @separator) : OneOrMore.new(@item, @separator)
  repeated = Sequence.new(repeated, Optional.new(@separator)) if trailing
  adopt_expansion(min.zero? ? Optional.new(repeated) : repeated)
end

Instance Method Details

#child_nodes ⇒ Object

Returns:

  • (Object)


30
31
32
# File 'lib/railroad_diagrams/separated_list.rb', line 30

def child_nodes
  [@item, @separator]
end

#to_h ⇒ Object

Returns:

  • (Object)


34
35
36
37
38
39
# File 'lib/railroad_diagrams/separated_list.rb', line 34

def to_h
  Serialization.add_attributes(
    { 'type' => 'separated_list', 'item' => @item.to_h, 'separator' => @separator.to_h,
      'min' => @min, 'trailing' => @trailing }, self
  )
end

#to_s ⇒ Object

Returns:

  • (Object)


26
27
28
# File 'lib/railroad_diagrams/separated_list.rb', line 26

def to_s
  "SeparatedList(#{@item}, #{@separator}, min=#{@min}, trailing=#{@trailing})"
end