Class: Prick::Environment
- Inherits:
-
Object
- Object
- Prick::Environment
- Defined in:
- lib/prick/environment.rb
Instance Attribute Summary collapse
-
#ancestors ⇒ Object
Ancestors (array of Environment objects) sorted in dependency order.
-
#assignments ⇒ Object
readonly
Map from variable identifier (Symbol) to value.
-
#effective_variables ⇒ Object
Map from variable identifier (Symbol) to effective value.
-
#environments ⇒ Object
readonly
The enclosing Environments object.
-
#name ⇒ Object
readonly
Environment name (String).
-
#parents ⇒ Object
List of directly inherited environment objects.
-
#super_environment ⇒ Object
The ancestor that defines the build attribute or nil if ambigous.
Instance Method Summary collapse
-
#assign?(ident) ⇒ Boolean
Return true if the environment assigns an attribute.
-
#assigners ⇒ Object
Map from variable identifier to the environment that defines the value.
-
#bash ⇒ Object
FIXME build has been out-commented.
- #bash_environment ⇒ Object
-
#comment ⇒ Object
Environment comment.
- #dump ⇒ Object
- #has_super? ⇒ Boolean
-
#inherit ⇒ Object
List of names of inherited environments.
-
#initialize(environments, name, assignments) ⇒ Environment
constructor
A new instance of Environment.
- #inspect ⇒ Object
-
#super_bash ⇒ Object
FIXME same.
-
#types ⇒ Object
Map from variable identifier (Symbol) to type.
Constructor Details
#initialize(environments, name, assignments) ⇒ Environment
Returns a new instance of Environment.
65 66 67 68 69 70 71 72 73 74 |
# File 'lib/prick/environment.rb', line 65 def initialize(environments, name, assignments) constrain environments, Environments constrain name, String constrain assignments, { Symbol => Object } @environments = environments @name = name @assignments = assignments @assignments[:inherit] ||= [] @effective_variables = assignments.transform_values { |v| v.dup } # Deep-dup end |
Instance Attribute Details
#ancestors ⇒ Object
Ancestors (array of Environment objects) sorted in dependency order
24 25 26 |
# File 'lib/prick/environment.rb', line 24 def ancestors @ancestors end |
#assignments ⇒ Object (readonly)
Map from variable identifier (Symbol) to value. Inherited variables are not included in #assignments
55 56 57 |
# File 'lib/prick/environment.rb', line 55 def assignments @assignments end |
#effective_variables ⇒ Object
Map from variable identifier (Symbol) to effective value. Initially equal to #assignments but are later augmented or merged with the corresponding assignments from inherited environments
63 64 65 |
# File 'lib/prick/environment.rb', line 63 def effective_variables @effective_variables end |
#environments ⇒ Object (readonly)
The enclosing Environments object. Used in #types
11 12 13 |
# File 'lib/prick/environment.rb', line 11 def environments @environments end |
#name ⇒ Object (readonly)
Environment name (String)
14 15 16 |
# File 'lib/prick/environment.rb', line 14 def name @name end |
#parents ⇒ Object
List of directly inherited environment objects. Assigned by the analyzer
21 22 23 |
# File 'lib/prick/environment.rb', line 21 def parents @parents end |
#super_environment ⇒ Object
The ancestor that defines the build attribute or nil if ambigous. Assigned by the analyzer
28 29 30 |
# File 'lib/prick/environment.rb', line 28 def super_environment @super_environment end |
Instance Method Details
#assign?(ident) ⇒ Boolean
Return true if the environment assigns an attribute
58 |
# File 'lib/prick/environment.rb', line 58 def assign?(ident) = @assignments.key?(ident) |
#assigners ⇒ Object
Map from variable identifier to the environment that defines the value. This assumes there are no ambigous assignments
34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/prick/environment.rb', line 34 def assigners @assigners ||= begin effective_variables.keys.map { |ident| if assignments.key?(ident) [ident, self] else [ident, ancestors.reverse.find { |env| env.assignments.key?(ident) }] end }.to_h end end |
#bash ⇒ Object
FIXME build has been out-commented
78 |
# File 'lib/prick/environment.rb', line 78 def bash() = "build_#{name}" # FIXME build has been out-commented |
#bash_environment ⇒ Object
80 81 82 83 84 |
# File 'lib/prick/environment.rb', line 80 def bash_environment effective_variables.map { |ident, value| ["PRICK_ENVIRONMENT_#{ident.upcase}", value] }.to_h end |
#comment ⇒ Object
Environment comment
47 |
# File 'lib/prick/environment.rb', line 47 def comment = assignments[:comment] |
#dump ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/prick/environment.rb', line 88 def dump puts "#{name}:" indent { self.each { |ident,val| # if ident == :build # puts "super: #{super_environment&.name || 'false'}" # end assigner = assigners[ident]&.name || name assigner_str = (assigner != name ? " (#{assigner})" : "") if types[ident] == "TEXT" puts "#{ident}#{assigner_str}:" indent { puts val } else puts "#{ident}#{assigner_str}: #{val.inspect}" end if ident == :inherit puts "ancestors: #{ancestors.map(&:name).inspect}" end } } end |
#has_super? ⇒ Boolean
30 |
# File 'lib/prick/environment.rb', line 30 def has_super?() = !super_environment.nil? |
#inherit ⇒ Object
List of names of inherited environments
17 |
# File 'lib/prick/environment.rb', line 17 def inherit = assignments[:inherit] |
#inspect ⇒ Object
86 |
# File 'lib/prick/environment.rb', line 86 def inspect = "#<#{self.class} @name=#{@name}>" |
#super_bash ⇒ Object
FIXME same
79 |
# File 'lib/prick/environment.rb', line 79 def super_bash() = (has_super? ? "build_#{name}_super" : nil) # FIXME same |
#types ⇒ Object
Map from variable identifier (Symbol) to type. Type is one of the strings listed in Environments::TYPES
51 |
# File 'lib/prick/environment.rb', line 51 def types() = @environments.types |