sinatra_simple_router 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NzdlNDVmMGY3OGYzYTU5NjZjYTk1YWFhZTFhZTYxNmYzNzY5NjY4OQ==
4
+ MzJlMzc1NjVhODRmODZmMDFiNTdjZGVkNDVjNzQxYzE2NDVkMGQyYg==
5
5
  data.tar.gz: !binary |-
6
- YWU2ODZiZTZjZTZmMzIxOTBmNjIyZjU4MzIwZGJmZDBlN2Q0MzAzZA==
6
+ N2YwMDZkZGQxOTRmNTNlNDM5YmVhYzY2ZmQ0MTA4YWExMmI0MTQ2Ng==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MDgxOTdhZmY3NDkzOTVjMTFiMjVmMzE1MmY0NzU2YjEzZDkwODQzZTY1Zjlk
10
- ZTM5NzU4YjhmNGQ1NGY5Y2YyMDNjNjQ1ZGMzYmI5NDY3OTdkMDBmOGUzMDBl
11
- ZGFhZGRlMDNjYmY2NzgyM2Q4MGY2NzBmZDA5Yjc1ZmVkNGJlMDQ=
9
+ OTZjOWE5NDU4NDUyNjlkZmUyYzAyOGI5MjhiOTQwYjVlODZhNzU5OWNiZDg1
10
+ ZjQwOWZhOTJhYTE0MmZmMjcyZDFiZDgzNzA2NDkzYTJhNzcyOTczZTMxMmQw
11
+ M2ZmMWIwOGIyZmZjY2M5NTJkZGJjNjFhZDQ3YjkwNDNhMGZiMTA=
12
12
  data.tar.gz: !binary |-
13
- ODZkMTRhYzhlMjJkOTc0ZjAxMTVjM2I1ZjFlMzI2MTZkMGE1MDdjM2Y3Y2M4
14
- MGI5Njk1OWFlMDMwNTEzMTQyYWMwN2RmNTk3OGMwNmQ4MjZjNjBlZmE3YjY4
15
- OGQzZTQwZTFhYjc3OGQ5NzFlOTNkM2QzNmM5NDc3Yjg1YjFhNjg=
13
+ OWNjZDUxMzkyMWM1MGIxN2QzZTdiZTYwNjMzMDk1OTY5MDc5Mzg3NzY4M2Ew
14
+ MDQ5YTg5OGI0NWZhZTE1MmM2YzZhZjA3NWQ4MWJjZjZjZWRiOGFhZGFmYWRh
15
+ Y2FjYjc4ZTU4ZjFmZDFiY2FhZTE2OGFmMzljYmQ4YzkxYTE0MjY=
data/README.md CHANGED
@@ -94,6 +94,28 @@ class Application < Sinatra::Base
94
94
  end
