Changelog
All notable changes to this project will be documented in this file.
[0.17.0] - 2026-06-11
Added
- feat(authentication): expose gateway_login_path view helper
- feat(authentication): add login redirect authentication helper
[0.16.0] - 2026-06-11
Added
- feat(test-helpers): add anonymous gateway headers builder
- feat(authentication): add anonymous request helpers
Documentation
- docs(readme): document anonymous requests
Tests
- test(middleware): pin acceptance of anonymous signed requests
[0.15.0] - 2026-05-26
Added
- feat(omniauth): translate known error codes, drop raw-code display
- feat: omniauth error landing page for SSR tenants
CI
- ci(main): drop github.actor from BUNDLE_RUBYGEMS auth username
- ci(workflows): bump remaining ci-workflows pins from @v4 to @v5
- ci: bump ci-workflows to @v5 (multi-gem-capable reusables)
- ci: bump ci-workflows v2 → v3, drop namespace :doc Rakefile boilerplate
- ci: migrate dev/CI tools to fluence-ci-tools meta-gem
- ci: grant
packages: readon @v2 wrappers (fix startup_failure) - ci: bump remaining ci-workflows wrappers from @v1 to @v2
Documentation
- docs: locales live under lib/, not config/, in this gem
- docs: align Railtie / OmniauthController comments with actual behaviour
- docs(contributing): refresh CI section to match the real workflow set
Fixed
- fix(omniauth): constrain @error shape to block i18n hash leak
- fix(omniauth): prepend route so host wildcards cannot shadow it
- fix(omniauth): disable host application layout
- fix(omniauth): i18n + yardstick doc fixes
Other
- chore: migrate to ci-workflows v4 (FLUENCE_BOT naming)
[0.14.0] - 2026-04-28
Added
- feat(railtie): auto-whitelist fluence cable origins in development
CI
- ci: add workflow_dispatch to publish.yml for manual republish
- ci: bump release.yml to @v2 and forward RELEASE_APP_PRIVATE_KEY
- ci: pin reek/flog/flay versions to stabilize codequality deltas
- ci: add codequality workflow (reek + flog + flay, advisory)
- ci: pin yard/yardstick versions to stabilize docs deltas
- ci: forward FLUENCE_CI_BOT_PRIVATE_KEY to author sticky comments as App
- ci: drop FLUENCE_CI_BOT_PRIVATE_KEY forwarding (no longer needed)
- ci(release): document paths filter invariant (match client/mosaic)
- ci: skip SimpleCov on matrix runs (coverage produced by coverage-measure)
- ci: fix docs-pr startup + keep 4.0 in matrix for eager_load
- ci: add rubocop-measure.yml + rubocop-pr.yml, drop 4.0/latest from matrix
- ci: add coverage-measure.yml + coverage-pr.yml (symmetric with docs)
- ci: add docs-measure.yml for yardstick baseline on main push
- ci: forward FLUENCE_CI_BOT_PRIVATE_KEY to docs-pr + coverage-pr
Documentation
- docs: install via GitHub Packages source instead of git URL
Other
- chore: shorten step name (rubocop/coverage context already in matrix comment)
Refactored
- refactor(ci): migrate to centralized reusable workflows
[0.13.0] - 2026-04-23
Added
- feat(railtie): auto-whitelist fluence local dev hosts in development
[0.12.1] - 2026-04-23
Build
- build(deps): bump actions/upload-pages-artifact from 3 to 5
- build(deps): bump actions/deploy-pages from 4 to 5
Fixed
- fix(middleware): rewind request body before reading for HMAC digest
[0.12.0] - 2026-04-21
Added
- feat(test-helpers): add sign_in_as_service and gateway_service_headers (#64)
- feat(test-helpers): add sign_in_as_service and gateway_service_headers
CI
- ci(release): recognise squash-merged release commits and allow manual publish (#66)
- ci(release): recognise squash-merged release commits and allow manual publish
[0.11.0] - 2026-04-21
Added
- feat(authentication): add service-to-service authentication helpers
Documentation
- docs(authentication): list authenticate_
_or_service! in custom scope example - docs(contributing): update running tests, architecture, and CI sections
[0.10.1] - 2026-04-15
Added
- feat(doc): tag the public API surface with @api and enforce it via yardstick
- feat(doc): override YARD template to hide embedded source code
Build
- build(doc): regenerate Appraisal gemfiles with yard and yardstick
- build(doc): add yard and yardstick documentation coverage
CI
- ci(doc): group violations by file with linkable rows in PR comment
- ci(doc): render PR comment via a Ruby script matching coverage style
- ci(doc): add docs workflow with Pages deploy and PR report
Documentation
- docs(readme): align ActionCable section with scope-based concern
- docs: rewrite README from source
- docs: rewrite YARD comments across lib from source
Fixed
- fix(coverage): exclude version.rb from SimpleCov tracking
- fix(generator): scaffold first_name and last_name when creating the user table
- fix(ci): query workflow runs with status=completed and filter by conclusion
Refactored
- refactor(rakefile): guard doc tasks against missing yard, yardstick or config
Tests
- test(coverage): load gem via hyphenated entrypoint so SimpleCov measures it
[0.10.0] - 2026-04-14
Fixed
- fix(railtie): fix eager loading + derive scope in GatewayConnection
[0.9.0] - 2026-04-10
Fixed
- fix(actioncable): correct docs examples and add missing spec
- fix(actioncable): add missing requires, on_missing_user provisioning, and clean up specs
Refactored
- refactor(actioncable): replace instance authenticate_connection! with class-level declarative
- refactor(actioncable): do not force auth by default, add authenticate_connection!
Style
- style: fix NilLambda rubocop offense
Tests
- test(actioncable): cover on_missing_user edge cases
[0.8.0] - 2026-04-10
Added
- feat(actioncable): add GatewayConnection concern for WebSocket auth
[0.7.0] - 2026-04-10
Added
- feat(authentication): expose first_name and last_name from gateway headers
[0.6.1] - 2026-04-09
Fixed
- fix(middleware): include query string in HMAC signature
Refactored
- refactor(middleware): return explicit rejection codes in dev/test
[0.6.0] - 2026-04-09
Added
- feat(test): add TestHelpers module for application specs
[0.5.0] - 2026-04-08
Added
- feat(authentication): add on_missing_user provisioning hook
- feat(generators): create model file when missing
- feat(generators): auto-detect create_table vs add_column migration
- feat(generators)!: add gateway_subject column instead of creating users table
- feat(railtie): validate subject_column at boot
- feat(authentication)!: look up user by configured subject_column
- feat(config): add subject_column setting
- feat(errors): add InvalidSubjectColumn
Documentation
- docs: rewrite README from scratch
- docs: revert manual changelog/upgrade entries
- docs: document subject_column and 0.5.0 upgrade path
Fixed
- fix(generators): handle namespaced models in table_name
Refactored
- refactor(generators): inherit from NamedBase
- refactor(railtie): drop subject_column boot validation
- refactor(generators): use native active_record:migration
- refactor(generators): align with Devise pattern (file-based detection)
- refactor(generators): use Thor skip option instead of File.exist?
Tests
- test(coverage): exclude generator templates from simplecov
- test(dummy): add gateway_subject column to accounts
[0.4.1] - 2026-04-08
Added
- feat(authentication): expose gateway_logout_path helper
[0.4.0] - 2026-04-08
Added
- feat!: derive auth helpers from configured user_model
- feat(config): add scope_name derived from user_model
Build
- build(deps): bump actions/create-github-app-token from 2 to 3
CI
- ci(rubocop): exclude Appraisal-generated gemfiles from linting
- ci: add Rails version matrix via Appraisal
- ci(coverage): grant actions:read so cross-run artifact lookup works
- ci(coverage): show before/after diff vs base in PR comment
- ci(coverage): surface undercover-flagged blocks in PR comment
- ci(coverage): pass undercover-formatted coverage.json to undercover
- ci(release): create release PR via GitHub App token
- ci(coverage): point undercover at simplecov resultset
Documentation
- docs(generator): document scope_name in initializer template
- docs(readme): document derived auth helpers and migration
Fixed
- fix(integration): constrain SQLite in-memory pool to a single connection
- fix(integration): address review feedback on dummy app
- fix(config): reject whitespace-only user_model values
- fix(config): validate derived scope_name to fail fast on invalid identifiers
- fix(config): validate user_model to fail fast on nil or blank
- fix(railtie): defer controller include until after initializers
- fix(coverage): close coverage.json file handle via block form
- fix(coverage): make parse_resultset defensive against malformed input
Other
- chore(gitignore): ignore .DS_Store
Refactored
- refactor!: introduce custom error hierarchy
Tests
- test(integration): add Rails dummy app for railtie + ActiveRecord coverage
[0.3.1] - 2026-04-03
Build
- build(deps): bump actions/upload-artifact from 4 to 7
- build(deps): bump actions/download-artifact from 4 to 8
CI
- ci: unify release system with Fluence gems
Fixed
- fix(rubocop): restore default excludes and fix generator offense
- fix(rubocop): exclude gemspec from BlockLength check
Other
- chore: add MIT LICENSE file
- chore(gemspec): add license, metadata URIs and clean up gitignore
Tests
- test(gateway_authentication): add specs for controller concern
[0.3.0] - 2026-04-03
Build
- build(ci): add SimpleCov + undercover coverage with PR reporting
Refactored
- refactor(generators): split install into initializer + AR migration
[0.2.1] - 2026-03-18
Added
- feat: add gateway_client_id, service_request? helpers and remove Gemfile.lock
[0.2.0] - 2026-03-18
Added
- feat: add client_id to HMAC payload and require X-Client-Id header
[0.1.1] - 2026-03-18
Added
- feat: auto-register HMAC middleware via Railtie
- feat: add Railtie for automatic controller concern inclusion
- feat: add authenticate_user! method for before_action protection
- feat: add configuration, controller concern, and install generator
- feat: HMAC authentication middleware for Fluence Gateway
CI
- ci: add release pipeline with changelog and GitHub Packages publish
Documentation
- docs: add CONTRIBUTING.md
- docs: update README with installation and usage guide
- docs: add YARD documentation and hyphenated require path
Other
- chore: remove unused Error class
- chore: simplify migration template to email only
- chore: add rubocop config and fix style offenses
- chore: remove .idea from tracking and add to gitignore
Refactored
- refactor: move ENV fallback for hmac_secret into Configuration