Class: Foxtail::Syntax::Serializer
- Inherits:
-
Object
- Object
- Foxtail::Syntax::Serializer
- Defined in:
- lib/foxtail/syntax/serializer.rb
Overview
Serializes AST nodes back to FTL format
Instance Method Summary collapse
-
#initialize(with_junk: false) ⇒ Serializer
constructor
Create a new Serializer instance.
-
#serialize(resource) ⇒ String
Serialize a Resource AST to FTL string.
-
#serialize_entry(entry, has_entries: false) ⇒ String
Serialize a single entry (Message, Term, Comment, or Junk).
-
#with_junk? ⇒ Boolean
Whether to include junk entries in output.
Constructor Details
#initialize(with_junk: false) ⇒ Serializer
Create a new Serializer instance
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
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)
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 (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.
14 |
# File 'lib/foxtail/syntax/serializer.rb', line 14 def with_junk? = @with_junk |