jsend_wrapper-rails 0.1.3 → 0.2.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/README.md +12 -9
- data/lib/jsend_wrapper/rails/railtie.rb +6 -4
- data/lib/jsend_wrapper/rails/render_option.rb +2 -1
- data/lib/jsend_wrapper/rails/template_handler.rb +1 -1
- data/lib/jsend_wrapper/renderers/error_renderer.rb +10 -13
- data/lib/jsend_wrapper/renderers/fail_renderer.rb +4 -4
- data/lib/jsend_wrapper/renderers/renderer.rb +3 -1
- data/lib/jsend_wrapper/renderers/success_renderer.rb +4 -4
- data/lib/jsend_wrapper/renderers.rb +3 -3
- data/lib/jsend_wrapper-rails.rb +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 321056c9ec61f7c53a5094e3c95a9871858dbc41
|
4
|
+
data.tar.gz: 36d9de6dd83e21e85ff64fa77496abbcd9496ab3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f97f06fa6e474260d8189bf7c97ae326dc4614d2e64d5d2d51a3545c57b5d9e6fbd8c35e8969ede4d59d29795eee05018cc720620cc5bfdac9fdd535f7f1caab
|
7
|
+
data.tar.gz: 3d03152cc8c4e418e43cc5d6f0d67659f2ff15f783c163f9fbba4f337ae736568a92b4b367ae6e6cbd34e296473431aee80197decc1ccf9120f7be7fa858575a
|
data/README.md
CHANGED
@@ -81,7 +81,7 @@ json.year 1999
|
|
81
81
|
|
82
82
|
#### Handling Errors
|
83
83
|
|
84
|
-
You can use `rescue_from` to automatically handle errors:
|
84
|
+
You can use `rescue_from` to automatically handle errors:
|
85
85
|
|
86
86
|
```ruby
|
87
87
|
rescue_from ActiveRecord::RecordNotFound do
|
@@ -102,7 +102,10 @@ end
|
|
102
102
|
}
|
103
103
|
```
|
104
104
|
|
105
|
-
## JSend
|
105
|
+
## JSend Specification
|
106
|
+
|
107
|
+
*This section is copied from [omniti.com](http://labs.omniti.com/labs/jsend)
|
108
|
+
under via a modified BSD License (see below).*
|
106
109
|
|
107
110
|
* **What?** - Put simply, JSend is a specification that lays down some rules
|
108
111
|
for how [JSON](http://json.org) responses from web servers should be
|
@@ -118,7 +121,7 @@ end
|
|
118
121
|
of responses. Also, this helps promote happiness and unity between backend
|
119
122
|
developers and frontend designers, as everyone can come to expect a common
|
120
123
|
approach to interacting with one another.
|
121
|
-
* **Hold on now, aren't there already specs for this kind of thing?** -
|
124
|
+
* **Hold on now, aren't there already specs for this kind of thing?** -
|
122
125
|
Well... no. While there are a few handy specifications for dealing with JSON
|
123
126
|
data, most notably [Douglas Crockford](http://www.crockford.com/)'s
|
124
127
|
[JSONRequest](http://www.json.org/JSONRequest.html) proposal, there's nothing
|
@@ -171,7 +174,7 @@ required and optional keys for each type:
|
|
171
174
|
<tr>
|
172
175
|
<td>fail</td>
|
173
176
|
<td>
|
174
|
-
There was a problem with the data submitted, or some pre-condition of
|
177
|
+
There was a problem with the data submitted, or some pre-condition of
|
175
178
|
the API call wasn't satisfied.
|
176
179
|
</td>
|
177
180
|
<td>status, message</td>
|
@@ -180,7 +183,7 @@ required and optional keys for each type:
|
|
180
183
|
<tr>
|
181
184
|
<td>error</td>
|
182
185
|
<td>
|
183
|
-
An error occurred in processing the request, i.e. an exception was
|
186
|
+
An error occurred in processing the request, i.e. an exception was
|
184
187
|
thrown.
|
185
188
|
</td>
|
186
189
|
<td>status, message</td>
|
@@ -219,7 +222,7 @@ simple envelope for the results, using the {{{data}}} key, as in the following:
|
|
219
222
|
"status": "success",
|
220
223
|
"data": {
|
221
224
|
"id": 2,
|
222
|
-
"title": "Another blog post",
|
225
|
+
"title": "Another blog post",
|
223
226
|
"body": "More content"
|
224
227
|
}
|
225
228
|
}
|
@@ -263,8 +266,8 @@ Required keys:
|
|
263
266
|
**`GET /posts.json`**:
|
264
267
|
```json
|
265
268
|
{
|
266
|
-
"status"
|
267
|
-
"message"
|
269
|
+
"status": "error",
|
270
|
+
"message": "A title is required"
|
268
271
|
}
|
269
272
|
```
|
270
273
|
|
@@ -277,7 +280,7 @@ Optional keys:
|
|
277
280
|
* code: A numeric code corresponding to the error, if applicable
|
278
281
|
* data: A generic container for any other information about the error, i.e. the
|
279
282
|
conditions that caused the error, stack traces, etc.
|
280
|
-
|
283
|
+
|
281
284
|
### Whither HTTP?
|
282
285
|
|
283
286
|
But wait, you ask, doesn't HTTP already provide a way to communicate response
|
@@ -20,7 +20,7 @@ module JsendWrapper
|
|
20
20
|
class Railtie < ::Rails::Railtie
|
21
21
|
initializer 'jsend_wrapper-rails.initialization' do
|
22
22
|
if JsendWrapper::Rails.jbuilder_available?
|
23
|
-
JsendWrapper::Rails.
|
23
|
+
JsendWrapper::Rails.install_template_handler
|
24
24
|
end
|
25
25
|
JsendWrapper::Rails.install_render_option
|
26
26
|
end
|
@@ -32,14 +32,16 @@ module JsendWrapper
|
|
32
32
|
require 'jbuilder'
|
33
33
|
true
|
34
34
|
rescue LoadError
|
35
|
-
|
35
|
+
$stderr.puts 'WARN: Please include the "jbuilder" gem for .jsend templates'
|
36
36
|
false
|
37
37
|
end
|
38
38
|
|
39
39
|
# Install a "template handler" for .jsend view files. These files will be
|
40
40
|
# processed with {Jbuilder}, just like .jbuilder view files, but the result
|
41
41
|
# will be wrapped in a "success" JSend wrapper.
|
42
|
-
def self.
|
42
|
+
def self.install_template_handler
|
43
|
+
require 'jsend_wrapper/rails/template_handler'
|
44
|
+
|
43
45
|
ActionView::Template.register_template_handler \
|
44
46
|
:jsend, JsendWrapper::Rails::TemplateHandler
|
45
47
|
end
|
@@ -47,7 +49,7 @@ module JsendWrapper
|
|
47
49
|
|
48
50
|
# Adds the "jsend:" option to {ActiveController::Base#render}
|
49
51
|
def self.install_render_option
|
50
|
-
|
52
|
+
require 'jsend_wrapper/rails/render_option'
|
51
53
|
|
52
54
|
ActionController::Renderers.add :jsend do |value, _|
|
53
55
|
self.content_type ||= Mime::JSON
|
@@ -13,7 +13,8 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU General Public License
|
15
15
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
-
|
16
|
+
require 'active_support/core_ext/hash/slice'
|
17
|
+
require 'jsend_wrapper/renderers'
|
17
18
|
|
18
19
|
module JsendWrapper
|
19
20
|
# Parses the "render jsend: {...}" command. Valid forms:
|
@@ -13,13 +13,13 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU General Public License
|
15
15
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
-
|
16
|
+
require 'jsend_wrapper/renderers/renderer'
|
17
17
|
|
18
18
|
module JsendWrapper
|
19
19
|
# Wraps the given message in a JSend Error. JSend Errors have two required
|
20
20
|
# elements (status, message) and two optional elements (code, data).
|
21
21
|
class ErrorRenderer < Renderer
|
22
|
-
|
22
|
+
attr_reader :message, :has_code, :code, :has_data, :data
|
23
23
|
|
24
24
|
alias_method :code?, :has_code
|
25
25
|
alias_method :data?, :has_data
|
@@ -30,18 +30,18 @@ module JsendWrapper
|
|
30
30
|
#@option optional [Object] :data a generic container for any other
|
31
31
|
# information about the error
|
32
32
|
def initialize(message, optional)
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
@message = message.to_s
|
34
|
+
@has_code = optional.key? :code
|
35
|
+
@has_data = optional.key? :data
|
36
36
|
|
37
|
-
|
38
|
-
|
37
|
+
@code = parse_code optional[:code] if code?
|
38
|
+
@data = optional[:data] if data?
|
39
39
|
end
|
40
40
|
|
41
41
|
|
42
42
|
#@return [String] the rendered JSON
|
43
43
|
def call
|
44
|
-
%[{"status":"error","message":#{message.
|
44
|
+
%[{"status":"error","message":#{message.inspect}#{optional}}]
|
45
45
|
end
|
46
46
|
|
47
47
|
|
@@ -49,11 +49,8 @@ module JsendWrapper
|
|
49
49
|
|
50
50
|
|
51
51
|
def parse_code(code)
|
52
|
-
|
53
|
-
|
54
|
-
else
|
55
|
-
raise '"code" must respond to #to_i'
|
56
|
-
end
|
52
|
+
raise '"code" must respond to #to_i' unless code.respond_to? :to_i
|
53
|
+
code.to_i
|
57
54
|
end
|
58
55
|
|
59
56
|
|
@@ -13,16 +13,16 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU General Public License
|
15
15
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
-
|
16
|
+
require 'jsend_wrapper/renderers/renderer'
|
17
17
|
|
18
18
|
module JsendWrapper
|
19
19
|
# Wraps the given message in a JSend Failure. JSend Failures have two required
|
20
20
|
# elements (status, data).
|
21
21
|
class FailRenderer < Renderer
|
22
|
-
|
22
|
+
attr_reader :data
|
23
23
|
|
24
|
-
def initialize(
|
25
|
-
|
24
|
+
def initialize(data)
|
25
|
+
@data = data
|
26
26
|
end
|
27
27
|
|
28
28
|
def call
|
@@ -13,6 +13,8 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU General Public License
|
15
15
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
require 'json'
|
17
|
+
|
16
18
|
module JsendWrapper
|
17
19
|
class Renderer
|
18
20
|
protected
|
@@ -23,7 +25,7 @@ module JsendWrapper
|
|
23
25
|
elsif obj.nil?
|
24
26
|
'null'
|
25
27
|
else
|
26
|
-
obj
|
28
|
+
JSON.dump obj
|
27
29
|
end
|
28
30
|
end
|
29
31
|
end
|
@@ -13,16 +13,16 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU General Public License
|
15
15
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
-
|
16
|
+
require 'jsend_wrapper/renderers/renderer'
|
17
17
|
|
18
18
|
module JsendWrapper
|
19
19
|
# Wraps the given message in a JSend Success. JSend Successs have two required
|
20
20
|
# elements (status, data).
|
21
21
|
class SuccessRenderer < Renderer
|
22
|
-
|
22
|
+
attr_reader :data
|
23
23
|
|
24
|
-
def initialize(
|
25
|
-
|
24
|
+
def initialize(data)
|
25
|
+
@data = data
|
26
26
|
end
|
27
27
|
|
28
28
|
def call
|
@@ -13,6 +13,6 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU General Public License
|
15
15
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
require 'jsend_wrapper/renderers/success_renderer'
|
17
|
+
require 'jsend_wrapper/renderers/fail_renderer'
|
18
|
+
require 'jsend_wrapper/renderers/error_renderer'
|
data/lib/jsend_wrapper-rails.rb
CHANGED
@@ -13,8 +13,8 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU General Public License
|
15
15
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
-
JsendWrapper = Module.new
|
17
|
-
|
18
16
|
if defined? Rails
|
19
|
-
|
17
|
+
require 'jsend_wrapper/rails/railtie'
|
18
|
+
else
|
19
|
+
$stderr.puts 'WARN: Rails is not defined! jsend_wrapper-rails cannot load.'
|
20
20
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsend_wrapper-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Sangster
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|