moonrope 1.1.1 → 1.1.2
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/lib/moonrope/action.rb +28 -8
- data/lib/moonrope/base.rb +18 -0
- data/lib/moonrope/railtie.rb +8 -0
- data/lib/moonrope/request.rb +6 -6
- data/lib/moonrope/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 029f11de28ff6aad99782e6afa1cd9b63fd5a728
|
|
4
|
+
data.tar.gz: 7534e31e1f74e53908750560a9939a1c1052d43a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e52ac061f8085db1f3ca79dba71a0b33f7e8d5228a3d612b637ea7c8683abdd40ac808f1532469938f17cd6c50745d9161a81968563c6224e122b7434244acc8
|
|
7
|
+
data.tar.gz: 63674f861d4a4d5777df6f94079863c6f5ea4b7a62a39d3dde9a03d7bb6c08698cc4803bf1dc7d082491ffc4682b715918bba3d91ac50d22a61a0128217fe8a2
|
data/lib/moonrope/action.rb
CHANGED
|
@@ -49,6 +49,32 @@ module Moonrope
|
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
+
#
|
|
53
|
+
# Execute a block of code and catch approprite Moonrope errors and return
|
|
54
|
+
# a result.
|
|
55
|
+
#
|
|
56
|
+
def convert_errors_to_action_result(&block)
|
|
57
|
+
begin
|
|
58
|
+
yield block
|
|
59
|
+
rescue => exception
|
|
60
|
+
case exception
|
|
61
|
+
when Moonrope::Errors::RequestError
|
|
62
|
+
result = ActionResult.new(self)
|
|
63
|
+
result.status = exception.status
|
|
64
|
+
result.data = exception.data
|
|
65
|
+
result
|
|
66
|
+
else
|
|
67
|
+
if error_block = @controller.base.external_errors[exception.class]
|
|
68
|
+
result = ActionResult.new(self)
|
|
69
|
+
error_block.call(exception, result)
|
|
70
|
+
result
|
|
71
|
+
else
|
|
72
|
+
raise
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
52
78
|
#
|
|
53
79
|
# Executes the action and returns a ActionResult object with the result
|
|
54
80
|
# of the action.
|
|
@@ -75,7 +101,7 @@ module Moonrope
|
|
|
75
101
|
#
|
|
76
102
|
eval_environment.action = self
|
|
77
103
|
|
|
78
|
-
|
|
104
|
+
convert_errors_to_action_result do
|
|
79
105
|
#
|
|
80
106
|
# Validate the parameters
|
|
81
107
|
#
|
|
@@ -104,12 +130,6 @@ module Moonrope
|
|
|
104
130
|
|
|
105
131
|
# Return the result object
|
|
106
132
|
result
|
|
107
|
-
|
|
108
|
-
rescue Moonrope::Errors::RequestError => e
|
|
109
|
-
result = ActionResult.new(self)
|
|
110
|
-
result.status = e.status
|
|
111
|
-
result.data = e.data
|
|
112
|
-
result
|
|
113
133
|
end
|
|
114
134
|
end
|
|
115
135
|
|
|
@@ -158,6 +178,6 @@ module Moonrope
|
|
|
158
178
|
end
|
|
159
179
|
true
|
|
160
180
|
end
|
|
161
|
-
|
|
181
|
+
|
|
162
182
|
end
|
|
163
183
|
end
|
data/lib/moonrope/base.rb
CHANGED
|
@@ -126,5 +126,23 @@ module Moonrope
|
|
|
126
126
|
matched_helpers.first
|
|
127
127
|
end
|
|
128
128
|
|
|
129
|
+
#
|
|
130
|
+
# Return all the external errors which are registered for this base
|
|
131
|
+
#
|
|
132
|
+
# @return [Hash] a hash of external errors
|
|
133
|
+
#
|
|
134
|
+
def external_errors
|
|
135
|
+
@external_errors ||= {}
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
#
|
|
139
|
+
# Register a new external error
|
|
140
|
+
#
|
|
141
|
+
# @param error_class [Class] a class which should be caught
|
|
142
|
+
#
|
|
143
|
+
def register_external_error(error_class, &block)
|
|
144
|
+
self.external_errors[error_class] = block
|
|
145
|
+
end
|
|
146
|
+
|
|
129
147
|
end
|
|
130
148
|
end
|
data/lib/moonrope/railtie.rb
CHANGED
|
@@ -21,6 +21,14 @@ module Moonrope
|
|
|
21
21
|
Moonrope::Request.path_regex = app.config.moonrope_request_path_regex
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
+
# Catch ActiveRecord::RecordNotFound exception as a standard not-found error
|
|
25
|
+
if defined?(ActiveRecord)
|
|
26
|
+
app.config.moonrope.register_external_error ActiveRecord::RecordNotFound do |exception, result|
|
|
27
|
+
result.status = 'not-found'
|
|
28
|
+
result.data = {:message => exception.message}
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
24
32
|
# Insert the Moonrope middleware into the application's middleware
|
|
25
33
|
# stack (at the bottom).
|
|
26
34
|
app.middleware.use(
|
data/lib/moonrope/request.rb
CHANGED
|
@@ -82,7 +82,7 @@ module Moonrope
|
|
|
82
82
|
def execute
|
|
83
83
|
eval_env = EvalEnvironment.new(@base, self)
|
|
84
84
|
if @base.authenticator
|
|
85
|
-
|
|
85
|
+
result = action.convert_errors_to_action_result do
|
|
86
86
|
@authenticated_user = eval_env.instance_eval(&@base.authenticator)
|
|
87
87
|
# If we are authenticated, check whether the action permits access to
|
|
88
88
|
# this user, if not raise an error.
|
|
@@ -91,11 +91,11 @@ module Moonrope
|
|
|
91
91
|
raise Moonrope::Errors::AccessDenied, "Access to #{controller.name}/#{action.name} is not permitted."
|
|
92
92
|
end
|
|
93
93
|
end
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
result
|
|
98
|
-
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
if result.is_a?(Moonrope::ActionResult)
|
|
97
|
+
# If we already have a result, we should return it and no longer execute
|
|
98
|
+
# this request.
|
|
99
99
|
return result
|
|
100
100
|
end
|
|
101
101
|
end
|
data/lib/moonrope/version.rb
CHANGED