jbuilder 1.5.3 → 2.0.0.beta

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f96d267675b1f3a2c1b8362acec6cb5d6041594a
4
- data.tar.gz: 16a89009d403703f5c2bab75b7db39e8a976043e
3
+ metadata.gz: 3abb8f97fbc68d58021fc1c5bc66fec71d338da7
4
+ data.tar.gz: 1f5eac2118e6f0762d41d7b6ce1ea559a10feca9
5
5
  SHA512:
6
- metadata.gz: 03e2efc5e9463f76a49560f1c61db48b02ad2d456399bc5aeed9a2cf47e8c919d59632c79141d696bf33ccd4cc1466fcb17dfab1d2f5f929924c6e386083ee9d
7
- data.tar.gz: bcd576dd31be8b43e423612409ffae5051994bec4351f6fac4bd1ba0b1a5cf94ae091cb39570767c8949ea7a0d6f806ab13b2bbca5fbf7bc4bb6af91238717f0
6
+ metadata.gz: fe7ee8dc65453809938c89bfd35f037ae6113e30f648eb66da2ab844bd9dc0574a9c79c381198ec667077dd648cb30946cf81d433085ff31de2d8acba45a00bd
7
+ data.tar.gz: bcbf4fa794515f477a809d33b18b9ac7e9df227f3fbe1f708bea2f1b1f90d340439f783ff96f1b40c413c9ec539703f267745183761d9c3d8e945f3288ae20ce
@@ -1,15 +1,10 @@
1
1
  language: ruby
2
2
 
3
3
  rvm:
4
- - 1.8.7
5
- - 1.9.2
6
4
  - 1.9.3
7
5
  - 2.0.0
8
6
  - ruby-head
9
- - ree
10
- - jruby-18mode
11
7
  - jruby-19mode
12
- - rbx-18mode
13
8
  - rbx-19mode
14
9
 
15
10
  gemfile:
@@ -17,22 +12,10 @@ gemfile:
17
12
  - Gemfile
18
13
 
19
14
  matrix:
20
- exclude:
21
- # Edge Rails is only compatible with 1.9.3+
22
- - gemfile: Gemfile
23
- rvm: 1.8.7
24
- - gemfile: Gemfile
25
- rvm: 1.9.2
26
- - gemfile: Gemfile
27
- rvm: ree
28
- - gemfile: Gemfile
29
- rvm: jruby-18mode
30
- - gemfile: Gemfile
31
- rvm: rbx-18mode
32
15
  allow_failures:
33
16
  - rvm: ruby-head
34
- - rvm: rbx-18mode
17
+ - rvm: jruby-19mode
35
18
  - rvm: rbx-19mode
36
19
 
37
20
  notifications:
38
- email: false
21
+ email: false
@@ -1,11 +1,13 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'jbuilder'
3
- s.version = '1.5.3'
3
+ s.version = '2.0.0.beta'
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'
7
7
  s.license = 'MIT'
8
8
 
9
+ s.required_ruby_version = '>= 1.9.3'
10
+
9
11
  s.add_dependency 'activesupport', '>= 3.0.0'
10
12
  s.add_dependency 'multi_json', '>= 1.2.0'
11
13
 
@@ -24,10 +24,6 @@ module Rails
24
24
 
25
25
 
26
26
  protected
27
- def attributes_names
28
- [:id] + super
29
- end
30
-
31
27
  def filename_with_extensions(name)
32
28
  [name, :json, :jbuilder] * '.'
33
29
  end
@@ -48,7 +48,7 @@ class <%= controller_class_name %>Controller < ApplicationController
48
48
  respond_to do |format|
49
49
  if @<%= orm_instance.update("#{singular_table_name}_params") %>
50
50
  format.html { redirect_to @<%= singular_table_name %>, notice: <%= "'#{human_name} was successfully updated.'" %> }
51
- format.json { head :no_content }
51
+ format.json { render action: 'show', status: :ok, location: <%= "@#{singular_table_name}" %> }
52
52
  else
53
53
  format.html { render action: 'edit' }
54
54
  format.json { render json: <%= "@#{orm_instance.errors}" %>, status: :unprocessable_entity }
