Skip to content

Commit 592bf26

Browse files
authored
add social links (#4)
1 parent 667d725 commit 592bf26

File tree

10 files changed

+110
-14
lines changed

10 files changed

+110
-14
lines changed

app/controllers/startups_controller.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,16 @@ def like
9595

9696
private
9797
def startup_params
98-
params.expect(startup: [ :name, :description, :tag_list, :url, :role_names ])
98+
params.require(:startup).permit(:name,
99+
:description,
100+
:tag_list,
101+
:role_names,
102+
:website_url,
103+
:instagram_url,
104+
:twitter_url,
105+
:linkedin_url,
106+
:github_url,
107+
:discord_url)
99108
end
100109

101110
def set_startup

app/helpers/style_helper.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def button_classes
2020

2121
def input_classes
2222
class_variants(
23-
base: "block rounded-sm bg-white font-medium placeholder:font-normal text-black outline-1 -outline-offset-1 outline-black placeholder:text-black focus:outline-2 focus:-outline-offset-2 focus:outline-black",
23+
base: "block rounded-sm bg-white font-medium placeholder:font-normal text-black outline-1 -outline-offset-1 outline-black placeholder:text-black/60 focus:outline-2 focus:-outline-offset-2 focus:outline-black",
2424
variants: {
2525
size: {
2626
sm: "py-1.5 px-2 text-xs",

app/models/startup.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,15 @@ class Startup < ApplicationRecord
77

88
validates :name, presence: true
99
validates :description, presence: true, length: { minimum: 25, maximum: 500 }
10-
validates :url, format: { with: URI::DEFAULT_PARSER.make_regexp("https"), allow_blank: true }
1110
validates :roles, length: { minimum: 1, message: "must have at least one role" }
1211

12+
validates :website_url, format: { with: URI::DEFAULT_PARSER.make_regexp("https"), allow_blank: true }
13+
validates :instagram_url, format: { with: /\Ahttps?:\/\/(www\.)?instagram\.com\//i, allow_blank: true, message: "must be an Instagram URL" }
14+
validates :twitter_url, format: { with: /\Ahttps?:\/\/(www\.)?twitter\.com\//i, allow_blank: true, message: "must be a Twitter URL" }
15+
validates :linkedin_url, format: { with: /\Ahttps?:\/\/(www\.)?linkedin\.com\//i, allow_blank: true, message: "must be a LinkedIn URL" }
16+
validates :github_url, format: { with: /\Ahttps?:\/\/(www\.)?github\.com\//i, allow_blank: true, message: "must be a GitHub URL" }
17+
validates :discord_url, format: { with: /\Ahttps?:\/\/(www\.)?discord\.(gg|com)\//i, allow_blank: true, message: "must be a Discord invite or server URL" }
18+
1319
def self.ransackable_attributes(auth_object = nil)
1420
%w[name description created_at]
1521
end
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<div class="flex flex-col gap-2 text-sm">
2+
<% unless startup.website_url.blank? %>
3+
<%= link_to 'Visit Website', startup.website_url, class: "hover:underline" %>
4+
<% end %>
5+
<% unless startup.instagram_url.blank? %>
6+
<%= link_to 'Instagram', startup.instagram_url, class: "hover:underline" %>
7+
<% end %>
8+
<% unless startup.twitter_url.blank? %>
9+
<%= link_to 'Twitter', startup.twitter_url, class: "hover:underline" %>
10+
<% end %>
11+
<% unless startup.linkedin_url.blank? %>
12+
<%= link_to 'LinkedIn', startup.linkedin_url, class: "hover:underline" %>
13+
<% end %>
14+
<% unless startup.github_url.blank? %>
15+
<%= link_to 'GitHub', startup.github_url, class: "hover:underline" %>
16+
<% end %>
17+
<% unless startup.discord_url.blank? %>
18+
<%= link_to 'Discord', startup.discord_url, class: "hover:underline" %>
19+
<% end %>
20+
</div>

app/views/startups/edit.html.erb

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,31 @@
3636
<div class="flex items-center">
3737
<%= form.text_field :role_names, value: @startup.roles.map(&:title).join(','), placeholder: "Need a tech guru? Designer?", class: "tag-input #{input_classes.render}", data: { controller: "tag", action: "keydown->tag#preventEnter" } %> </div>
3838
</div>
39-
<div>
40-
<%= form.label :url, "Website (optional)", class: "block text-sm font-medium" %>
41-
<%= form.url_field :url, class: input_classes.render, placeholder: "https://your-startup-website.com" %>
39+
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
40+
<div class="flex flex-col gap-2">
41+
<%= form.label :website_url, "Website (optional)", class: "block text-sm font-medium" %>
42+
<%= form.url_field :website_url, class: input_classes.render, placeholder: "https://your-startup-website.com" %>
43+
</div>
44+
<div class="flex flex-col gap-2">
45+
<%= form.label :instagram_url, "Instagram (optional)", class: "block text-sm font-medium" %>
46+
<%= form.url_field :instagram_url, class: input_classes.render, placeholder: "https://instagram.com/yourstartup" %>
47+
</div>
48+
<div class="flex flex-col gap-2">
49+
<%= form.label :twitter_url, "X (optional)", class: "block text-sm font-medium" %>
50+
<%= form.url_field :twitter_url, class: input_classes.render, placeholder: "https://x.com/yourstartup" %>
51+
</div>
52+
<div class="flex flex-col gap-2">
53+
<%= form.label :linkedin_url, "LinkedIn (optional)", class: "block text-sm font-medium" %>
54+
<%= form.url_field :linkedin_url, class: input_classes.render, placeholder: "https://linkedin.com/company/yourstartup" %>
55+
</div>
56+
<div class="flex flex-col gap-2">
57+
<%= form.label :github_url, "GitHub (optional)", class: "block text-sm font-medium" %>
58+
<%= form.url_field :github_url, class: input_classes.render, placeholder: "https://github.com/yourstartup" %>
59+
</div>
60+
<div class="flex flex-col gap-2">
61+
<%= form.label :discord_url, "Discord (optional)", class: "block text-sm font-medium" %>
62+
<%= form.url_field :discord_url, class: input_classes.render, placeholder: "https://discord.gg/yourstartup" %>
63+
</div>
4264
</div>
4365
<div>
4466
<%= form.submit "Edit Startup", class: button_classes.render %>

app/views/startups/new.html.erb

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,31 @@
3636
<div class="flex items-center">
3737
<%= form.text_field :role_names, value: @startup.roles.map(&:title).join(','), placeholder: "Need a tech guru? Designer?", class: "tag-input #{input_classes.render}", data: { controller: "tag", action: "keydown->tag#preventEnter" } %> </div>
3838
</div>
39-
<div>
40-
<%= form.label :url, "Website (optional)", class: "block text-sm font-medium" %>
41-
<%= form.url_field :url, class: input_classes.render, placeholder: "https://your-startup-website.com" %>
39+
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
40+
<div class="flex flex-col gap-2">
41+
<%= form.label :website_url, "Website (optional)", class: "block text-sm font-medium" %>
42+
<%= form.url_field :website_url, class: input_classes.render, placeholder: "https://your-startup-website.com" %>
43+
</div>
44+
<div class="flex flex-col gap-2">
45+
<%= form.label :instagram_url, "Instagram (optional)", class: "block text-sm font-medium" %>
46+
<%= form.url_field :instagram_url, class: input_classes.render, placeholder: "https://instagram.com/yourstartup" %>
47+
</div>
48+
<div class="flex flex-col gap-2">
49+
<%= form.label :twitter_url, "Twitter (optional)", class: "block text-sm font-medium" %>
50+
<%= form.url_field :twitter_url, class: input_classes.render, placeholder: "https://twitter.com/yourstartup" %>
51+
</div>
52+
<div class="flex flex-col gap-2">
53+
<%= form.label :linkedin_url, "LinkedIn (optional)", class: "block text-sm font-medium" %>
54+
<%= form.url_field :linkedin_url, class: input_classes.render, placeholder: "https://linkedin.com/company/yourstartup" %>
55+
</div>
56+
<div class="flex flex-col gap-2">
57+
<%= form.label :github_url, "GitHub (optional)", class: "block text-sm font-medium" %>
58+
<%= form.url_field :github_url, class: input_classes.render, placeholder: "https://github.com/yourstartup" %>
59+
</div>
60+
<div class="flex flex-col gap-2">
61+
<%= form.label :discord_url, "Discord (optional)", class: "block text-sm font-medium" %>
62+
<%= form.url_field :discord_url, class: input_classes.render, placeholder: "https://discord.gg/yourstartup" %>
63+
</div>
4264
</div>
4365
<div>
4466
<%= form.submit "Create Startup", class: button_classes.render %>

app/views/startups/show.html.erb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@
1111
<% end %>
1212
</div>
1313
</div>
14-
<% unless (@startup.url.nil? || @startup.url.empty?) %>
15-
<%= link_to 'Visit Website', @startup.url, class: button_classes.render %>
16-
<% end %>
14+
<%= render 'social_links', startup: @startup %>
1715
</div>
1816
<div class="space-y-4">
1917
<% @startup.roles.each do |role| %>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class AddSocialLinksToStartup < ActiveRecord::Migration[8.0]
2+
def change
3+
add_column :startups, :discord_url, :string
4+
add_column :startups, :github_url, :string
5+
add_column :startups, :linkedin_url, :string
6+
add_column :startups, :twitter_url, :string
7+
add_column :startups, :instagram_url, :string
8+
end
9+
end
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class RenameUrlToWebsiteUrlInStartups < ActiveRecord::Migration[8.0]
2+
def change
3+
rename_column :startups, :url, :website_url
4+
end
5+
end

db/schema.rb

Lines changed: 7 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)