Finished phase005
CI / scan_ruby (push) Failing after 1m5s
CI / scan_js (push) Failing after 6s
CI / lint (push) Failing after 1m29s

This commit is contained in:
2026-09-16 15:34:50 -06:00
parent a3a65c24ed
commit 0826d267f2
38 changed files with 1596 additions and 9 deletions
+9
View File
@@ -24,6 +24,15 @@
</head>
<body>
<% if identified? %>
<header>
<p>
Identified as <%= current_user.name %> (<%= current_user.email %>)
<%= button_to "Log out", logout_path, method: :delete %>
</p>
</header>
<% end %>
<%= yield %>
</body>
</html>
+29
View File
@@ -0,0 +1,29 @@
<main>
<p><%= notice %></p>
<p><%= alert %></p>
<h1>Identify yourself</h1>
<p>Enter the current access key along with your name and email.</p>
<%= form_with url: session_path do |form| %>
<div>
<%= form.label :name, "User name" %><br>
<%= form.text_field :name, value: params[:name], required: true, autocomplete: "name" %>
</div>
<div>
<%= form.label :email %><br>
<%= form.email_field :email, value: params[:email], required: true, autocomplete: "email" %>
</div>
<div>
<%= form.label :key, "Access key" %><br>
<%= form.text_field :key, required: true, autocomplete: "off" %>
</div>
<div>
<%= form.submit "Identify" %>
</div>
<% end %>
</main>
+62
View File
@@ -0,0 +1,62 @@
<%= form_with model: vehicle do |form| %>
<% if vehicle.errors.any? %>
<section>
<h2><%= pluralize(vehicle.errors.count, "error") %> prevented this vehicle from being saved</h2>
<ul>
<% vehicle.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</section>
<% end %>
<div>
<%= form.label :make %><br>
<%= form.text_field :make %>
</div>
<div>
<%= form.label :model %><br>
<%= form.text_field :model %>
</div>
<div>
<%= form.label :year %><br>
<%= form.number_field :year %>
</div>
<div>
<%= form.label :color %><br>
<%= form.text_field :color %>
</div>
<div>
<%= form.label :vin, "VIN" %><br>
<%= form.text_field :vin %>
</div>
<div>
<%= form.label :licence_plate %><br>
<%= form.text_field :licence_plate %>
</div>
<div>
<%= form.label :current_odometer %><br>
<%= form.number_field :current_odometer %>
</div>
<div>
<%= form.label :fuel_tank_size %><br>
<%= form.number_field :fuel_tank_size, step: "0.01" %>
</div>
<div>
<%= form.check_box :active %>
<%= form.label :active %>
</div>
<div>
<%= form.submit %>
</div>
<% end %>
+7
View File
@@ -0,0 +1,7 @@
<main>
<h1>Edit Vehicle</h1>
<%= render "form", vehicle: @vehicle %>
<p><%= link_to "Back to vehicle", @vehicle %></p>
</main>
+38
View File
@@ -0,0 +1,38 @@
<main>
<p><%= notice %></p>
<h1>Vehicles</h1>
<nav aria-label="Vehicle filters">
<%= link_to "Active", vehicles_path %> |
<%= link_to "Inactive", vehicles_path(status: "inactive") %> |
<%= link_to "All", vehicles_path(status: "all") %>
</nav>
<p><%= link_to "New vehicle", new_vehicle_path %></p>
<% if @vehicles.any? %>
<table>
<thead>
<tr>
<th>Vehicle</th>
<th>Licence plate</th>
<th>Odometer</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<% @vehicles.each do |vehicle| %>
<tr>
<td><%= link_to "#{vehicle.year} #{vehicle.make} #{vehicle.model}", vehicle %></td>
<td><%= vehicle.licence_plate %></td>
<td><%= number_with_delimiter(vehicle.current_odometer) %></td>
<td><%= vehicle.active? ? "Active" : "Inactive" %></td>
</tr>
<% end %>
</tbody>
</table>
<% else %>
<p>No vehicles found.</p>
<% end %>
</main>
+7
View File
@@ -0,0 +1,7 @@
<main>
<h1>New Vehicle</h1>
<%= render "form", vehicle: @vehicle %>
<p><%= link_to "Back to vehicles", vehicles_path %></p>
</main>
+243
View File
@@ -0,0 +1,243 @@
<main>
<p><%= notice %></p>
<p><%= flash[:warning] %></p>
<p><%= link_to "Back to vehicles", vehicles_path %></p>
<h1><%= @vehicle.year %> <%= @vehicle.make %> <%= @vehicle.model %></h1>
<div>
<%= link_to "Edit", edit_vehicle_path(@vehicle) %>
<% if @vehicle.active? %>
| <%= button_to "Deactivate", @vehicle, method: :delete %>
<% end %>
</div>
<section>
<h2>Vehicle Details</h2>
<dl>
<dt>Make</dt>
<dd><%= @vehicle.make %></dd>
<dt>Model</dt>
<dd><%= @vehicle.model %></dd>
<dt>Year</dt>
<dd><%= @vehicle.year %></dd>
<dt>Color</dt>
<dd><%= @vehicle.color %></dd>
<dt>VIN</dt>
<dd><%= @vehicle.vin %></dd>
<dt>Licence plate</dt>
<dd><%= @vehicle.licence_plate %></dd>
<dt>Current odometer</dt>
<dd><%= number_with_delimiter(@vehicle.current_odometer) %></dd>
<dt>Fuel tank size</dt>
<dd><%= @vehicle.fuel_tank_size %></dd>
<dt>Status</dt>
<dd><%= @vehicle.active? ? "Active" : "Inactive" %></dd>
</dl>
</section>
<section>
<h2>Maintenance Schedules</h2>
<% if @maintenance_schedules.any? %>
<table>
<thead>
<tr>
<th>Type</th>
<th>Mileage interval</th>
<th>Time interval</th>
</tr>
</thead>
<tbody>
<% @maintenance_schedules.each do |schedule| %>
<tr>
<td><%= schedule.maintenance_type %></td>
<td><%= number_with_delimiter(schedule.mileage_interval) %> miles</td>
<td><%= schedule.time_interval %> days</td>
</tr>
<% end %>
</tbody>
</table>
<% else %>
<p>No maintenance schedules recorded.</p>
<% end %>
</section>
<section>
<h2>Record Fuel</h2>
<%= form_with model: [@vehicle, @fuel_entry] do |form| %>
<% if @fuel_entry.errors.any? %>
<section>
<h3><%= pluralize(@fuel_entry.errors.count, "error") %> prevented this fuel entry from being saved</h3>
<ul>
<% @fuel_entry.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</section>
<% end %>
<div>
<%= form.label :odometer %><br>
<%= form.number_field :odometer, min: @vehicle.current_odometer, required: true %>
</div>
<div>
<%= form.label :gallons_pumped %><br>
<%= form.number_field :gallons_pumped, min: 0.01, step: "0.01", required: true %>
</div>
<div>
<%= form.label :price_paid %><br>
<%= form.number_field :price_paid, min: 0.01, step: "0.01", required: true %>
</div>
<div>
<%= form.label :date %><br>
<%= form.date_field :date, max: Date.current, required: true %>
</div>
<div>
<%= form.submit "Record fuel" %>
</div>
<% end %>
</section>
<section>
<h2>Record Maintenance</h2>
<% if @maintenance_schedules.any? %>
<%= form_with model: [@vehicle, @maintenance_entry], data: {
controller: "maintenance-odometer-warning",
maintenance_odometer_warning_current_odometer_value: @vehicle.current_odometer,
maintenance_odometer_warning_threshold_value: 500
} do |form| %>
<% if @maintenance_entry.errors.any? %>
<section>
<h3><%= pluralize(@maintenance_entry.errors.count, "error") %> prevented this maintenance entry from being saved</h3>
<ul>
<% @maintenance_entry.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</section>
<% end %>
<div>
<%= form.label :name, "Maintenance type" %><br>
<%= form.select :name, options_for_select(@maintenance_schedules.map(&:maintenance_type), @maintenance_entry.name), { prompt: "Choose maintenance type" }, required: true %>
</div>
<div>
<%= form.label :odometer %><br>
<%= form.number_field :odometer, min: 0, required: true, data: {
maintenance_odometer_warning_target: "odometer",
action: "input->maintenance-odometer-warning#check change->maintenance-odometer-warning#check"
} %>
</div>
<p hidden data-maintenance-odometer-warning-target="warning">
Warning: this maintenance odometer is more than 500 miles behind the current vehicle odometer.
</p>
<div>
<%= form.label :cost %><br>
<%= form.number_field :cost, min: 0, step: "0.01", required: true %>
</div>
<div>
<%= form.label :date %><br>
<%= form.date_field :date, max: Date.current, required: true %>
</div>
<div>
<%= form.label :notes %><br>
<%= form.text_area :notes, required: true %>
</div>
<div>
<%= form.submit "Record maintenance" %>
</div>
<% end %>
<% else %>
<p>Add a maintenance schedule before recording maintenance.</p>
<% end %>
</section>
<section>
<h2>Fuel History</h2>
<% if @fuel_entries.any? %>
<table>
<thead>
<tr>
<th>Date</th>
<th>Odometer</th>
<th>Gallons</th>
<th>Price paid</th>
<th>Updated by</th>
</tr>
</thead>
<tbody>
<% @fuel_entries.each do |entry| %>
<tr>
<td><%= entry.date %></td>
<td><%= number_with_delimiter(entry.odometer) %></td>
<td><%= entry.gallons_pumped %></td>
<td><%= number_to_currency(entry.price_paid) %></td>
<td><%= entry.updated_by_user.name %></td>
</tr>
<% end %>
</tbody>
</table>
<% else %>
<p>No fuel entries recorded.</p>
<% end %>
</section>
<section>
<h2>Maintenance History</h2>
<% if @maintenance_entries.any? %>
<table>
<thead>
<tr>
<th>Date</th>
<th>Name</th>
<th>Odometer</th>
<th>Cost</th>
<th>Notes</th>
<th>Updated by</th>
</tr>
</thead>
<tbody>
<% @maintenance_entries.each do |entry| %>
<tr>
<td><%= entry.date %></td>
<td><%= entry.name %></td>
<td><%= number_with_delimiter(entry.odometer) %></td>
<td><%= number_to_currency(entry.cost) %></td>
<td><%= entry.notes %></td>
<td><%= entry.updated_by_user.name %></td>
</tr>
<% end %>
</tbody>
</table>
<% else %>
<p>No maintenance entries recorded.</p>
<% end %>
</section>
</main>