Skip to content

Instantly share code, notes, and snippets.

@rishavs
Created February 23, 2017 21:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rishavs/46a40015a06eedbf72fbc24022d47a9a to your computer and use it in GitHub Desktop.
Save rishavs/46a40015a06eedbf72fbc24022d47a9a to your computer and use it in GitHub Desktop.
<button class="ui primary button" name="new_post_btn" onclick="location.href='/p/new';"> Add New </button>
<% if dataset %>
<div class="ui divided list">
<% dataset.each do |i| %>
<div class="item">
<div class="content">
<a href="/p/<%= i.id %>">
<%= i.id %>) <%= i.title %>
</a>
</div>
</div>
<% end %>
</div>
<% else %>
<h2> No Items Found! </h2>
<% end %>
require "kemal"
require "ecr"
require "dotenv"
require "pg"
require "crecto"
require "./Kamel/models/*"
require "./Kamel/controllers/*"
require "./Kamel/*"
# Dotenv.load
# Run Kamel
Kemal.run
def index_items(env)
query = Crecto::Repo::Query
.order_by("posts.id DESC")
dataset = Crecto::Repo.all(Post, query)
dataset.as(Array) unless dataset.nil?
# puts "Number of Items are: #{Crecto::Repo.aggregate(Post, :count, :id)}"
end
def save_new_item(env)
data = Post.new
data.title = env.params.body["post_title"]
data.is_link = false
data.link = nil
data.content = env.params.body["post_content"]
data.author_username = "some guy"
data.is_viewable = true
data.is_approved = true
data.is_deleted = false
data.last_read_at = Time.new(2016, 2, 15, 10, 20, 30)
changeset = Crecto::Repo.insert(data)
puts "Changeset is INVALID!" if changeset.valid? == false
puts "Changeset errors are: #{changeset.errors }" if !changeset.errors.empty?
puts "/nThe item was successfully ADDED. ID:#{changeset.instance.id}/n"
end
def edit_an_item(env)
id = env.params.url["id"]
data = Crecto::Repo.get(Post, id)
end
def save_edited_item(env)
id = env.params.url["id"]
data = Crecto::Repo.get(Post, id)
if data
data.title = env.params.body["post_title"]
data.content = env.params.body["post_content"]
changeset = Crecto::Repo.update(data)
puts "Changeset is INVALID!" if changeset.valid? == false
puts "Changeset errors are: #{changeset.errors }" if !changeset.errors.empty?
puts "/nThe item was successfully UPDATED. ID:#{changeset.instance.id}/n"
end
end
def delete_an_item(env)
id = env.params.url["id"]
query = Crecto::Repo::Query
.where(id: id)
changeset = Crecto::Repo.delete_all(Post, query)
puts "Changeset is INVALID!" if changeset.valid? == false
puts "Changeset errors are: #{changeset.errors }" if !changeset.errors.empty?
puts "/nThe item was successfully DELETED. ID:#{changeset.instance.id}/n"
end
class Post < Crecto::Model
schema "posts" do
field :title, String
field :is_link, Bool
field :link, String
field :content, String
field :author_username, String
field :is_viewable, Bool
field :is_approved, Bool
field :is_deleted, Bool
field :last_read_at, Time
end
validate_required [:title]
end
get "/p/index" do |env|
index_items(env)
render "src/Kamel/views/posts/index_posts.ecr", "src/Kamel/views/base.ecr"
end
get "/p/new" do |env|
render "src/Kamel/views/posts/new_post.ecr", "src/Kamel/views/base.ecr"
end
post "/p/new" do |env|
save_new_item(env)
env.redirect "/p/index"
end
get "/p/:id" do |env|
render "src/Kamel/views/posts/show_post.ecr", "src/Kamel/views/base.ecr"
end
get "/p/:id/edit" do |env|
edit_an_item(env)
render "src/Kamel/views/posts/edit_post.ecr", "src/Kamel/views/base.ecr"
end
patch "/p/:id" do |env|
save_edited_item(env)
env.redirect "/p/#{changeset.instance.id}"
end
delete "/p/:id" do |env|
delete_an_item(env)
env.redirect "/p/index"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment