Class: Dotenv::Merge::FileAnalysis
- Inherits:
-
Object
- Object
- Dotenv::Merge::FileAnalysis
- Includes:
- Ast::Merge::FileAnalyzable
- Defined in:
- lib/dotenv/merge/file_analysis.rb
Overview
File analysis for dotenv files. Parses dotenv source and extracts environment variable assignments, comments, and freeze blocks.
Dotenv files follow a simple format:
-
‘KEY=value` - Environment variable assignment
-
‘export KEY=value` - Assignment with export prefix
-
‘# comment` - Comment line
-
Blank lines are preserved
Constant Summary collapse
- DEFAULT_FREEZE_TOKEN =
Default freeze token for identifying freeze blocks
"dotenv-merge"
Instance Method Summary collapse
-
#all_assignments ⇒ Array<EnvLine>
Get all assignment lines including those in freeze blocks.
-
#assignment_lines ⇒ Array<EnvLine>
Get assignment lines (not in freeze blocks).
-
#compute_node_signature(node) ⇒ Array?
Compute default signature for a node.
-
#env_var(key) ⇒ EnvLine?
Get environment variable by key.
-
#initialize(source, freeze_token: DEFAULT_FREEZE_TOKEN, signature_generator: nil) ⇒ FileAnalysis
constructor
Initialize file analysis with dotenv parser.
-
#keys ⇒ Array<String>
Get all environment variable keys.
-
#line_at(line_number) ⇒ EnvLine?
Get a specific line (1-indexed) Override base to return EnvLine objects instead of raw strings.
-
#valid? ⇒ Boolean
Check if parse was successful (dotenv always succeeds, may have invalid lines).
Constructor Details
#initialize(source, freeze_token: DEFAULT_FREEZE_TOKEN, signature_generator: nil) ⇒ FileAnalysis
Initialize file analysis with dotenv parser
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/dotenv/merge/file_analysis.rb', line 36 def initialize(source, freeze_token: DEFAULT_FREEZE_TOKEN, signature_generator: nil) @source = source @freeze_token = freeze_token @signature_generator = signature_generator # Parse all lines @lines = parse_lines(source) # Extract and integrate freeze blocks @statements = extract_and_integrate_statements DebugLogger.debug("FileAnalysis initialized", { signature_generator: signature_generator ? "custom" : "default", lines_count: @lines.size, statements_count: @statements.size, freeze_blocks: freeze_blocks.size, assignments: assignment_lines.size, }) end |
Instance Method Details
#all_assignments ⇒ Array<EnvLine>
Get all assignment lines including those in freeze blocks
70 71 72 |
# File 'lib/dotenv/merge/file_analysis.rb', line 70 def all_assignments @lines.select(&:assignment?) end |
#assignment_lines ⇒ Array<EnvLine>
Get assignment lines (not in freeze blocks)
64 65 66 |
# File 'lib/dotenv/merge/file_analysis.rb', line 64 def assignment_lines @statements.select { |stmt| stmt.is_a?(EnvLine) && stmt.assignment? } end |
#compute_node_signature(node) ⇒ Array?
Compute default signature for a node
87 88 89 90 91 92 93 94 |
# File 'lib/dotenv/merge/file_analysis.rb', line 87 def compute_node_signature(node) case node when FreezeNode node.signature when EnvLine node.signature end end |
#env_var(key) ⇒ EnvLine?
Get environment variable by key
103 104 105 |
# File 'lib/dotenv/merge/file_analysis.rb', line 103 def env_var(key) @lines.find { |line| line.assignment? && line.key == key } end |
#keys ⇒ Array<String>
Get all environment variable keys
109 110 111 |
# File 'lib/dotenv/merge/file_analysis.rb', line 109 def keys all_assignments.map(&:key) end |
#line_at(line_number) ⇒ EnvLine?
Get a specific line (1-indexed) Override base to return EnvLine objects instead of raw strings
78 79 80 81 82 |
# File 'lib/dotenv/merge/file_analysis.rb', line 78 def line_at(line_number) return if line_number < 1 @lines[line_number - 1] end |
#valid? ⇒ Boolean
Check if parse was successful (dotenv always succeeds, may have invalid lines)
58 59 60 |
# File 'lib/dotenv/merge/file_analysis.rb', line 58 def valid? true end |