Class: Foxtail::Resource
- Inherits:
-
Object
- Object
- Foxtail::Resource
- Includes:
- Enumerable
- Defined in:
- lib/foxtail/resource.rb
Overview
Container for parsed FTL entries (messages and terms).
Created via Resource.from_string or Resource.from_file, which use the runtime parser (Bundle::Parser) optimized for performance with error recovery. Invalid entries are silently skipped; comments are not preserved.
For full AST with source positions, comments, and error details, use Syntax::Parser instead.
Instance Attribute Summary collapse
-
#entries ⇒ Array<Bundle::Parser::AST::Message, Bundle::Parser::AST::Term>
readonly
Parsed FTL entries (messages and terms).
Class Method Summary collapse
-
.from_file(path) ⇒ Foxtail::Resource
Parse FTL file into a Resource.
-
.from_string(source) ⇒ Foxtail::Resource
Parse FTL source string into a Resource.
Instance Method Summary collapse
-
#each ⇒ self
Iterate over entries.
-
#empty? ⇒ Boolean
Check if resource has any entries.
-
#find(id) ⇒ Bundle::Parser::AST::Message, ...
Find entry by ID.
-
#initialize(entries) ⇒ Resource
constructor
A new instance of Resource.
-
#messages ⇒ Array<Bundle::Parser::AST::Message>
Get message entries (IDs not starting with “-”).
-
#size ⇒ Integer
Get the number of entries.
-
#terms ⇒ Array<Bundle::Parser::AST::Term>
Get term entries (IDs starting with “-”).
Constructor Details
#initialize(entries) ⇒ Resource
Returns a new instance of Resource.
48 49 50 |
# File 'lib/foxtail/resource.rb', line 48 def initialize(entries) @entries = entries end |
Instance Attribute Details
#entries ⇒ Array<Bundle::Parser::AST::Message, Bundle::Parser::AST::Term> (readonly)
Returns Parsed FTL entries (messages and terms).
16 17 18 |
# File 'lib/foxtail/resource.rb', line 16 def entries @entries end |
Class Method Details
.from_file(path) ⇒ Foxtail::Resource
Parse FTL file into a Resource
43 44 45 46 |
# File 'lib/foxtail/resource.rb', line 43 def self.from_file(path) source = path.read from_string(source) end |
.from_string(source) ⇒ Foxtail::Resource
Parse FTL source string into a Resource
30 31 32 33 34 35 36 37 |
# File 'lib/foxtail/resource.rb', line 30 def self.from_string(source) raise ArgumentError, "source must be a String, got #{source.class}" unless source.is_a?(String) parser = Bundle::Parser.new entries = parser.parse(source) new(entries) end |
Instance Method Details
#each ⇒ self
Iterate over entries
64 65 66 67 |
# File 'lib/foxtail/resource.rb', line 64 def each(&) @entries.each(&) self end |
#empty? ⇒ Boolean
Check if resource has any entries
56 |
# File 'lib/foxtail/resource.rb', line 56 def empty? = @entries.empty? |
#find(id) ⇒ Bundle::Parser::AST::Message, ...
Find entry by ID
79 |
# File 'lib/foxtail/resource.rb', line 79 def find(id) = @entries.find {|entry| entry.id == id } |
#messages ⇒ Array<Bundle::Parser::AST::Message>
Get message entries (IDs not starting with “-”)
71 |
# File 'lib/foxtail/resource.rb', line 71 def = @entries.select {|entry| entry.id && !entry.id.start_with?("-") } |
#size ⇒ Integer
Get the number of entries
60 |
# File 'lib/foxtail/resource.rb', line 60 def size = @entries.size |
#terms ⇒ Array<Bundle::Parser::AST::Term>
Get term entries (IDs starting with “-”)
75 |
# File 'lib/foxtail/resource.rb', line 75 def terms = @entries.select {|entry| entry.id&.start_with?("-") } |