-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi.rb
More file actions
139 lines (122 loc) · 3.66 KB
/
Copy pathapi.rb
File metadata and controls
139 lines (122 loc) · 3.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
require 'bundler/setup'
require './models/user'
require './models/post'
require './models/comment'
require 'active_record'
Bundler.require
ActiveRecord::Base.configurations = YAML::load(IO.read('config/database.yml'))
ActiveRecord::Base.establish_connection("development")
ActiveRecord::Base.logger = Logger.new('log/debug.log')
class API < Grape::API
format :json
helpers do
def logger
API.logger
end
end
resource :users do
desc "Return all users."
get "/" do
User.all
end
desc "Get user by id."
params do
requires :id, :type => Integer, :desc => "User id."
end
get ":id" do
User.find(params[:id])
end
desc "Create new user."
params do
requires :name, :type => String, :desc => "User name."
requires :state, :type => String, :desc => "User state."
end
post "/" do
User.create name: params[:name], state: params[:state]
end
desc "Update user."
params do
requires :name, :type => String, :desc => "User name."
requires :state, :type => String, :desc => "User state."
end
put ":id" do
user = User.find(params[:id])
user.update_attributes name: params[:name], state: params[:state]
user.save
end
desc "Delete last user."
delete :last do
User.last.destroy
end
desc "Get user posts"
params do
requires :id, :type => Integer, :desc => "User id."
end
get ":id/posts" do
if params[:include]
if params[:limit]
Post.where(:user_id => params[:id]).limit(params[:limit].to_i).as_json(:include => {:comments => { :only => :content}})
else
User.find(params[:id]).posts.as_json(:include => {:comments => { :only => :content}})
end
else
User.find(params[:id]).posts
end
end
desc "Get last 5 user's posts."
params do
requires :id, :type => Integer, :desc => "User id."
end
get ":id/posts/last_five" do
User.find(params[:id]).posts.order("created_at DESC").limit(5)
end
desc "Create new post."
params do
requires :id, :type => Integer, :desc => "User id."
end
post ":id/posts" do
user = User.find(params[:id])
user.posts.create title: params[:title], content: params[:content]
end
desc "Update post."
params do
requires :title, :type => String, :desc => "Post title."
requires :content, :type => String, :desc => "Post content."
end
put ":id/posts/:post_id" do
post = User.find(params[:id]).posts.find(params[:post_id])
post.update_attributes title: params[:title], content: params[:content]
post.save
end
desc "Delete last user's post."
params do
requires :id, :type => Integer, :desc => "User's id."
end
delete ":id/posts/last" do
User.find(params[:id]).posts.order("created_at ASC").last.destroy
end
end
#----------------------Posts----------------------------
desc "Get one user post."
params do
requires :id, :type => Integer, :desc => "Post id."
end
get "posts/:id" do
Post.find(params[:id])
end
#----------------------Comments-------------------------
desc "Get comments"
get "posts/:id/comments" do
Post.find(params[:id]).comments
end
desc "Create new comment."
params do
requires :id, :type => Integer, :desc => "Post id."
requires :content, :type => String, :desc => "Comment content."
requires :user_id, :type => Integer, :desc => "User id."
end
post "posts/:id/comments" do
post = Post.find(params[:id])
post.comments.create content: params[:content], user_id: params[:user_id]
end
end