rabl 0.13.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (303) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +35 -0
  3. data/CONTRIBUTING.md +2 -2
  4. data/README.md +16 -11
  5. data/lib/rabl/builder.rb +29 -17
  6. data/lib/rabl/cache_engine.rb +30 -1
  7. data/lib/rabl/configuration.rb +3 -1
  8. data/lib/rabl/digestor/rails3.rb +12 -0
  9. data/lib/rabl/digestor/rails41.rb +12 -0
  10. data/lib/rabl/digestor/rails5.rb +6 -0
  11. data/lib/rabl/digestor.rb +5 -37
  12. data/lib/rabl/engine.rb +30 -11
  13. data/lib/rabl/helpers.rb +7 -3
  14. data/lib/rabl/railtie.rb +18 -1
  15. data/lib/rabl/template.rb +21 -1
  16. data/lib/rabl/version.rb +1 -1
  17. data/lib/rabl.rb +5 -5
  18. metadata +15 -298
  19. data/.gitignore +0 -8
  20. data/.travis.yml +0 -15
  21. data/Gemfile +0 -27
  22. data/Rakefile +0 -54
  23. data/examples/base.json.rabl +0 -8
  24. data/examples/demo.json.rabl +0 -42
  25. data/examples/inherited.json.rabl +0 -11
  26. data/fixtures/ashared/NOTES +0 -44
  27. data/fixtures/ashared/README +0 -39
  28. data/fixtures/ashared/migrate/20111002092016_create_users.rb +0 -15
  29. data/fixtures/ashared/migrate/20111002092019_create_posts.rb +0 -14
  30. data/fixtures/ashared/migrate/20111002092024_create_phone_numbers.rb +0 -16
  31. data/fixtures/ashared/models/phone_number.rb +0 -7
  32. data/fixtures/ashared/models/post.rb +0 -3
  33. data/fixtures/ashared/models/user.rb +0 -3
  34. data/fixtures/ashared/views/layouts/application.html.erb +0 -9
  35. data/fixtures/ashared/views/posts/_show_footer_script.js.erb +0 -1
  36. data/fixtures/ashared/views/posts/date.rabl +0 -3
  37. data/fixtures/ashared/views/posts/index.rabl +0 -12
  38. data/fixtures/ashared/views/posts/show.rabl +0 -17
  39. data/fixtures/ashared/views/users/index.json.rabl +0 -3
  40. data/fixtures/ashared/views/users/phone_number.json.rabl +0 -6
  41. data/fixtures/ashared/views/users/show.json.rabl +0 -16
  42. data/fixtures/ashared/views_rails_3/layouts/application.html.erb +0 -13
  43. data/fixtures/ashared/views_rails_3/posts/_show_footer_script.js.erb +0 -1
  44. data/fixtures/ashared/views_rails_3/posts/date.rabl +0 -3
  45. data/fixtures/ashared/views_rails_3/posts/index.html.erb +0 -3
  46. data/fixtures/ashared/views_rails_3/posts/index.rabl +0 -12
  47. data/fixtures/ashared/views_rails_3/posts/renderer.rabl +0 -8
  48. data/fixtures/ashared/views_rails_3/posts/renderer_partial.rabl +0 -4
  49. data/fixtures/ashared/views_rails_3/posts/show.html.erb +0 -3
  50. data/fixtures/ashared/views_rails_3/posts/show.rabl +0 -25
  51. data/fixtures/ashared/views_rails_3/posts/show.rabl_test_v1.rabl +0 -7
  52. data/fixtures/ashared/views_rails_3/users/index.json.rabl +0 -3
  53. data/fixtures/ashared/views_rails_3/users/phone_number.json.rabl +0 -8
  54. data/fixtures/ashared/views_rails_3/users/phone_number.xml.rabl +0 -8
  55. data/fixtures/ashared/views_rails_3/users/show.json.rabl +0 -16
  56. data/fixtures/ashared/views_rails_3/users/show.rabl_test_v1.rabl +0 -3
  57. data/fixtures/padrino_test/.components +0 -7
  58. data/fixtures/padrino_test/.gitignore +0 -7
  59. data/fixtures/padrino_test/Gemfile +0 -17
  60. data/fixtures/padrino_test/Rakefile +0 -3
  61. data/fixtures/padrino_test/app/app.rb +0 -31
  62. data/fixtures/padrino_test/app/controllers/posts.rb +0 -11
  63. data/fixtures/padrino_test/app/controllers/users.rb +0 -11
  64. data/fixtures/padrino_test/app/helpers/posts_helper.rb +0 -7
  65. data/fixtures/padrino_test/app/helpers/users_helper.rb +0 -7
  66. data/fixtures/padrino_test/config/apps.rb +0 -34
  67. data/fixtures/padrino_test/config/boot.rb +0 -29
  68. data/fixtures/padrino_test/config/database.rb +0 -43
  69. data/fixtures/padrino_test/config.ru +0 -9
  70. data/fixtures/padrino_test/db/schema.rb +0 -42
  71. data/fixtures/padrino_test/public/favicon.ico +0 -0
  72. data/fixtures/padrino_test/test/app/controllers/posts_controller_test.rb +0 -108
  73. data/fixtures/padrino_test/test/app/controllers/users_controller_test.rb +0 -87
  74. data/fixtures/padrino_test/test/test.rake +0 -18
  75. data/fixtures/padrino_test/test/test_config.rb +0 -18
  76. data/fixtures/rails2/.gitignore +0 -1
  77. data/fixtures/rails2/Gemfile +0 -10
  78. data/fixtures/rails2/Rakefile +0 -14
  79. data/fixtures/rails2/app/controllers/application_controller.rb +0 -10
  80. data/fixtures/rails2/app/controllers/posts_controller.rb +0 -15
  81. data/fixtures/rails2/app/controllers/users_controller.rb +0 -15
  82. data/fixtures/rails2/app/helpers/application_helper.rb +0 -2
  83. data/fixtures/rails2/app/helpers/posts_helper.rb +0 -2
  84. data/fixtures/rails2/app/helpers/users_helper.rb +0 -2
  85. data/fixtures/rails2/config/boot.rb +0 -129
  86. data/fixtures/rails2/config/database.yml +0 -16
  87. data/fixtures/rails2/config/environment.rb +0 -64
  88. data/fixtures/rails2/config/environments/development.rb +0 -17
  89. data/fixtures/rails2/config/environments/production.rb +0 -28
  90. data/fixtures/rails2/config/environments/test.rb +0 -28
  91. data/fixtures/rails2/config/initializers/backtrace_silencers.rb +0 -7
  92. data/fixtures/rails2/config/initializers/cookie_verification_secret.rb +0 -7
  93. data/fixtures/rails2/config/initializers/inflections.rb +0 -10
  94. data/fixtures/rails2/config/initializers/mime_types.rb +0 -5
  95. data/fixtures/rails2/config/initializers/new_rails_defaults.rb +0 -21
  96. data/fixtures/rails2/config/initializers/session_store.rb +0 -15
  97. data/fixtures/rails2/config/locales/en.yml +0 -5
  98. data/fixtures/rails2/config/preinitializer.rb +0 -20
  99. data/fixtures/rails2/config/routes.rb +0 -45
  100. data/fixtures/rails2/db/schema.rb +0 -40
  101. data/fixtures/rails2/db/seeds.rb +0 -7
  102. data/fixtures/rails2/public/404.html +0 -30
  103. data/fixtures/rails2/public/422.html +0 -30
  104. data/fixtures/rails2/public/500.html +0 -30
  105. data/fixtures/rails2/public/favicon.ico +0 -0
  106. data/fixtures/rails2/public/images/rails.png +0 -0
  107. data/fixtures/rails2/public/index.html +0 -275
  108. data/fixtures/rails2/public/robots.txt +0 -5
  109. data/fixtures/rails2/script/about +0 -4
  110. data/fixtures/rails2/script/console +0 -3
  111. data/fixtures/rails2/script/dbconsole +0 -3
  112. data/fixtures/rails2/script/destroy +0 -3
  113. data/fixtures/rails2/script/generate +0 -3
  114. data/fixtures/rails2/script/performance/benchmarker +0 -3
  115. data/fixtures/rails2/script/performance/profiler +0 -3
  116. data/fixtures/rails2/script/plugin +0 -3
  117. data/fixtures/rails2/script/runner +0 -3
  118. data/fixtures/rails2/script/server +0 -3
  119. data/fixtures/rails2/test/functionals/posts_controller_test.rb +0 -108
  120. data/fixtures/rails2/test/functionals/users_controller_test.rb +0 -87
  121. data/fixtures/rails2/test/test_helper.rb +0 -33
  122. data/fixtures/rails3/.gitignore +0 -4
  123. data/fixtures/rails3/Gemfile +0 -37
  124. data/fixtures/rails3/Rakefile +0 -12
  125. data/fixtures/rails3/app/controllers/application_controller.rb +0 -14
  126. data/fixtures/rails3/app/controllers/posts_controller.rb +0 -11
  127. data/fixtures/rails3/app/controllers/users_controller.rb +0 -11
  128. data/fixtures/rails3/config/application.rb +0 -42
  129. data/fixtures/rails3/config/boot.rb +0 -6
  130. data/fixtures/rails3/config/database.yml +0 -22
  131. data/fixtures/rails3/config/environment.rb +0 -5
  132. data/fixtures/rails3/config/environments/development.rb +0 -26
  133. data/fixtures/rails3/config/environments/production.rb +0 -49
  134. data/fixtures/rails3/config/environments/test.rb +0 -35
  135. data/fixtures/rails3/config/initializers/backtrace_silencers.rb +0 -7
  136. data/fixtures/rails3/config/initializers/inflections.rb +0 -10
  137. data/fixtures/rails3/config/initializers/mime_types.rb +0 -5
  138. data/fixtures/rails3/config/initializers/secret_token.rb +0 -7
  139. data/fixtures/rails3/config/initializers/session_store.rb +0 -8
  140. data/fixtures/rails3/config/locales/en.yml +0 -5
  141. data/fixtures/rails3/config/routes.rb +0 -61
  142. data/fixtures/rails3/config.ru +0 -4
  143. data/fixtures/rails3/db/seeds.rb +0 -7
  144. data/fixtures/rails3/lib/tasks/.gitkeep +0 -0
  145. data/fixtures/rails3/public/404.html +0 -26
  146. data/fixtures/rails3/public/422.html +0 -26
  147. data/fixtures/rails3/public/500.html +0 -26
  148. data/fixtures/rails3/public/favicon.ico +0 -0
  149. data/fixtures/rails3/public/images/rails.png +0 -0
  150. data/fixtures/rails3/public/index.html +0 -239
  151. data/fixtures/rails3/public/robots.txt +0 -5
  152. data/fixtures/rails3/public/stylesheets/.gitkeep +0 -0
  153. data/fixtures/rails3/script/rails +0 -6
  154. data/fixtures/rails3/test/functional/posts_controller_test.rb +0 -108
  155. data/fixtures/rails3/test/functional/users_controller_test.rb +0 -87
  156. data/fixtures/rails3/test/test_helper.rb +0 -26
  157. data/fixtures/rails3_2/.gitignore +0 -15
  158. data/fixtures/rails3_2/Gemfile +0 -40
  159. data/fixtures/rails3_2/README.rdoc +0 -261
  160. data/fixtures/rails3_2/Rakefile +0 -12
  161. data/fixtures/rails3_2/app/assets/images/rails.png +0 -0
  162. data/fixtures/rails3_2/app/assets/javascripts/application.js +0 -15
  163. data/fixtures/rails3_2/app/assets/javascripts/posts.js.coffee +0 -3
  164. data/fixtures/rails3_2/app/assets/javascripts/users.js.coffee +0 -3
  165. data/fixtures/rails3_2/app/assets/stylesheets/application.css +0 -13
  166. data/fixtures/rails3_2/app/assets/stylesheets/posts.css.scss +0 -3
  167. data/fixtures/rails3_2/app/assets/stylesheets/users.css.scss +0 -3
  168. data/fixtures/rails3_2/app/controllers/application_controller.rb +0 -14
  169. data/fixtures/rails3_2/app/controllers/posts_controller.rb +0 -16
  170. data/fixtures/rails3_2/app/controllers/users_controller.rb +0 -11
  171. data/fixtures/rails3_2/app/helpers/application_helper.rb +0 -5
  172. data/fixtures/rails3_2/app/helpers/posts_helper.rb +0 -2
  173. data/fixtures/rails3_2/app/helpers/users_helper.rb +0 -2
  174. data/fixtures/rails3_2/app/mailers/.gitkeep +0 -0
  175. data/fixtures/rails3_2/config/application.rb +0 -59
  176. data/fixtures/rails3_2/config/boot.rb +0 -6
  177. data/fixtures/rails3_2/config/database.yml +0 -25
  178. data/fixtures/rails3_2/config/environment.rb +0 -5
  179. data/fixtures/rails3_2/config/environments/development.rb +0 -37
  180. data/fixtures/rails3_2/config/environments/production.rb +0 -67
  181. data/fixtures/rails3_2/config/environments/test.rb +0 -37
  182. data/fixtures/rails3_2/config/initializers/backtrace_silencers.rb +0 -7
  183. data/fixtures/rails3_2/config/initializers/inflections.rb +0 -15
  184. data/fixtures/rails3_2/config/initializers/mime_types.rb +0 -7
  185. data/fixtures/rails3_2/config/initializers/secret_token.rb +0 -7
  186. data/fixtures/rails3_2/config/initializers/session_store.rb +0 -8
  187. data/fixtures/rails3_2/config/initializers/wrap_parameters.rb +0 -14
  188. data/fixtures/rails3_2/config/locales/en.yml +0 -5
  189. data/fixtures/rails3_2/config/routes.rb +0 -64
  190. data/fixtures/rails3_2/config.ru +0 -4
  191. data/fixtures/rails3_2/db/schema.rb +0 -42
  192. data/fixtures/rails3_2/db/seeds.rb +0 -7
  193. data/fixtures/rails3_2/doc/README_FOR_APP +0 -2
  194. data/fixtures/rails3_2/lib/assets/.gitkeep +0 -0
  195. data/fixtures/rails3_2/lib/tasks/.gitkeep +0 -0
  196. data/fixtures/rails3_2/log/.gitkeep +0 -0
  197. data/fixtures/rails3_2/public/404.html +0 -26
  198. data/fixtures/rails3_2/public/422.html +0 -26
  199. data/fixtures/rails3_2/public/500.html +0 -25
  200. data/fixtures/rails3_2/public/favicon.ico +0 -0
  201. data/fixtures/rails3_2/public/index.html +0 -241
  202. data/fixtures/rails3_2/public/robots.txt +0 -5
  203. data/fixtures/rails3_2/script/rails +0 -6
  204. data/fixtures/rails3_2/test/fixtures/phone_numbers.yml +0 -11
  205. data/fixtures/rails3_2/test/fixtures/posts.yml +0 -11
  206. data/fixtures/rails3_2/test/fixtures/users.yml +0 -11
  207. data/fixtures/rails3_2/test/functional/posts_controller_test.rb +0 -263
  208. data/fixtures/rails3_2/test/functional/users_controller_test.rb +0 -87
  209. data/fixtures/rails3_2/test/integration/.gitkeep +0 -0
  210. data/fixtures/rails3_2/test/performance/browsing_test.rb +0 -12
  211. data/fixtures/rails3_2/test/test_helper.rb +0 -26
  212. data/fixtures/rails3_2/test/unit/helpers/posts_helper_test.rb +0 -4
  213. data/fixtures/rails3_2/test/unit/helpers/users_helper_test.rb +0 -4
  214. data/fixtures/rails3_2/test/unit/phone_number_test.rb +0 -7
  215. data/fixtures/rails3_2/test/unit/post_test.rb +0 -7
  216. data/fixtures/rails3_2/test/unit/user_test.rb +0 -7
  217. data/fixtures/rails3_2/vendor/assets/javascripts/.gitkeep +0 -0
  218. data/fixtures/rails3_2/vendor/assets/stylesheets/.gitkeep +0 -0
  219. data/fixtures/rails3_2/vendor/plugins/.gitkeep +0 -0
  220. data/fixtures/rails4/.gitignore +0 -16
  221. data/fixtures/rails4/Gemfile +0 -49
  222. data/fixtures/rails4/README.rdoc +0 -28
  223. data/fixtures/rails4/Rakefile +0 -11
  224. data/fixtures/rails4/app/assets/javascripts/application.js +0 -16
  225. data/fixtures/rails4/app/assets/stylesheets/application.css +0 -13
  226. data/fixtures/rails4/app/controllers/application_controller.rb +0 -5
  227. data/fixtures/rails4/app/controllers/concerns/.keep +0 -0
  228. data/fixtures/rails4/app/controllers/posts_controller.rb +0 -16
  229. data/fixtures/rails4/app/controllers/users_controller.rb +0 -11
  230. data/fixtures/rails4/app/helpers/application_helper.rb +0 -5
  231. data/fixtures/rails4/app/mailers/.keep +0 -0
  232. data/fixtures/rails4/bin/bundle +0 -3
  233. data/fixtures/rails4/bin/rails +0 -4
  234. data/fixtures/rails4/bin/rake +0 -4
  235. data/fixtures/rails4/config/application.rb +0 -23
  236. data/fixtures/rails4/config/boot.rb +0 -4
  237. data/fixtures/rails4/config/database.yml +0 -25
  238. data/fixtures/rails4/config/environment.rb +0 -5
  239. data/fixtures/rails4/config/environments/development.rb +0 -29
  240. data/fixtures/rails4/config/environments/production.rb +0 -80
  241. data/fixtures/rails4/config/environments/test.rb +0 -36
  242. data/fixtures/rails4/config/initializers/backtrace_silencers.rb +0 -7
  243. data/fixtures/rails4/config/initializers/filter_parameter_logging.rb +0 -4
  244. data/fixtures/rails4/config/initializers/inflections.rb +0 -16
  245. data/fixtures/rails4/config/initializers/mime_types.rb +0 -7
  246. data/fixtures/rails4/config/initializers/secret_token.rb +0 -12
  247. data/fixtures/rails4/config/initializers/session_store.rb +0 -3
  248. data/fixtures/rails4/config/initializers/wrap_parameters.rb +0 -14
  249. data/fixtures/rails4/config/locales/en.yml +0 -23
  250. data/fixtures/rails4/config/routes.rb +0 -55
  251. data/fixtures/rails4/config.ru +0 -4
  252. data/fixtures/rails4/db/seeds.rb +0 -7
  253. data/fixtures/rails4/lib/assets/.keep +0 -0
  254. data/fixtures/rails4/lib/tasks/.keep +0 -0
  255. data/fixtures/rails4/log/.keep +0 -0
  256. data/fixtures/rails4/public/404.html +0 -58
  257. data/fixtures/rails4/public/422.html +0 -58
  258. data/fixtures/rails4/public/500.html +0 -57
  259. data/fixtures/rails4/public/favicon.ico +0 -0
  260. data/fixtures/rails4/public/robots.txt +0 -5
  261. data/fixtures/rails4/test/controllers/.keep +0 -0
  262. data/fixtures/rails4/test/fixtures/.keep +0 -0
  263. data/fixtures/rails4/test/functional/posts_controller_test.rb +0 -248
  264. data/fixtures/rails4/test/functional/users_controller_test.rb +0 -87
  265. data/fixtures/rails4/test/helpers/.keep +0 -0
  266. data/fixtures/rails4/test/integration/.keep +0 -0
  267. data/fixtures/rails4/test/mailers/.keep +0 -0
  268. data/fixtures/rails4/test/models/.keep +0 -0
  269. data/fixtures/rails4/test/test_helper.rb +0 -26
  270. data/fixtures/rails4/vendor/assets/javascripts/.keep +0 -0
  271. data/fixtures/rails4/vendor/assets/stylesheets/.keep +0 -0
  272. data/fixtures/sinatra_test/Gemfile +0 -13
  273. data/fixtures/sinatra_test/Rakefile +0 -6
  274. data/fixtures/sinatra_test/app.rb +0 -55
  275. data/fixtures/sinatra_test/config.ru +0 -7
  276. data/fixtures/sinatra_test/test/functional/posts_controller_test.rb +0 -108
  277. data/fixtures/sinatra_test/test/functional/users_controller_test.rb +0 -87
  278. data/fixtures/sinatra_test/test/test_helper.rb +0 -19
  279. data/rabl.gemspec +0 -36
  280. data/test/bson_engine_test.rb +0 -310
  281. data/test/builder_test.rb +0 -362
  282. data/test/configuration_test.rb +0 -91
  283. data/test/engine_test.rb +0 -835
  284. data/test/helpers_test.rb +0 -136
  285. data/test/integration/posts_controller_test.rb +0 -108
  286. data/test/integration/rails3_2/posts_controller_test.rb +0 -263
  287. data/test/integration/rails3_2/users_controller_test.rb +0 -87
  288. data/test/integration/rails4/posts_controller_test.rb +0 -248
  289. data/test/integration/rails4/users_controller_test.rb +0 -87
  290. data/test/integration/test_init.rb +0 -36
  291. data/test/integration/users_controller_test.rb +0 -87
  292. data/test/models/ormless.rb +0 -3
  293. data/test/models/user.rb +0 -34
  294. data/test/msgpack_engine_test.rb +0 -312
  295. data/test/multi_builder_test.rb +0 -69
  296. data/test/partials_test.rb +0 -205
  297. data/test/plist_engine_test.rb +0 -308
  298. data/test/renderer_test.rb +0 -390
  299. data/test/silence.rb +0 -21
  300. data/test/template_test.rb +0 -63
  301. data/test/teststrap.rb +0 -37
  302. data/test/xml_test.rb +0 -297
  303. data/test.watchr +0 -47
