jbuilder 2.1.3 → 2.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/.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
|