95
95
  ```
96
96
 
97
+ ### Rescue exceptions raised in controllers
98
+
99
+ ```ruby
100
+ class ItemsController < SinatraSimpleRouter::Controller
101
+ def create
102
+ @item = Item.new(params[:item])
103
+ @item.save!
104
+ render json: @item
105
+ end
106
+ end
107
+
108
+ class Application < Sinatra::Base
109
+ include SinatraSimpleRouter
110
+
111
+ rescue_exception MongoMapper::DocumentNotValid do |exception, controller|
112
+ controller.render json: {error: exception.document.errors}, status: 400
113
+ end
114
+
115
+ match :post, "/items.json", ItemsController, :create
116
+ end
117
+ ```
118
+
97
119
  ## Contributing
98
120
 
99
121
  1. Fork it
data/Rakefile CHANGED
@@ -13,14 +13,16 @@ task :install => :build do
13
13
  end
14
14
 
15
15
  task :release => :build do
16
- system "git tag -a v#{SinatraSimpleRouter::VERSION} -m 'Tagging #{SinatraSimpleRouter::VERSION}'"
17
- system "git push --tags"
18
- system "gem push sinatra_simple_router-#{SinatraSimpleRouter::VERSION}.gem"
19
- system "rm *.gem"
16
+ cmds = []
17
+ cmds << "git tag -a v#{SinatraSimpleRouter::VERSION} -m 'Tagging #{SinatraSimpleRouter::VERSION}'"
18
+ cmds << "git push --tags"
19
+ cmds << "gem push sinatra_simple_router-#{SinatraSimpleRouter::VERSION}.gem"
20
+ cmds << "rm *.gem"
21
+ system cmds.join(' && ')
20
22
  end
21
23
 
22
24
  RSpec::Core::RakeTask.new("spec") do |spec|
23
25
  spec.pattern = "spec/**/*_spec.rb"
24
26
  end
25
27
 
26
- task :default => :spec
28
+ task :default => :spec
@@ -11,14 +11,36 @@ module SinatraSimpleRouter
11
11
  end
12
12
 
13
13
  module ClassMethods
14
+ @@rescued_exceptions = {}
15
+
16
+ def rescue_exception(exception, &block)
17
+ exception_name = exception.name
18
+
19
+ if @@rescued_exceptions[exception_name]
20
+ @@rescued_exceptions[exception_name] << block
21
+ else
22
+ @@rescued_exceptions[exception_name] = [block]
23
+ end
24
+ end
25
+
14
26
  def match(method, path, klass, action)
15
27
  if @version
16
28
  path = "/#{@version}#{path}"
17
29
  end
18
30
 
19
- puts "Registering: #{path}"
20
31
  send(method, path) do
21
- klass.new(self).send(action)
32
+ begin
33
+ klass.new(self).send(action)
34
+ rescue => e
35
+ handlers = Array(@@rescued_exceptions[e.class.name])
36
+ if handlers.any?
37
+ handlers.map do |handler|
38
+ handler.call(e, klass.new(self))
39
+ end
40
+ else
41
+ raise e
42
+ end
43
+ end
22
44
  end
23
45
  end
24
46
 
@@ -1,3 +1,3 @@
1
1
  module SinatraSimpleRouter
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -32,5 +32,15 @@ module SinatraSimpleRouter
32
32
  expect(response.body).to eq("subscribe")
33
33
  end
34
34
  end
35
+
36
+ describe ".rescue_exception" do
37
+ it "calls the callback block" do
38
+ RescuedApplication.stub(:handle_exception)
39
+ request = Rack::MockRequest.new(RescuedApplication)
40
+ request.post("/subscribe")
41
+ arguments = [kind_of(ArgumentError), kind_of(SinatraSimpleRouter::UsersController)]
42
+ expect(RescuedApplication).to have_received(:handle_exception).with(*arguments)
43
+ end
44
+ end
35
45
  end
36
- end
46
+ end
@@ -16,6 +16,14 @@ module SinatraSimpleRouter
16
16
  def subscribe
17
17
  "subscribe"
18
18
  end
19
+
20
+ def raise_argument_error
21
+ raise ArgumentError.new
22
+ end
23
+
24
+ def raise_runtime_error
25
+ raise RuntimeError.new
26
+ end
19
27
  end
20
28
 
21
29
  class ItemsController < Controller
@@ -34,6 +42,19 @@ module SinatraSimpleRouter
34
42
  end
35
43
  end
36
44
 
45
+ class RescuedApplication < Sinatra::Base
46
+ include SinatraSimpleRouter
47
+
48
+ def handle_exception(e, c)
49
+ end
50
+
51
+ rescue_exception ArgumentError do |exception, controller|
52
+ handle_exception(exception, controller)
53
+ end
54
+
55
+ match(:post, "/subscribe", UsersController, :raise_argument_error)
56
+ end
57
+
37
58
  class HasAncestor < Sinatra::Base
38
59
  end
39
60
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra_simple_router
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - elvio
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-04 00:00:00.000000000 Z
11
+ date: 2014-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler