rabl 0.8.5 → 0.8.6
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 +6 -0
- data/README.md +8 -1
- data/lib/rabl/builder.rb +3 -3
- data/lib/rabl/engine.rb +4 -3
- data/lib/rabl/partials.rb +1 -1
- data/lib/rabl/version.rb +1 -1
- data/test/builder_test.rb +3 -3
- data/test/engine_test.rb +19 -0
- data/test/partials_test.rb +26 -0
- metadata +4 -4
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 0.8.6
|
4
|
+
|
5
|
+
* FIX #142 #467 Do not use a collection as the default object. (Thanks @mrbrdo)
|
6
|
+
* NEW Options hash for glue function added (Thanks @sassysolutions)
|
7
|
+
* FIX #470 Better template lookups when Padrino is defined (Thanks @LTe)
|
8
|
+
|
3
9
|
## 0.8.5
|
4
10
|
|
5
11
|
* FIX #386 Support disabling root on child calls (Thanks @digger69)
|
data/README.md
CHANGED
@@ -298,6 +298,13 @@ child :address do
|
|
298
298
|
end
|
299
299
|
```
|
300
300
|
|
301
|
+
You can also disable object root for child node:
|
302
|
+
```ruby
|
303
|
+
child :posts, :object_root => false do
|
304
|
+
attributes :id, :title
|
305
|
+
end
|
306
|
+
```
|
307
|
+
|
301
308
|
You can also add child nodes from an arbitrary data source:
|
302
309
|
|
303
310
|
```ruby
|
@@ -541,7 +548,7 @@ node(:title) { @custom_title }
|
|
541
548
|
### Content Type Headers ###
|
542
549
|
|
543
550
|
Currently in RABL, the content-type of your response is not set automatically. This is because RABL is intended
|
544
|
-
to work for any Rack-based framework and as
|
551
|
+
to work for any Rack-based framework and as agnostic to format as possible.
|
545
552
|
Check [this issue](https://github.com/nesquena/rabl/issues/185#issuecomment-4501232) for more
|
546
553
|
details, and if you have any ideas or patches please let me know.
|
547
554
|
|
data/lib/rabl/builder.rb
CHANGED
@@ -47,7 +47,7 @@ module Rabl
|
|
47
47
|
end if @options.has_key?(:child)
|
48
48
|
# Glues
|
49
49
|
@options[:glue].each do |settings|
|
50
|
-
glue(settings[:data], &settings[:block])
|
50
|
+
glue(settings[:data], settings[:options], &settings[:block])
|
51
51
|
end if @options.has_key?(:glue)
|
52
52
|
|
53
53
|
# Wrap result in root
|
@@ -108,8 +108,8 @@ module Rabl
|
|
108
108
|
|
109
109
|
# Glues data from a child node to the json_output
|
110
110
|
# glue(@user) { attribute :full_name => :user_full_name }
|
111
|
-
def glue(data, &block)
|
112
|
-
return false unless data.present?
|
111
|
+
def glue(data, options={}, &block)
|
112
|
+
return false unless data.present? && resolve_condition(options)
|
113
113
|
object = data_object(data)
|
114
114
|
glued_attributes = self.object_to_hash(object, :root => false, &block)
|
115
115
|
@_result.merge!(glued_attributes) if glued_attributes
|
data/lib/rabl/engine.rb
CHANGED
@@ -183,8 +183,8 @@ module Rabl
|
|
183
183
|
|
184
184
|
# Glues data from a child node to the json_output
|
185
185
|
# glue(@user) { attribute :full_name => :user_full_name }
|
186
|
-
def glue(data, &block)
|
187
|
-
@_options[:glue].push({ :data => data, :block => block })
|
186
|
+
def glue(data, options={}, &block)
|
187
|
+
@_options[:glue].push({ :data => data, :options => options, :block => block })
|
188
188
|
end
|
189
189
|
|
190
190
|
# Extends an existing rabl template with additional attributes in the block
|
@@ -209,7 +209,8 @@ module Rabl
|
|
209
209
|
if context_scope.respond_to?(:controller)
|
210
210
|
controller_name = context_scope.controller.controller_name
|
211
211
|
stripped_name = controller_name.split(%r{::|\/}).last
|
212
|
-
instance_variable_get("@#{stripped_name}")
|
212
|
+
ivar_object = instance_variable_get("@#{stripped_name}")
|
213
|
+
ivar_object if is_object?(ivar_object)
|
213
214
|
end
|
214
215
|
end
|
215
216
|
|
data/lib/rabl/partials.rb
CHANGED
@@ -32,7 +32,7 @@ module Rabl
|
|
32
32
|
def fetch_source(file, options={})
|
33
33
|
view_paths = Array(options[:view_path]) + Array(Rabl.configuration.view_paths)
|
34
34
|
Rabl.source_cache(file, view_paths) do
|
35
|
-
file_path = if defined?(Padrino) && context_scope.respond_to?(:settings)
|
35
|
+
file_path = if defined?(Padrino) && context_scope.respond_to?(:settings) && context_scope.respond_to?(:resolve_template)
|
36
36
|
fetch_padrino_source(file, options)
|
37
37
|
elsif defined?(Rails) && context_scope.respond_to?(:view_paths)
|
38
38
|
_view_paths = view_paths + Array(context_scope.view_paths.to_a)
|
data/lib/rabl/version.rb
CHANGED
data/test/builder_test.rb
CHANGED
@@ -137,18 +137,18 @@ context "Rabl::Builder" do
|
|
137
137
|
end.equals({})
|
138
138
|
|
139
139
|
asserts "that it generates the glue attributes" do
|
140
|
-
b = builder :glue => [{ :data => @user, :block => lambda { |u| attribute :name }}]
|
140
|
+
b = builder :glue => [{ :data => @user, :options => {}, :block => lambda { |u| attribute :name }}]
|
141
141
|
mock(b).object_to_hash(@user, { :root => false }).returns({:user => 'xyz'}).subject
|
142
142
|
b.build(@user)
|
143
143
|
end.equivalent_to({ :user => 'xyz' })
|
144
144
|
|
145
145
|
asserts "that it appends the glue attributes to result" do
|
146
|
-
b = builder :glue => [{ :data => @user, :block => lambda { |u| attribute :name => :user_name }}]
|
146
|
+
b = builder :glue => [{ :data => @user, :options => {}, :block => lambda { |u| attribute :name => :user_name }}]
|
147
147
|
b.build(@user)
|
148
148
|
end.equivalent_to({ :user_name => 'rabl' })
|
149
149
|
|
150
150
|
asserts "that it does not generate new attributes if no glue attributes are present" do
|
151
|
-
b = builder :glue => [{ :data => @user, :block => lambda { |u| attribute :name }}]
|
151
|
+
b = builder :glue => [{ :data => @user, :options => {}, :block => lambda { |u| attribute :name }}]
|
152
152
|
mock(b).object_to_hash(@user,{ :root => false }).returns({}).subject
|
153
153
|
b.build(@user)
|
154
154
|
end.equals({})
|
data/test/engine_test.rb
CHANGED
@@ -373,6 +373,14 @@ context "Rabl::Engine" do
|
|
373
373
|
template.render(scope).split
|
374
374
|
end.equals "{\"name\":\"rabl\"}".split
|
375
375
|
|
376
|
+
asserts "that it does not set a collection as default object" do
|
377
|
+
template = rabl %{
|
378
|
+
attribute :name
|
379
|
+
}
|
380
|
+
scope = context_scope('user', [])
|
381
|
+
template.render(scope).split
|
382
|
+
end.equals "{}".split
|
383
|
+
|
376
384
|
asserts "that it sets data source" do
|
377
385
|
template = rabl %q{
|
378
386
|
object @user
|
@@ -624,6 +632,17 @@ context "Rabl::Engine" do
|
|
624
632
|
scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA', :age => 12)
|
625
633
|
JSON.parse(template.render(scope))
|
626
634
|
end.equals JSON.parse("{\"name\":\"leo\",\"city\":\"LA\",\"age\":12}")
|
635
|
+
|
636
|
+
asserts "that it can be passed conditionals" do
|
637
|
+
template = rabl %{
|
638
|
+
object @user
|
639
|
+
attribute :name
|
640
|
+
glue(@user, {:if => lambda { |i| false }}) { attribute :age }
|
641
|
+
}
|
642
|
+
scope = Object.new
|
643
|
+
scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA', :age => 12)
|
644
|
+
JSON.parse(template.render(scope))
|
645
|
+
end.equals JSON.parse("{\"name\":\"leo\"}")
|
627
646
|
end
|
628
647
|
|
629
648
|
teardown do
|
data/test/partials_test.rb
CHANGED
@@ -89,6 +89,32 @@ context "Rabl::Partials" do
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
+
context "fetch source with custom scope" do
|
93
|
+
context "when Padrino is defined" do
|
94
|
+
helper(:tmp_path) { @tmp_path ||= Pathname.new(Dir.mktmpdir) }
|
95
|
+
|
96
|
+
setup do
|
97
|
+
::Padrino = stub(Class.new)
|
98
|
+
Rabl.configuration.cache_sources = false
|
99
|
+
@it = TestPartial.new
|
100
|
+
|
101
|
+
def @it.context_scope; @context_scope ||= Object.new; end
|
102
|
+
context_scope = @it.context_scope
|
103
|
+
def context_scope.settings; end
|
104
|
+
|
105
|
+
File.open(tmp_path + "test.json.rabl", "w") { |f| f.puts "content" }
|
106
|
+
end
|
107
|
+
|
108
|
+
asserts('Padrino constant dont break manual lookup') do
|
109
|
+
@it.fetch_source('test', :view_path => tmp_path.to_s)
|
110
|
+
end.equals do
|
111
|
+
["content\n", (tmp_path + "test.json.rabl").to_s ]
|
112
|
+
end
|
113
|
+
|
114
|
+
teardown { Object.send(:remove_const, :Padrino) }
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
92
118
|
context "fetch source with Rails" do
|
93
119
|
context "and :view_path" do
|
94
120
|
helper(:tmp_path) { @tmp_path ||= Pathname.new(Dir.mktmpdir) }
|
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.8.
|
4
|
+
version: 0.8.6
|
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: 2013-
|
12
|
+
date: 2013-06-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -421,7 +421,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
421
421
|
version: '0'
|
422
422
|
segments:
|
423
423
|
- 0
|
424
|
-
hash:
|
424
|
+
hash: 3931971749616157374
|
425
425
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
426
426
|
none: false
|
427
427
|
requirements:
|
@@ -430,7 +430,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
430
430
|
version: '0'
|
431
431
|
segments:
|
432
432
|
- 0
|
433
|
-
hash:
|
433
|
+
hash: 3931971749616157374
|
434
434
|
requirements: []
|
435
435
|
rubyforge_project: rabl
|
436
436
|
rubygems_version: 1.8.25
|