Skip to content

Commit a48681b

Browse files
author
Lewis Youl
committed
feat: use friendly id for snippet urls
1 parent e078bdd commit a48681b

File tree

10 files changed

+38
-21
lines changed

10 files changed

+38
-21
lines changed

app/controllers/alerts/snippets_controller.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ class Alerts::SnippetsController < AlertsController
33
DELETE_CONFIRM_TEXT = "Are you sure you want to delete this snippet? You won't be able to undo this.".freeze
44

55
def unfile
6-
@snippet = current_user.filed_snippets.find(params[:id])
6+
@snippet = current_user.filed_snippets.friendly.find(params[:id])
77
@header = 'Remove Snippet'
88
@message = UNFILE_CONFIRM_TEXT
99
end
1010

1111
def delete
12-
@snippet = current_user.snippets.find(params[:id])
12+
@snippet = current_user.snippets.friendly.find(params[:id])
1313
@header = 'Delete Snippet'
1414
@message = DELETE_CONFIRM_TEXT
1515
end

app/controllers/comments_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ class CommentsController < ApplicationController
33
before_action :set_comment, only: :destroy
44

55
def create
6-
@snippet = Snippet.find(params[:snippet_id])
6+
@snippet = Snippet.friendly.find(params[:snippet_id])
77
@comment = @snippet.comments.new(comment_params)
88

99
if @comment.save

app/controllers/modals/snippets_controller.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,21 @@ def edit
1515
end
1616

1717
def move
18-
@snippet = Snippet.find(params[:id])
19-
@current_folder_id = current_user.snippet_folders.find_by(snippet_id: params[:id])&.folder&.id
18+
@snippet = Snippet.friendly.find(params[:id])
19+
@current_folder_id = current_user.snippet_folders.find_by(snippet_id: @snippet.id)&.folder&.id
2020
@header = @current_folder_id ? 'Move Snippet' : 'File Snippet'
2121
@folders = current_user.folders.order(name: :asc)
2222
end
2323

2424
def picture
25-
@snippet = Snippet.find(params[:id])
25+
@snippet = Snippet.friendly.find(params[:id])
2626
@languages = Language.order(name: :asc)
2727
end
2828

2929
private
3030

3131
def set_snippet
32-
unless @snippet = current_user.snippets.find_by(id: params[:id])
32+
unless @snippet = current_user.snippets.find_by(slug: params[:id])
3333
respond_to do |format|
3434
format.html { redirect_to root_path, alert: UNAUTHORIZED }
3535
format.json { render json: { message: UNAUTHORIZED }, status: 401 }

app/controllers/snippets_controller.rb

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def index
2929
end
3030

3131
def popover
32-
@snippet = Snippet.find(params[:id])
32+
@snippet = Snippet.friendly.find(params[:id])
3333

3434
@popover_options = current_user.popover_options_for(@snippet)
3535

@@ -38,7 +38,8 @@ def popover
3838

3939
# Does this belong on SnippetFoldersController?
4040
def unfile
41-
snippet_folder = current_user.snippet_folders.find_by(snippet_id: params[:id])
41+
snippet = current_user.filed_snippets.friendly.find(params[:id])
42+
snippet_folder = current_user.snippet_folders.find_by(snippet_id: snippet.id)
4243

4344
if snippet_folder && snippet_folder.destroy
4445
flash[:notice] = "Snippet removed from collection!"
@@ -55,13 +56,13 @@ def file
5556
format.json do
5657
begin
5758
Snippet.transaction do
58-
snippet = Snippet.find(params[:id])
59+
snippet = Snippet.friendly.find(params[:id])
5960

60-
if snippet_folder = current_user.snippet_folders.find_by(snippet_id: params[:id])
61+
if snippet_folder = current_user.snippet_folders.find_by(snippet_id: snippet.id)
6162
snippet_folder.destroy!
6263
end
6364

64-
snippet_folder = SnippetFolder.create!(snippet_id: params[:id], folder_id: params[:folder_id])
65+
snippet_folder = SnippetFolder.create!(snippet_id: snippet.id, folder_id: params[:folder_id])
6566

6667
unless current_user == snippet.user
6768
snippet_folder.notifications.create!(user: snippet.user)
@@ -78,7 +79,8 @@ def file
7879
end
7980

