Class: Ibex::Configuration::Value

Inherits:
Object
  • Object
show all
Defined in:
lib/ibex/configuration.rb,
sig/ibex/configuration.rbs

Overview

A typed effective value plus the evidence needed to explain it.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key, value, origin:, explicit:, canonical:, declared_value: DECLARED_VALUE_UNSET) ⇒ Value

Returns a new instance of Value.

RBS:

  • (Key key, config_value value, origin: Origin, explicit: bool, canonical: bool, ?declared_value: config_value | Object) -> void

Parameters:

  • key (Key)
  • value (config_value)
  • origin: (Origin)
  • explicit: (Boolean)
  • canonical: (Boolean)
  • declared_value: (config_value, Object) (defaults to: DECLARED_VALUE_UNSET)


169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# File 'lib/ibex/configuration.rb', line 169

def initialize(key, value, origin:, explicit:, canonical:, declared_value: DECLARED_VALUE_UNSET)
  raise ArgumentError, "configuration value key must be a Configuration::Key" unless key.is_a?(Key)
  raise ArgumentError, "configuration value origin must be a Configuration::Origin" unless origin.is_a?(Origin)
  raise ArgumentError, "explicit must be boolean" unless BOOLEAN_VALUES.include?(explicit)
  raise ArgumentError, "canonical must be boolean" unless BOOLEAN_VALUES.include?(canonical)

  validate_provenance!(key, origin, explicit, canonical, declared_value)

  @key = key
  @value = key.validate(value)
  @origin = origin
  @explicit = explicit
  @canonical = canonical
  declared = declared_value #: config_value
  @declared_value = declared.equal?(DECLARED_VALUE_UNSET) ? nil : key.validate(declared)

  freeze
end

Instance Attribute Details

#canonicalBoolean (readonly)

Signature:

  • bool

Returns:

  • (Boolean)


164
165
166
# File 'lib/ibex/configuration.rb', line 164

def canonical
  @canonical
end

#declared_valueconfig_value (readonly)

Signature:

  • config_value

Returns:

  • (config_value)


165
166
167
# File 'lib/ibex/configuration.rb', line 165

def declared_value
  @declared_value
end

#explicitBoolean (readonly)

Signature:

  • bool

Returns:

  • (Boolean)


163
164
165
# File 'lib/ibex/configuration.rb', line 163

def explicit
  @explicit
end

#keyKey (readonly)

Signature:

  • Key

Returns:



160
161
162
# File 'lib/ibex/configuration.rb', line 160

def key
  @key
end

#originOrigin (readonly)

Signature:

  • Origin

Returns:



162
163
164
# File 'lib/ibex/configuration.rb', line 162

def origin
  @origin
end

#valueconfig_value (readonly)

Signature:

  • config_value

Returns:

  • (config_value)


161
162
163
# File 'lib/ibex/configuration.rb', line 161

def value
  @value
end

Instance Method Details

#json_value(value) ⇒ String, ...

RBS:

  • (config_value value) -> (String | Integer | bool | nil)

Parameters:

  • value (config_value)

Returns:

  • (String, Integer, bool, nil)


257
258
259
# File 'lib/ibex/configuration.rb', line 257

def json_value(value)
  value.is_a?(Symbol) ? value.to_s : value
end

#to_hHash[String, json_value]

RBS:

  • () -> Hash[String, json_value]

Returns:



189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
# File 'lib/ibex/configuration.rb', line 189

def to_h
  result = {
    "key" => @key.name,
    "value" => json_value(@value),
    "owner" => @key.owner_name,
    "policy" => @key.policy.to_s,
    "origin" => @origin.to_h,
    "explicit" => @explicit,
    "canonical" => @canonical
  } #: Hash[String, json_value]
  unless @canonical
    result["analysis"] = {
      "declared" => json_value(@declared_value),
      "selected" => json_value(@value),
      "override" => true,
      "canonical_generation" => false
    }
  end
  result
end

#validate_canonical_origin!(key, origin, canonical) ⇒ void

This method returns an undefined value.

RBS:

  • (Key key, Origin origin, bool canonical) -> void

Parameters:

  • key (Key)
  • origin (Origin)
  • canonical (Boolean)


221
222
223
224
225
226
227
228
229
# File 'lib/ibex/configuration.rb', line 221

def validate_canonical_origin!(key, origin, canonical)
  analysis_override = origin.kind == :analysis_override
  unless analysis_override == !canonical
    raise ArgumentError, "analysis_override origin must identify a noncanonical selection"
  end
  return if canonical || key.policy == :fixed

  raise ArgumentError, "noncanonical selections are only valid for fixed configuration"
end

#validate_declared_evidence!(canonical, declared_value) ⇒ void

This method returns an undefined value.

RBS:

  • (bool canonical, config_value | Object declared_value) -> void

Parameters:

  • canonical (Boolean)
  • declared_value (config_value, Object)


248
249
250
251
252
253
254
# File 'lib/ibex/configuration.rb', line 248

def validate_declared_evidence!(canonical, declared_value)
  declared = !declared_value.equal?(DECLARED_VALUE_UNSET)
  raise ArgumentError, "canonical selections cannot carry declared evidence" if canonical && declared
  return if canonical || declared

  raise ArgumentError, "noncanonical selections require declared evidence"
end

#validate_explicitness!(origin, explicit) ⇒ void

This method returns an undefined value.

RBS:

  • (Origin origin, bool explicit) -> void

Parameters:

  • origin (Origin)
  • explicit (Boolean)


242
243
244
245
# File 'lib/ibex/configuration.rb', line 242

def validate_explicitness!(origin, explicit)
  raise ArgumentError, "builtin configuration cannot be explicit" if origin.kind == :builtin && explicit
  raise ArgumentError, "non-builtin configuration must be explicit" if origin.kind != :builtin && !explicit
end

#validate_owner_source!(key, origin) ⇒ void

This method returns an undefined value.

RBS:

  • (Key key, Origin origin) -> void

Parameters:



232
233
234
235
236
237
238
239
# File 'lib/ibex/configuration.rb', line 232

def validate_owner_source!(key, origin)
  if origin.kind == :grammar && !%i[fixed minimum].include?(key.policy)
    raise ArgumentError, "#{key.name} is #{key.policy} configuration and cannot be grammar-owned"
  end
  return unless origin.kind == :project && key.policy == :invocation

  raise ArgumentError, "#{key.name} is invocation configuration and cannot be project-owned"
end

#validate_provenance!(key, origin, explicit, canonical, declared_value) ⇒ void

This method returns an undefined value.

RBS:

  • (Key key, Origin origin, bool explicit, bool canonical, config_value | Object declared_value) -> void

Parameters:

  • key (Key)
  • origin (Origin)
  • explicit (Boolean)
  • canonical (Boolean)
  • declared_value (config_value, Object)


213
214
215
216
217
218
# File 'lib/ibex/configuration.rb', line 213

def validate_provenance!(key, origin, explicit, canonical, declared_value)
  validate_canonical_origin!(key, origin, canonical)
  validate_owner_source!(key, origin)
  validate_explicitness!(origin, explicit)
  validate_declared_evidence!(canonical, declared_value)
end