This is a Ruby on Rails application that helps users with benefits applications. The application uses:
- Ruby on Rails 8
- PostgreSQL database
- Bootstrap 5.3 for UI styling
- Hotwire (Turbo and Stimulus) for frontend interactivity
- RSpec for testing
| import { Controller } from "@hotwired/stimulus" | |
| import { debounce } from "lib/utils" | |
| export default class extends Controller { | |
| static values = { | |
| resizeDebounceDelay: { | |
| type: Number, | |
| default: 100, | |
| } | |
| } |
| import {Controller} from "@hotwired/stimulus" | |
| // Warns if form fields have unsaved changes before leaving the page. | |
| // Changes are stored in Session Storage to restore un-warnable events | |
| // like using the back button | |
| // | |
| // To use: | |
| // <form data-controller="unsaved-changes"> | |
| // <input type="text" name="name" data-unsaved-changes-target="field"> | |
| export default class extends Controller { |
| # frozen_string_literal: true | |
| # Reduce the amount of quote churn in the YAML files that results from | |
| # i18n-tasks attempting to normalize the quotes itself. | |
| # Always attempt to preserve the pre-existing quote style. | |
| require 'psych' | |
| class I18nTasksWrapper | |
| def self.i18n_files | |
| locales_path = File.expand_path('./locales', File.dirname(__FILE__)) |
| # frozen_string_literal: true | |
| class PhoneNumber | |
| EXACT_DIGITS = 10 | |
| MAX_NON_DIGITS = 5 | |
| delegate :present?, :blank?, :encoding, to: :@value | |
| delegate :hash, to: :strict | |
| def initialize(value) |
| # frozen_string_literal: true | |
| require "bundler/inline" | |
| # Inline Gemfile for dependencies | |
| gemfile(true) do | |
| source "https://rubygems.org" | |
| gem "benchmark-ips" | |
| end |
| # spec/support/capybara_check_choose.rb | |
| # frozen_string_literal: true | |
| module System | |
| module CapybaraCheckChoose | |
| # Speed up `allow_label_click`, which is the default, so that it | |
| # does the label click immediately rather than waiting for the | |
| # default strategy to fail | |
| def _check_with_label(selector, checked, locator, | |
| allow_label_click: session_options.automatic_label_click, **options) |
| class Household < ApplicationRecord | |
| has_many :members | |
| has_many :expenses | |
| end | |
| class Member < ApplicationRecord | |
| belongs_to :household | |
| end | |
| class Expense < ApplicationController |
My theory is that folks are hallucinating complex structure for these docs. If you read the Cursor forums, people are asking the Cursor LLM how to format them 🙃 Those shared above are the results of writing in the UI and what gets puts into version control.
My approach is that when I am annoyed by something I have to manually fix up, I go update the file.
Some of it is just impossible, like using the new Strong Params expects syntax given the training cutoffs. I’m not going to completely document the interface (cursor/rules can’t link to docs and can only link to a single file) . So I hint it, and it simply hallucinates the interface mostly correctly most of the time. Principle of Least Surprise in practice!
My .cursorrules were pretty inconsistent project to project, and I don’t believe that putting very generic things like “Use exceptions for exceptional cases, not for control flow” or “Use Active Record effectively” improves things.
| # frozen_string_literal: true | |
| # == Schema Information | |
| # | |
| # Table name: ai_prompt_responses | |
| # | |
| # id :bigint not null, primary key | |
| # ai_model :text | |
| # completed_at :datetime | |
| # error_message :text |