Skip to content

Commit

Permalink
We have UI
Browse files Browse the repository at this point in the history
  • Loading branch information
tgittos committed Sep 24, 2024
1 parent 6ffc02c commit afdf20a
Show file tree
Hide file tree
Showing 29 changed files with 328 additions and 2 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,6 @@

# Ignore master key for decrypting credentials and more.
/config/master.key

/app/assets/builds/*
!/app/assets/builds/.keep
4 changes: 4 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -75,3 +75,7 @@ end

gem "devise", "~> 4.9"


gem "view_component", "~> 3.14"

gem "tailwindcss-rails", "~> 2.7"
18 changes: 18 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -219,13 +219,29 @@ GEM
stimulus-rails (1.3.4)
railties (>= 6.0.0)
stringio (3.1.1)
tailwindcss-rails (2.7.6)
railties (>= 7.0.0)
tailwindcss-rails (2.7.6-aarch64-linux)
railties (>= 7.0.0)
tailwindcss-rails (2.7.6-arm-linux)
railties (>= 7.0.0)
tailwindcss-rails (2.7.6-arm64-darwin)
railties (>= 7.0.0)
tailwindcss-rails (2.7.6-x86_64-darwin)
railties (>= 7.0.0)
tailwindcss-rails (2.7.6-x86_64-linux)
railties (>= 7.0.0)
thor (1.3.2)
timeout (0.4.1)
turbo-rails (2.0.10)
actionpack (>= 6.0.0)
railties (>= 6.0.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
view_component (3.14.0)
activesupport (>= 5.2.0, < 8.0)
concurrent-ruby (~> 1.0)
method_source (~> 1.0)
warden (1.2.9)
rack (>= 2.0.9)
web-console (4.2.1)
Expand Down Expand Up @@ -268,8 +284,10 @@ DEPENDENCIES
sprockets-rails
sqlite3 (~> 1.4)
stimulus-rails
tailwindcss-rails (~> 2.7)
turbo-rails
tzinfo-data
view_component (~> 3.14)
web-console
webdrivers

Expand Down
2 changes: 2 additions & 0 deletions Procfile.dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
web: bin/rails server
css: bin/rails tailwindcss:watch
Empty file added app/assets/builds/.keep
Empty file.
1 change: 1 addition & 0 deletions app/assets/config/manifest.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
//= link_directory ../stylesheets .css
//= link_tree ../../javascript .js
//= link_tree ../../../vendor/javascript .js
//= link_tree ../builds
13 changes: 13 additions & 0 deletions app/assets/stylesheets/application.tailwind.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

/*
@layer components {
.btn-primary {
@apply py-2 px-4 bg-blue-200;
}
}
*/
5 changes: 5 additions & 0 deletions app/components/footer_component.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<footer class="bg-white shadow">
<div class="mx-auto max-w-7xl px-4 py-6 sm:px-6 lg:px-8">
<p class="text-sm text-gray-500">© 2024 Rugiet. All rights reserved.</p>
</div>
</footer>
2 changes: 2 additions & 0 deletions app/components/footer_component.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class FooterComponent < ViewComponent::Base
end
5 changes: 5 additions & 0 deletions app/components/header_component.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<header class="bg-white shadow">
<div class="mx-auto max-w-7xl px-4 py-6 sm:px-6 lg:px-8">
<h1 class="text-3xl font-bold tracking-tight text-gray-900">Rugiet Take Home Coding Challenge</h1>
</div>
</header>
4 changes: 4 additions & 0 deletions app/components/header_component.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
require "view_component"

class HeaderComponent < ViewComponent::Base
end
1 change: 1 addition & 0 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
class ApplicationController < ActionController::Base
before_action :authenticate_user!
end
70 changes: 70 additions & 0 deletions app/controllers/orders_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
class OrdersController < ApplicationController
before_action :set_order, only: %i[ show edit update destroy ]

# GET /orders or /orders.json
def index
@orders = Order.all
end

# GET /orders/1 or /orders/1.json
def show
end

# GET /orders/new
def new
@order = Order.new
end

# GET /orders/1/edit
def edit
end

# POST /orders or /orders.json
def create
@order = Order.new(order_params)

respond_to do |format|
if @order.save
format.html { redirect_to @order, notice: "Order was successfully created." }
format.json { render :show, status: :created, location: @order }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end

# PATCH/PUT /orders/1 or /orders/1.json
def update
respond_to do |format|
if @order.update(order_params)
format.html { redirect_to @order, notice: "Order was successfully updated." }
format.json { render :show, status: :ok, location: @order }
else
format.html { render :edit, status: :unprocessable_entity }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end

# DELETE /orders/1 or /orders/1.json
def destroy
@order.destroy

respond_to do |format|
format.html { redirect_to orders_path, status: :see_other, notice: "Order was successfully destroyed." }
format.json { head :no_content }
end
end

private
# Use callbacks to share common setup or constraints between actions.
def set_order
@order = Order.find(params[:id])
end

