hobbit-contrib 0.2.0 → 0.2.1
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/README.md +1 -2
- data/lib/hobbit/asset_tag.rb +1 -1
- data/lib/hobbit/contrib/version.rb +1 -1
- data/lib/hobbit/environment.rb +3 -7
- data/lib/hobbit/error_handling.rb +6 -4
- data/lib/hobbit/filter.rb +8 -8
- data/lib/hobbit/session.rb +1 -1
- data/spec/asset_tag_spec.rb +1 -1
- data/spec/environment_spec.rb +15 -25
- data/spec/error_handling_and_filter_spec.rb +1 -1
- data/spec/error_handling_spec.rb +39 -14
- data/spec/filter_spec.rb +52 -1
- data/spec/fixtures/render/views/index.erb +1 -1
- data/spec/fixtures/render/views/layouts/application.erb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 160bf219184ef2cdbcd0a5447498bb174bed1d1f
|
4
|
+
data.tar.gz: ac07c279356e39dc84f49411b7889cb1de3b5361
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 877a329df35df6e31de1687f427faf5dbb91a033111925de889406223f461fa70bb845f79cf51146345a82e655112f8a6cb9801a2a1382d70f516d245a31a984
|
7
|
+
data.tar.gz: bd72e44636f80a4b8d4d83cae8a3b538e65fd5819e4f279064d7b61d68d7813b16bc92812787a40a37d9495be39baa2b7c432ee5a13ec516b198e5f47fe0dc32
|
data/README.md
CHANGED
@@ -61,7 +61,7 @@ class App < Hobbit::Base
|
|
61
61
|
# * public/stylesheets
|
62
62
|
use Rack::Static, root: 'public', urls: ['/images', '/javascripts', '/stylesheets']
|
63
63
|
include Hobbit::AssetTag
|
64
|
-
include Hobbit::
|
64
|
+
include Hobbit::Render # see below
|
65
65
|
|
66
66
|
get '/' do
|
67
67
|
render 'index', {}, layout: 'layout'
|
@@ -142,7 +142,6 @@ run App.new
|
|
142
142
|
|
143
143
|
* `environment`: Returns the current environment. By default is
|
144
144
|
`ENV['RACK_ENV']`.
|
145
|
-
* `environment=()`: Sets the environment.
|
146
145
|
* `development?`: Returns true if the current environment is `:development`.
|
147
146
|
* `production?`: Returns true if the current environment is `:production`.
|
148
147
|
* `test?`: Returns true if the current environment is `:test`.
|
data/lib/hobbit/asset_tag.rb
CHANGED
data/lib/hobbit/environment.rb
CHANGED
@@ -1,15 +1,11 @@
|
|
1
1
|
module Hobbit
|
2
2
|
module Environment
|
3
3
|
def environment
|
4
|
-
|
4
|
+
ENV['RACK_ENV'].to_sym
|
5
5
|
end
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
%w(development production test).each do |environment|
|
12
|
-
define_method("#{environment}?") { self.class.settings[:environment] == environment.to_sym }
|
7
|
+
%w(development production test).each do |env|
|
8
|
+
define_method("#{env}?") { environment == env.to_sym }
|
13
9
|
end
|
14
10
|
end
|
15
11
|
end
|
@@ -12,9 +12,11 @@ module Hobbit
|
|
12
12
|
|
13
13
|
def _call(env)
|
14
14
|
super
|
15
|
-
rescue
|
16
|
-
|
17
|
-
|
15
|
+
rescue *self.class.errors.keys => e
|
16
|
+
rescued = self.class.errors.keys.detect { |k| e.kind_of?(k)}
|
17
|
+
|
18
|
+
body = instance_eval { self.class.errors[rescued].call(e) }
|
19
|
+
response.body = [body]
|
18
20
|
response.finish
|
19
21
|
end
|
20
22
|
|
@@ -22,4 +24,4 @@ module Hobbit
|
|
22
24
|
othermod.extend ClassMethods
|
23
25
|
end
|
24
26
|
end
|
25
|
-
end
|
27
|
+
end
|
data/lib/hobbit/filter.rb
CHANGED
@@ -2,7 +2,7 @@ module Hobbit
|
|
2
2
|
module Filter
|
3
3
|
module ClassMethods
|
4
4
|
%w(after before).each do |kind|
|
5
|
-
define_method(kind) { |path = '', &block| filters[kind.to_sym] << compile_filter
|
5
|
+
define_method(kind) { |path = '', &block| filters[kind.to_sym] << compile_filter(path, &block) }
|
6
6
|
end
|
7
7
|
|
8
8
|
def filters
|
@@ -11,7 +11,7 @@ module Hobbit
|
|
11
11
|
|
12
12
|
private
|
13
13
|
|
14
|
-
def compile_filter
|
14
|
+
def compile_filter(path, &block)
|
15
15
|
filter = { block: block, compiled_path: nil, extra_params: [], path: path }
|
16
16
|
|
17
17
|
compiled_path = path.gsub(/:\w+/) do |match|
|
@@ -26,11 +26,11 @@ module Hobbit
|
|
26
26
|
|
27
27
|
def _call(env)
|
28
28
|
@env = env
|
29
|
-
@request =
|
30
|
-
@response =
|
31
|
-
filter
|
29
|
+
@request = Rack::Request.new(@env)
|
30
|
+
@response = Hobbit::Response.new
|
31
|
+
filter :before
|
32
32
|
super
|
33
|
-
filter
|
33
|
+
filter :after
|
34
34
|
@response.finish
|
35
35
|
end
|
36
36
|
|
@@ -40,7 +40,7 @@ module Hobbit
|
|
40
40
|
|
41
41
|
private
|
42
42
|
|
43
|
-
def filter
|
43
|
+
def filter(kind)
|
44
44
|
filter = self.class.filters[kind].detect { |f| f[:compiled_path] =~ request.path_info || f[:path] =~ // }
|
45
45
|
if filter
|
46
46
|
$~.captures.each_with_index do |value, index|
|
@@ -51,4 +51,4 @@ module Hobbit
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
54
|
-
end
|
54
|
+
end
|
data/lib/hobbit/session.rb
CHANGED
data/spec/asset_tag_spec.rb
CHANGED
data/spec/environment_spec.rb
CHANGED
@@ -11,55 +11,45 @@ describe Hobbit::Environment do
|
|
11
11
|
|
12
12
|
describe '#environment' do
|
13
13
|
it 'must return the current environment' do
|
14
|
-
|
14
|
+
env, ENV['RACK_ENV'] = ENV['RACK_ENV'], 'development'
|
15
15
|
app.to_app.environment.must_equal :development
|
16
|
-
|
17
|
-
|
18
|
-
it 'must default to RACK_ENV' do
|
19
|
-
app.to_app.environment.must_equal ENV['RACK_ENV'].to_sym
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe '#environment=()' do
|
24
|
-
it 'must set the environment' do
|
25
|
-
app.to_app.environment = :test
|
26
|
-
app.to_app.environment.must_equal :test
|
16
|
+
ENV['RACK_ENV'] = env
|
27
17
|
end
|
28
18
|
end
|
29
19
|
|
30
20
|
describe '#development?' do
|
31
|
-
it
|
32
|
-
|
21
|
+
it "must return true if ENV['RACK_ENV'] = :development" do
|
22
|
+
env, ENV['RACK_ENV'] = ENV['RACK_ENV'], 'development'
|
33
23
|
app.to_app.development?.must_equal true
|
24
|
+
ENV['RACK_ENV'] = env
|
34
25
|
end
|
35
26
|
|
36
|
-
it
|
37
|
-
app.to_app.environment = :production
|
27
|
+
it "must return false if ENV['RACK_ENV'] != :development" do
|
38
28
|
app.to_app.development?.must_equal false
|
39
29
|
end
|
40
30
|
end
|
41
31
|
|
42
32
|
describe '#production?' do
|
43
|
-
it
|
44
|
-
|
33
|
+
it "must return true if ENV['RACK_ENV'] = :production" do
|
34
|
+
env, ENV['RACK_ENV'] = ENV['RACK_ENV'], 'production'
|
45
35
|
app.to_app.production?.must_equal true
|
36
|
+
ENV['RACK_ENV'] = env
|
46
37
|
end
|
47
38
|
|
48
|
-
it
|
49
|
-
app.to_app.environment = :test
|
39
|
+
it "must return false if ENV['RACK_ENV'] != :production" do
|
50
40
|
app.to_app.production?.must_equal false
|
51
41
|
end
|
52
42
|
end
|
53
43
|
|
54
44
|
describe '#test?' do
|
55
|
-
it
|
56
|
-
app.to_app.environment = :test
|
45
|
+
it "must return true if ENV['RACK_ENV'] = :test" do
|
57
46
|
app.to_app.test?.must_equal true
|
58
47
|
end
|
59
48
|
|
60
|
-
it
|
61
|
-
|
49
|
+
it "must return false if ENV['RACK_ENV'] != :test" do
|
50
|
+
env, ENV['RACK_ENV'] = ENV['RACK_ENV'], 'development'
|
62
51
|
app.to_app.test?.must_equal false
|
52
|
+
ENV['RACK_ENV'] = env
|
63
53
|
end
|
64
54
|
end
|
65
|
-
end
|
55
|
+
end
|
data/spec/error_handling_spec.rb
CHANGED
@@ -4,33 +4,46 @@ describe Hobbit::ErrorHandling do
|
|
4
4
|
include Hobbit::Contrib::Mock
|
5
5
|
include Rack::Test::Methods
|
6
6
|
|
7
|
-
class NotFoundException <
|
7
|
+
class NotFoundException < Exception ; end
|
8
|
+
class SpecificNotFoundException < NotFoundException ; end
|
9
|
+
class UnknownException < Exception ; end
|
8
10
|
|
9
11
|
let(:app) do
|
10
12
|
mock_app do
|
11
13
|
include Hobbit::ErrorHandling
|
12
14
|
|
13
|
-
error Exception do |exception|
|
14
|
-
exception.message
|
15
|
-
end
|
16
|
-
|
17
15
|
error NotFoundException do
|
18
16
|
'Not Found'
|
19
17
|
end
|
20
18
|
|
19
|
+
error StandardError do |exception|
|
20
|
+
exception.message
|
21
|
+
end
|
22
|
+
|
23
|
+
|
21
24
|
get '/' do
|
22
25
|
'hello'
|
23
26
|
end
|
24
27
|
|
25
28
|
get '/raises' do
|
26
29
|
'not this'
|
27
|
-
raise
|
30
|
+
raise StandardError, 'StandardError'
|
28
31
|
end
|
29
32
|
|
30
33
|
get '/other_raises' do
|
31
34
|
response.write 'not this'
|
32
35
|
raise NotFoundException
|
33
36
|
end
|
37
|
+
|
38
|
+
get '/same_other_raises' do
|
39
|
+
response.write 'not this'
|
40
|
+
raise SpecificNotFoundException
|
41
|
+
end
|
42
|
+
|
43
|
+
get '/uncaught_raise' do
|
44
|
+
response.write 'not this'
|
45
|
+
raise UnknownException
|
46
|
+
end
|
34
47
|
end
|
35
48
|
end
|
36
49
|
|
@@ -39,11 +52,11 @@ describe Hobbit::ErrorHandling do
|
|
39
52
|
p = Proc.new { 'error' }
|
40
53
|
app = mock_app do
|
41
54
|
include Hobbit::ErrorHandling
|
42
|
-
error
|
55
|
+
error StandardError, &p
|
43
56
|
end
|
44
57
|
|
45
|
-
app.to_app.class.errors.must_include
|
46
|
-
app.to_app.class.errors[
|
58
|
+
app.to_app.class.errors.must_include StandardError
|
59
|
+
app.to_app.class.errors[StandardError].call.must_equal p.call
|
47
60
|
end
|
48
61
|
end
|
49
62
|
|
@@ -53,7 +66,7 @@ describe Hobbit::ErrorHandling do
|
|
53
66
|
end
|
54
67
|
end
|
55
68
|
|
56
|
-
describe 'when does not
|
69
|
+
describe 'when does not raise exception' do
|
57
70
|
it 'must work as expected' do
|
58
71
|
get '/'
|
59
72
|
last_response.must_be :ok?
|
@@ -61,11 +74,17 @@ describe Hobbit::ErrorHandling do
|
|
61
74
|
end
|
62
75
|
end
|
63
76
|
|
64
|
-
describe 'when
|
77
|
+
describe 'when does raise an unknown exception class' do
|
78
|
+
it 'must not halt default propagation of the unknown class' do
|
79
|
+
proc {get '/uncaught_raise'}.must_raise(UnknownException)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe 'when raises an known exception class' do
|
65
84
|
it 'must call the block set in error' do
|
66
85
|
get '/raises'
|
67
86
|
last_response.must_be :ok?
|
68
|
-
last_response.body.must_equal '
|
87
|
+
last_response.body.must_equal 'StandardError'
|
69
88
|
end
|
70
89
|
|
71
90
|
it 'must allow to define more than one exception' do
|
@@ -74,6 +93,12 @@ describe Hobbit::ErrorHandling do
|
|
74
93
|
last_response.body.must_equal 'Not Found'
|
75
94
|
end
|
76
95
|
|
96
|
+
it 'must allow to define a general exception class to catch' do
|
97
|
+
get '/same_other_raises'
|
98
|
+
last_response.must_be :ok?
|
99
|
+
last_response.body.must_equal 'Not Found'
|
100
|
+
end
|
101
|
+
|
77
102
|
it 'must set the returned value of the error block as the body' do
|
78
103
|
get '/other_raises'
|
79
104
|
last_response.must_be :ok?
|
@@ -82,7 +107,7 @@ describe Hobbit::ErrorHandling do
|
|
82
107
|
end
|
83
108
|
|
84
109
|
it 'must override a previous block if a new one is passed' do
|
85
|
-
app.to_app.class.error
|
110
|
+
app.to_app.class.error StandardError do
|
86
111
|
'other handler!'
|
87
112
|
end
|
88
113
|
|
@@ -91,4 +116,4 @@ describe Hobbit::ErrorHandling do
|
|
91
116
|
last_response.body.must_equal 'other handler!'
|
92
117
|
end
|
93
118
|
end
|
94
|
-
end
|
119
|
+
end
|
data/spec/filter_spec.rb
CHANGED
@@ -55,6 +55,57 @@ EOS
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
+
describe '::compile_filter' do
|
59
|
+
let(:block) { block = Proc.new { |env| [200, {}, []] } }
|
60
|
+
|
61
|
+
it 'must compile an empty string' do
|
62
|
+
path = ''
|
63
|
+
route = app.to_app.class.send :compile_filter, path, &block
|
64
|
+
route[:block].call({}).must_equal block.call({})
|
65
|
+
route[:compiled_path].to_s.must_equal /^$/.to_s
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'must compile /' do
|
69
|
+
path = '/'
|
70
|
+
route = app.to_app.class.send :compile_filter, path, &block
|
71
|
+
route[:block].call({}).must_equal block.call({})
|
72
|
+
route[:compiled_path].to_s.must_equal /^\/$/.to_s
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'must compile with .' do
|
76
|
+
path = '/route.json'
|
77
|
+
route = app.to_app.class.send :compile_filter, path, &block
|
78
|
+
route[:block].call({}).must_equal block.call({})
|
79
|
+
route[:compiled_path].to_s.must_equal /^\/route.json$/.to_s
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'must compile with -' do
|
83
|
+
path = '/hello-world'
|
84
|
+
route = app.to_app.class.send :compile_filter, path, &block
|
85
|
+
route[:block].call({}).must_equal block.call({})
|
86
|
+
route[:compiled_path].to_s.must_equal /^\/hello-world$/.to_s
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'must compile with params' do
|
90
|
+
path = '/hello/:name'
|
91
|
+
route = app.to_app.class.send :compile_filter, path, &block
|
92
|
+
route[:block].call({}).must_equal block.call({})
|
93
|
+
route[:compiled_path].to_s.must_equal /^\/hello\/([^\/?#]+)$/.to_s
|
94
|
+
|
95
|
+
path = '/say/:something/to/:someone'
|
96
|
+
route = app.to_app.class.send :compile_filter, path, &block
|
97
|
+
route[:block].call({}).must_equal block.call({})
|
98
|
+
route[:compiled_path].to_s.must_equal /^\/say\/([^\/?#]+)\/to\/([^\/?#]+)$/.to_s
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'must compile with . and params' do
|
102
|
+
path = '/route/:id.json'
|
103
|
+
route = app.to_app.class.send :compile_filter, path, &block
|
104
|
+
route[:block].call({}).must_equal block.call({})
|
105
|
+
route[:compiled_path].to_s.must_equal /^\/route\/([^\/?#]+).json$/.to_s
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
58
109
|
it 'must call before and after filters' do
|
59
110
|
get '/'
|
60
111
|
last_response.must_be :ok?
|
@@ -98,4 +149,4 @@ EOS
|
|
98
149
|
last_request.env['hobbit.after'].must_equal 'this will match'
|
99
150
|
end
|
100
151
|
end
|
101
|
-
end
|
152
|
+
end
|
@@ -1 +1 @@
|
|
1
|
-
<h1>Hello World!</h1>
|
1
|
+
<h1>Hello World!</h1>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hobbit-contrib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
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-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -190,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
190
190
|
version: '0'
|
191
191
|
requirements: []
|
192
192
|
rubyforge_project:
|
193
|
-
rubygems_version: 2.0.
|
193
|
+
rubygems_version: 2.0.3
|
194
194
|
signing_key:
|
195
195
|
specification_version: 4
|
196
196
|
summary: Contributed Hobbit extensions
|