Skip to content

Commit

Permalink
feat: add support for global URI variables
Browse files Browse the repository at this point in the history
  • Loading branch information
JKRhb committed Mar 21, 2022
1 parent 49c9ce0 commit b3cf61b
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 2 deletions.
9 changes: 7 additions & 2 deletions lib/src/core/consumed_thing.dart
Original file line number Diff line number Diff line change
Expand Up @@ -266,15 +266,20 @@ class ConsumedThing implements scripting_api.ConsumedThing {
Form form, InteractionOptions? options) {
final hrefUriVariables = _filterUriVariables(form.href);
final optionUriVariables = options?.uriVariables;
final affordanceUriVariables = interactionAffordance.uriVariables;

// Use global URI variables by default and override them with
// affordance-level variables, if any
final Map<String, Object?> affordanceUriVariables = {}
..addAll(thingDescription.uriVariables ?? {})
..addAll(interactionAffordance.uriVariables ?? {});

if (hrefUriVariables.isEmpty) {
// The href uses no uriVariables, therefore we can abort all further
// checks.
return form.href;
}

if (affordanceUriVariables == null) {
if (affordanceUriVariables.isEmpty) {
throw UriVariableException("The Form href ${form.href} contains URI "
"variables but the TD does not provide a uriVariables definition.");
}
Expand Down
9 changes: 9 additions & 0 deletions lib/src/definitions/thing_description.dart
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,11 @@ class ThingDescription {
/// A map of [SecurityScheme]s that can be used for secure communication.
final Map<String, SecurityScheme> securityDefinitions = {};

/// URI template variables as defined in [RFC 6570].
///
/// [RFC 6570]: http://tools.ietf.org/html/rfc6570
Map<String, Object?>? uriVariables;

/// Creates a [ThingDescription] from a [rawThingDescription] JSON [String].
ThingDescription(this.rawThingDescription) {
parseThingDescription(rawThingDescription!);
Expand Down Expand Up @@ -133,6 +138,10 @@ class ThingDescription {
if (links is List<dynamic>) {
_parseLinks(links);
}
final dynamic jsonUriVariables = json["uriVariables"];
if (jsonUriVariables is Map<String, dynamic>) {
uriVariables = jsonUriVariables;
}
}

// TODO(JKRhb): Refactor
Expand Down

0 comments on commit b3cf61b

Please sign in to comment.