# Only allow a list of trusted parameters through.
def order_params
params.fetch(:order, {})
end
end
2 changes: 2 additions & 0 deletions app/helpers/orders_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
module OrdersHelper
end
5 changes: 4 additions & 1 deletion app/views/layouts/application.html.erb
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
<!DOCTYPE html>
<html>
<head>
<title>Takehome</title>
<title>Rugiet Take Home Coding Challenge</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag "tailwind", "inter-font", "data-turbo-track": "reload" %>

<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
<%= javascript_importmap_tags %>
</head>

<body>
<%= render HeaderComponent.new %>
<%= yield %>
<%= render FooterComponent.new %>
</body>
</html>
17 changes: 17 additions & 0 deletions app/views/orders/_form.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<%= form_with(model: order) do |form| %>
<% if order.errors.any? %>
<div style="color: red">
<h2><%= pluralize(order.errors.count, "error") %> prohibited this order from being saved:</h2>

<ul>
<% order.errors.each do |error| %>
<li><%= error.full_message %></li>
<% end %>
</ul>
</div>
<% end %>

<div>
<%= form.submit %>
</div>
<% end %>
2 changes: 2 additions & 0 deletions app/views/orders/_order.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<div id="<%= dom_id order %>">
</div>
2 changes: 2 additions & 0 deletions app/views/orders/_order.json.jbuilder
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
json.extract! order, :id, :created_at, :updated_at
json.url order_url(order, format: :json)
10 changes: 10 additions & 0 deletions app/views/orders/edit.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<h1>Editing order</h1>

<%= render "form", order: @order %>

<br>

<div>
<%= link_to "Show this order", @order %> |
<%= link_to "Back to orders", orders_path %>
</div>
14 changes: 14 additions & 0 deletions app/views/orders/index.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<p style="color: green"><%= notice %></p>

<h1>Orders</h1>

<div id="orders">
<% @orders.each do |order| %>
<%= render order %>
<p>
<%= link_to "Show this order", order %>
</p>
<% end %>
</div>

<%= link_to "New order", new_order_path %>
1 change: 1 addition & 0 deletions app/views/orders/index.json.jbuilder
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
json.array! @orders, partial: "orders/order", as: :order
9 changes: 9 additions & 0 deletions app/views/orders/new.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<h1>New order</h1>

<%= render "form", order: @order %>

<br>

<div>
<%= link_to "Back to orders", orders_path %>
</div>
10 changes: 10 additions & 0 deletions app/views/orders/show.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<p style="color: green"><%= notice %></p>

<%= render @order %>

<div>
<%= link_to "Edit this order", edit_order_path(@order) %> |
<%= link_to "Back to orders", orders_path %>

<%= button_to "Destroy this order", @order, method: :delete %>
</div>
1 change: 1 addition & 0 deletions app/views/orders/show.json.jbuilder
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
json.partial! "orders/order", order: @order
16 changes: 16 additions & 0 deletions bin/dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/usr/bin/env sh

if ! gem list foreman -i --silent; then
echo "Installing foreman..."
gem install foreman
fi

# Default to port 3000 if not specified
export PORT="${PORT:-3000}"

# Let the debug gem allow remote connections,
# but avoid loading until `debugger` is called
export RUBY_DEBUG_OPEN="true"
export RUBY_DEBUG_LAZY="true"

exec foreman start -f Procfile.dev "$@"
3 changes: 2 additions & 1 deletion config/routes.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
Rails.application.routes.draw do
resources :orders
devise_for :users
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

# Defines the root path route ("/")
# root "articles#index"
root "orders#index"
end
23 changes: 23 additions & 0 deletions config/tailwind.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const defaultTheme = require('tailwindcss/defaultTheme')

module.exports = {
content: [
'./public/*.html',
'./app/helpers/**/*.rb',
'./app/javascript/**/*.js',
'./app/views/**/*.{erb,haml,html,slim}',
'./app/components/**/*.{erb,haml,html,slim}',
],
theme: {
extend: {
fontFamily: {
sans: ['Inter var', ...defaultTheme.fontFamily.sans],
},
},
},
plugins: [
require('@tailwindcss/forms'),
require('@tailwindcss/typography'),
require('@tailwindcss/container-queries'),
]
}
48 changes: 48 additions & 0 deletions test/controllers/orders_controller_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
require "test_helper"

class OrdersControllerTest < ActionDispatch::IntegrationTest
setup do
@order = orders(:one)
end

test "should get index" do
get orders_url
assert_response :success
end

test "should get new" do
get new_order_url
assert_response :success
end

test "should create order" do
assert_difference("Order.count") do
post orders_url, params: { order: { } }
end

assert_redirected_to order_url(Order.last)
end

test "should show order" do
get order_url(@order)
assert_response :success
end

test "should get edit" do
get edit_order_url(@order)
assert_response :success
end

test "should update order" do
patch order_url(@order), params: { order: { } }
assert_redirected_to order_url(@order)
end

test "should destroy order" do
assert_difference("Order.count", -1) do
delete order_url(@order)
end

assert_redirected_to orders_url
end
end
Loading

0 comments on commit afdf20a

Please sign in to comment.