Class: Fig::ParserPackageBuildState

Inherits:
Object
  • Object
show all
Defined in:
lib/fig/parser_package_build_state.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(descriptor, source_description) ⇒ ParserPackageBuildState

Returns a new instance of ParserPackageBuildState.



21
22
23
24
# File 'lib/fig/parser_package_build_state.rb', line 21

def initialize(descriptor, source_description)
  @descriptor         = descriptor
  @source_description = source_description
end

Instance Attribute Details

#descriptorObject (readonly)

Returns the value of attribute descriptor.



18
19
20
# File 'lib/fig/parser_package_build_state.rb', line 18

def descriptor
  @descriptor
end

#source_descriptionObject (readonly)

Returns the value of attribute source_description.



19
20
21
# File 'lib/fig/parser_package_build_state.rb', line 19

def source_description
  @source_description
end

Instance Method Details

#new_asset_statement(statement_class, keyword_node, url_node) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/fig/parser_package_build_state.rb', line 82

def new_asset_statement(statement_class, keyword_node, url_node)
  url = url_node.text_value

  need_to_glob = statement_class.validate_and_process_escapes_in_url!(url) {
    |error_description|

    raise_invalid_value_parse_error(
      keyword_node, url_node, 'URL/path', error_description
    )
  }

  return statement_class.new(
    node_location(keyword_node), source_description, url, need_to_glob
  )
end

#new_command_statement(keyword_node, command_node) ⇒ Object



176
177
178
179
180
181
182
# File 'lib/fig/parser_package_build_state.rb', line 176

def new_command_statement(keyword_node, command_node)
  return Fig::Statement::Command.new(
    node_location(keyword_node),
    source_description,
    command_node.value.text_value
  )
end

#new_configuration_statement(keyword_node, name_node, statements) ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/fig/parser_package_build_state.rb', line 107

def new_configuration_statement(keyword_node, name_node, statements)
  if Fig::Parser.strict_keyword? name_node.text_value
    raise_invalid_value_parse_error(
      keyword_node, name_node, 'name', 'is a keyword.'
    )
  end

  statement_objects = statements.elements.map do
    |statement|

    statement.to_config_statement(self)
  end

  return Fig::Statement::Configuration.new(
    node_location(keyword_node),
    source_description,
    name_node.text_value,
    statement_objects
  )
end

#new_environment_variable_statement(statement_class, keyword_node, value_node) ⇒ Object



160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/fig/parser_package_build_state.rb', line 160

def new_environment_variable_statement(
  statement_class, keyword_node, value_node
)
  name, value = statement_class.parse_name_value(value_node.text_value) {
    raise_invalid_value_parse_error(
      keyword_node,
      value_node,
      'value',
      statement_class.const_get(:ARGUMENT_DESCRIPTION)
    )
  }
  return statement_class.new(
    node_location(keyword_node), source_description, name, value
  )
end

#new_grammar_version_statement(keyword_node, version_node) ⇒ Object



74
75
76
77
78
79
80
# File 'lib/fig/parser_package_build_state.rb', line 74

def new_grammar_version_statement(keyword_node, version_node)
  return Fig::Statement::GrammarVersion.new(
    node_location(keyword_node),
    source_description,
    version_node.text_value.to_i
  )
end

#new_include_statement(keyword_node, descriptor_node) ⇒ Object



128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/fig/parser_package_build_state.rb', line 128

def new_include_statement(keyword_node, descriptor_node)
  include_descriptor =
    Fig::Statement::Include.parse_descriptor(
      descriptor_node.text_value.strip,
      :source_description => node_location_description(descriptor_node),
      :validation_context => ' for an include statement'
    )

  return Fig::Statement::Include.new(
    node_location(keyword_node),
    source_description,
    include_descriptor,
    descriptor
  )
end

#new_override_statement(keyword_node, descriptor_node) ⇒ Object



144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'lib/fig/parser_package_build_state.rb', line 144

def new_override_statement(keyword_node, descriptor_node)
  override_descriptor =
    Fig::Statement::Override.parse_descriptor(
      descriptor_node.text_value.strip,
      :source_description => node_location_description(descriptor_node),
      :validation_context => ' for an override statement'
    )

  return Fig::Statement::Override.new(
    node_location(keyword_node),
    source_description,
    override_descriptor.name,
    override_descriptor.version
  )
end

#new_package_statement(directory, grammar_node, statement_nodes) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/fig/parser_package_build_state.rb', line 47

def new_package_statement(directory, grammar_node, statement_nodes)
  grammar_statement = nil
  if grammar_node && ! grammar_node.empty?
    grammar_statement = grammar_node.to_package_statement(self)
  else
    grammar_statement = Fig::Statement::GrammarVersion.new(
      nil,
      %Q<[synthetic statement created in #{__FILE__} line #{__LINE__}]>,
      0 # Grammar version
    )
  end
  statement_objects = [grammar_statement]

  statement_nodes.elements.each do
    |node|

    statement_objects << node.to_package_statement(self)
  end

  return Fig::Package.new(
    descriptor.name,
    descriptor.version,
    directory,
    statement_objects
  )
end

#new_retrieve_statement(keyword_node, variable_name_node, path_node) ⇒ Object



98
99
100
101
102
103
104
105
# File 'lib/fig/parser_package_build_state.rb', line 98

def new_retrieve_statement(keyword_node, variable_name_node, path_node)
  return Fig::Statement::Retrieve.new(
    node_location(keyword_node),
    source_description,
    variable_name_node.text_value,
    path_node.text_value
  )
end

#node_location(node) ⇒ Object



26
27
28
29
30
31
32
33
34
# File 'lib/fig/parser_package_build_state.rb', line 26

def node_location(node)
  offset_from_start_of_file = node.interval.first
  input = node.input

  return [
    input.line_of(offset_from_start_of_file),
    input.column_of(offset_from_start_of_file)
  ]
end

#node_location_description(node) ⇒ Object

This method is necessary due to ruby v1.8 not allowing array splat notation, i.e. Fig::Statement.position_description(*node_location(node), source_description)



39
40
41
42
43
44
45
# File 'lib/fig/parser_package_build_state.rb', line 39

def node_location_description(node)
  location = node_location(node)

  return Fig::Statement.position_description(
    location[0], location[1], source_description
  )
end

#raise_invalid_value_parse_error(keyword_node, value_node, value_name, description) ⇒ Object



184
185
186
187
188
189
190
# File 'lib/fig/parser_package_build_state.rb', line 184

def raise_invalid_value_parse_error(
  keyword_node, value_node, value_name, description
)
  raise Fig::PackageParseError.new(
    %Q<Invalid #{value_name} for #{keyword_node.text_value} statement: "#{value_node.text_value}" #{description}#{node_location_description(value_node)}>
  )
end