Skip to content

Releases: guess/flop_rest

v0.6.1

Choose a tag to compare

@guess guess released this 11 Feb 20:43

Changed

  • List operators with a single value (no commas) now pass through as a string instead of a single-element list. This allows Flop to apply its own parsing, such as whitespace splitting for like_and/like_or/ilike_and/ilike_or.

Full Changelog: v0.6.0...v0.6.1

v0.6.0

Choose a tag to compare

@guess guess released this 11 Feb 19:42

Added

  • Comma-separated value parsing for list operators (in, not_in, like_and, like_or, ilike_and, ilike_or). For example, status[in]=draft,published is now equivalent to status[in][]=draft&status[in][]=published. The bracket [] syntax still works and serves as an escape hatch for values that contain commas.
  • Operator reference table with SQL examples in FlopRest.Operators moduledoc.

Full Changelog: v0.5.0...v0.6.0

v0.5.0

Choose a tag to compare

@guess guess released this 05 Feb 15:10

Changed

  • Breaking: Renamed cursor pagination params starting_afterafter and ending_beforebefore for brevity.

v0.4.0

Choose a tag to compare

@guess guess released this 04 Feb 18:37

Added

  • FlopRest.normalize/2 with :for option for schema-aware filtering. When a schema is provided, only fields in the schema's filterable list become filters. Non-filterable params are kept in the result at the root level for custom handling.
  • FlopRest.Filters.extract/2 accepts a MapSet of filterable field names and returns a {filters, extra_params} tuple.

v0.3.0

Choose a tag to compare

@guess guess released this 04 Feb 16:43

Changed

  • Breaking: to_query/1,2 now returns a map with string keys instead of a keyword list. This is more consistent since operator keys like "amount[gte]" don't map cleanly to atoms.

v0.2.0

Choose a tag to compare

@guess guess released this 04 Feb 16:43

Added

  • FlopRest.to_query/1,2 to convert Flop structs back to REST-style query params
  • FlopRest.build_path/2,3 to build URL paths with REST-style query strings (merges with existing query params)
  • FlopRest.Operators.to_rest/1 for reverse operator mapping (Flop → REST)
  • FlopRest.Pagination.to_rest/1 for reverse pagination transformation
  • FlopRest.Sorting.to_rest/1 for reverse sorting transformation
  • FlopRest.Filters.to_rest/1 for reverse filter transformation
  • Accepts both Flop.t() and Flop.Meta.t() structs

Changed

  • Added flop and plug as runtime dependencies
  • limit alone now defaults to cursor-based pagination (first) instead of offset-based. This ensures Flop returns cursor metadata for use with starting_after/ending_before. To use offset-based pagination, include offset (e.g., offset=0&limit=25).

v0.1.1

Choose a tag to compare

@guess guess released this 04 Feb 16:43

Added

  • Initial release of FlopRest
  • FlopRest.normalize/1 to transform REST-style query params to Flop format
  • Filter transformation with support for:
    • Bare values as equality filters (status=published)
    • Nested operator syntax (amount[gte]=100)
    • All Flop operators: eq, ne, lt, lte, gt, gte, in, not_in, contains, not_contains, like, not_like, like_and, like_or, ilike, not_ilike, ilike_and, ilike_or, empty, not_empty, search
    • Unknown operators passed through for Flop validation
  • Sorting transformation:
    • Comma-separated fields (sort=name,-created_at)
    • - prefix for descending order
    • + or no prefix for ascending order
  • Pagination support for all three Flop pagination types:
    • Cursor-based (Stripe-style): limit, starting_after, ending_before
    • Page-based: page, page_size
    • Offset-based: offset, limit