8081
def current_folder
81-
snippet_folder = current_user.snippet_folders.find_by(snippet_id: params[:id])
82+
snippet = Snippet.friendly.find(params[:id])
83+
snippet_folder = current_user.snippet_folders.find_by(snippet_id: snippet.id)
8284

8385
res = { folders: current_user.folders.map { |folder| FolderSerializer.new(folder).to_h } }
8486

@@ -92,7 +94,7 @@ def current_folder
9294
def show
9395
@page_title = "Snippet"
9496
@languages = Language.all.to_json
95-
@snippet = Snippet.includes(comments: :user).find_by(id: params[:id])
97+
@snippet = Snippet.includes(comments: :user).find_by(slug: params[:id])
9698

9799
unless @snippet && @snippet.visible_to?(current_user)
98100
flash[:alert] = "You are not authorized to view that snippet"
@@ -148,13 +150,13 @@ def create
148150

149151
#TODO: Use a different controller action for moving a snippet between folders
150152
def update
151-
snippet = current_user.filed_snippets.find_by(id: params[:id])
153+
snippet = current_user.filed_snippets.find_by(slug: params[:id])
152154

153155
if snippet.update(snippet_params.except(:folder_id))
154156
folder = current_user.folders.find(snippet_params[:folder_id])
155157

156158
Snippet.transaction do
157-
snippet_folder = current_user.snippet_folders.find_by(snippet_id: params[:id])
159+
snippet_folder = current_user.snippet_folders.find_by(snippet_id: snippet.id)
158160

159161
if snippet_folder.folder_id != snippet_params[:folder_id].to_i
160162
snippet_folder.update!(folder_id: snippet_params[:folder_id])
@@ -179,7 +181,7 @@ def update
179181
end
180182

181183
def destroy
182-
@snippet = current_user.snippets.find(params[:id])
184+
@snippet = current_user.snippets.friendly.find(params[:id])
183185

184186
if @snippet&.destroy
185187
render json: { resource_id: @snippet.client_id }

app/controllers/tweets_controller.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
class TweetsController < ApplicationController
2+
before_action :authenticate_user!
3+
24
def create
35
tweet = twitter_client.tweet_media(params[:data].path)
46

app/controllers/users_controller.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,15 @@ def modify
8080
end
8181

8282
def follow
83-
@user = User.find_by(slug: params[:id])
83+
@user = User.find_by(id: params[:id])
8484

8585
current_user.follow(@user)
8686

8787
render partial: 'users/follow_button', locals: { user: @user }
8888
end
8989

9090
def unfollow
91-
@user = User.find_by(slug: params[:id])
91+
@user = User.find_by(id: params[:id])
9292

9393
current_user.unfollow(@user)
9494

app/models/snippet.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
class Snippet < ApplicationRecord
2+
extend FriendlyId
3+
friendly_id :description, use: :slugged
4+
25
has_many :snippet_folders, dependent: :destroy
36
has_many :folders, through: :snippet_folders
47
belongs_to :user, required: true

app/models/user.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ class User < ApplicationRecord
44
extend FriendlyId
55
include Rails.application.routes.url_helpers
66

7-
DEFAULT_FOLDER_NAME = 'My First Folder'.freeze
7+
DEFAULT_FOLDER_NAME = 'My Snippets'.freeze
88
ALPHANUMERIC = /\A[a-zA-Z0-9]*\z/.freeze
99

1010
friendly_id :name, use: :slugged
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class AddSlugToSnippets < ActiveRecord::Migration[6.0]
2+
def change
3+
add_column :snippets, :slug, :string
4+
add_index :snippets, :slug, unique: true
5+
6+
Snippet.find_each(&:save!)
7+
end
8+
end

db/schema.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#
1111
# It's strongly recommended that you check this file into your version control system.
1212

13-
ActiveRecord::Schema.define(version: 2021_03_15_204751) do
13+
ActiveRecord::Schema.define(version: 2021_03_16_073353) do
1414

1515
# These are extensions that must be enabled in order to support this database
1616
enable_extension "plpgsql"
@@ -120,7 +120,9 @@
120120
t.integer "comments_count", default: 0
121121
t.string "highlighted_body"
122122
t.bigint "language_id"
123+
t.string "slug"
123124
t.index ["language_id"], name: "index_snippets_on_language_id"
125+
t.index ["slug"], name: "index_snippets_on_slug", unique: true
124126
t.index ["user_id"], name: "index_snippets_on_user_id"
125127
end
126128

0 commit comments

Comments
 (0)