rabl 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -60,6 +60,14 @@ or even specify a root node label for the collection:
60
60
 
61
61
  and this will be used as the default data for the rendering.
62
62
 
63
+ There can also be odd cases where the root-level of the response doesn't map directly to any object:
64
+
65
+ object false
66
+ code(:some_count) { |m| @user.posts.count }
67
+ child(@user) { attribute :name }
68
+
69
+ In those cases, object can be assigned to 'false' and child nodes can be constructed independently.
70
+
63
71
  ### Attributes ###
64
72
 
65
73
  Basic usage of the templater to define a few simple attributes for the response:
@@ -80,13 +88,19 @@ or even multiple aliased attributes:
80
88
 
81
89
  ### Child Nodes ###
82
90
 
83
- You can also add child nodes from an arbitrary source:
91
+ Often a response requires including nested information from data associated with the parent model:
92
+
93
+ child :address do
94
+ attributes :street, :city, :zip, :state
95
+ end
96
+
97
+ You can also add child nodes from an arbitrary data source:
84
98
 
85
99
  child @posts => :foobar do
86
100
  attributes :id, :title
87
101
  end
88
102
 
89
- or simply use existing model associations:
103
+ or use model associations with an alias:
90
104
 
91
105
  # Renders all the 'posts' association
92
106
  # from the model into a node called 'foobar'
data/lib/rabl/builder.rb CHANGED
@@ -66,10 +66,12 @@ module Rabl
66
66
  # Creates a child node that is included in json output
67
67
  # child(@user) { attribute :full_name }
68
68
  # child(@user => :person) { ... }
69
+ # child(@users => :people) { ... }
69
70
  def child(data, options={}, &block)
70
71
  return false unless data.present?
71
72
  name, object = data_name(data), data_object(data)
72
- include_root = object.respond_to?(:each) # @users
73
+ include_root = object.respond_to?(:each) # child @users
74
+ object = { data_object(data) => data_name(data) } if data.respond_to?(:each_pair) # child :users => :people
73
75
  @_result[name] = self.object_to_hash(object, :root => include_root, &block) if resolve_condition(options)
74
76
  end
75
77
 
data/lib/rabl/engine.rb CHANGED
@@ -28,7 +28,8 @@ module Rabl
28
28
  if is_record?(data) || !data # object @user
29
29
  Rabl::Builder.new(@_data, @_options).to_hash(options)
30
30
  elsif data.respond_to?(:each) # collection @users
31
- data.map { |object| Rabl::Builder.new({ object => data_name(object) }, @_options).to_hash(options) }
31
+ object_name = data_name(@_data).to_s.singularize # @users => :users
32
+ data.map { |object| Rabl::Builder.new({ object => object_name }, @_options).to_hash(options) }
32
33
  end
33
34
  end
34
35
 
data/lib/rabl/helpers.rb CHANGED
@@ -26,11 +26,11 @@ module Rabl
26
26
  end
27
27
  end
28
28
 
29
- # Returns true if item is a ORM record; false otherwise
30
- # is_record?(@user) => true
31
- # is_record?([]) => false
32
- def is_record?(obj)
33
- obj && data_object(obj).respond_to?(:valid?)
29
+ # Renders a partial hash based on another rabl template
30
+ # partial("users/show", :object => @user)
31
+ def partial(file, options={}, &block)
32
+ source = self.fetch_source(file)
33
+ self.object_to_hash(options[:object], :source => source, &block)
34
34
  end
35
35
 
36
36
  # Returns a hash based representation of any data object given ejs template block
@@ -52,11 +52,11 @@ module Rabl
52
52
  result
53
53
  end
54
54
 
55
- # Renders a partial hash based on another rabl template
56
- # partial("users/show", :object => @user)
57
- def partial(file, options={}, &block)
58
- source = self.fetch_source(file)
59
- self.object_to_hash(options[:object], :source => source, &block)
55
+ # Returns true if item is a ORM record; false otherwise
56
+ # is_record?(@user) => true
57
+ # is_record?([]) => false
58
+ def is_record?(obj)
59
+ obj && data_object(obj).respond_to?(:valid?)
60
60
  end
61
61
 
62
62
  # Returns source for a given relative file
data/lib/rabl/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rabl
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/test/builder_test.rb CHANGED
@@ -106,7 +106,7 @@ context "Rabl::Builder" do
106
106
 
107
107
  asserts "that it generates with a hash" do
108
108
  b = builder @user, {}
109
- mock(b).object_to_hash(@user,{ :root => false }).returns('xyz').subject
109
+ mock(b).object_to_hash({ @user => :user },{ :root => false }).returns('xyz').subject
110
110
 
111
111
  b.child(@user => :user) { attribute :name }
112
112
  get_result(b)
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: rabl
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.1
5
+ version: 0.1.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Nathan Esquenazi
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-18 00:00:00 -07:00
13
+ date: 2011-04-19 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -113,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
113
  requirements: []
114
114
 
115
115
  rubyforge_project: rabl
116
- rubygems_version: 1.5.2
116
+ rubygems_version: 1.6.2
117
117
  signing_key:
118
118
  specification_version: 3
119
119
  summary: General ruby templating for json or xml