grape-jbuilder 0.1.0 → 0.2.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6ba4826d37afc59462d6f7fe3b6ed36ee801e0b9
4
+ data.tar.gz: 5656897b9154ae71e56bee5ab1cb458f932dbb16
5
+ SHA512:
6
+ metadata.gz: a0967132a6118476b59d6673befe9704a1f81a44062d7ad0d0244ddaaa1d79ddd9b6884281e0671fe66499c3b8d410e303e934d15498b29736b332e97265a11d
7
+ data.tar.gz: 34ec154af6909af5a2db3d43b1624de6c280ac3573759f3219665be04094a0ab96a288fdc40b15c11afb2ca4e9bb6b9097ee6d707a203a8ca2472d6bdf33ff9d
@@ -1,9 +1,5 @@
1
1
  rvm:
2
- - 1.9.2
3
2
  - 1.9.3
4
3
  - 2.0.0
5
- - ruby-head
6
- - rbx-19mode
7
-
8
- env:
9
- - JRUBY_OPTS="--1.9"
4
+ - 2.1.0
5
+ - 2.1.1
@@ -0,0 +1,12 @@
1
+ 0.2.0
2
+ =====
3
+
4
+ * [#4](https://github.com/milkcocoa/grape-jbuilder/pull/4) Shifting rendering into a separate class, to support dynamic changing of templates within the logic of a Grape endpoint.
5
+ * [#4](https://github.com/milkcocoa/grape-jbuilder/pull/4) Drop support MRI 1.9.2.
6
+ * Support MRI 2.1.1.
7
+
8
+ 0.1.0
9
+ =====
10
+
11
+ * Initial commit.
12
+
data/README.md CHANGED
@@ -53,7 +53,7 @@ end
53
53
  Add the template name to the API options.
54
54
 
55
55
  ```ruby
56
- get '/user/:id', :jbuilder => 'user.jbuilder' do
56
+ get '/user/:id', jbuilder: 'user.jbuilder' do
57
57
  @user = User.find(params[:id])
58
58
  end
59
59
  ```
@@ -69,6 +69,21 @@ json.user do
69
69
  end
70
70
  ```
71
71
 
72
+ ### Use Jbuilder templates dynamically
73
+
74
+ ```ruby
75
+ get ':id' do
76
+ user = User.find_by(id: params[:id])
77
+ if article
78
+ env['api.tilt.template'] = 'users/show'
79
+ env['api.tilt.locals'] = {user: user}
80
+ else
81
+ status 404
82
+ {'status' => 'Not Found', 'errors' => "User id '#{params[:id]}' is not found."}
83
+ end
84
+ end
85
+ ```
86
+
72
87
  ## You can omit .jbuilder
73
88
 
74
89
  The following are identical.
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["masushu@gmail.com"]
11
11
  spec.description = %q{Use Jbuilder in Grape}
12
12
  spec.summary = %q{Use Jbuilder in Grape}
13
- spec.homepage = ""
13
+ spec.homepage = "https://github.com/milkcocoa/grape-jbuilder"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -0,0 +1,38 @@
1
+ module Grape
2
+ module Formatter
3
+ class Jbuilder
4
+ attr_reader :env, :endpoint, :object
5
+
6
+ def self.call(object, env)
7
+ new(object, env).call
8
+ end
9
+
10
+ def initialize(object, env)
11
+ @object, @env = object, env
12
+ @endpoint = env['api.endpoint']
13
+ end
14
+
15
+ def call
16
+ return Grape::Formatter::Json.call(object, env) unless template?
17
+
18
+ Grape::Jbuilder::Renderer.new(env['api.tilt.root'], template).
19
+ render(endpoint, locals)
20
+ end
21
+
22
+ private
23
+
24
+ def locals
25
+ env['api.tilt.locals'] || {}
26
+ end
27
+
28
+ def template
29
+ env['api.tilt.template'] ||
30
+ endpoint.options.fetch(:route_options, {})[:jbuilder]
31
+ end
32
+
33
+ def template?
34
+ !!template
35
+ end
36
+ end
37
+ end
38
+ end
@@ -3,5 +3,7 @@ require 'hashie/hash'
3
3
  require 'jbuilder'
4
4
  require 'tilt'
5
5
  require 'tilt/jbuilder.rb'
6
- require 'grape/jbuilder/formatter'
6
+
7
+ require 'grape/formatter/jbuilder'
8
+ require 'grape/jbuilder/renderer'
7
9
  require 'grape/jbuilder/version'
@@ -0,0 +1,30 @@
1
+ module Grape
2
+ module Jbuilder
3
+ class Renderer
4
+ def initialize(view_path, template)
5
+ @view_path, @template = view_path, template
6
+ end
7
+
8
+ def render(scope, locals = {})
9
+ unless view_path
10
+ raise "Use Rack::Config to set 'api.tilt.root' in config.ru"
11
+ end
12
+
13
+ engine = ::Tilt.new file, nil, view_path: view_path
14
+ engine.render scope, locals
15
+ end
16
+
17
+ private
18
+
19
+ attr_reader :view_path, :template
20
+
21
+ def file
22
+ File.join view_path, template_with_extension
23
+ end
24
+
25
+ def template_with_extension
26
+ template[/\.jbuilder$/] ? template : "#{template}.jbuilder"
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,5 +1,5 @@
1
1
  module Grape
2
2
  module Jbuilder
3
- VERSION = "0.1.0"
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
@@ -1,22 +1,18 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'Grape::Jbuilder partials' do
4
- subject do
5
- Class.new(Grape::API)
6
- end
7
-
8
- before do
9
- subject.format :json
10
- subject.formatter :json, Grape::Formatter::Jbuilder
11
- subject.before { env['api.tilt.root'] = "#{File.dirname(__FILE__)}/views" }
12
- end
4
+ let(:app) { Class.new(Grape::API) }
13
5
 
14
- def app
15
- subject
6
+ before :each do
7
+ app.format :json
8
+ app.formatter :json, Grape::Formatter::Jbuilder
9
+ app.before do
10
+ env['api.tilt.root'] = "#{File.dirname(__FILE__)}/../views"
11
+ end
16
12
  end
17
13
 
18
14
  it 'proper render partials' do
19
- subject.get('/home', jbuilder: 'project') do
15
+ app.get('/home', jbuilder: 'project') do
20
16
  @author = OpenStruct.new(author: 'LTe')
21
17
  @type = OpenStruct.new(type: 'paper')
22
18
  @project = OpenStruct.new(name: 'First', type: @type, author: @author)
@@ -35,8 +31,9 @@ describe 'Grape::Jbuilder partials' do
35
31
  }
36
32
 
37
33
  get('/home')
38
- last_response.body.should match_json_expression(pattern)
39
- last_response.body.should ==
34
+ expect(last_response.body).to match_json_expression(pattern)
35
+ expect(last_response.body).to eq(
40
36
  "{\"project\":{\"name\":\"First\",\"info\":{\"type\":\"paper\"},\"author\":{\"author\":\"LTe\"}}}"
37
+ )
41
38
  end
42
39
  end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe Grape::Jbuilder do
4
+ let(:app) { Class.new(Grape::API) }
5
+
6
+ before do
7
+ app.format :json
8
+ app.formatter :json, Grape::Formatter::Jbuilder
9
+ app.before do
10
+ env['api.tilt.root'] = "#{File.dirname(__FILE__)}/../views"
11
+ end
12
+ end
13
+
14
+ it 'should work without jbuilder template' do
15
+ app.get('/home') { 'Hello World' }
16
+
17
+ get '/home'
18
+
19
+ expect(last_response.body).to eq('"Hello World"')
20
+ end
21
+
22
+ it 'should work with dynamically set templates' do
23
+ app.get('/home') { env['api.tilt.template'] = 'test' }
24
+
25
+ get '/home'
26
+
27
+ expect(last_response.body).to eq({'foo' => 'bar'}.to_json)
28
+ end
29
+
30
+ it 'should respond with proper content-type' do
31
+ app.get('/home', jbuilder: 'user') do
32
+ @user = OpenStruct.new(name: 'LTe', email: 'email@example.com')
33
+ @project = OpenStruct.new(name: 'First')
34
+ end
35
+
36
+ get('/home')
37
+
38
+ expect(last_response.headers['Content-Type']).to eq('application/json')
39
+ end
40
+
41
+ it "renders the template's content" do
42
+ app.get('/home', jbuilder: 'user') do
43
+ @user = OpenStruct.new(name: 'LTe', email: 'email@example.com')
44
+ @project = OpenStruct.new(name: 'First')
45
+ end
46
+
47
+ get('/home')
48
+
49
+ pattern = {
50
+ user: {
51
+ name: 'LTe',
52
+ email: 'email@example.com',
53
+ project: {
54
+ name: 'First'
55
+ }
56
+ }
57
+ }
58
+ expect(last_response.body).to match_json_expression(pattern)
59
+ end
60
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe Grape::Formatter::Jbuilder do
4
+ let(:object) { double }
5
+ let(:env) { {'api.endpoint' => endpoint, 'api.tilt.root' => '/tmp'} }
6
+ let(:endpoint) { double :options => {} }
7
+ let(:renderer) { double :render => '' }
8
+
9
+ before :each do
10
+ Grape::Jbuilder::Renderer.stub :new => renderer
11
+
12
+ endpoint.options[:route_options] = {:jbuilder => 'user'}
13
+ end
14
+
15
+ describe '.call' do
16
+ it "passes the call to the Json render if no template is provided" do
17
+ endpoint.options.clear
18
+
19
+ expect(Grape::Formatter::Json).to receive(:call).with(object, env)
20
+
21
+ Grape::Formatter::Jbuilder.call object, env
22
+ end
23
+
24
+ it "creates a renderer with the root and template" do
25
+ expect(Grape::Jbuilder::Renderer).to receive(:new).with('/tmp', 'user').
26
+ and_return(renderer)
27
+
28
+ Grape::Formatter::Jbuilder.call object, env
29
+ end
30
+
31
+ it "accepts templates in the env hash" do
32
+ env['api.tilt.template'] = 'foo'
33
+
34
+ expect(Grape::Jbuilder::Renderer).to receive(:new).with('/tmp', 'foo').
35
+ and_return(renderer)
36
+
37
+ Grape::Formatter::Jbuilder.call object, env
38
+ end
39
+
40
+ it "passes the endpoint in as the render scope" do
41
+ expect(renderer).to receive(:render).with(endpoint, {}).and_return('')
42
+
43
+ Grape::Formatter::Jbuilder.call object, env
44
+ end
45
+
46
+ it "accepts custom locals for the render call" do
47
+ env['api.tilt.locals'] = {:foo => :bar}
48
+
49
+ expect(renderer).to receive(:render).with(endpoint, {:foo => :bar}).
50
+ and_return('')
51
+
52
+ Grape::Formatter::Jbuilder.call object, env
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe Grape::Jbuilder::Renderer do
4
+ let(:engine) { double :render => '' }
5
+ let(:scope) { double }
6
+
7
+ before :each do
8
+ Tilt.stub :new => engine
9
+ end
10
+
11
+ describe '#render' do
12
+ it "raises an error if the view path is nil" do
13
+ renderer = Grape::Jbuilder::Renderer.new(nil, 'file')
14
+
15
+ expect { renderer.render scope }.to raise_error
16
+ end
17
+
18
+ it "creates a new Tilt engine with the file and view path" do
19
+ renderer = Grape::Jbuilder::Renderer.new('/tmp', 'file.jbuilder')
20
+
21
+ expect(Tilt).to receive(:new).
22
+ with('/tmp/file.jbuilder', nil, :view_path => '/tmp').
23
+ and_return(engine)
24
+
25
+ renderer.render scope
26
+ end
27
+
28
+ it "appends jbuilder extension to the file if required" do
29
+ renderer = Grape::Jbuilder::Renderer.new('/tmp', 'file')
30
+
31
+ expect(Tilt).to receive(:new).
32
+ with('/tmp/file.jbuilder', nil, :view_path => '/tmp').
33
+ and_return(engine)
34
+
35
+ renderer.render scope
36
+ end
37
+
38
+ it "renders with the provided scope and locals" do
39
+ renderer = Grape::Jbuilder::Renderer.new('/tmp', 'file')
40
+
41
+ expect(engine).to receive(:render).with(scope, :foo => :bar).
42
+ and_return('')
43
+
44
+ renderer.render scope, :foo => :bar
45
+ end
46
+ end
47
+ end
@@ -0,0 +1 @@
1
+ json.foo 'bar'
metadata CHANGED
@@ -1,174 +1,153 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-jbuilder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
5
- prerelease:
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Shu Masuda
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-03-13 00:00:00.000000000 Z
11
+ date: 2014-03-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: grape
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0.3'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0.3'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: jbuilder
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: tilt
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: tilt-jbuilder
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - '>='
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
61
  version: 0.4.0
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - '>='
66
+ - - ">="
76
67
  - !ruby/object:Gem::Version
77
68
  version: 0.4.0
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: i18n
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - '>='
73
+ - - ">="
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - '>='
80
+ - - ">="
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: bundler
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - '>='
87
+ - - ">="
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - '>='
94
+ - - ">="
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: json_expressions
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - '>='
101
+ - - ">="
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - '>='
108
+ - - ">="
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: rack-test
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
- - - '>='
115
+ - - ">="
132
116
  - !ruby/object:Gem::Version
133
117
  version: '0'
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
- - - '>='
122
+ - - ">="
140
123
  - !ruby/object:Gem::Version
141
124
  version: '0'
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: rake
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
- - - '>='
129
+ - - ">="
148
130
  - !ruby/object:Gem::Version
149
131
  version: '0'
150
132
  type: :development
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
- - - '>='
136
+ - - ">="
156
137
  - !ruby/object:Gem::Version
157
138
  version: '0'
158
139
  - !ruby/object:Gem::Dependency
159
140
  name: rspec
160
141
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
142
  requirements:
163
- - - '>='
143
+ - - ">="
164
144
  - !ruby/object:Gem::Version
165
145
  version: '0'
166
146
  type: :development
167
147
  prerelease: false
168
148
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
149
  requirements:
171
- - - '>='
150
+ - - ">="
172
151
  - !ruby/object:Gem::Version
173
152
  version: '0'
174
153
  description: Use Jbuilder in Grape
@@ -178,52 +157,59 @@ executables: []
178
157
  extensions: []
179
158
  extra_rdoc_files: []
180
159
  files:
181
- - .gitignore
182
- - .rspec
183
- - .travis.yml
160
+ - ".gitignore"
161
+ - ".rspec"
162
+ - ".travis.yml"
163
+ - CHANGELOG.md
184
164
  - Gemfile
185
165
  - LICENSE.txt
186
166
  - README.md
187
167
  - Rakefile
188
168
  - grape-jbuilder.gemspec
169
+ - lib/grape/formatter/jbuilder.rb
189
170
  - lib/grape/jbuilder.rb
190
- - lib/grape/jbuilder/formatter.rb
171
+ - lib/grape/jbuilder/renderer.rb
191
172
  - lib/grape/jbuilder/version.rb
192
- - spec/grape_jbuilder_partials_spec.rb
193
- - spec/grape_jbuilder_spec.rb
173
+ - spec/acceptance/partials_spec.rb
174
+ - spec/acceptance/templates_spec.rb
175
+ - spec/grape/formatter/jbuilder_spec.rb
176
+ - spec/grape/jbuilder/renderer_spec.rb
194
177
  - spec/spec_helper.rb
195
178
  - spec/views/_partial.jbuilder
196
179
  - spec/views/project.jbuilder
180
+ - spec/views/test.jbuilder
197
181
  - spec/views/user.jbuilder
198
- homepage: ''
182
+ homepage: https://github.com/milkcocoa/grape-jbuilder
199
183
  licenses:
200
184
  - MIT
185
+ metadata: {}
201
186
  post_install_message:
202
187
  rdoc_options: []
203
188
  require_paths:
204
189
  - lib
205
190
  required_ruby_version: !ruby/object:Gem::Requirement
206
- none: false
207
191
  requirements:
208
- - - '>='
192
+ - - ">="
209
193
  - !ruby/object:Gem::Version
210
194
  version: '0'
211
195
  required_rubygems_version: !ruby/object:Gem::Requirement
212
- none: false
213
196
  requirements:
214
- - - '>='
197
+ - - ">="
215
198
  - !ruby/object:Gem::Version
216
199
  version: '0'
217
200
  requirements: []
218
201
  rubyforge_project:
219
- rubygems_version: 1.8.25
202
+ rubygems_version: 2.2.2
220
203
  signing_key:
221
- specification_version: 3
204
+ specification_version: 4
222
205
  summary: Use Jbuilder in Grape
223
206
  test_files:
224
- - spec/grape_jbuilder_partials_spec.rb
225
- - spec/grape_jbuilder_spec.rb
207
+ - spec/acceptance/partials_spec.rb
208
+ - spec/acceptance/templates_spec.rb
209
+ - spec/grape/formatter/jbuilder_spec.rb
210
+ - spec/grape/jbuilder/renderer_spec.rb
226
211
  - spec/spec_helper.rb
227
212
  - spec/views/_partial.jbuilder
228
213
  - spec/views/project.jbuilder
214
+ - spec/views/test.jbuilder
229
215
  - spec/views/user.jbuilder
@@ -1,50 +0,0 @@
1
- module Grape
2
- module Formatter
3
- module Jbuilder
4
- class << self
5
-
6
- attr_reader :env
7
- attr_reader :endpoint
8
-
9
- def call(object, env)
10
- @env = env
11
- @endpoint = env['api.endpoint']
12
-
13
- if jbuilderable?
14
- jbuilder do |template|
15
- engine = ::Tilt.new(view_path(template), nil, view_path: env['api.tilt.root'])
16
- engine.render(endpoint, {})
17
- end
18
- else
19
- Grape::Formatter::Json.call object, env
20
- end
21
- end
22
-
23
- private
24
-
25
- def view_path(template)
26
- if template.split('.')[-1] == 'jbuilder'
27
- File.join(env['api.tilt.root'], template)
28
- else
29
- File.join(env['api.tilt.root'], (template + '.jbuilder'))
30
- end
31
- end
32
-
33
- def jbuilderable?
34
- !! endpoint.options[:route_options][:jbuilder]
35
- end
36
-
37
- def jbuilder
38
- template = endpoint.options[:route_options][:jbuilder]
39
- raise 'missing jbuilder template' unless template
40
- set_view_root unless env['api.tilt.root']
41
- yield template
42
- end
43
-
44
- def set_view_root
45
- raise "Use Rack::Config to set 'api.tilt.root' in config.ru"
46
- end
47
- end
48
- end
49
- end
50
- end
@@ -1,71 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Grape::Jbuilder do
4
- subject do
5
- Class.new(Grape::API)
6
- end
7
-
8
- before do
9
- subject.format :json
10
- subject.formatter :json, Grape::Formatter::Jbuilder
11
- end
12
-
13
- def app
14
- subject
15
- end
16
-
17
- it 'should work without jbuilder template' do
18
- subject.get('/home') { 'Hello World' }
19
- get '/home'
20
- last_response.body.should == 'Hello World'
21
- end
22
-
23
- it 'should raise error about root directory' do
24
- subject.get('/home', jbuilder: true){}
25
- get '/home'
26
- last_response.status.should == 500
27
- last_response.body.should include "Use Rack::Config to set 'api.tilt.root' in config.ru"
28
- end
29
-
30
-
31
- context 'titl root is setup' do
32
- before do
33
- subject.before { env['api.tilt.root'] = "#{File.dirname(__FILE__)}/views" }
34
- end
35
-
36
- it 'should respond with proper content-type' do
37
- subject.get('/home', jbuilder: 'user'){}
38
- get('/home')
39
- last_response.headers['Content-Type'].should == 'application/json'
40
- end
41
-
42
- it 'should not raise error about root directory' do
43
- subject.get('/home', jbuilder: true){}
44
- get '/home'
45
- last_response.status.should == 500
46
- last_response.body.should_not include "Use Rack::Config to set 'api.tilt.root' in config.ru"
47
- end
48
-
49
- ['user', 'user.jbuilder'].each do |jbuilder_option|
50
- it 'should render jbuilder template (#{jbuilder_option})' do
51
- subject.get('/home', jbuilder: jbuilder_option) do
52
- @user = OpenStruct.new(name: 'LTe', email: 'email@example.com')
53
- @project = OpenStruct.new(name: 'First')
54
- end
55
-
56
- pattern = {
57
- user: {
58
- name: 'LTe',
59
- email: 'email@example.com',
60
- project: {
61
- name: 'First'
62
- }
63
- }
64
- }
65
-
66
- get '/home'
67
- last_response.body.should match_json_expression(pattern)
68
- end
69
- end
70
- end
71
- end