hobbit 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +0 -8
- data/CHANGELOG.md +5 -0
- data/lib/hobbit/base.rb +6 -8
- data/lib/hobbit/response.rb +17 -5
- data/lib/hobbit/version.rb +1 -1
- data/spec/response_spec.rb +67 -2
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a68ce23c8798644e29dae77f912930b9d862dec
|
4
|
+
data.tar.gz: 373a23fd64590f1691929adb749f7cf272789dbd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df6c35a1c894293ce4d6b05287b7bd7032cfe5c274fef9e20e682f09af6d2cdbd61e68918d1b8e5194715ebfad317164bf149317eb15b9bc5ed841d75d0b0eaa
|
7
|
+
data.tar.gz: f4723f82bd5e3036e9a93ca75aba09adccc13bfcfc56effaf5fc662eee1c47d00346953a370589151664f38c244a25f4e40b404d5d0981b91c7ba3833e3ad837
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
data/lib/hobbit/base.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
1
3
|
module Hobbit
|
2
4
|
class Base
|
3
5
|
class << self
|
6
|
+
extend Forwardable
|
7
|
+
|
8
|
+
def_delegators :stack, :map, :use
|
9
|
+
|
4
10
|
%w(DELETE GET HEAD OPTIONS PATCH POST PUT).each do |verb|
|
5
11
|
define_method(verb.downcase) { |path, &block| routes[verb] << compile_route(path, &block) }
|
6
12
|
end
|
7
13
|
|
8
|
-
def map(path, &block)
|
9
|
-
stack.map(path, &block)
|
10
|
-
end
|
11
|
-
|
12
14
|
alias :_new :new
|
13
15
|
def new(*args, &block)
|
14
16
|
stack.run _new(*args, &block)
|
@@ -23,10 +25,6 @@ module Hobbit
|
|
23
25
|
@stack ||= Rack::Builder.new
|
24
26
|
end
|
25
27
|
|
26
|
-
def use(middleware, *args, &block)
|
27
|
-
stack.use(middleware, *args, &block)
|
28
|
-
end
|
29
|
-
|
30
28
|
private
|
31
29
|
|
32
30
|
def compile_route(path, &block)
|
data/lib/hobbit/response.rb
CHANGED
@@ -1,10 +1,22 @@
|
|
1
|
-
require '
|
1
|
+
require 'forwardable'
|
2
2
|
|
3
3
|
module Hobbit
|
4
|
-
class Response
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
class Response
|
5
|
+
attr_accessor :body, :headers, :length, :status
|
6
|
+
extend Forwardable
|
7
|
+
def_delegators :headers, :[], :[]=
|
8
|
+
|
9
|
+
def initialize(body = [], status = 200, headers = { 'Content-Type' => 'text/html; charset=utf-8' })
|
10
|
+
@body, @headers, @status = body, headers, status
|
11
|
+
end
|
12
|
+
|
13
|
+
def finish
|
14
|
+
headers['Content-Length'] = body.each.map(&:size).inject { |memo, current| memo += current }
|
15
|
+
[status, headers, body]
|
16
|
+
end
|
17
|
+
|
18
|
+
def write(string)
|
19
|
+
self.body << string
|
8
20
|
end
|
9
21
|
end
|
10
22
|
end
|
data/lib/hobbit/version.rb
CHANGED
data/spec/response_spec.rb
CHANGED
@@ -2,8 +2,73 @@ require 'minitest_helper'
|
|
2
2
|
|
3
3
|
describe Hobbit::Response do
|
4
4
|
describe '#initialize' do
|
5
|
-
it 'must
|
6
|
-
|
5
|
+
it 'must set the body, status and headers with no arguments given' do
|
6
|
+
default_headers = { 'Content-Type' => 'text/html; charset=utf-8' }
|
7
|
+
response = Hobbit::Response.new
|
8
|
+
response.status.must_equal 200
|
9
|
+
response.headers.must_equal default_headers
|
10
|
+
response.body.must_equal []
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'must set the body, status and headers with arguments given' do
|
14
|
+
status, headers, body = 200, { 'Content-Type' => 'application/json' }, ['{"name":"Hobbit"}']
|
15
|
+
response = Hobbit::Response.new body, status, headers
|
16
|
+
response.status.must_equal status
|
17
|
+
response.headers.must_equal headers
|
18
|
+
response.body.must_equal body
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#[]' do
|
23
|
+
let(:response) { Hobbit::Response.new }
|
24
|
+
|
25
|
+
it 'must respond to #[]' do
|
26
|
+
response.must_respond_to :[]
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'must return a header' do
|
30
|
+
response['Content-Type'].must_equal 'text/html; charset=utf-8'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#[]=' do
|
35
|
+
let(:response) { Hobbit::Response.new }
|
36
|
+
|
37
|
+
it 'must respond to #[]=' do
|
38
|
+
response.must_respond_to :[]=
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'must set a header' do
|
42
|
+
content_type = 'text/html; charset=utf-8'
|
43
|
+
response['Content-Type'] = content_type
|
44
|
+
response['Content-Type'].must_equal content_type
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe '#finish' do
|
49
|
+
let(:status) { 200 }
|
50
|
+
let(:headers) { { 'Content-Type' => 'application/json' } }
|
51
|
+
let(:body) { ['{"name":"Hobbit"}'] }
|
52
|
+
|
53
|
+
it 'must return a 3 elements array with status, headers and body' do
|
54
|
+
response = Hobbit::Response.new body, status, headers
|
55
|
+
response.finish.must_equal [status, headers, body]
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'must calculate the Content-Length of the body' do
|
59
|
+
response = Hobbit::Response.new body, status, headers
|
60
|
+
s, h, b = response.finish
|
61
|
+
h.must_include 'Content-Length'
|
62
|
+
h['Content-Length'].must_equal body.each.map(&:size).inject { |m, s| m += s }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe '#write' do
|
67
|
+
let(:response) { Hobbit::Response.new }
|
68
|
+
|
69
|
+
it 'must append the argument to the body of the response' do
|
70
|
+
response.write 'hello world'
|
71
|
+
response.body.must_equal ['hello world']
|
7
72
|
end
|
8
73
|
end
|
9
74
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hobbit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patricio Mac Adden
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -117,6 +117,7 @@ extra_rdoc_files: []
|
|
117
117
|
files:
|
118
118
|
- .gitignore
|
119
119
|
- .travis.yml
|
120
|
+
- CHANGELOG.md
|
120
121
|
- Gemfile
|
121
122
|
- LICENSE
|
122
123
|
- README.md
|
@@ -150,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
151
|
version: '0'
|
151
152
|
requirements: []
|
152
153
|
rubyforge_project:
|
153
|
-
rubygems_version: 2.0.
|
154
|
+
rubygems_version: 2.0.14
|
154
155
|
signing_key:
|
155
156
|
specification_version: 4
|
156
157
|
summary: A minimalistic microframework built on top of rack
|