Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge branch 'master' of https://github.com/tanyacode/finstagram #12

Open
wants to merge 14 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
db/db.sqlite3
class FinstagramPost < ActiveRecord::Base

end
4 changes: 4 additions & 0 deletions .gitpod.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
vscode:
extensions:
- [email protected]:5znDha/nn0PphUrpB9a5Nw==
- [email protected]:RN+gv0dPjYfMqlcEEralhg==
93 changes: 93 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
GEM
remote: https://rubygems.org/
specs:
activemodel (4.2.11.1)
activesupport (= 4.2.11.1)
builder (~> 3.1)
activerecord (4.2.11.1)
activemodel (= 4.2.11.1)
activesupport (= 4.2.11.1)
arel (~> 6.0)
activesupport (4.2.11.1)
i18n (~> 0.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
arel (6.0.4)
backports (3.15.0)
bond (0.5.1)
builder (3.2.3)
coderay (1.1.2)
concurrent-ruby (1.1.5)
i18n (0.9.5)
concurrent-ruby (~> 1.0)
method_source (0.9.2)
minitest (5.13.0)
multi_json (1.14.1)
mustermann (1.0.3)
nio4r (2.5.2)
pry (0.12.2)
coderay (~> 1.1.0)
method_source (~> 0.9.0)
puma (4.3.0)
nio4r (~> 2.0)
rack (2.0.7)
rack-protection (2.0.7)
rack
rack-test (0.6.3)
rack (>= 1.0)
rake (13.0.0)
ripl (0.7.1)
bond (~> 0.5.1)
ripl-multi_line (0.3.1)
ripl (>= 0.3.6)
ripl-rack (0.2.1)
rack (>= 1.0)
rack-test (~> 0.6.2)
ripl (>= 0.7.0)
shotgun (0.9.2)
rack (>= 1.0)
sinatra (2.0.7)
mustermann (~> 1.0)
rack (~> 2.0)
rack-protection (= 2.0.7)
tilt (~> 2.0)
sinatra-activerecord (2.0.14)
activerecord (>= 3.2)
sinatra (>= 1.0)
sinatra-contrib (2.0.7)
backports (>= 2.8.2)
multi_json
mustermann (~> 1.0)
rack-protection (= 2.0.7)
sinatra (= 2.0.7)
tilt (~> 2.0)
sqlite3 (1.3.13)
thread_safe (0.3.6)
tilt (2.0.10)
tux (0.3.0)
ripl (>= 0.3.5)
ripl-multi_line (>= 0.2.4)
ripl-rack (>= 0.2.0)
sinatra (>= 1.2.1)
tzinfo (1.2.5)
thread_safe (~> 0.1)

PLATFORMS
ruby

DEPENDENCIES
activerecord (~> 4.2.0)
activesupport
pry
puma
rake
shotgun
sinatra
sinatra-activerecord
sinatra-contrib
sqlite3 (~> 1.3.6)
tux

BUNDLED WITH
2.0.2
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,7 @@ We suggest our students use [GitPod](https://www.gitpod.io/) to work on this pro
4. You'll see _Open Preview_ and _Open Browser_, either of which will allow you to open your project in a new window or tab or preview pane. Go ahead and click on your preference (or try both at first to see which one you prefer).

You're now set up and ready to work on this project!


### Database create
bundle exec rake db:migrate
107 changes: 107 additions & 0 deletions app/actions.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
get '/' do
@finstagram_posts = FinstagramPost.order(created_at: :desc)
erb(:index)
end

helpers do
def current_user
return User.find_by(id: session[:user_id])
end
end

post '/login' do
username = params[:username]
password = params[:password]

@user = User.find_by(username: username)

if @user && @user.password == password
session[:user_id] = @user.id
"Success! User with id #{session[:user_id]} is logged in!"
else
@error_message = "Login failed."
erb(:login)
end
end

get '/login' do # when a GET request comes into /login
erb(:login) # render app/views/login.erb
end

get '/logout' do
session[:user_id] = nil
"Logout successful!"
end

post '/signup' do

# grab user input values from params
email = params[:email]
avatar_url = params[:avatar_url]
username = params[:username]
password = params[:password]

# instantiate and save a User
user = User.new({ email: email, avatar_url: avatar_url, username: username, password: password })
user.save

# return readable representation of User object
escape_html user.inspect
end

get '/signup' do # if a user navigates to the path "/signup",
@user = User.new # setup empty @user object
erb(:signup) # render "app/views/signup.erb"
end

get '/finstagram_posts/new' do
@finstagram_post = FinstagramPost.new
erb(:"finstagram_posts/new")
end

post '/finstagram_posts' do
photo_url = params[:photo_url]

@finstagram_post = FinstagramPost.new({ photo_url: photo_url, user_id: current_user.id })

if @finstagram_post.save
redirect(to('/'))
else
erb(:"finstagram_posts/new")
end
end

get '/finstagram_posts/:id' do
@finstagram_post = FinstagramPost.find(params[:id]) # find the finstagram post with the ID from the URL
erb(:"finstagram_posts/show") # render app/views/finstagram_posts/show.erb
end

post '/comments' do
# point values from params to variables
text = params[:text]
finstagram_post_id = params[:finstagram_post_id]

# instantiate a comment with those values & assign the comment to the `current_user`
comment = Comment.new({ text: text, finstagram_post_id: finstagram_post_id, user_id: current_user.id })

# save the comment
comment.save

# `redirect` back to wherever we came from
redirect(back)
end

post '/likes' do
finstagram_post_id = params[:finstagram_post_id]

like = Like.new({ finstagram_post_id: finstagram_post_id, user_id: current_user.id })
like.save

redirect(back)
end

delete '/likes/:id' do
like = Like.find(params[:id])
like.destroy
redirect(back)
end
10 changes: 10 additions & 0 deletions app/models/comment.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
class Comment < ActiveRecord::Base

# Associations from a previous exercise
belongs_to :user
belongs_to :finstagram_post

# New validation code
validates_presence_of :text, :user, :finstagram_post

end
38 changes: 38 additions & 0 deletions app/models/finstagram_post.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
class FinstagramPost < ActiveRecord::Base

# (this is where your associations are, e.g. has_many :finstagram_posts, etc.)...

# validations in between association definitions and methods!
validates :photo_url, :user, presence: true

# (this is where your def humanized_time_ago method is, along with the rest of your methods in this file)...



belongs_to :user
has_many :comments
has_many :likes



def humanized_time_ago
time_ago_in_seconds = Time.now - self.created_at
time_ago_in_minutes = time_ago_in_seconds / 60

if time_ago_in_minutes >= 60
"#{(time_ago_in_minutes / 60).to_i} hours ago"
else
"#{time_ago_in_minutes.to_i} minutes ago"
end

end
# New Stuff Start
def like_count
self.likes.size
end

def comment_count
self.comments.size
end
# New Stuff End
end
7 changes: 7 additions & 0 deletions app/models/like.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
class Like < ActiveRecord::Base

belongs_to :user
belongs_to :finstagram_post
validates_presence_of :user, :finstagram_post

end
7 changes: 7 additions & 0 deletions app/models/user.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
class User < ActiveRecord::Base

has_many :finstagram_posts
has_many :comments
has_many :likes

end
15 changes: 15 additions & 0 deletions app/views/finstagram_posts/new.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<h2>New Post</h2>
<ul class="errors">
<% @finstagram_post.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<form action="/finstagram_posts" method="POST">
<div class="form-group">
<label for="photo_url">Photo URL</label>
<input type="text" id="photo_url" name="photo_url">
</div>
<div class="form-group">
<button class="button" type="submit">Post</button>
</div>
</form>
39 changes: 39 additions & 0 deletions app/views/finstagram_posts/show.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<header>
<h1>Finstagram</h1>
<div class="login-info">
<% if current_user %>
<%= current_user.username %>
<a href="/logout">Logout</a>
<% else %>
<a href="/login">Login</a>
<a href="/signup">Signup</a>
<% end %>
</div>
</header>
<main role="main">
<article class="finstagram-post">
<div class="user-info">
<img src="<%= @finstagram_post.user.avatar_url %>" alt="<%= @finstagram_post.user.username %>">
<h2><%= @finstagram_post.user.username %></h2>
<h3><%= @finstagram_post.humanized_time_ago %></h3>
</div>
<a class="photo" href="#">
<img src="<%= @finstagram_post.photo_url %>" alt="finstagram post from <%= @finstagram_post.user.username %>">
</a>
<div class="actions">
<%= @finstagram_post.like_count %> likes
<span class="comment-count"><%= @finstagram_post.comment_count %> comments</span>
</div>
<%= erb(:"shared/finstagram_post", { locals: { finstagram_post: @finstagram_post, allow_new_comment: true }}) %>
<ul class="comments">

<% @finstagram_post.comments.each do |comment| %>
<li>
<p>
<%= comment.user.username %>: <%= comment.text %>
</p>
</li>
<% end %>
</ul>
</article>
</main>
22 changes: 22 additions & 0 deletions app/views/index.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<% if current_user %>
<div class="new-finstagram-post">
<a href="/finstagram_posts/new" class="button">New Post</a>
</div>
<% end %>
<header>
<h1>Finstagram</h1>
<div class="login-info">
<% if current_user %>
<%= current_user.username %>
<a href="/logout">Logout</a>
<% else %>
<a href="/login">Login</a>
<a href="/signup">Signup</a>
<% end %>
</div>
</header>
<main role="main">
<% @finstagram_posts.each do |finstagram_post| %>
<%= erb(:"shared/finstagram_post", { locals: { finstagram_post: finstagram_post, allow_new_comment: false }}) %>
<% end %>
</main>
Empty file removed app/views/index.html
Empty file.
Loading