@@ -1,8 +1,6 @@
1
- require 'active_support/ordered_hash'
2
1
  require 'active_support/core_ext/array/access'
3
2
  require 'active_support/core_ext/enumerable'
4
3
  require 'active_support/core_ext/hash'
5
- require 'active_support/cache'
6
4
  require 'multi_json'
7
5
 
8
6
  begin
@@ -22,7 +20,7 @@ class Jbuilder < JbuilderProxy
22
20
 
23
21
  class KeyFormatter
24
22
  def initialize(*args)
25
- @format = ::ActiveSupport::OrderedHash.new
23
+ @format = {}
26
24
  @cache = {}
27
25
 
28
26
  options = args.extract_options!
@@ -58,10 +56,9 @@ class Jbuilder < JbuilderProxy
58
56
  @@key_formatter = KeyFormatter.new
59
57
  @@ignore_nil = false
60
58
 
61
- def initialize(*args, &block)
62
- @attributes = ::ActiveSupport::OrderedHash.new
59
+ def initialize(options = {}, &block)
60
+ @attributes = {}
63
61
 
64
- options = args.extract_options!
65
62
  @key_formatter = options.fetch(:key_formatter){ @@key_formatter.clone }
66
63
  @ignore_nil = options.fetch(:ignore_nil, @@ignore_nil)
67
64
  yield self if block
@@ -222,9 +219,7 @@ class Jbuilder < JbuilderProxy
222
219
  #
223
220
  # [1,2,3]
224
221
  def array!(collection = [], *attributes, &block)
225
- @attributes = if block && block.arity == 2
226
- _two_arguments_map_collection(collection, &block)
227
- elsif block
222
+ @attributes = if block
228
223
  _map_collection(collection, &block)
229
224
  elsif attributes.any?
230
225
  _map_collection(collection) { |element| extract! element, *attributes }
@@ -280,25 +275,17 @@ class Jbuilder < JbuilderProxy
280
275
 
281
276
  # Encodes the current builder as JSON.
282
277
  def target!
283
- ::MultiJson.dump @attributes
278
+ ::MultiJson.dump(@attributes)
284
279
  end
285
280
 
286
281
  private
287
282
 
288
- def _extract_hash_values(object, *attributes)
283
+ def _extract_hash_values(object, *attributes)
289
284
  attributes.each{ |key| _set_value key, object.fetch(key) }
290
285
  end
291
286
 
292
287
  def _extract_method_values(object, *attributes)
293
- attributes.each do |method_name|
294
- unless object.respond_to?(method_name)
295
- message = "Private method #{method_name.inspect} was used to " +
296
- 'extract value. This will be an error in future versions of Jbuilder'
297
- end
298
-
299
- _set_value method_name, object.send(method_name)
300
- ::ActiveSupport::Deprecation.warn message if message
301
- end
288
+ attributes.each{ |key| _set_value key, object.public_send(key) }
302
289
  end
303
290
 
304
291
  def _set_value(key, value)
@@ -318,7 +305,7 @@ class Jbuilder < JbuilderProxy
318
305
 
319
306
  def _scope
320
307
  parent_attributes, parent_formatter = @attributes, @key_formatter
321
- @attributes = ::ActiveSupport::OrderedHash.new
308
+ @attributes = {}
322
309
  yield
323
310
  @attributes
324
311
  ensure
@@ -334,26 +321,14 @@ class Jbuilder < JbuilderProxy
334
321
  end
335
322
  end
336
323
 
337
- def _two_arguments_map_collection(collection, &block)
338
- message = "Passing jbuilder object to block is " \
339
- "deprecated and will be removed soon."
340
-
341
- if block.respond_to?(:parameters)
342
- arguments = block.parameters.map(&:last)
343
- actual = "|#{arguments.drop(1) * ', '}|"
344
- deprecated = "|#{arguments * ', '}|"
345
- message += "\nUse #{actual} instead of #{deprecated} as block arguments"
346
- end
347
-
348
- ::ActiveSupport::Deprecation.warn message, ::Kernel.caller(5)
349
-
350
- _map_collection(collection){ |element| block[self, element] }
351
- end
352
-
353
324
  def _mapable_arguments?(value, *args)
