Quick RESTful API
This commit is contained in:
commit
f678a77677
12 changed files with 208 additions and 0 deletions
2
.bundle/config
Normal file
2
.bundle/config
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
---
|
||||||
|
BUNDLE_WITHOUT: production
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
db/*.db
|
16
Gemfile
Normal file
16
Gemfile
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
source 'https://rubygems.org'
|
||||||
|
ruby "2.2.2"
|
||||||
|
|
||||||
|
gem 'activerecord'
|
||||||
|
gem 'sinatra'
|
||||||
|
|
||||||
|
gem 'sinatra-activerecord'
|
||||||
|
|
||||||
|
group :production do
|
||||||
|
gem 'pg'
|
||||||
|
end
|
||||||
|
|
||||||
|
group :development do
|
||||||
|
gem 'sqlite3'
|
||||||
|
gem 'rerun'
|
||||||
|
end
|
60
Gemfile.lock
Normal file
60
Gemfile.lock
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
GEM
|
||||||
|
remote: https://rubygems.org/
|
||||||
|
specs:
|
||||||
|
activemodel (4.2.4)
|
||||||
|
activesupport (= 4.2.4)
|
||||||
|
builder (~> 3.1)
|
||||||
|
activerecord (4.2.4)
|
||||||
|
activemodel (= 4.2.4)
|
||||||
|
activesupport (= 4.2.4)
|
||||||
|
arel (~> 6.0)
|
||||||
|
activesupport (4.2.4)
|
||||||
|
i18n (~> 0.7)
|
||||||
|
json (~> 1.7, >= 1.7.7)
|
||||||
|
minitest (~> 5.1)
|
||||||
|
thread_safe (~> 0.3, >= 0.3.4)
|
||||||
|
tzinfo (~> 1.1)
|
||||||
|
arel (6.0.3)
|
||||||
|
builder (3.2.2)
|
||||||
|
ffi (1.9.10)
|
||||||
|
i18n (0.7.0)
|
||||||
|
json (1.8.3)
|
||||||
|
listen (3.0.3)
|
||||||
|
rb-fsevent (>= 0.9.3)
|
||||||
|
rb-inotify (>= 0.9)
|
||||||
|
minitest (5.8.1)
|
||||||
|
pg (0.18.3)
|
||||||
|
rack (1.6.4)
|
||||||
|
rack-protection (1.5.3)
|
||||||
|
rack
|
||||||
|
rb-fsevent (0.9.6)
|
||||||
|
rb-inotify (0.9.5)
|
||||||
|
ffi (>= 0.5.0)
|
||||||
|
rerun (0.11.0)
|
||||||
|
listen (~> 3.0)
|
||||||
|
sinatra (1.4.6)
|
||||||
|
rack (~> 1.4)
|
||||||
|
rack-protection (~> 1.4)
|
||||||
|
tilt (>= 1.3, < 3)
|
||||||
|
sinatra-activerecord (2.0.9)
|
||||||
|
activerecord (>= 3.2)
|
||||||
|
sinatra (~> 1.0)
|
||||||
|
sqlite3 (1.3.11)
|
||||||
|
thread_safe (0.3.5)
|
||||||
|
tilt (2.0.1)
|
||||||
|
tzinfo (1.2.2)
|
||||||
|
thread_safe (~> 0.1)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
ruby
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
activerecord
|
||||||
|
pg
|
||||||
|
rerun
|
||||||
|
sinatra
|
||||||
|
sinatra-activerecord
|
||||||
|
sqlite3
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
1.10.6
|
7
Rakefile
Normal file
7
Rakefile
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
require './app'
|
||||||
|
require 'sinatra/activerecord/rake'
|
||||||
|
|
||||||
|
desc 'Starts the development server'
|
||||||
|
task :serve do
|
||||||
|
`bundle exec rerun -b rackup`
|
||||||
|
end
|
64
app.rb
Normal file
64
app.rb
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
require 'rubygems'
|
||||||
|
require 'bundler'
|
||||||
|
require 'bundler/setup'
|
||||||
|
Bundler.require
|
||||||
|
|
||||||
|
require './config/environments'
|
||||||
|
|
||||||
|
require './model/joke'
|
||||||
|
|
||||||
|
before do
|
||||||
|
content_type :json
|
||||||
|
response.headers['Access-Control-Allow-Origin'] = '*'
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/jokes' do
|
||||||
|
Joke.all.to_json
|
||||||
|
end
|
||||||
|
|
||||||
|
post '/jokes' do
|
||||||
|
@joke = Joke.new(params[:joke])
|
||||||
|
|
||||||
|
if @joke.save
|
||||||
|
status 204
|
||||||
|
else
|
||||||
|
status 422
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/jokes/:id' do
|
||||||
|
begin
|
||||||
|
@joke = Joke.find(params[:id])
|
||||||
|
rescue Exception
|
||||||
|
status 404
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
@joke.to_json
|
||||||
|
end
|
||||||
|
|
||||||
|
put '/jokes/:id' do
|
||||||
|
begin
|
||||||
|
@joke = Joke.find(params[:id])
|
||||||
|
rescue Exception
|
||||||
|
status 404
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if @joke.update(params[:joke])
|
||||||
|
status 204
|
||||||
|
else
|
||||||
|
status 422
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
delete '/jokes/:id' do
|
||||||
|
begin
|
||||||
|
@joke = Joke.find(params[:id])
|
||||||
|
|
||||||
|
@joke.delete
|
||||||
|
rescue Exception
|
||||||
|
end
|
||||||
|
|
||||||
|
status 204
|
||||||
|
end
|
2
config.ru
Normal file
2
config.ru
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
require './app'
|
||||||
|
run Sinatra::Application
|
16
config/environments.rb
Normal file
16
config/environments.rb
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
configure :development do
|
||||||
|
set :database, 'sqlite3:db/development.db'
|
||||||
|
end
|
||||||
|
|
||||||
|
configure :production do
|
||||||
|
db = URI.parse(ENV['DATABASE_URL'] || 'postgres:///localhost/mydb')
|
||||||
|
|
||||||
|
ActiveRecord::Base.establish_connection(
|
||||||
|
:adapter => db.scheme == 'postgres' ? 'postgresql' : db.scheme,
|
||||||
|
:host => db.host,
|
||||||
|
:username => db.user,
|
||||||
|
:password => db.password,
|
||||||
|
:database => db.path[1..-1],
|
||||||
|
:encoding => 'utf8'
|
||||||
|
)
|
||||||
|
end
|
9
db/migrate/20151012185754_create_jokes.rb
Normal file
9
db/migrate/20151012185754_create_jokes.rb
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
class CreateJokes < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
create_table :jokes do |t|
|
||||||
|
t.string :joke
|
||||||
|
|
||||||
|
t.timestamps null: false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
5
db/migrate/20151012201008_add_punchline_to_jokes.rb
Normal file
5
db/migrate/20151012201008_add_punchline_to_jokes.rb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
class AddPunchlineToJokes < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :jokes, :punchline, :string
|
||||||
|
end
|
||||||
|
end
|
23
db/schema.rb
Normal file
23
db/schema.rb
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# encoding: UTF-8
|
||||||
|
# This file is auto-generated from the current state of the database. Instead
|
||||||
|
# of editing this file, please use the migrations feature of Active Record to
|
||||||
|
# incrementally modify your database, and then regenerate this schema definition.
|
||||||
|
#
|
||||||
|
# Note that this schema.rb definition is the authoritative source for your
|
||||||
|
# database schema. If you need to create the application database on another
|
||||||
|
# system, you should be using db:schema:load, not running all the migrations
|
||||||
|
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
||||||
|
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
||||||
|
#
|
||||||
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
|
ActiveRecord::Schema.define(version: 20151012201008) do
|
||||||
|
|
||||||
|
create_table "jokes", force: :cascade do |t|
|
||||||
|
t.string "joke"
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
t.string "punchline"
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
3
model/joke.rb
Normal file
3
model/joke.rb
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
class Joke < ActiveRecord::Base
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in a new issue