Class: Structured::List

Inherits:
Object
  • Object
show all
Includes:
Type
Defined in:
lib/structured/list.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(member_klass) ⇒ List



7
8
9
# File 'lib/structured/list.rb', line 7

def initialize(member_klass)
  @member_klass = member_klass
end

Instance Attribute Details

#member_klassObject (readonly)

Returns the value of attribute member_klass.



5
6
7
# File 'lib/structured/list.rb', line 5

def member_klass
  @member_klass
end

Class Method Details

.[](member_klass) ⇒ Object



11
12
13
# File 'lib/structured/list.rb', line 11

def self.[](member_klass)
  new(member_klass)
end

Instance Method Details

#default_valueObject



37
38
39
# File 'lib/structured/list.rb', line 37

def default_value
  [].freeze
end

#format_stack_frame_element(index) ⇒ Object



33
34
35
# File 'lib/structured/list.rb', line 33

def format_stack_frame_element(index)
  "[#{index}]"
end

#parse(parsed_yaml, stack:, context: nil) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/structured/list.rb', line 15

def parse(parsed_yaml, stack:, context: nil)
  unless parsed_yaml.is_a?(Array)
    raise Structured::Errors::InvalidValue.new(stack, "#{stack} expects an array")
  end

  errors = []
  result = parsed_yaml.map.with_index do |value, index|
    begin
      member_klass.parse(value, stack: stack.push(index, member_klass), context: context)
    rescue Structured::Errors::Base => exception
      errors << exception
    end
  end

  raise Structured::Errors::MultipleErrors.union(stack, errors) unless errors.empty?
  result
end

#type_nameObject



41
42
43
# File 'lib/structured/list.rb', line 41

def type_name
  "List[#{member_klass.type_name}]"
end