rabl 0.7.0 → 0.7.1

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.
data/CHANGELOG.md CHANGED
@@ -1,6 +1,11 @@
1
1
  # CHANGELOG
2
2
 
3
- ## 0.7.1 (Unreleased)
3
+ ## 0.7.2 (unreleased)
4
+
5
+ ## 0.7.1
6
+
7
+ * Improved renderer interface (Thanks @siong1987)
8
+ * Pass current object into blocks (Thanks @braddunbar)
4
9
 
5
10
  ## 0.7.0
6
11
 
data/README.md CHANGED
@@ -243,7 +243,7 @@ attributes :bar => :baz, :dog => :animal
243
243
  # => # { baz : <bar value>, animal : <dog value> }
244
244
  ```
245
245
 
246
- This currently does not work:
246
+ Named and aliased attributes can not be combined on the same line. This currently does not work:
247
247
 
248
248
  ```ruby
249
249
  attributes :foo, :bar => :baz # throws exception
@@ -277,6 +277,15 @@ child :posts => :foobar do
277
277
  end
278
278
  ```
279
279
 
280
+ You can also pass in the current object:
281
+
282
+ ```ruby
283
+ object @user
284
+ child :posts do |user|
285
+ attribute :title unless user.suspended?
286
+ end
287
+ ```
288
+
280
289
  ### Gluing Attributes ###
281
290
 
282
291
  You can also append child attributes back to the root node:
@@ -290,6 +299,13 @@ end
290
299
 
291
300
  Use glue to add additional attributes to the parent object.
292
301
 
302
+ You can also pass in the current object:
303
+
304
+ ```ruby
305
+ object @user
306
+ glue(@post) {|user| attribute :title if user.active? }
307
+ ```
308
+
293
309
  ### Custom Nodes ###
294
310
 
295
311
  This will generate a json response based on the result of the `node` block:
@@ -440,6 +456,19 @@ Rabl::Renderer.xml(@post, 'posts/show')
440
456
 
441
457
  These methods allow RABL to be used for arbitrary conversions of an object into a desired format.
442
458
 
459
+ You can also pass in other instance variables to be used in your template as:
460
+
461
+ ```ruby
462
+ Rabl::Renderer.new(@post, 'posts/show', :locals => { :custom_title => "Hello world!" })
463
+ ````
464
+
465
+ Then, in your template, you can use `@custom_title` as:
466
+
467
+ ```
468
+ attribute :content
469
+ node(:title) { @custom_title }
470
+ ```
471
+
443
472
  ### Content Type Headers ###
444
473
 
445
474
  Currently in RABL, the content-type of your response is not set automatically. This is because RABL is intended