data/test/engine_test.rb DELETED
@@ -1,835 +0,0 @@
1
- require 'json'
2
- require File.expand_path('../teststrap', __FILE__)
3
- require 'rabl/template'
4
- require File.expand_path('../models/ormless', __FILE__)
5
-
6
- context "Rabl::Engine" do
7
- helper(:rabl) { |t| RablTemplate.new { t } }
8
- # context_scope 'users', [@user]
9
- helper(:context_scope) { |name, value|
10
- scope = Object.new
11
- stub(scope).controller { stub(Object).controller_name { name } }
12
- scope.instance_variable_set :"@#{name}", value
13
- scope
14
- }
15
-
16
- context "#initialize" do
17
- setup do
18
- Rabl::Engine.new("...source...", { :format => 'xml', :root => true, :view_path => '/path/to/views' })
19
- end
20
-
21
- asserts_topic.assigns :_source
22
- asserts_topic.assigns :_options
23
- asserts_topic.assigns :_view_path
24
- end
25
-
26
- context "#request_format" do
27
- context "is json by default" do
28
- setup do
29
- template = RablTemplate.new("code") { 'node(:foo) { "bar" }' }
30
- template.render(Object.new)
31
- end
32
-
33
- asserts_topic.equivalent_to('{"foo":"bar"}')
34
- end
35
-
36
- context "with a specified format" do
37
- setup do
38
- template = RablTemplate.new("code", :format => 'xml') { 'node(:foo) { "bar" }' }
39
- template.render(Object.new)
40
- end
41
-
42
- asserts_topic.includes('<foo>bar</foo>')
43
- end
44
- end
45
-
46
- context "#cache" do
47
- context "with cache" do
48
- setup do
49
- template = Rabl::Engine.new(%q{
50
- cache 'foo'
51
- })
52
- template.render(Object.new)
53
- template
54
- end
55
-
56
- asserts_topic.assigns(:_cache_key) { 'foo' }
57
- end
58
-
59
- context "with cache and options" do
60
- setup do
61
- template = Rabl::Engine.new(%q{
62
- cache 'foo', :expires_in => 'bar'
63
- })
64
- template.render(Object.new)
65
- template
66
- end
67
-
68
- asserts_topic.assigns(:_cache_key) { 'foo' }
69
- asserts_topic.assigns(:_cache_options) { { :expires_in => 'bar' } }
70
- end
71
-
72
- context "without cache" do
73
- setup do
74
- template = Rabl::Engine.new("")
75
- template.render(Object.new)
76
- template
77
- end
78
-
79
- denies(:instance_variable_defined?, :@_cache_key)
80
- end
81
- end
82
-
83
- context "with defaults" do
84
- setup do
85
- Rabl.configure do |config|
86
- config.include_json_root = true
87
- config.include_xml_root = false
88
- config.enable_json_callbacks = false
89
- end
90
- end
91
-
92
- context "#cache" do
93
- asserts "does not modify output" do
94
- template = rabl %q{
95
- object @user
96
- cache @user
97
- }
98
- scope = Object.new
99
- scope.instance_variable_set :@user, User.new
100
- template.render(scope)
101
- end.matches "{\"user\":{}}"
102
- end
103
-
104
- context "#object" do
105
- asserts "that it sets data source" do
106
- template = rabl %q{
107
- object @user
108
- }
109
- scope = Object.new
110
- scope.instance_variable_set :@user, User.new
111
- template.render(scope)
112
- end.matches "{\"user\":{}}"
113
-
114
- asserts "that it can set root node" do
115
- template = rabl %q{
116
- object @user => :person
117
- }
118
- scope = Object.new
119
- scope.instance_variable_set :@user, User.new
120
- template.render(scope)
121
- end.equals "{\"person\":{}}"
122
-
123
- asserts "that it can set root node with a nil object and explicit name" do
124
- template = rabl %q{
125
- object @user => :person
126
- }
127
- scope = Object.new
128
- scope.instance_variable_set :@user, nil
129
- template.render(scope)
130
- end.equals "{\"person\":{}}"
131
-
132
- asserts "that it can set false root node" do
133
- template = rabl %q{
134
- object @user => false
135
- }
136
- scope = Object.new
137
- scope.instance_variable_set :@user, User.new
138
- template.render(scope)
139
- end.equals "{}"
140
-
141
- asserts "that it can set false root node and correctly render object without root node" do
142
- template = rabl %q{
143
- object @user => false
144
- attribute :name
145
- }
146
- user = User.new(:name => "John Doe")
147
- scope = Object.new
148
- scope.instance_variable_set :@user, user
149
- template.render(scope)
150
- end.equals "{\"name\":\"John Doe\"}"
151
-
152
- asserts "that it can use non-ORM objects" do
153
- template = rabl %q{
154
- object @other
155
- }
156
- scope = Object.new
157
- scope.instance_variable_set :@other, Ormless.new
158
- template.render(scope)
159
- end.equals "{\"ormless\":{}}"
160
-
161
- asserts "that it works with nested controllers" do
162
- template = rabl ""
163
- scope = NestedScope::User.new
164
- scope.instance_variable_set :@user, User.new
165
- template.render(scope)
166
- end.matches "{}"
167
- end
168
-
169
- context "#collection" do
170
- asserts "that it sets object to be blank array" do
171
- template = rabl %{
172
- collection []
173
- }
174
- scope = Object.new
175
- template.render(scope)
176
- end.equals "[]"
177
-
178
- asserts "that it sets object to be casted as a simple array" do
179
- template = rabl %{
180
- collection @users
181
- }
182
- scope = Object.new
183
- scope.instance_variable_set :@users, [User.new, User.new]
184
- template.render(scope)
185
- end.equals "[{\"user\":{}},{\"user\":{}}]"
186
-
187
- asserts "that it sets root node for objects" do
188
- template = rabl %{
189
- collection @users => :people
190
- }
191
- scope = Object.new
192
- scope.instance_variable_set :@users, [User.new, User.new]
193
- template.render(scope)
194
- end.equals "{\"people\":[{\"person\":{}},{\"person\":{}}]}"
195
-
196
- asserts "that it doesn't set root node for objects when specified" do
197
- template = rabl %{
198
- collection @users, :root => :people, :object_root => false
199
- }
200
- scope = Object.new
201
- scope.instance_variable_set :@users, [User.new, User.new]
202
- template.render(scope)
203
- end.equals "{\"people\":[{},{}]}"
204
-
205
- asserts "that it sets proper object and root names when specified" do
206
- template = rabl %{
207
- collection @users, :root => :people, :object_root => :user
208
- }
209
- scope = Object.new
210
- scope.instance_variable_set :@users, [User.new, User.new]
211
- template.render(scope)
212
- end.equals "{\"people\":[{\"user\":{}},{\"user\":{}}]}"
213
-
214
- asserts "that it can use non-ORM objects" do
215
- template = rabl %q{
216
- object @others
217
- }
218
- scope = Object.new
219
- scope.instance_variable_set :@others, [Ormless.new, Ormless.new]
220
- template.render(scope)
221
- end.equals "[{\"ormless\":{}},{\"ormless\":{}}]"
222
- end
223
-
224
- context "#attribute" do
225
- asserts "that it adds an attribute or method to be included in output" do
226
- template = rabl %{
227
- object @user
228
- attribute :name
229
- }
230
- scope = Object.new
231
- scope.instance_variable_set :@user, User.new(:name => 'irvine')
232
- JSON.parse(template.render(scope))
233
- end.equals JSON.parse("{\"user\":{\"name\":\"irvine\"}}")
234
-
235
- asserts "that it can add attribute under a different key name through :as" do
236
- template = rabl %{
237
- object @user
238
- attribute :name, :as => 'city'
239
- }
240
- scope = Object.new
241
- scope.instance_variable_set :@user, User.new(:name => 'irvine')
242
- JSON.parse(template.render(scope))
243
- end.equals JSON.parse("{\"user\":{\"city\":\"irvine\"}}")
244
-
245
- asserts "that it can add attribute under a different key name through hash" do
246
- template = rabl %{
247
- object @user
248
- attribute :name => :city
249
- }
250
- scope = Object.new
251
- scope.instance_variable_set :@user, User.new(:name => 'irvine')
252
- JSON.parse(template.render(scope))
253
- end.equals JSON.parse("{\"user\":{\"city\":\"irvine\"}}")
254
- end
255
-
256
- context "#code" do
257
- asserts "that it can create an arbitraty code node" do
258
- template = rabl %{
259
- code(:foo) { 'bar' }
260
- }
261
- template.render(Object.new)
262
- end.equals "{\"foo\":\"bar\"}"
263
-
264
- asserts "that it can be passed conditionals" do
265
- template = rabl %{
266
- code(:foo, :if => lambda { |i| false }) { 'bar' }
267
- }
268
- template.render(Object.new)
269
- end.equals "{}"
270
-
271
- asserts "that it can merge the result with a collection element given no name" do
272
- template = rabl %{
273
- collection @users
274
- code do |user|
275
- {:name => user.name}
276
- end
277
- }
278
- scope = Object.new
279
- scope.instance_variable_set :@users, [User.new(:name => 'a'), User.new(:name => 'b')]
280
- JSON.parse(template.render(scope))
281
- end.equals JSON.parse("[{\"user\":{\"name\":\"a\"}},{\"user\":{\"name\":\"b\"}}]")
282
-
283
- asserts "that it can merge the result on a child node given no name" do
284
- template = rabl %{
285
- object @user
286
- attribute :name
287
- child(@user) do
288
- code do |user|
289
- {:city => user.city}
290
- end
291
- end
292
- }
293
- scope = Object.new
294
- scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA')
295
- JSON.parse(template.render(scope))
296
- end.equals JSON.parse("{\"user\":{\"name\":\"leo\",\"user\":{\"city\":\"LA\"}}}")
297
- end
298
-
299
- context "#child" do
300
- asserts "that it can create a child node" do
301
- template = rabl %{
302
- object @user
303
- attribute :name
304
- child(@user) { attribute :city }
305
- }
306
- scope = Object.new
307
- scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA')
308
- JSON.parse(template.render(scope))
309
- end.equals JSON.parse("{\"user\":{\"name\":\"leo\",\"user\":{\"city\":\"LA\"}}}")
310
-
311
- asserts "that it can create a child node with different key" do
312
- template = rabl %{
313
- object @user
314
- attribute :name
315
- child(@user => :person) { attribute :city }
316
- }
317
- scope = Object.new
318
- scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA')
319
- JSON.parse(template.render(scope))
320
- end.equals JSON.parse("{\"user\":{\"name\":\"leo\",\"person\":{\"city\":\"LA\"}}}")
321
-
322
- asserts "that it passes the data object to the block" do
323
- template = rabl %{
324
- object @user
325
- child(@user => :person) do |user|
326
- attribute :name if user.name == 'leo'
327
- end
328
- }
329
- scope = Object.new
330
- scope.instance_variable_set :@user, User.new(:name => 'leo')
331
- template.render(scope)
332
- end.equals "{\"user\":{\"person\":{\"name\":\"leo\"}}}"
333
-
334
- asserts "it sets root node for child collection" do
335
- template = rabl %{
336
- object @user
337
- attribute :name
338
- child(@users) { attribute :city }
339
- }
340
- scope = Object.new
341
- scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA')
342
- scope.instance_variable_set :@users, [User.new(:name => 'one', :city => 'UNO'), User.new(:name => 'two', :city => 'DOS')]
343
- template.render(scope)
344
- end.equals "{\"user\":{\"name\":\"leo\",\"users\":[{\"user\":{\"city\":\"UNO\"}},{\"user\":{\"city\":\"DOS\"}}]}}"
345
-
346
- asserts "that it chooses a name based on symbol if no elements" do
347
- template = rabl %{
348
- object @bar => :bar
349
- child(:foos) { attribute :city }
350
- }
351
- scope = Object.new
352
- bar = Object.new
353
- stub(bar).foos { [] }
354
- scope.instance_variable_set :@bar, bar
355
- template.render(scope)
356
- end.equals "{\"bar\":{\"foos\":[]}}"
357
-
358
- asserts "that it chooses a name based on symbol if nil" do
359
- template = rabl %{
360
- object @bar => :bar
361
- child(:foos) { attribute :city }
362
- }
363
- scope = Object.new
364
- bar = Object.new
365
- stub(bar).foos { nil }
366
- scope.instance_variable_set :@bar, bar
367
- template.render(scope)
368
- end.equals "{\"bar\":{\"foos\":null}}"
369
-
370
- asserts "it allows suppression of root node for child collection" do
371
- template = rabl %{
372
- object @user
373
- attribute :name
374
- child(@users, :object_root => false) { attribute :city }
375
- }
376
- scope = Object.new
377
- scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA')
378
- scope.instance_variable_set :@users, [User.new(:name => 'one', :city => 'UNO'), User.new(:name => 'two', :city => 'DOS')]
379
- template.render(scope)
380
- end.equals "{\"user\":{\"name\":\"leo\",\"users\":[{\"city\":\"UNO\"},{\"city\":\"DOS\"}]}}"
381
-
382
- asserts "it allows modification of object root node for child collection" do
383
- template = rabl %{
384
- object @user
385
- attribute :name
386
- child(@users, :object_root => 'person') { attribute :city }
387
- }
388
- scope = Object.new
389
- scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA')
390
- scope.instance_variable_set :@users, [User.new(:name => 'one', :city => 'UNO'), User.new(:name => 'two', :city => 'DOS')]
391
- template.render(scope)
392
- end.equals "{\"user\":{\"name\":\"leo\",\"users\":[{\"person\":{\"city\":\"UNO\"}},{\"person\":{\"city\":\"DOS\"}}]}}"
393
-
394
- asserts "it allows modification of both labels for a child collection" do
395
- template = rabl %{
396
- object @user
397
- attribute :name
398
- child(@users, :root => "people", :object_root => 'item') { attribute :city }
399
- }
400
- scope = Object.new
401
- scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA')
402
- scope.instance_variable_set :@users, [User.new(:name => 'one', :city => 'UNO'), User.new(:name => 'two', :city => 'DOS')]
403
- template.render(scope)
404
- end.equals "{\"user\":{\"name\":\"leo\",\"people\":[{\"item\":{\"city\":\"UNO\"}},{\"item\":{\"city\":\"DOS\"}}]}}"
405
- end
406
-
407
- context "#glue" do
408
- asserts "that it glues data from a child node" do
409
- template = rabl %{
410
- object @user
411
- attribute :name
412
- glue(@user) { attribute :city }
413
- glue(@user) { attribute :age }
414
- }
415
- scope = Object.new
416
- scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA', :age => 12)
417
- JSON.parse(template.render(scope))
418
- end.equals JSON.parse("{\"user\":{\"name\":\"leo\",\"city\":\"LA\",\"age\":12}}")
419
-
420
- asserts "that it passes the data object to the block" do
421
- template = rabl %{
422
- object @user
423
- glue(@user) {|user| attribute :age if user.name == 'leo' }
424
- }
425
- scope = Object.new
426
- scope.instance_variable_set :@user, User.new(:name => 'leo', :age => 12)
427
- template.render(scope)
428
- end.equals "{\"user\":{\"age\":12}}"
429
- end
430
-
431
- context "#partial" do
432
- asserts "that it creates object from partial and passes local" do
433
- template = rabl %{
434
- object false
435
- node :foo do
436
- partial("foo/bar", :object => @user, :locals => { :foo => "bar" })
437
- end
438
- }
439
- scope = Object.new
440
- @user = User.new(:name => 'leo', :city => 'LA', :age => 12)
441
- scope.instance_variable_set :@user, @user
442
- e = Rabl::Engine.new(nil)
443
- mock(e).render.returns({ :name => 'leo', :city => 'LA', :age => 12 })
444
-
445
- any_instance_of(Rabl::Engine) do |b|
446
- mock(b).fetch_source("foo/bar", :view_path => nil).once
447
- mock(b).object_to_engine(@user, :locals => { :foo => "bar" }, :source => nil, :source_location => nil, :template => 'foo/bar').returns(e)
448
- end
449
- JSON.parse(template.render(scope))
450
- end.equals JSON.parse("{ \"foo\" : {\"name\":\"leo\",\"city\":\"LA\",\"age\":12} }")
451
- end
452
-
453
- teardown do
454
- Rabl.reset_configuration!
455
- end
456
- end # with json root
457
-
458
- context "without json root" do
459
- setup do
460
- Rabl.configure do |config|
461
- config.include_json_root = false
462
- config.include_xml_root = false
463
- config.enable_json_callbacks = false
464
- end
465
- end
466
-
467
- context "#object" do
468
- asserts "that it sets default object" do
469
- template = rabl %{
470
- attribute :name
471
- }
472
- scope = context_scope('user', User.new)
473
- template.render(scope).split
474
- end.equals "{\"name\":\"rabl\"}".split
475
-
476
- asserts "that it does not set a collection as default object" do
477
- template = rabl %{
478
- attribute :name
479
- }
480
- scope = context_scope('user', [])
481
- template.render(scope).split
482
- end.equals "{}".split
483
-
484
- asserts "that it sets data source" do
485
- template = rabl %q{
486
- object @user
487
- }
488
- scope = Object.new
489
- scope.instance_variable_set :@user, User.new
490
- template.render(scope)
491
- end.matches "{}"
492
-
493
- asserts "that it can set root node" do
494
- template = rabl %q{
495
- object @user => :person
496
- }
497
- scope = Object.new
498
- scope.instance_variable_set :@user, User.new
499
- template.render(scope)
500
- end.equals "{}"
501
-
502
- asserts "that it can set root node with a nil object and explicit name" do
503
- template = rabl %q{
504
- object @user => :person
505
- attributes :name
506
- }
507
- scope = Object.new
508
- scope.instance_variable_set :@user, nil
509
- template.render(scope)
510
- end.equals "{}"
511
- end
512
-
513
- context "#collection" do
514
- asserts "that it sets object to be casted as a simple array" do
515
- template = rabl %{
516
- collection @users
517
- }
518
- scope = Object.new
519
- scope.instance_variable_set :@users, [User.new, User.new]
520
- template.render(scope)
521
- end.equals "[{},{}]"
522
-
523
- asserts "that it sets root node for objects using hash" do
524
- template = rabl %{
525
- collection @users => :people
526
- }
527
- scope = Object.new
528
- scope.instance_variable_set :@users, [User.new, User.new]
529
- template.render(scope)
530
- end.equals "{\"people\":[{},{}]}"
531
-
532
- asserts "that it sets root node for objects using root option" do
533
- template = rabl %{
534
- collection @users, :root => :people
535
- }
536
- scope = Object.new
537
- scope.instance_variable_set :@users, [User.new, User.new]
538
- template.render(scope)
539
- end.equals "{\"people\":[{},{}]}"
540
-
541
- asserts "that it sets root node for objects using object_root option" do
542
- template = rabl %{
543
- collection @users, :root => :humans, :object_root => :person
544
- }
545
- scope = Object.new
546
- scope.instance_variable_set :@users, [User.new, User.new]
547
- template.render(scope)
548
- end.equals %Q^{"humans":[{"person":{}},{"person":{}}]}^
549
- end
550
-
551
- context "#attribute" do
552
- asserts "that it adds an attribute or method to be included in output" do
553
- template = rabl %{
554
- object @user
555
- attribute :name
556
- }
557
- scope = Object.new
558
- scope.instance_variable_set :@user, User.new(:name => 'irvine')
559
- template.render(scope)
560
- end.equals "{\"name\":\"irvine\"}"
561
-
562
- asserts "that it can add attribute under a different key name through :as" do
563
- template = rabl %{
564
- object @user
565
- attribute :name, :as => 'city'
566
- }
567
- scope = Object.new
568
- scope.instance_variable_set :@user, User.new(:name => 'irvine')
569
- template.render(scope)
570
- end.equals "{\"city\":\"irvine\"}"
571
-
572
- asserts "that it exposes root_object" do
573
- template = rabl %q{
574
- object @user
575
-
576
- attribute :name, :as => root_object.city
577
- }
578
- scope = Object.new
579
- scope.instance_variable_set :@user, User.new(:name => 'irvine')
580
- template.render(scope)
581
- end.equals "{\"irvine\":\"irvine\"}"
582
-
583
- asserts "that it can add attribute under a different key name through hash" do
584
- template = rabl %{
585
- object @user
586
- attribute :name => :city
587
- }
588
- scope = Object.new
589
- scope.instance_variable_set :@user, User.new(:name => 'irvine')
590
- template.render(scope)
591
- end.equals "{\"city\":\"irvine\"}"
592
-
593
- asserts "that it handle structs correctly as child elements" do
594
- template = rabl %{
595
- object @user
596
- child(:city) do
597
- attributes :name
598
- end
599
- }
600
- City = Struct.new(:name)
601
- scope = Object.new
602
- scope.instance_variable_set :@user, User.new(:city => City.new('San Francisco'))
603
- template.render(scope)
604
- end.equals "{\"city\":{\"name\":\"San Francisco\"}}"
605
-
606
- asserts "that it can be passed an if cond for single real attr" do
607
- template = rabl %{
608
- object @user
609
- attribute :name
610
- attributes :age, :first, :if => lambda { |i| i.name != 'irvine' }
611
- }
612
- scope = Object.new
613
- scope.instance_variable_set :@user, User.new(:name => 'irvine')
614
- JSON.parse(template.render(scope))
615
- end.equals JSON.parse("{\"name\":\"irvine\"}")
616
-
617
- asserts "that it can be passed an if cond for aliased attrs" do
618
- template = rabl %{
619
- object @user
620
- attributes :name => :title, :age => :year, :if => lambda { |i| i.name == 'irvine' }
621
- }
622
- scope = Object.new
623
- scope.instance_variable_set :@user, User.new(:name => 'irvine')
624
- JSON.parse(template.render(scope))
625
- end.equals JSON.parse("{\"title\":\"irvine\",\"year\":24}")
626
-
627
- asserts "that it can be passed an unless cond to hide attrs" do
628
- template = rabl %{
629
- object @user
630
- attribute :name
631
- attributes :age, :unless => lambda { |i| i.name == 'irvine' }
632
- }
633
- scope = Object.new
634
- scope.instance_variable_set :@user, User.new(:name => 'irvine')
635
- JSON.parse(template.render(scope))
636
- end.equals JSON.parse("{\"name\":\"irvine\"}")
637
-
638
- asserts "that it can be passed an unless cond for aliased attrs" do
639
- template = rabl %{
640
- object @user
641
- attributes :name => :title, :age => :year, :unless => lambda { |i| i.name == 'irvine' }
642
- }
643
- scope = Object.new
644
- scope.instance_variable_set :@user, User.new(:name => 'irvine')
645
- JSON.parse(template.render(scope))
646
- end.equals JSON.parse("{}")
647
- end # attribute
648
-
649
- context "#code" do
650
- asserts "that it can create an arbitraty code node" do
651
- template = rabl %{
652
- code(:foo) { 'bar' }
653
- }
654
- template.render(Object.new)
655
- end.equals "{\"foo\":\"bar\"}"
656
-
657
- asserts "that it can be passed conditionals" do
658
- template = rabl %{
659
- code(:foo, :if => lambda { |i| false }) { 'bar' }
660
- }
661
- template.render(Object.new)
662
- end.equals "{}"
663
- end
664
-
665
- context "#child" do
666
- asserts "that it can create a singular child node" do
667
- template = rabl %{
668
- object @user
669
- attribute :name
670
- child(@user) { attribute :city }
671
- }
672
- scope = Object.new
673
- scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA')
674
- JSON.parse(template.render(scope))
675
- end.equals JSON.parse("{\"name\":\"leo\",\"user\":{\"city\":\"LA\"}}")
676
-
677
- asserts "that it can create a singular child node with different key" do
678
- template = rabl %{
679
- object @user
680
- attribute :name
681
- child(@user => :person) { attribute :city }
682
- }
683
- scope = Object.new
684
- scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA')
685
- JSON.parse(template.render(scope))
686
- end.equals JSON.parse("{\"name\":\"leo\",\"person\":{\"city\":\"LA\"}}")
687
-
688
- asserts "that it can create a many child node" do
689
- template = rabl %{
690
- object @user
691
- attribute :name
692
- child(:hobbies) { attribute :name }
693
- }
694
- scope = Object.new
695
- scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA')
696
- JSON.parse(template.render(scope))
697
- end.equals JSON.parse(%q^{"name":"leo", "hobbies":[{"hobby":{"name":"Photography"}}]}^)
698
-
699
- asserts "that it can create a many child node with different key" do
700
- template = rabl %{
701
- object @user
702
- attribute :name
703
- child(:hobbies => :interests) { attribute :name }
704
- }
705
- scope = Object.new
706
- scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA')
707
- JSON.parse(template.render(scope))
708
- end.equals JSON.parse(%q^{"name":"leo", "interests":[{"interest":{"name":"Photography"}}]}^)
709
-
710
- asserts "that it can create a many child node with no data" do
711
- template = rabl %{
712
- object @user
713
- attribute :name
714
- child(:hobbies) { attribute :name }
715
- }
716
- scope = Object.new
717
- scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA', :hobbies => [])
718
- JSON.parse(template.render(scope))
719
- end.equals JSON.parse(%q^{"name":"leo", "hobbies":[]}^)
720
-
721
- asserts "that it can be passed conditionals" do
722
- template = rabl %{
723
- object @user
724
- attribute :name
725
- child({:children => :children}, {:if => lambda { |user| user.respond_to?('children') }}) { attribute :test }
726
- }
727
- scope = Object.new
728
- scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA')
729
- template.render(scope)
730
- end.equals "{\"name\":\"leo\"}"
731
- end
732
-
733
- context "#glue" do
734
- asserts "that it glues data from a child node" do
735
- template = rabl %{
736
- object @user
737
- attribute :name
738
- glue(@user) { attribute :city }
739
- glue(@user) { attribute :age }
740
- }
741
- scope = Object.new
742
- scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA', :age => 12)
743
- JSON.parse(template.render(scope))
744
- end.equals JSON.parse("{\"name\":\"leo\",\"city\":\"LA\",\"age\":12}")
745
-
746
- asserts "that it can be passed conditionals" do
747
- template = rabl %{
748
- object @user
749
- attribute :name
750
- glue(@user, {:if => lambda { |i| false }}) { attribute :age }
751
- }
752
- scope = Object.new
753
- scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA', :age => 12)
754
- JSON.parse(template.render(scope))
755
- end.equals JSON.parse("{\"name\":\"leo\"}")
756
- end
757
-
758
- context "#extends" do
759
- helper(:tmp_path) { @tmp_path ||= Pathname.new(Dir.mktmpdir) }
760
- setup do
761
- Rabl.configure do |config|
762
- config.view_paths = tmp_path
763
- end
764
- File.open(tmp_path + "test.json.rabl", "w") do |f|
765
- f.puts %q{
766
- attributes :age
767
- node(:city) { "Gotham" } if locals[:show_city]
768
- }
769
- end
770
- end
771
-
772
- asserts "that it extends the template with attributes from the file" do
773
- template = rabl %{
774
- object @user
775
- attribute :name
776
- extends 'test'
777
- }
778
- scope = Object.new
779
- scope.instance_variable_set :@user, User.new(:name => 'leo', :age => 12)
780
- JSON.parse(template.render(scope))
781
- end.equals JSON.parse("{\"name\":\"leo\",\"age\":12}")
782
-
783
- asserts "that it can be passed locals" do
784
- template = rabl %{
785
- object @user
786
- attribute :name
787
- extends 'test', :locals => { :show_city => true }
788
- }
789
- scope = Object.new
790
- scope.instance_variable_set :@user, User.new(:name => 'leo', :age => 12)
791
- JSON.parse(template.render(scope))
792
- end.equals JSON.parse("{\"name\":\"leo\",\"age\":12,\"city\":\"Gotham\"}")
793
-
794
- asserts "that it can be passed conditionals" do
795
- template = rabl %{
796
- object @user
797
- attribute :name
798
- extends('test', {:if => lambda { |i| false }})
799
- }
800
- scope = Object.new
801
- scope.instance_variable_set :@user, User.new(:name => 'leo', :age => 12)
802
- JSON.parse(template.render(scope))
803
- end.equals JSON.parse("{\"name\":\"leo\"}")
804
- end
805
-
806
- teardown do
807
- Rabl.reset_configuration!
808
- end
809
- end # without json root
810
-
811
- context "without child root" do
812
- setup do
813
- Rabl.configure do |config|
814
- config.include_child_root = false
815
- config.include_xml_root = false
816
- config.enable_json_callbacks = false
817
- end
818
- end
819
-
820
- context "#child" do
821
- asserts "that it can create a child node without child root" do
822
- template = rabl %{
823
- child @users
824
- }
825
- scope = Object.new
826
- scope.instance_variable_set :@users, [User.new, User.new]
827
- template.render(scope)
828
- end.equals "{\"users\":[{},{}]}"
829
- end
830
-
831
- teardown do
832
- Rabl.reset_configuration!
833
- end
834
- end
835
- end