jbuilder 2.1.3 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +4 -0
- data/README.md +28 -21
- data/jbuilder.gemspec +1 -1
- data/lib/jbuilder.rb +8 -3
- data/test/jbuilder_test.rb +14 -0
- 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: 141e8a9ebdb989259856973050722aae336d7b50
|
4
|
+
data.tar.gz: 265721f5266ccb8e444a291f04193ac562076abf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd8f8b1bfdfff3270bd1abaee9e1248aa202779804997237633ac9fc5bbb08e33e4b9a1910e633bfeab12b3dbef0e5c21084dddf7f47d6030a8b1d52c44f7317
|
7
|
+
data.tar.gz: 299d5d6f3a75b3bba2f9c666031655ae0813273ea38584d3f410353dae8912dc4d2767e3f0e8092ed34470ff6464a1061e80396a9a4befd79b57ac7cdb308d0b
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
2.2.0
|
4
|
+
-----
|
5
|
+
* [Allow to skip `array!` iterations by calling `next`](https://github.com/rails/jbuilder/commit/81a63308fb9d5002519dd871f829ccc58067251a)
|
6
|
+
|
3
7
|
2.1.2
|
4
8
|
-----
|
5
9
|
* [Cast array-like objects to array before merging](https://github.com/rails/jbuilder/commit/7b8c8a1cb09b7f3dd26e5643ebbd6b2ec67185db)
|
data/README.md
CHANGED
@@ -16,26 +16,26 @@ generation process is fraught with conditionals and loops. Here's a simple
|
|
16
16
|
example:
|
17
17
|
|
18
18
|
``` ruby
|
19
|
-
|
20
|
-
json.content format_content(@message.content)
|
21
|
-
json.(@message, :created_at, :updated_at)
|
19
|
+
# app/views/message/show.json.jbuilder
|
22
20
|
|
23
|
-
|
24
|
-
|
25
|
-
json.email_address @message.creator.email_address_with_name
|
26
|
-
json.url url_for(@message.creator, format: :json)
|
27
|
-
end
|
21
|
+
json.content format_content(@message.content)
|
22
|
+
json.(@message, :created_at, :updated_at)
|
28
23
|
|
29
|
-
|
30
|
-
|
31
|
-
|
24
|
+
json.author do
|
25
|
+
json.name @message.creator.name.familiar
|
26
|
+
json.email_address @message.creator.email_address_with_name
|
27
|
+
json.url url_for(@message.creator, format: :json)
|
28
|
+
end
|
32
29
|
|
33
|
-
|
30
|
+
if current_user.admin?
|
31
|
+
json.visitors calculate_visitors(@message)
|
32
|
+
end
|
34
33
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
34
|
+
json.comments @message.comments, :content, :created_at
|
35
|
+
|
36
|
+
json.attachments @message.attachments do |attachment|
|
37
|
+
json.filename attachment.filename
|
38
|
+
json.url url_for(attachment)
|
39
39
|
end
|
40
40
|
```
|
41
41
|
|
@@ -80,19 +80,26 @@ end
|
|
80
80
|
Top level arrays can be handled directly. Useful for index and other collection actions.
|
81
81
|
|
82
82
|
``` ruby
|
83
|
-
# @
|
84
|
-
|
85
|
-
|
86
|
-
|
83
|
+
# @comments = @post.comments
|
84
|
+
|
85
|
+
json.array! @comments do |comment|
|
86
|
+
next if comment.marked_as_spam_by?(current_user)
|
87
|
+
|
88
|
+
json.body comment.body
|
89
|
+
json.author do
|
90
|
+
json.first_name comment.author.first_name
|
91
|
+
json.last_name comment.author.last_name
|
92
|
+
end
|
87
93
|
end
|
88
94
|
|
89
|
-
# => [ { "
|
95
|
+
# => [ { "body": "great post...", "author": { "first_name": "Joe", "last_name": "Bloe" }} ]
|
90
96
|
```
|
91
97
|
|
92
98
|
You can also extract attributes from array directly.
|
93
99
|
|
94
100
|
``` ruby
|
95
101
|
# @people = People.all
|
102
|
+
|
96
103
|
json.array! @people, :id, :name
|
97
104
|
|
98
105
|
# => [ { "id": 1, "name": "David" }, { "id": 2, "name": "Jamie" } ]
|
data/jbuilder.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'jbuilder'
|
3
|
-
s.version = '2.
|
3
|
+
s.version = '2.2.0'
|
4
4
|
s.authors = ['David Heinemeier Hansson', 'Pavel Pravosud']
|
5
5
|
s.email = ['david@37signals.com', 'pavel@pravosud.com']
|
6
6
|
s.summary = 'Create JSON structures via a Builder-style DSL'
|
data/lib/jbuilder.rb
CHANGED
@@ -260,10 +260,11 @@ class Jbuilder
|
|
260
260
|
end
|
261
261
|
|
262
262
|
def _read(key, default = nil)
|
263
|
-
@attributes.fetch(_key(key)){ default }
|
263
|
+
_blank? ? default : @attributes.fetch(_key(key)){ default }
|
264
264
|
end
|
265
265
|
|
266
266
|
def _write(key, value)
|
267
|
+
@attributes = {} if _blank?
|
267
268
|
@attributes[_key(key)] = value
|
268
269
|
end
|
269
270
|
|
@@ -280,12 +281,12 @@ class Jbuilder
|
|
280
281
|
def _map_collection(collection)
|
281
282
|
collection.map do |element|
|
282
283
|
_scope{ yield element }
|
283
|
-
end
|
284
|
+
end - [BLANK]
|
284
285
|
end
|
285
286
|
|
286
287
|
def _scope
|
287
288
|
parent_attributes, parent_formatter = @attributes, @key_formatter
|
288
|
-
@attributes =
|
289
|
+
@attributes = BLANK
|
289
290
|
yield
|
290
291
|
@attributes
|
291
292
|
ensure
|
@@ -308,6 +309,10 @@ class Jbuilder
|
|
308
309
|
|
309
310
|
attributes
|
310
311
|
end
|
312
|
+
|
313
|
+
def _blank?
|
314
|
+
BLANK == @attributes
|
315
|
+
end
|
311
316
|
end
|
312
317
|
|
313
318
|
require 'jbuilder/jbuilder_template' if defined?(ActionView::Template)
|
data/test/jbuilder_test.rb
CHANGED
@@ -373,6 +373,20 @@ class JbuilderTest < ActiveSupport::TestCase
|
|
373
373
|
assert_equal 'world', result.second['content']
|
374
374
|
end
|
375
375
|
|
376
|
+
test 'it allows using next in array block to skip value' do
|
377
|
+
comments = [ Comment.new('hello', 1), Comment.new('skip', 2), Comment.new('world', 3) ]
|
378
|
+
result = jbuild do |json|
|
379
|
+
json.array! comments do |comment|
|
380
|
+
next if comment.id == 2
|
381
|
+
json.content comment.content
|
382
|
+
end
|
383
|
+
end
|
384
|
+
|
385
|
+
assert_equal 2, result.length
|
386
|
+
assert_equal 'hello', result.first['content']
|
387
|
+
assert_equal 'world', result.second['content']
|
388
|
+
end
|
389
|
+
|
376
390
|
test 'extract attributes directly from array' do
|
377
391
|
comments = [ Comment.new('hello', 1), Comment.new('world', 2) ]
|
378
392
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jbuilder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-10-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -105,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
105
|
version: '0'
|
106
106
|
requirements: []
|
107
107
|
rubyforge_project:
|
108
|
-
rubygems_version: 2.
|
108
|
+
rubygems_version: 2.4.1
|
109
109
|
signing_key:
|
110
110
|
specification_version: 4
|
111
111
|
summary: Create JSON structures via a Builder-style DSL
|