@@ -532,7 +561,9 @@ Thanks to [Miso](http://gomiso.com) for allowing me to create this for our appli
532
561
  * [Alli Witheford](https://github.com/alzeih) - Added Plist format support
533
562
  * [Ryan Bigg](https://github.com/radar) - Improved template resolution code
534
563
  * [Ivan Vanderbyl](https://github.com/ivanvanderbyl) - Added general purpose renderer
535
- * [Cyril Mougel](https://github.com/shingara) - Added cache_engine pluggable support
564
+ * [Cyril Mougel](https://github.com/shingara) - Added cache_engine pluggable support and renderer tweaks
565
+ * [Teng Siong Ong](https://github.com/siong1987) - Improved renderer interface
566
+ * [Brad Dunbar](https://github.com/braddunbar) - Pass current object into blocks
536
567
 
537
568
  and many more contributors listed in the [CHANGELOG](https://github.com/nesquena/rabl/blob/master/CHANGELOG.md).
538
569
 
@@ -555,3 +586,4 @@ Thanks again for all of these great projects.
555
586
  ## Copyright ##
556
587
 
557
588
  Copyright © 2011-2012 Nathan Esquenazi. See [MIT-LICENSE](https://github.com/nesquena/rabl/blob/master/MIT-LICENSE) for details.
589
+
data/lib/rabl/engine.rb CHANGED
@@ -31,7 +31,7 @@ module Rabl
31
31
  else # without source location
32
32
  instance_eval(@_source) if @_source.present?
33
33
  end
34
- instance_eval(&block) if block_given?
34
+ instance_exec(data_object(@_data), &block) if block_given?
35
35
  cache_results { self.send("to_" + @_options[:format].to_s) }
36
36
  end
37
37
 
data/lib/rabl/renderer.rb CHANGED
@@ -31,6 +31,13 @@ module Rabl
31
31
 
32
32
  @options = options
33
33
  @object = object
34
+
35
+ if @options[:locals]
36
+ @options[:locals].delete(:object) if @object
37
+ @options[:locals].each do |k,v|
38
+ instance_variable_set(:"@#{k}", v)
39
+ end
40
+ end
34
41
  engine.source = self.process_source(source)
35
42
  end
36
43
 
data/lib/rabl/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rabl
2
- VERSION = "0.7.0"
2
+ VERSION = "0.7.1"
3
3
  end
data/test/engine_test.rb CHANGED
@@ -263,6 +263,18 @@ context "Rabl::Engine" do
263
263
  template.render(scope).split('').sort
264
264
 
265
265
  end.equals "{\"user\":{\"name\":\"leo\",\"person\":{\"city\":\"LA\"}}}".split('').sort
266
+
267
+ asserts "that it passes the data object to the block" do
268
+ template = rabl %{
269
+ object @user
270
+ child(@user => :person) do |user|
271
+ attribute :name if user.name == 'leo'
272
+ end
273
+ }
274
+ scope = Object.new
275
+ scope.instance_variable_set :@user, User.new(:name => 'leo')
276
+ template.render(scope)
277
+ end.equals "{\"user\":{\"person\":{\"name\":\"leo\"}}}"
266
278
  end
267
279
 
268
280
  context "#glue" do
@@ -277,6 +289,16 @@ context "Rabl::Engine" do
277
289
  scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA', :age => 12)
278
290
  template.render(scope).split('').sort
279
291
  end.equals "{\"user\":{\"name\":\"leo\",\"city\":\"LA\",\"age\":12}}".split('').sort
292
+
293
+ asserts "that it passes the data object to the block" do
294
+ template = rabl %{
295
+ object @user
296
+ glue(@user) {|user| attribute :age if user.name == 'leo' }
297
+ }
298
+ scope = Object.new
299
+ scope.instance_variable_set :@user, User.new(:name => 'leo', :age => 12)
300
+ template.render(scope)
301
+ end.equals "{\"user\":{\"age\":12}}"
280
302
  end
281
303
 
282
304
  teardown do
@@ -475,7 +497,7 @@ context "Rabl::Engine" do
475
497
  Rabl.reset_configuration!
476
498
  end
477
499
  end
478
-
500
+
479
501
  context "without child root" do
480
502
  setup do
481
503
  Rabl.configure do |config|
@@ -484,9 +506,9 @@ context "Rabl::Engine" do
484
506
  config.enable_json_callbacks = false
485
507
  end
486
508
  end
487
-
509
+
488
510
  context "#child" do
489
-
511
+
490
512
  asserts "that it can create a child node without child root" do
491
513
  template = rabl %{
492
514
  child @users
@@ -61,13 +61,14 @@ context "Rabl::Renderer" do
61
61
  asserts 'passes :locals to render' do
62
62
  source = %q{
63
63
  attribute :name, :as => 'city'
64
+ node(:zipcode) { @zipcode }
64
65
  }
65
66
 
66
67
  user = User.new(:name => 'irvine')
67
68
 
68
- renderer = Rabl::Renderer.new(source, nil, { :format => 'json', :locals => {:object => user} })
69
+ renderer = Rabl::Renderer.new(source, nil, { :format => 'json', :locals => {:object => user, :zipcode => "92602"} })
69
70
  renderer.render.split("").sort
70
- end.equals "{\"user\":{\"city\":\"irvine\"}}".split("").sort
71
+ end.equals "{\"user\":{\"city\":\"irvine\",\"zipcode\":\"92602\"}}".split("").sort
71
72
 
72
73
  asserts 'loads source from file' do
73
74
  File.open(tmp_path + "test.json.rabl", "w") do |f|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rabl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
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-07-16 00:00:00.000000000 Z
12
+ date: 2012-08-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -444,7 +444,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
444
444
  version: '0'
445
445
  requirements: []
446
446
  rubyforge_project: rabl
447
- rubygems_version: 1.8.21
447
+ rubygems_version: 1.8.24
448
448
  signing_key:
449
449
  specification_version: 3
450
450
  summary: General ruby templating with json, bson, xml and msgpack support