rabl 0.7.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
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