fluri 1.2.5

  • Readme
  • Changelog
  • Installing
  • 84

fluri #

Pub Build Status codecov.io documentation

Examples/Usage #

Fluri is a fluent URI library for Dart built to make URI mutation easy.

The dart:core.Uri class provides an immutable representation of URIs, which makes it difficult to incrementally build them or update them at a later time. If you wanted to build a long URI from the individual pieces, you would do something like this:

Uri uri = new Uri(
  scheme: 'https',
  host: 'example.com',
  path: 'path/to/resource'

If you later wanted to update the path and add a query parameter, you'd have to do this:

uri = uri.replace(
  path: 'new/path',
  query: 'foo=true'

Now let's say you want update the query without losing what you already have:

Map query = new Map.from(uri.queryParameters);
query['bar'] = '10';
uri = uri.replace(queryParameters: query);

As you can see, incremental or fluent-style URI mutations become a hassle with the core Uri class.

With fluri, the above interactions are easy:

import 'package:fluri/fluri.dart';

Fluri fluri = new Fluri()
  ..scheme = 'https'
  ..host = 'example.com'
  ..path = 'path/to/resource';

  ..path = 'new/path'
  ..query = 'foo=true';

fluri.updateQuery({'bar': '10'});

Additional methods like appendToPath and setQueryParam make it easy to build on top of a base URL:

import 'package:fluri/fluri.dart';

Fluri base = new Fluri('https://example.com/base/');

Fluri fluri = new Fluri.from(base)
  ..setQueryParam('count', '10');

Fluri also supports multi-value parameters. To access the query parameters as Map<String, List<String>>, use queryParametersAll (just like the Uri class):

var fluri = new Fluri('/resource?format=json&format=text');
print(fluri.queryParameters); // {'format': 'text'}
print(fluri.queryParametersAll); // {'format': ['json', 'text']}

To set a single query parameter to multiple values:

var fluri = new Fluri('/resource');
fluri.setQueryParam('format', ['json', 'text']);
print(fluri.queryParametersAll); // {'format': ['json', 'text']}

Using setQueryParam will always replace existing values:

var fluri = new Fluri('/resource');
fluri.setQueryParam('format', ['json', 'text']);
fluri.setQueryParam('format', ['binary', 'text']);
print(fluri.queryParametersAll); // {'format': ['binary', 'text']}

You can use the queryParametersAll setter to set the entire query with multi-value param support:

var fluri = new Fluri('/resource');
fluri.queryParametersAll = {'format': ['json', 'text'], 'count': ['5']}
print(fluri.queryParametersAll); // {'format': ['json', 'text'], 'count': ['5']}

Again, if you need to preserve existing query parameters, you can use the updateQuery method to do so. Set mergeValues: true and any values that you provide will be merged with existing values:

var fluri = new Fluri('/resource?format=json');
fluri.updateQuery({'format': ['binary', 'text'], 'count': '5'}, mergeValues: true);
print(fluri.queryParametersAll); // {'format': ['binary', 'json', 'text'], 'count': ['5']}

Dart SDK #

As of version 1.2.0 of the fluri package, the minimum required Dart SDK version is 1.15.0.

Versioning and Stability #

This library follows semver to the best of our interpretation of it. We want this library to be a stable dependency that’s easy to keep current. A good explanation of the versioning scheme that we intend to follow can be seen here from React.js:


In short: our goal is for every major release to be backwards compatible with the previous major version, giving consumers a lifespan of two major versions to deal with deprecations.

Changelog #

1.2.5 #

  • Improvement: Dart 2 compatible! CI now runs on Dart 2 stable and Dart 1.

1.2.4 #

  • Improvement: Initial Dart 2 and DDC compatibility changes.

  • Documentation: Add a CODEOWNERS file.

1.2.3 #

  • Tech Debt: Update some dependency ranges for DDC compatibility.

1.2.2 #

  • Tech Debt: Add and address lints.

1.2.1 #

  • Bug Fix: Calling .appendToPath() will check for and prevent double slashes when joining the current path with the additional path.

  • Documentation: Add GitHub Issue and Pull Request templates.

1.2.0 #

  • Feature: Support for multi-value parameters.

    See the [readme][https://github.com/Workiva/fluri/blob/master/README.md] for usage examples.

  • Dart SDK: In order to support multi-value parameters, the minimum required Dart SDK version is now 1.15.0 since that is when the queryParametersAll field was added to the Uri class.

1.1.1 #

  • Bug Fix: FluriMixin now defaults to an empty URI when uri is set to null.

1.1.0 #

New Features:

  • appendToPath(path) - append a path literal to the current path.
  • addPathSegment(segment) - add a single path segment to the current path.
  • setQueryParam(param, value) - set a single query parameter.
  • Fluri.from(other) - construct a Fluri instance from another.
  • Fluri.fromUri(uri) - construct a Fluri instance from a Uri instance.

1.0.1 #

No source changes in this release.

  • Add code coverage reporting.
  • Minor fixes and improvements to the readme.
  • Code formatting improvements thanks to dartfmt.

1.0.0 #

  • Initial version of Fluri: a fluent URI library for Dart built to make URI mutation easy.

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:

  fluri: ^1.2.5

2. Install it

You can install packages from the command line:

with pub:

$ pub get

with Flutter:

$ flutter pub get

Alternatively, your editor might support pub get or flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:

import 'package:fluri/fluri.dart';
Describes how popular the package is relative to other packages. [more]
Code health derived from static analysis. [more]
Reflects how tidy and up-to-date the package is. [more]
Weighted score of the above. [more]
Learn more about scoring.

We analyzed this package on Oct 17, 2019, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.5.1
  • pana: 0.12.21


Detected platforms: Flutter, web, other

No platform restriction found in primary library package:fluri/fluri.dart.

Health suggestions

Fix lib/fluri.dart. (-0.50 points)

Analysis of lib/fluri.dart reported 1 hint:

line 245 col 24: Use = to separate a named parameter from its default value.

Maintenance suggestions

Maintain an example. (-10 points)

Create a short demo in the example/ directory to show how to use this package.

Common filename patterns include main.dart, example.dart, and fluri.dart. Packages with multiple examples should provide example/README.md.

For more information see the pub package layout conventions.

Package is getting outdated. (-7.67 points)

The package was last published 56 weeks ago.

Update README.md. (-2 points)

1 image link is insecure (e.g. http://codecov.io/github/Workiva/fluri/coverage.svg?branch=master), use https URLs instead.


Package Constraint Resolved Available
Direct dependencies
Dart SDK >=1.23.0 <3.0.0
Dev dependencies
dependency_validator ^1.1.2
test >=0.12.23+1 <2.0.0