mirror of
https://github.com/we-promise/sure.git
synced 2026-04-07 22:34:47 +00:00
* - Add support for `SIMPLEFIN_INCLUDE_PENDING` to control pending behavior via ENV. - Enhance debug logging for SimpleFin API requests and raw payloads. - Refine pending flag handling in `SimplefinEntry::Processor` based on provider data and inferred conditions. - Improve FX metadata processing for transactions with currency mismatches. - Add new tests for pending detection, FX metadata, and edge cases involving `posted` values. - Add pending indicator UI to transaction view. * Document pending transaction detection, storage, and UI behavior for SimpleFIN and Plaid integrations. Add debug flags for troubleshooting. * Add `pending?` method to `Transaction` model, refactor UI indicator, and centralize SimpleFIN configuration - Introduced `pending?` method in `Transaction` for unified pending state detection. - Refactored transaction pending indicator in the UI to use `pending?` method. - Centralized SimpleFIN configuration in initializer with ENV-backed toggles. - Updated tests for `pending?` behavior and clarified docs for pending detection logic * Add SimpleFIN debug and runtime flags to `.env.local.example` and `.env.test.example` - Introduced `SIMPLEFIN_INCLUDE_PENDING` and `SIMPLEFIN_DEBUG_RAW` flags for controlling pending behavior and debugging. - Updated example environment files with descriptions for new configuration options. * Normalize formatting for `SIMPLEFIN_INCLUDE_PENDING` and `SIMPLEFIN_DEBUG_RAW` flags in `.env.local.example` and `.env.test.example`. --------- Co-authored-by: Josh Waldrep <joshua.waldrep5+github@gmail.com>
3.9 KiB
3.9 KiB
Repository Guidelines
Project Structure & Module Organization
- Code:
app/(Rails MVC, services, jobs, mailers, components), JS inapp/javascript/, styles/assets inapp/assets/(Tailwind, images, fonts). - Config:
config/, environment examples in.env.local.exampleand.env.test.example. - Data:
db/(migrations, seeds), fixtures intest/fixtures/. - Tests:
test/mirroringapp/(e.g.,test/models/*_test.rb). - Tooling:
bin/(project scripts),docs/(guides),public/(static),lib/(shared libs).
Build, Test, and Development Commands
- Setup:
cp .env.local.example .env.local && bin/setup— install deps, set DB, prepare app. - Run app:
bin/dev— starts Rails server and asset/watchers viaProcfile.dev. - Test suite:
bin/rails test— run all Minitest tests; addTEST=test/models/user_test.rbto target a file. - Lint Ruby:
bin/rubocop— style checks; add-Ato auto-correct safe cops. - Lint/format JS/CSS:
npm run lintandnpm run format— uses Biome. - Security scan:
bin/brakeman— static analysis for common Rails issues.
Coding Style & Naming Conventions
- Ruby: 2-space indent,
snake_casefor methods/vars,CamelCasefor classes/modules. Follow Rails conventions for folders and file names. - Views: ERB checked by
erb-lint(see.erb_lint.yml). Avoid heavy logic in views; prefer helpers/components. - JavaScript:
lowerCamelCasefor vars/functions,PascalCasefor classes/components. Let Biome format code. - Commit small, cohesive changes; keep diffs focused.
Testing Guidelines
- Framework: Minitest (Rails). Name files
*_test.rband mirrorapp/structure. - Run:
bin/rails testlocally and ensure green before pushing. - Fixtures/VCR: Use
test/fixturesand existing VCR cassettes for HTTP. Prefer unit tests plus focused integration tests.
Commit & Pull Request Guidelines
- Commits: Imperative subject ≤ 72 chars (e.g., "Add account balance validation"). Include rationale in body and reference issues (
#123). - PRs: Clear description, linked issues, screenshots for UI changes, and migration notes if applicable. Ensure CI passes, tests added/updated, and
rubocop/Biome are clean.
Security & Configuration Tips
- Never commit secrets. Start from
.env.local.example; use.env.localfor development only. - Run
bin/brakemanbefore major PRs. Prefer environment variables over hard-coded values.
Providers: Pending Transactions and FX Metadata (SimpleFIN/Plaid)
- Pending detection
- SimpleFIN: pending when provider sends
pending: true, or whenpostedis blank/0 andtransacted_atis present. - Plaid: pending when Plaid sends
pending: true(stored attransaction.extra["plaid"]["pending"]for bank/credit transactions imported viaPlaidEntry::Processor).
- SimpleFIN: pending when provider sends
- Storage (extras)
- Provider metadata lives on
Transaction#extra, namespaced (e.g.,extra["simplefin"]["pending"]). - SimpleFIN FX:
extra["simplefin"]["fx_from"],extra["simplefin"]["fx_date"].
- Provider metadata lives on
- UI
- Shows a small “Pending” badge when
transaction.pending?is true.
- Shows a small “Pending” badge when
- Variability
- Some providers don’t expose pendings; in that case nothing is shown.
- Configuration (default-off)
- SimpleFIN runtime toggles live in
config/initializers/simplefin.rbviaRails.configuration.x.simplefin.*. - ENV-backed keys:
SIMPLEFIN_INCLUDE_PENDING=1(forcespending=1on SimpleFIN fetches when caller didn’t specify apending:arg)SIMPLEFIN_DEBUG_RAW=1(logs raw payload returned by SimpleFIN)
- SimpleFIN runtime toggles live in
Provider support notes
- SimpleFIN: supports pending + FX metadata; stored under
extra["simplefin"]. - Plaid: supports pending when the upstream Plaid payload includes
pending: true; stored underextra["plaid"]. - Plaid investments: investment transactions currently do not store pending metadata.
- Lunchflow: does not currently store pending metadata.
- Manual/CSV imports: no pending concept.