krack 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +20 -5
- data/krack.gemspec +1 -0
- data/lib/krack/endpoint.rb +5 -3
- data/lib/krack/error.rb +3 -4
- data/lib/krack/router.rb +2 -2
- data/lib/krack/version.rb +1 -1
- data/spec/endpoint_spec.rb +49 -0
- data/spec/spec_helper.rb +12 -1
- metadata +20 -2
data/README.md
CHANGED
@@ -3,18 +3,33 @@
|
|
3
3
|
Simple JSON APIs on Rack. Like so:
|
4
4
|
|
5
5
|
# config.ru
|
6
|
-
|
7
6
|
require 'krack'
|
8
7
|
|
8
|
+
class Widget # < "ORM"
|
9
|
+
DB = {
|
10
|
+
"1" => {name: "Foo", color: "Black"},
|
11
|
+
"2" => {name: "Bar", color: "White"}
|
12
|
+
}
|
13
|
+
def self.all; DB end
|
14
|
+
def self.find(id); DB[id] end
|
15
|
+
end
|
16
|
+
|
9
17
|
module Widgets
|
10
|
-
class
|
18
|
+
class Index < Krack::Endpoint
|
11
19
|
def respond
|
12
|
-
|
13
|
-
|
20
|
+
{widgets: Widget.all}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class Show < Krack::Endpoint
|
25
|
+
def respond
|
26
|
+
widget = Widget.find(params["id"]) or throw :halt, 404
|
27
|
+
{widget: widget}
|
14
28
|
end
|
15
29
|
end
|
16
30
|
end
|
17
|
-
|
31
|
+
|
18
32
|
run Krack::Router.new {
|
33
|
+
get "/widgets", Widgets::Index
|
19
34
|
get "/widgets/:id", Widgets::Show
|
20
35
|
}
|
data/krack.gemspec
CHANGED
data/lib/krack/endpoint.rb
CHANGED
@@ -12,8 +12,8 @@ module Krack
|
|
12
12
|
@response = Rack::Response.new([], 200, {"Content-Type" => "application/json"})
|
13
13
|
@params = env["krack.params"].merge(@request.params)
|
14
14
|
|
15
|
-
on_call
|
16
15
|
data = begin
|
16
|
+
on_call
|
17
17
|
respond_or_halt
|
18
18
|
rescue
|
19
19
|
on_error($!)
|
@@ -31,11 +31,13 @@ module Krack
|
|
31
31
|
def on_call; end
|
32
32
|
|
33
33
|
def on_error(error)
|
34
|
-
|
34
|
+
on_halt(500)
|
35
35
|
end
|
36
36
|
|
37
37
|
def on_halt(halt)
|
38
|
-
Krack::Error.new(halt)
|
38
|
+
e = Krack::Error.new(halt)
|
39
|
+
response.status = e.status
|
40
|
+
e.to_h
|
39
41
|
end
|
40
42
|
|
41
43
|
def output(data)
|
data/lib/krack/error.rb
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
module Krack
|
2
|
-
class Error
|
3
|
-
|
2
|
+
class Error
|
4
3
|
attr_accessor :status
|
5
4
|
|
6
5
|
def initialize(status=500)
|
7
|
-
@status = status
|
6
|
+
@status = Rack::Utils::HTTP_STATUS_CODES.has_key?(status) ? status : 500
|
8
7
|
end
|
9
8
|
|
10
|
-
def
|
9
|
+
def to_h
|
11
10
|
{error: {status: status, message: Rack::Utils::HTTP_STATUS_CODES[status]}}
|
12
11
|
end
|
13
12
|
end
|
data/lib/krack/router.rb
CHANGED
@@ -13,11 +13,11 @@ module Krack
|
|
13
13
|
next unless match = env["PATH_INFO"].match(route)
|
14
14
|
|
15
15
|
env["krack.params"] = Hash[match.names.zip(match.captures)]
|
16
|
-
return app.
|
16
|
+
return app.call(env)
|
17
17
|
end
|
18
18
|
not_found
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
def not_found
|
22
22
|
[404, {"Content-Type" => "text/plain"}, ["Not found"]]
|
23
23
|
end
|
data/lib/krack/version.rb
CHANGED
@@ -0,0 +1,49 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
class TestEndpoint < Krack::Endpoint
|
4
|
+
def respond
|
5
|
+
throw :halt, 400 if params["halt"] == "1"
|
6
|
+
raise if params["error"] == "1"
|
7
|
+
|
8
|
+
{
|
9
|
+
root: {
|
10
|
+
int_key: 1,
|
11
|
+
str_key: "foo bar",
|
12
|
+
arr_key: ["one", "two"],
|
13
|
+
test_param: params["test"]
|
14
|
+
}
|
15
|
+
}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def app
|
20
|
+
Krack::Router.new { get "/", TestEndpoint }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe TestEndpoint do
|
24
|
+
it "should succeed" do
|
25
|
+
get "/"
|
26
|
+
json = assert_json
|
27
|
+
json["root"]["int_key"].must_equal 1
|
28
|
+
json["root"]["str_key"].must_equal "foo bar"
|
29
|
+
json["root"]["arr_key"].must_equal ["one", "two"]
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should receive parameters" do
|
33
|
+
get "/", :test => "wibble"
|
34
|
+
json = assert_json
|
35
|
+
json["root"]["test_param"].must_equal "wibble"
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should halt" do
|
39
|
+
get "/", :halt => "1"
|
40
|
+
json = assert_json(400)
|
41
|
+
json["root"].must_be_nil
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should catch exceptions" do
|
45
|
+
get "/", :error => "1"
|
46
|
+
json = assert_json(500)
|
47
|
+
json["root"].must_be_nil
|
48
|
+
end
|
49
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,4 +1,15 @@
|
|
1
1
|
require 'minitest/autorun'
|
2
2
|
require 'minitest/spec'
|
3
|
+
require 'rack/test'
|
3
4
|
|
4
|
-
require_relative '../lib/krack'
|
5
|
+
require_relative '../lib/krack'
|
6
|
+
|
7
|
+
include Rack::Test::Methods
|
8
|
+
|
9
|
+
class MiniTest::Spec
|
10
|
+
def assert_json(status=200)
|
11
|
+
last_response.status.must_equal status
|
12
|
+
last_response.content_type.must_equal "application/json"
|
13
|
+
MultiJson.load(last_response.body)
|
14
|
+
end
|
15
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: krack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-02-
|
12
|
+
date: 2013-02-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
@@ -75,6 +75,22 @@ dependencies:
|
|
75
75
|
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rack-test
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
78
94
|
description: Simple JSON APIs on Rack
|
79
95
|
email:
|
80
96
|
- team@kovalo.com
|
@@ -92,6 +108,7 @@ files:
|
|
92
108
|
- lib/krack/error.rb
|
93
109
|
- lib/krack/router.rb
|
94
110
|
- lib/krack/version.rb
|
111
|
+
- spec/endpoint_spec.rb
|
95
112
|
- spec/router_spec.rb
|
96
113
|
- spec/spec_helper.rb
|
97
114
|
homepage: https://github.com/kovalo/krack
|
@@ -119,6 +136,7 @@ signing_key:
|
|
119
136
|
specification_version: 3
|
120
137
|
summary: Simple JSON APIs on Rack
|
121
138
|
test_files:
|
139
|
+
- spec/endpoint_spec.rb
|
122
140
|
- spec/router_spec.rb
|
123
141
|
- spec/spec_helper.rb
|
124
142
|
has_rdoc:
|