Class: Dotenv::Merge::FreezeNode

Inherits:
Ast::Merge::FreezeNodeBase
  • Object
show all
Defined in:
lib/dotenv/merge/freeze_node.rb

Overview

Represents a freeze block in a dotenv file. Freeze blocks protect sections from being overwritten during merge.

Examples:

Freeze block in dotenv file

# dotenv-merge:freeze Custom API settings
API_KEY=my_custom_key
API_SECRET=my_custom_secret
# dotenv-merge:unfreeze

See Also:

  • Ast::Merge::FreezeNodeBase

Constant Summary collapse

InvalidStructureError =

Make InvalidStructureError available as Dotenv::Merge::FreezeNode::InvalidStructureError

Ast::Merge::FreezeNodeBase::InvalidStructureError
Location =

Make Location available as Dotenv::Merge::FreezeNode::Location

Ast::Merge::FreezeNodeBase::Location

Instance Method Summary collapse

Constructor Details

#initialize(start_line:, end_line:, analysis:, reason: nil) ⇒ FreezeNode

Initialize a new FreezeNode for dotenv

Parameters:

  • start_line (Integer)

    Starting line number (1-indexed)

  • end_line (Integer)

    Ending line number (1-indexed)

  • analysis (FileAnalysis)

    The file analysis

  • reason (String, nil) (defaults to: nil)

    Optional reason from freeze marker



28
29
30
31
32
33
34
35
# File 'lib/dotenv/merge/freeze_node.rb', line 28

def initialize(start_line:, end_line:, analysis:, reason: nil)
  super(
    start_line: start_line,
    end_line: end_line,
    analysis: analysis,
    reason: reason
  )
end

Instance Method Details

#contentString

Get the content of this freeze block

Returns:

  • (String)

    The content lines joined



39
40
41
# File 'lib/dotenv/merge/freeze_node.rb', line 39

def content
  @lines&.map { |l| l.respond_to?(:raw) ? l.raw : l.to_s }&.join("\n")
end

#env_linesArray<EnvLine>

Get environment variable lines within the freeze block

Returns:

  • (Array<EnvLine>)

    Assignment lines only



51
52
53
# File 'lib/dotenv/merge/freeze_node.rb', line 51

def env_lines
  @lines&.select { |l| l.respond_to?(:assignment?) && l.assignment? } || []
end

#inspectString

String representation for debugging

Returns:

  • (String)


57
58
59
# File 'lib/dotenv/merge/freeze_node.rb', line 57

def inspect
  "#<#{self.class.name} lines=#{@start_line}..#{@end_line} env_vars=#{env_lines.size}>"
end

#signatureArray

Get a signature for this freeze block

Returns:

  • (Array)

    Signature based on normalized content



45
46
47
# File 'lib/dotenv/merge/freeze_node.rb', line 45

def signature
  [:FreezeNode, content.gsub(/\s+/, " ").strip]
end