354
325
  value.respond_to?(:map)
355
326
  end
356
327
  end
357
328
 
358
329
  require 'jbuilder/jbuilder_template' if defined?(ActionView::Template)
359
- require 'jbuilder/railtie' if defined?(Rails::VERSION::MAJOR) && Rails::VERSION::MAJOR == 4
330
+
331
+ if defined?(Rails::VERSION::MAJOR) && Rails::VERSION::MAJOR == 4
332
+ require 'jbuilder/railtie'
333
+ require 'jbuilder/dependency_tracker'
334
+ end
@@ -0,0 +1,50 @@
1
+ require 'jbuilder'
2
+ require 'action_view'
3
+ require 'action_view/dependency_tracker'
4
+
5
+ class Jbuilder
6
+ class DependencyTracker < ::ActionView::DependencyTracker::ERBTracker
7
+ # Matches:
8
+ # json.partial! "messages/message"
9
+ # json.partial!('messages/message')
10
+ #
11
+ DIRECT_RENDERS = /
12
+ \w+\.partial! # json.partial!
13
+ \(?\s* # optional parenthesis
14
+ (['"])([^""]+)\1 # quoted value
15
+ /x
16
+
17
+ # Matches:
18
+ # json.partial! partial: "comments/comment"
19
+ # json.comments @post.comments, partial: "comments/comment", as: :comment
20
+ # json.array! @posts, partial: "posts/post", as: :post
21
+ # = render partial: "account"
22
+ #
23
+ INDIRECT_RENDERS = /
24
+ (?::partial\s*=>|partial:) # partial: or :partial =>
25
+ \s* # optional whitespace
26
+ (['"])([^'"]+)\1 # quoted value
27
+ /x
28
+
29
+ def dependencies
30
+ direct_dependencies + indirect_dependencies + explicit_dependencies
31
+ end
32
+
33
+ private
34
+
35
+ def direct_dependencies
36
+ source.scan(DIRECT_RENDERS).map(&:second)
37
+ end
38
+
39
+ def indirect_dependencies
40
+ source.scan(INDIRECT_RENDERS).map(&:second)
41
+ end
42
+ end
43
+ end
44
+
45
+
46
+ ActiveSupport.on_load :action_view do
47
+ ActiveSupport.on_load :after_initialize do
48
+ ActionView::DependencyTracker.register_tracker :jbuilder, Jbuilder::DependencyTracker
49
+ end
50
+ end
@@ -1,12 +1,13 @@
1
1
  require 'jbuilder'
2
2
  require 'action_dispatch/http/mime_type'
3
+ require 'active_support/cache'
3
4
 
4
5
  class JbuilderTemplate < Jbuilder
5
6
  class << self
6
7
  attr_accessor :template_lookup_options
7
8
  end
8
9
 
9
- self.template_lookup_options = { :handlers => [:jbuilder] }
10
+ self.template_lookup_options = { handlers: [:jbuilder] }
10
11
 
11
12
  def initialize(context, *args, &block)
12
13
  @context = context
@@ -20,14 +21,12 @@ class JbuilderTemplate < Jbuilder
20
21
  options = name_or_options
21
22
  else
22
23
  # partial! 'name', foo: 'bar'
23
- options = { :partial => name_or_options, :locals => locals }
24
+ options = { partial: name_or_options, locals: locals }
24
25
  as = locals.delete(:as)
25
26
  options[:as] = as if as.present?
26
27
  options[:collection] = locals[:collection] if locals.key?(:collection)
27
28
  end
28
29
 
29
- options[:collection] ||= [] if options.key?(:collection)
30
-
31
30
  _handle_partial_options options
32
31
  end
33
32
 
@@ -35,7 +34,7 @@ class JbuilderTemplate < Jbuilder
35
34
  options = attributes.extract_options!
36
35
 
37
36
  if options.key?(:partial)
38
- partial! options[:partial], options.merge(:collection => collection)
37
+ partial! options[:partial], options.merge(collection: collection)
39
38
  else
40
39
  super
41
40
  end
@@ -63,14 +62,15 @@ class JbuilderTemplate < Jbuilder
63
62
 
64
63
  protected
65
64
  def _handle_partial_options(options)
66
- options.reverse_merge! :locals => {}
65
+ options.reverse_merge! locals: {}
67
66
  options.reverse_merge! ::JbuilderTemplate.template_lookup_options
68
- collection = options.delete(:collection)
69
67
  as = options[:as]
70
68
 
71
- if collection && as
69
+ if as && options.key?(:collection)
70
+ collection = options.delete(:collection) || []
72
71
  array!(collection) do |member|
73
- options[:locals].merge!(as => member, :collection => collection)
72
+ options[:locals].merge! as => member
73
+ options[:locals].merge! collection: collection
74
74
  _render_partial options
75
75
  end
76
76
  else
@@ -79,7 +79,7 @@ class JbuilderTemplate < Jbuilder
79
79
  end
80
80
 
81
81
  def _render_partial(options)
82
- options[:locals].merge!(:json => self)
82
+ options[:locals].merge! json: self
83
83
  @context.render options
84
84
  end
85
85
 
@@ -0,0 +1,72 @@
1
+ require 'test/unit'
2
+ require 'active_support/test_case'
3
+ require 'jbuilder/dependency_tracker'
4
+
5
+
6
+ class FakeTemplate
7
+ attr_reader :source, :handler
8
+ def initialize(source, handler = :jbuilder)
9
+ @source, @handler = source, handler
10
+ end
11
+ end
12
+
13
+
14
+ class JbuilderDependencyTrackerTest < ActiveSupport::TestCase
15
+ def make_tracker(name, source)
16
+ template = FakeTemplate.new(source)
17
+ Jbuilder::DependencyTracker.new(name, template)
18
+ end
19
+
20
+ def track_dependencies(source)
21
+ make_tracker('jbuilder_template', source).dependencies
22
+ end
23
+
24
+ test 'detects dependency via direct partial! call' do
25
+ dependencies = track_dependencies <<-RUBY
26
+ json.partial! 'path/to/partial'
27
+ RUBY
28
+
29
+ assert_equal %w[path/to/partial], dependencies
30
+ end
31
+
32
+ test 'detects dependency via direct partial! call with parens' do
33
+ dependencies = track_dependencies <<-RUBY
34
+ json.partial!("path/to/partial")
35
+ RUBY
36
+
37
+ assert_equal %w[path/to/partial], dependencies
38
+ end
39
+
40
+ test 'detects partial with options (1.9 style)' do
41
+ dependencies = track_dependencies <<-RUBY
42
+ json.partial! hello: 'world', partial: 'path/to/partial', foo: :bar
43
+ RUBY
44
+
45
+ assert_equal %w[path/to/partial], dependencies
46
+ end
47
+
48
+ test 'detects partial with options (1.8 style)' do
49
+ dependencies = track_dependencies <<-RUBY
50
+ json.partial! :hello => 'world', :partial => 'path/to/partial', :foo => :bar
51
+ RUBY
52
+
53
+ assert_equal %w[path/to/partial], dependencies
54
+ end
55
+
56
+ test 'detects partial in indirect collecton calls' do
57
+ dependencies = track_dependencies <<-RUBY
58
+ json.comments @post.comments, partial: 'comments/comment', as: :comment
59
+ RUBY
60
+
61
+ assert_equal %w[comments/comment], dependencies
62
+ end
63
+
64
+ test 'detects explicit depedency' do
65
+ dependencies = track_dependencies <<-RUBY
66
+ # Template Dependency: path/to/partial
67
+ json.foo 'bar'
68
+ RUBY
69
+
70
+ assert_equal %w[path/to/partial], dependencies
71
+ end
72
+ end
@@ -20,12 +20,12 @@ class JbuilderGeneratorTest < Rails::Generators::TestCase
20
20
 
21
21
  assert_file 'app/views/posts/index.json.jbuilder' do |content|
22
22
  assert_match /json\.array!\(@posts\) do \|post\|/, content
23
- assert_match /json\.extract! post, :id, :title, :body/, content
23
+ assert_match /json\.extract! post, :title, :body/, content
24
24
  assert_match /json\.url post_url\(post, format: :json\)/, content
25
25
  end
26
26
 
27
27
  assert_file 'app/views/posts/show.json.jbuilder' do |content|
28
- assert_match /json\.extract! @post, :id, :title, :body, :created_at, :updated_at/, content
28
+ assert_match /json\.extract! @post, :title, :body, :created_at, :updated_at/, content
29
29
  end
30
30
  end
31
31
  end
@@ -5,15 +5,6 @@ require 'jbuilder'
5
5
 
6
6
  Comment = Struct.new(:content, :id)
7
7
 
8
- unless JbuilderProxy.method_defined? :instance_eval
9
- # Faking Object#instance_eval for 1.8 and some newer JRubies
10
- class JbuilderProxy
11
- def instance_eval(code)
12
- eval code
13
- end
14
- end
15
- end
16
-
17
8
  class NonEnumerable
18
9
  def initialize(collection)
19
10
  @collection = collection
@@ -73,32 +64,11 @@ class JbuilderTest < ActiveSupport::TestCase
73
64
  assert_equal 32, parsed['age']
74
65
  end
75
66
 
76
- test 'extracting from object using private method' do
77
- person = Struct.new(:name) do
78
- private
79
- def age
80
- 32
81
- end
82
- end.new('David')
83
-
84
- message = 'Private method :age was used to extract value. This will be' +
85
- ' an error in future versions of Jbuilder'
86
-
87
- ::ActiveSupport::Deprecation.expects(:warn).with(message)
88
- json = Jbuilder.encode do |json|
89
- json.extract! person, :name, :age
90
- end
91
- end
92
-
93
67
  test 'extracting from object using call style for 1.9' do
94
68
  person = Struct.new(:name, :age).new('David', 32)
95
69
 
96
70
  json = Jbuilder.encode do |json|
97
- if ::RUBY_VERSION > '1.9'
98
- instance_eval 'json.(person, :name, :age)'
99
- else
100
- instance_eval 'json.call(person, :name, :age)'
101
- end
71
+ json.(person, :name, :age)
102
72
  end
103
73
 
104
74
  parsed = MultiJson.load(json)
@@ -241,23 +211,6 @@ class JbuilderTest < ActiveSupport::TestCase
241
211
  assert_equal 'world', parsed['comments'].second['content']
242
212
  end
243
213
 
244
- test 'nesting multiple children from array with inline loop with old api' do
245
- comments = [ Comment.new('hello', 1), Comment.new('world', 2) ]
246
-
247
- json = Jbuilder.encode do |json|
248
- ::ActiveSupport::Deprecation.silence do
249
- json.comments comments do |json, comment|
250
- json.content comment.content
251
- end
252
- end
253
- end
254
-
255
- parsed = MultiJson.load(json)
256
- assert_equal ['content'], parsed['comments'].first.keys
257
- assert_equal 'hello', parsed['comments'].first['content']
258
- assert_equal 'world', parsed['comments'].second['content']
259
- end
260
-
261
214
  test 'nesting multiple children from array with inline loop on root' do
262
215
  comments = [ Comment.new('hello', 1), Comment.new('world', 2) ]
263
216
 
@@ -272,22 +225,6 @@ class JbuilderTest < ActiveSupport::TestCase
272
225
  assert_equal 'world', parsed.second['content']
273
226
  end
274
227
 
275
- test 'nesting multiple children from array with inline loop on root with old api' do
276
- comments = [ Comment.new('hello', 1), Comment.new('world', 2) ]
277
-
278
- json = Jbuilder.encode do |json|
279
- ::ActiveSupport::Deprecation.silence do
280
- json.call(comments) do |json, comment|
281
- json.content comment.content
282
- end
283
- end
284
- end
285
-
286
- parsed = MultiJson.load(json)
287
- assert_equal 'hello', parsed.first['content']
288
- assert_equal 'world', parsed.second['content']
289
- end
290
-
291
228
  test 'array nested inside nested hash' do
292
229
  json = Jbuilder.encode do |json|
293
230
  json.author do
@@ -337,24 +274,6 @@ class JbuilderTest < ActiveSupport::TestCase
337
274
  assert_not_equal 'hello', MultiJson.load(json)[0]['not_in_json']
338
275
  end
339
276
 
340
- test 'directly set an array nested in another array with old api' do
341
- data = [ { :department => 'QA', :not_in_json => 'hello', :names => ['John', 'David'] } ]
342
- json = Jbuilder.encode do |json|
343
- ::ActiveSupport::Deprecation.silence do
344
- json.array! data do |json, object|
345
- json.department object[:department]
346
- json.names do
347
- json.array! object[:names]
348
- end
349
- end
350
- end
351
- end
352
-
353
- parsed = MultiJson.load(json)
354
- assert_equal 'David', parsed.first['names'].last
355
- assert_not_equal 'hello', parsed.first['not_in_json']
356
- end
357
-
358
277
  test 'nested jbuilder objects' do
359
278
  to_nest = Jbuilder.new
360
279
  to_nest.nested_value 'Nested Test'
@@ -484,8 +403,8 @@ class JbuilderTest < ActiveSupport::TestCase
484
403
 
485
404
  test 'initialize via options hash' do
486
405
  jbuilder = Jbuilder.new(:key_formatter => 1, :ignore_nil => 2)
487
- assert_equal 1, jbuilder.instance_eval('@key_formatter')
488
- assert_equal 2, jbuilder.instance_eval('@ignore_nil')
406
+ assert_equal 1, jbuilder.instance_eval{ @key_formatter }
407
+ assert_equal 2, jbuilder.instance_eval{ @ignore_nil }
489
408
  end
490
409
 
491
410
  test 'key_format! with parameter' do
@@ -38,7 +38,7 @@ class ScaffoldControllerGeneratorTest < Rails::Generators::TestCase
38
38
 
39
39
  assert_instance_method :update, content do |m|
40
40
  assert_match /format\.html \{ redirect_to @post, notice: 'Post was successfully updated\.' \}/, m
41
- assert_match /format\.json \{ head :no_content \}/, m
41
+ assert_match /format\.json \{ render action: 'show', status: :ok, location: @post \}/, m
42
42
  assert_match /format\.html \{ render action: 'edit' \}/, m
43
43
  assert_match /format\.json \{ render json: @post.errors, status: :unprocessable_entity \}/, m
44
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jbuilder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.3
4
+ version: 2.0.0.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-03 00:00:00.000000000 Z
11
+ date: 2013-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -58,8 +58,10 @@ files:
58
58
  - lib/generators/rails/templates/index.json.jbuilder
59
59
  - lib/generators/rails/templates/show.json.jbuilder
60
60
  - lib/jbuilder.rb
61
+ - lib/jbuilder/dependency_tracker.rb
61
62
  - lib/jbuilder/jbuilder_template.rb
62
63
  - lib/jbuilder/railtie.rb
64
+ - test/jbuilder_dependency_tracker_test.rb
63
65
  - test/jbuilder_generator_test.rb
64
66
  - test/jbuilder_template_test.rb
65
67
  - test/jbuilder_test.rb
@@ -76,20 +78,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
76
78
  requirements:
77
79
  - - '>='
78
80
  - !ruby/object:Gem::Version
79
- version: '0'
81
+ version: 1.9.3
80
82
  required_rubygems_version: !ruby/object:Gem::Requirement
81
83
  requirements:
82
- - - '>='
84
+ - - '>'
83
85
  - !ruby/object:Gem::Version
84
- version: '0'
86
+ version: 1.3.1
85
87
  requirements: []
86
88
  rubyforge_project:
87
- rubygems_version: 2.0.14
89
+ rubygems_version: 2.1.5
88
90
  signing_key:
89
91
  specification_version: 4
90
92
  summary: Create JSON structures via a Builder-style DSL
91
93
  test_files:
94
+ - test/jbuilder_dependency_tracker_test.rb
92
95
  - test/jbuilder_generator_test.rb
93
96
  - test/jbuilder_template_test.rb
94
97
  - test/jbuilder_test.rb
95
98
  - test/scaffold_controller_generator_test.rb
99
+ has_rdoc: