Module: Pray::PackageSpecParser::ParserHelpers

Includes:
ManifestMethods::ParserHelpers
Included in:
BlockParser
Defined in:
lib/pray/package_spec.rb

Instance Method Summary collapse

Methods included from ManifestMethods::ParserHelpers

apply_target_statement, infer_source_kind, keyword_array, keyword_bool, keyword_string, package_constraint, package_exports, parse_call, parse_group_header, parse_keyword_segment, parse_local_decl, parse_package_decl, parse_render_policy, parse_source, parse_target_header, source_kind_and_url, string_from_literal, string_from_value

Instance Method Details

#array_of_strings(value) ⇒ Object



134
135
136
137
138
139
140
# File 'lib/pray/package_spec.rb', line 134

def array_of_strings(value)
  array = Literal.parse_literal(value)
  values = array.as_array
  raise Error.parse("prayspec", "expected array") unless values

  values.map { |entry| string_from_value(entry) }
end

#map_string(map, key) ⇒ Object



123
124
125
# File 'lib/pray/package_spec.rb', line 123

def map_string(map, key)
  map[key]&.as_string
end

#map_string_array(map, key) ⇒ Object



127
128
129
130
131
132
# File 'lib/pray/package_spec.rb', line 127

def map_string_array(map, key)
  values = map[key]&.as_array
  return [] unless values

  values.filter_map(&:as_string)
end

#parse_dependency(rest, optional) ⇒ Object



63
64
65
66
67
68
69
70
71
72
# File 'lib/pray/package_spec.rb', line 63

def parse_dependency(rest, optional)
  values, keywords = parse_call(rest)
  name = string_from_value(values.first)
  constraint = values[1] ? string_from_value(values[1]) : "*"
  PackageDependency.new(
    name: name,
    constraint: constraint,
    optional: keywords["optional"]&.as_bool || optional
  )
end

#parse_exports(value) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/pray/package_spec.rb', line 74

def parse_exports(value)
  map = Literal.parse_literal_map(value)
  exports = {}
  map.each do |name, literal|
    entry = literal.as_map
    raise Error.parse("prayspec", "export #{name} must be a map") unless entry

    exports[name] = PackageExport.new(
      kind: map_string(entry, "type") || "fragment",
      path: map_string(entry, "path") || raise(Error.parse("prayspec", "export #{name} missing path")),
      summary: map_string(entry, "summary"),
      only: map_string_array(entry, "only"),
      except: map_string_array(entry, "except"),
      default_path: map_string(entry, "default_path")
    )
  end
  exports
end

#parse_skills(value) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/pray/package_spec.rb', line 93

def parse_skills(value)
  map = Literal.parse_literal_map(value)
  map.transform_values do |literal|
    entry = literal.as_map
    raise Error.parse("prayspec", "skill must be a map") unless entry

    PackageSkill.new(
      path: map_string(entry, "path") || raise(Error.parse("prayspec", "skill missing path")),
      summary: map_string(entry, "summary")
    )
  end
end

#parse_string_map(value) ⇒ Object



119
120
121
# File 'lib/pray/package_spec.rb', line 119

def parse_string_map(value)
  Literal.parse_literal_map(value).transform_values { |literal| string_from_value(literal) }
end

#parse_templates(value) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/pray/package_spec.rb', line 106

def parse_templates(value)
  map = Literal.parse_literal_map(value)
  map.transform_values do |literal|
    entry = literal.as_map
    raise Error.parse("prayspec", "template must be a map") unless entry

    PackageTemplate.new(
      path: map_string(entry, "path") || raise(Error.parse("prayspec", "template missing path")),
      summary: map_string(entry, "summary")
    )
  end
end

#string_from_literal(value) ⇒ Object



149
150
151
# File 'lib/pray/package_spec.rb', line 149

def string_from_literal(value)
  string_from_value(Literal.parse_literal(value))
end

#string_from_value(value) ⇒ Object



142
143
144
145
146
147
# File 'lib/pray/package_spec.rb', line 142

def string_from_value(value)
  text = value.as_string
  raise Error.parse("prayspec", "expected string-like literal, found #{value.inspect}") unless text

  text
end