jbuilder 0.8.2 → 0.8.3

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.
@@ -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