jbuilder 0.8.2 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jbuilder (0.8.0)
4
+ jbuilder (0.8.2)
5
5
  activesupport (>= 3.0.0)
6
6
 
7
7
  GEM
Binary file
Binary file
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'jbuilder'
3
- s.version = '0.8.2'
3
+ s.version = '0.8.3'
4
4
  s.author = 'David Heinemeier Hansson'
5
5
  s.email = 'david@37signals.com'
6
6
  s.summary = 'Create JSON structures via a Builder-style DSL'
@@ -45,10 +45,12 @@ class Jbuilder < ActiveSupport::BasicObject
45
45
  end
46
46
 
47
47
  @@key_formatter = KeyFormatter.new
48
+ @@ignore_nil = false
48
49
 
49
- def initialize(key_formatter = @@key_formatter.clone)
50
+ def initialize(key_formatter = @@key_formatter.clone, ignore_nil = @@ignore_nil)
50
51
  @attributes = ::ActiveSupport::OrderedHash.new
51
52
  @key_formatter = key_formatter
53
+ @ignore_nil = ignore_nil
52
54
  end
53
55
 
54
56
  # Dynamically set a key value pair.
@@ -112,6 +114,30 @@ class Jbuilder < ActiveSupport::BasicObject
112
114
  @@key_formatter = KeyFormatter.new(*args)
113
115
  end
114
116
 
117
+ # If you want to skip adding nil values to your JSON hash. This is useful
118
+ # for JSON clients that don't deal well with nil values, and would prefer
119
+ # not to receive keys which have null values.
120
+ #
121
+ # Example:
122
+ # json.ignore_nil!
123
+ # json.id User.new.id
124
+ #
125
+ # { "id": null }
126
+ #
127
+ # json.ignore_nil
128
+ # json.id User.new.id
129
+ #
130
+ # {}
131
+ #
132
+ def ignore_nil!(value = true)
133
+ @ignore_nil = value
134
+ end
135
+
136
+ # Same as instance method ignore_nil! except sets the default.
137
+ def self.ignore_nil(value = true)
138
+ @@ignore_nil = value
139
+ end
140
+
115
141
  # Turns the current element into an array and yields a builder to add a hash.
116
142
  #
117
143
  # Example:
@@ -216,7 +242,9 @@ class Jbuilder < ActiveSupport::BasicObject
216
242
 
217
243
  protected
218
244
  def _set_value(key, value)
219
- @attributes[@key_formatter.format(key)] = value
245
+ unless @ignore_nil && value.nil?
246
+ @attributes[@key_formatter.format(key)] = value
247
+ end
220
248
  end
221
249
 
222
250
  private
@@ -457,4 +457,37 @@ class JbuilderTest < ActiveSupport::TestCase
457
457
  assert_equal [], Jbuilder.send(:class_variable_get, "@@key_formatter").instance_variable_get("@cache").keys
458
458
  end
459
459
 
460
+ test "ignore_nil! without a parameter" do
461
+ json = Jbuilder.new
462
+ json.ignore_nil!
463
+ json.test nil
464
+
465
+ assert_equal [], json.attributes!.keys
466
+ end
467
+
468
+ test "ignore_nil! with parameter" do
469
+ json = Jbuilder.new
470
+ json.ignore_nil! true
471
+ json.name "Bob"
472
+ json.dne nil
473
+
474
+ assert_equal ["name"], json.attributes!.keys
475
+
476
+ json = Jbuilder.new
477
+ json.ignore_nil! false
478
+ json.name "Bob"
479
+ json.dne nil
480
+
481
+ assert_equal ["name", "dne"], json.attributes!.keys
482
+ end
483
+
484
+ test "default ignore_nil!" do
485
+ Jbuilder.ignore_nil
486
+ json = Jbuilder.new
487
+ json.name "Bob"
488
+ json.dne nil
489
+
490
+ assert_equal ["name"], json.attributes!.keys
491
+ Jbuilder.send(:class_variable_set, "@@ignore_nil", false)
492
+ end
460
493
  end
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: 0.8.2
4
+ version: 0.8.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-07 00:00:00.000000000 Z
12
+ date: 2012-11-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -35,7 +35,8 @@ extra_rdoc_files: []
35
35
  files:
36
36
  - ./Gemfile
37
37
  - ./Gemfile.lock
38
- - ./jbuilder-0.5.0.gem
38
+ - ./jbuilder-0.4.0.gem
39
+ - ./jbuilder-0.8.1.gem
39
40
  - ./jbuilder.gemspec
40
41
  - ./lib/jbuilder.rb
41
42
  - ./lib/jbuilder_template.rb
Binary file