Class: Foxtail::Syntax::Serializer

Inherits:
Object
  • Object
show all
Defined in:
lib/foxtail/syntax/serializer.rb

Overview

Serializes AST nodes back to FTL format

Instance Method Summary collapse

Constructor Details

#initialize(with_junk: false) ⇒ Serializer

Create a new Serializer instance

Parameters:

  • with_junk (Boolean) (defaults to: false)

    Whether to include junk entries in output (default: false)



9
10
11
# File 'lib/foxtail/syntax/serializer.rb', line 9

def initialize(with_junk: false)
  @with_junk = with_junk
end

Instance Method Details

#serialize(resource) ⇒ String

Serialize a Resource AST to FTL string

Parameters:

Returns:

  • (String)

    FTL formatted source text



19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/foxtail/syntax/serializer.rb', line 19

def serialize(resource)
  has_entries = false
  parts = []

  resource.body.each do |entry|
    next if entry.is_a?(Parser::AST::Junk) && !with_junk?

    parts << serialize_entry(entry, has_entries:)
    has_entries = true
  end

  parts.join
end

#serialize_entry(entry, has_entries: false) ⇒ String

Serialize a single entry (Message, Term, Comment, or Junk)

Parameters:

Returns:

  • (String)

    FTL formatted entry text



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/foxtail/syntax/serializer.rb', line 37

def serialize_entry(entry, has_entries: false)
  case entry
  when Parser::AST::Message
    serialize_message(entry)
  when Parser::AST::Term
    serialize_term(entry)
  when Parser::AST::Comment
    serialize_standalone_comment(entry, "#", has_entries)
  when Parser::AST::GroupComment
    serialize_standalone_comment(entry, "##", has_entries)
  when Parser::AST::ResourceComment
    serialize_standalone_comment(entry, "###", has_entries)
  when Parser::AST::Junk
    serialize_junk(entry)
  else
    raise ArgumentError, "Unknown entry type: #{entry.class}"
  end
end

#with_junk?Boolean

Returns Whether to include junk entries in output.

Returns:

  • (Boolean)

    Whether to include junk entries in output



14
# File 'lib/foxtail/syntax/serializer.rb', line 14

def with_junk? = @with_junk