grape-rabl 0.3.0 → 0.3.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ebef1acc9ea4453a55850d6af0a663f497681f23
4
- data.tar.gz: ccb43ab0335200f0c3194325e3b1de87d711be62
3
+ metadata.gz: d621405f4d7c383ff47dea4a2db866618aaeff12
4
+ data.tar.gz: 3ec7ec4c04e7bd20a390fa55acba8ac84171e6d2
5
5
  SHA512:
6
- metadata.gz: a2dee5455c625c89ec8c2c86858b6d4ba27c6f6b6d63b47e6ad23d6b824d089cd23958de9e1bd1a3731364cd60170d7b4dd701902edcf149530b1f88e9227c48
7
- data.tar.gz: 129d37a3b51bd384bcaeda98b092eba9b94d6adacb494c9731279ca398e5876cbf14136d1ab8edd459f757060ff63b172a97962f9c3866c50ed8f0e71713c090
6
+ metadata.gz: 66582082999fe94194742f88ba1d4644dcce4dd83717403ea0202a45544c114f6a1e47c2358205c7d951509bee9771a43501ae8e7ad5684b39f1eadcd0584a42
7
+ data.tar.gz: 399b670fd1ac71cac4b0b4fe40006274dbe58b878ffe95a031f7b172a354fe2013aea1d725c6348e7e589c96c8128b7b677d5d80a6592b169b2ea1e323576e86
data/CHANGELOG.md CHANGED
@@ -1,14 +1,18 @@
1
+ #### v0.3.1
2
+
3
+ * The `render` method will no longer modify endpoint options at runtime. [#35](https://github.com/LTe/grape-rabl/issues/35) [@yesmeck](https://github.com/yesmeck)
4
+
1
5
  #### v0.3.0
2
6
 
3
- * Enable using a layout template in Rabl [@koko1000ban](https://github.com/koko1000ban) [view commit](https://github.com/LTe/grape-rabl/commit/1fbfbd58c3fb320be1b52b3247fda2a23cacc9fc)
4
- * Implemented Rubocop, Ruby style linter [@dblock](https://github.com/dblock) [view commit](https://github.com/LTe/grape-rabl/commit/1211056de22a5989c063d57b7b37ebb1f1977e83)
5
- * Removed JRuby support [@dblock](https://github.com/dblock) [view commit](https://github.com/LTe/grape-rabl/commit/59905c1b09670fe08501e09bad4ec8714839f2d3)
6
- * Enable using locals with #render [@hobofan](https://github.com/hobofan) [view commit](https://github.com/LTe/grape-rabl/commit/6c24130f6a670e52e6119c56904b8ed2e6f60b39)
7
+ * Enable using a layout template in Rabl. [@koko1000ban](https://github.com/koko1000ban) [view commit](https://github.com/LTe/grape-rabl/commit/1fbfbd58c3fb320be1b52b3247fda2a23cacc9fc)
8
+ * Implemented Rubocop, Ruby style linter. [@dblock](https://github.com/dblock) [view commit](https://github.com/LTe/grape-rabl/commit/1211056de22a5989c063d57b7b37ebb1f1977e83)
9
+ * Removed JRuby support. [@dblock](https://github.com/dblock) [view commit](https://github.com/LTe/grape-rabl/commit/59905c1b09670fe08501e09bad4ec8714839f2d3)
10
+ * Enable using locals with #render. [@hobofan](https://github.com/hobofan) [view commit](https://github.com/LTe/grape-rabl/commit/6c24130f6a670e52e6119c56904b8ed2e6f60b39)
7
11
  * Enable support for template caching. [#28](https://github.com/LTe/grape-rabl/pull/28) [@kushkella](https://github.com/kushkella) [view commit](https://github.com/LTe/grape-rabl/commit/79b1e58d767c6286b510af669e718310c0ad25c2)
8
12
 
9
13
  #### v0.2.2
10
14
 
11
- * Relaxed dependency on a specific version of Grape [#20](https://github.com/LTe/grape-rabl/pull/20) [@cheef](https://github.com/cheef) [view commit](https://github.com/LTe/grape-rabl/commit/56da0a5bcecb16501cdd93ac25f3b6ca6d7a86f0)
15
+ * Relaxed dependency on a specific version of Grape. [#20](https://github.com/LTe/grape-rabl/pull/20) [@cheef](https://github.com/cheef) [view commit](https://github.com/LTe/grape-rabl/commit/56da0a5bcecb16501cdd93ac25f3b6ca6d7a86f0)
12
16
 
13
17
  #### v0.2.1
14
18
 
@@ -16,7 +20,7 @@
16
20
 
17
21
  #### v0.2.0
18
22
 
19
- * Allow to use partials in grape. [#10](https://github.com/LTe/grape-rabl/pull/10) [@ichilton](https://github.com/ichilton) [view commit](http://github.com/LTe/grape-rabl/commit/72c96c5acc9d8000f56ee8400ae0229053fb3e7e)
23
+ * Allow to use partials in Grape. [#10](https://github.com/LTe/grape-rabl/pull/10) [@ichilton](https://github.com/ichilton) [view commit](http://github.com/LTe/grape-rabl/commit/72c96c5acc9d8000f56ee8400ae0229053fb3e7e)
20
24
  * Stick to gem conventions. [@LTe](https://github.com/lte) [view commit](http://github.com/LTe/grape-rabl/commit/aabd0e2ad72f56a75427eebcc586deed57cf5f58)
21
25
  * Update for Grape 0.3 compatibility. [@alovak](https://github.com/alovak) [view commit](http://github.com/LTe/grape-rabl/commit/78bfdceffbfe90b700868ff1e79ab87e8baded81)
22
26
  * Format fix. [@LTe](https://github.com/lte) [view commit](http://github.com/LTe/grape-rabl/commit/13749cc18d332dcd0050bb32980cc233868a7992)
data/Gemfile CHANGED
@@ -12,6 +12,7 @@ group :test do
12
12
  gem "rack-test"
13
13
  gem "rake"
14
14
  gem "coveralls", require: false
15
+ gem "rabl", :github => "nesquena/rabl"
15
16
 
16
17
  platforms :rbx do
17
18
  gem "iconv"
data/README.md CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Use [Rabl](https://github.com/nesquena/rabl) templates in [Grape](https://github.com/intridea/grape)!
4
4
 
5
- [![Build Status](https://secure.travis-ci.org/LTe/grape-rabl.png)](http://travis-ci.org/LTe/grape-rabl)
6
- [![Dependency Status](https://gemnasium.com/LTe/grape-rabl.png)](https://gemnasium.com/LTe/grape-rabl)
7
- [![Code Climate](https://codeclimate.com/github/LTe/grape-rabl.png)](https://codeclimate.com/github/LTe/grape-rabl)
8
- [![Coverage Status](https://coveralls.io/repos/LTe/grape-rabl/badge.png?branch=master)](https://coveralls.io/r/LTe/grape-rabl?branch=master)
9
- [![Gem Version](https://badge.fury.io/rb/grape-rabl.png)](http://badge.fury.io/rb/grape-rabl)
5
+ [![Gem Version](http://img.shields.io/gem/v/grape-rabl.svg)](http://badge.fury.io/rb/grape-rabl)
6
+ [![Build Status](http://img.shields.io/travis/LTe/grape-rabl.svg)](https://travis-ci.org/LTe/grape-rabl)
7
+ [![Dependency Status](https://gemnasium.com/LTe/grape-rabl.svg)](https://gemnasium.com/LTe/grape-rabl)
8
+ [![Code Climate](https://codeclimate.com/github/LTe/grape-rabl.svg)](https://codeclimate.com/github/LTe/grape-rabl)
9
+ [![Coverage Status](https://img.shields.io/coveralls/LTe/grape-rabl.svg)](https://coveralls.io/r/LTe/grape-rabl?branch=master)
10
10
 
11
11
  ## Installation
12
12
 
@@ -124,16 +124,31 @@ class UserAPI < Grape::API
124
124
  format :json
125
125
  formatter :json, Grape::Formatter::Rabl
126
126
 
127
- # use rabl with 'user.rabl' template
128
- get '/user/:id', :rabl => 'user' do
127
+ get '/user/:id' do
129
128
  @user = User.find(params[:id])
130
129
 
130
+ # use rabl with 'user.rabl' or 'admin.rabl' template
131
131
  if @user.admin?
132
- # overwrite the template (and pass locals) with the #render method
133
- render rabl: 'admin', locals: { details: 'this user is a admin' }
132
+ # pass locals with the #render method
133
+ render rabl: 'admin', locals: { details: 'this user is an admin' }
134
+ else
135
+ render rabl: 'user'
134
136
  end
135
137
  end
136
138
 
139
+ get '/admin/:id', :rabl => 'admin' do
140
+ @user = User.find(params[:id])
141
+
142
+ # use rabl with 'super_admin.rabl'
143
+ render rabl: 'super_admin' if @user.super_admin?
144
+ # when render method has not been used use template from endpoint definition
145
+ end
146
+
147
+ # use rabl with 'user_history.rabl' template
148
+ get '/user/:id/history', :rabl => 'user_history' do
149
+ @history = User.find(params[:id]).history
150
+ end
151
+
137
152
  # do not use rabl, fallback to the defalt Grape JSON formatter
138
153
  get '/users' do
139
154
  User.all
@@ -37,18 +37,21 @@ module Grape
37
37
  end
38
38
 
39
39
  def rablable?
40
- !!endpoint.options[:route_options][:rabl]
40
+ !!rabl_template
41
41
  end
42
42
 
43
43
  def rabl
44
- template = endpoint.options[:route_options][:rabl]
45
- fail 'missing rabl template' unless template
44
+ fail 'missing rabl template' unless rabl_template
46
45
  set_view_root unless env['api.tilt.root']
47
- yield template
46
+ yield rabl_template
48
47
  end
49
48
 
50
49
  def locals
51
- endpoint.options[:route_options][:rabl_locals] || {}
50
+ env['api.tilt.rabl_locals'] || endpoint.options[:route_options][:rabl_locals] || {}
51
+ end
52
+
53
+ def rabl_template
54
+ env['api.tilt.rabl'] || endpoint.options[:route_options][:rabl]
52
55
  end
53
56
 
54
57
  def set_view_root
@@ -1,8 +1,8 @@
1
1
  module GrapeRabl
2
2
  module Render
3
3
  def render(options = {})
4
- env['api.endpoint'].options[:route_options][:rabl] = options.delete(:rabl) if options.include?(:rabl)
5
- env['api.endpoint'].options[:route_options][:rabl_locals] = options.delete(:locals)
4
+ env['api.tilt.rabl'] = options[:rabl]
5
+ env['api.tilt.rabl_locals'] = options[:locals]
6
6
  end
7
7
  end
8
8
  end
@@ -1,5 +1,5 @@
1
1
  module Grape
2
2
  module Rabl
3
- VERSION = '0.3.0'
3
+ VERSION = '0.3.1'
4
4
  end
5
5
  end
@@ -1,6 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'Grape::Rabl layout' do
4
+ let(:parsed_response) { JSON.parse(last_response.body) }
5
+
4
6
  subject do
5
7
  Class.new(Grape::API)
6
8
  end
@@ -26,8 +28,8 @@ describe 'Grape::Rabl layout' do
26
28
  end
27
29
 
28
30
  get('/about')
29
- last_response.body.should ==
30
- %Q({"status":200,"result":{"user":{"name":"LTe","project":{"name":"First"}}}})
31
+ parsed_response.should ==
32
+ JSON.parse(%Q({"status":200,"result":{"user":{"name":"LTe","project":{"name":"First"}}}}))
31
33
  end
32
34
  end
33
35
 
@@ -45,8 +47,8 @@ describe 'Grape::Rabl layout' do
45
47
 
46
48
  get('/about')
47
49
  puts last_response.body
48
- last_response.body.should ==
49
- %Q({"result":{"user":{"name":"LTe","project":{"name":"First"}}}})
50
+ parsed_response.should ==
51
+ JSON.parse(%Q({"result":{"user":{"name":"LTe","project":{"name":"First"}}}}))
50
52
  end
51
53
  end
52
54
 
@@ -1,6 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'Grape::Rabl partials' do
4
+ let(:parsed_response) { JSON.parse(last_response.body) }
5
+
4
6
  subject do
5
7
  Class.new(Grape::API)
6
8
  end
@@ -23,7 +25,7 @@ describe 'Grape::Rabl partials' do
23
25
  end
24
26
 
25
27
  get('/home')
26
- last_response.body.should ==
27
- "{\"project\":{\"name\":\"First\",\"info\":{\"type\":\"paper\"},\"author\":{\"author\":\"LTe\"}}}"
28
+ parsed_response.should ==
29
+ JSON.parse("{\"project\":{\"name\":\"First\",\"info\":{\"type\":\"paper\"},\"author\":{\"author\":\"LTe\"}}}")
28
30
  end
29
31
  end
@@ -31,6 +31,8 @@ describe Grape::Rabl do
31
31
  end
32
32
 
33
33
  context 'titl root is setup' do
34
+ let(:parsed_response) { JSON.parse(last_response.body) }
35
+
34
36
  before do
35
37
  subject.before { env['api.tilt.root'] = "#{File.dirname(__FILE__)}/views" }
36
38
  end
@@ -39,7 +41,7 @@ describe Grape::Rabl do
39
41
  it 'should execute helper' do
40
42
  subject.get('/home', rabl: 'helper') { @user = OpenStruct.new }
41
43
  get '/home'
42
- last_response.body.should == "{\"user\":{\"helper\":\"my_helper\"}}"
44
+ parsed_response.should == JSON.parse("{\"user\":{\"helper\":\"my_helper\"}}")
43
45
  end
44
46
  end
45
47
 
@@ -50,6 +52,12 @@ describe Grape::Rabl do
50
52
  render rabl: 'admin'
51
53
  end
52
54
 
55
+ subject.get('/admin/:id', rabl: 'user') do
56
+ @user = OpenStruct.new(name: 'LTe')
57
+
58
+ render rabl: 'admin' if params[:id] == '1'
59
+ end
60
+
53
61
  subject.get('/home-detail', rabl: 'user') do
54
62
  @user = OpenStruct.new(name: 'LTe')
55
63
  render rabl: 'admin', locals: { details: 'amazing detail' }
@@ -67,23 +75,38 @@ describe Grape::Rabl do
67
75
 
68
76
  it 'renders template passed as argument to render method' do
69
77
  get('/home')
70
- last_response.body.should == '{"admin":{"name":"LTe"}}'
78
+ parsed_response.should == JSON.parse('{"admin":{"name":"LTe"}}')
79
+ end
80
+
81
+ it 'renders admin template' do
82
+ get('/admin/1')
83
+ parsed_response.should == JSON.parse('{"admin":{"name":"LTe"}}')
84
+ end
85
+
86
+ it 'renders user template' do
87
+ get('/admin/2')
88
+ parsed_response.should == JSON.parse('{"user":{"name":"LTe","project":null}}')
71
89
  end
72
90
 
73
91
  it 'renders template passed as argument to render method with locals' do
74
92
  get('/home-detail')
75
- last_response.body.should == '{"admin":{"name":"LTe","details":"amazing detail"}}'
93
+ parsed_response.should == JSON.parse('{"admin":{"name":"LTe","details":"amazing detail"}}')
76
94
  end
77
95
 
78
96
  it 'renders with locals without overriding template' do
79
97
  get('/about-detail')
80
- last_response.body.should == '{"user":{"name":"LTe","details":"just a user","project":null}}'
98
+ parsed_response.should == JSON.parse('{"user":{"name":"LTe","details":"just a user","project":null}}')
81
99
  end
82
100
 
83
101
  it 'does not save rabl options after called #render method' do
84
102
  get('/home')
85
103
  get('/about')
86
- last_response.body.should == '{"user":{"name":"LTe","project":null}}'
104
+ parsed_response.should == JSON.parse('{"user":{"name":"LTe","project":null}}')
105
+ end
106
+
107
+ it 'does not modify endpoint options' do
108
+ get '/home'
109
+ expect(last_request.env['api.endpoint'].options[:route_options][:rabl]).to eq 'user'
87
110
  end
88
111
  end
89
112
 
@@ -108,7 +131,7 @@ describe Grape::Rabl do
108
131
  end
109
132
 
110
133
  get '/home'
111
- last_response.body.should == '{"user":{"name":"LTe","email":"email@example.com","project":{"name":"First"}}}'
134
+ parsed_response.should == JSON.parse('{"user":{"name":"LTe","email":"email@example.com","project":{"name":"First"}}}')
112
135
  end
113
136
  end
114
137
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-rabl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Niełacny
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-26 00:00:00.000000000 Z
11
+ date: 2015-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grape
@@ -126,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
126
  version: '0'
127
127
  requirements: []
128
128
  rubyforge_project:
129
- rubygems_version: 2.1.11
129
+ rubygems_version: 2.4.5
130
130
  signing_key:
131
131
  specification_version: 4
132
132
  summary: Use rabl in grape