grape-rabl 0.4.3 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8192a5ce63fc8fcde53a8948ad61e8b659f1e4b7
4
- data.tar.gz: d10abacc60cfc20af4679e18302cbe2d2cdb1220
2
+ SHA256:
3
+ metadata.gz: 2139e066606a02ff9f13f498209f8b67b9edee1f17aa6765b0cdd0f304bf16e6
4
+ data.tar.gz: 3f026c83de19ed9c97ec5169dda8e4e9a7c52e5f977befa61a085ef3df07767b
5
5
  SHA512:
6
- metadata.gz: ea70396b25b43e9ca3daa526679c86989fef25b014ae9683048d2b17ad57ef82f5459ea17667c85a546b03b75c6b2f13c06a95cb029f1527e632496cf5eacbd7
7
- data.tar.gz: 3ef3faaa10a3f10bb83f2b68fe3fb00ebccae89e450a49e9c1912bdd58dd93711906e40abea81e431edae320b8694a8cb7b2022ad077906f42f383764ab81628
6
+ metadata.gz: a468e3a080bc6485c48ad71066d2dab882b2541e579cfe8bea3e644b1118bf91e1400184d03ed3d29ff01062449cf85e034aa9f7a56b0ebeedfb4d5c05c5565d
7
+ data.tar.gz: 49b59dfc17187e747844c375cfbf1d805f0158786141a8910516f0945108171475c11ffc31d7788ad59fd80c7650abefbf519e12437cd8bc3b25e1378b8d7413
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2016-06-08 16:00:13 -0400 using RuboCop version 0.40.0.
3
+ # on 2017-11-17 09:51:46 -0500 using RuboCop version 0.51.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -11,8 +11,13 @@ Lint/RescueException:
11
11
  Exclude:
12
12
  - 'spec/grape_rabl_spec.rb'
13
13
 
14
- # Offense count: 21
15
- # Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
14
+ # Offense count: 8
15
+ # Configuration parameters: CountComments, ExcludedMethods.
16
+ Metrics/BlockLength:
17
+ Max: 169
18
+
19
+ # Offense count: 23
20
+ # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
16
21
  # URISchemes: http, https
17
22
  Metrics/LineLength:
18
23
  Max: 148
@@ -22,6 +27,13 @@ Metrics/LineLength:
22
27
  Metrics/MethodLength:
23
28
  Max: 13
24
29
 
30
+ # Offense count: 1
31
+ # Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
32
+ # AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
33
+ Naming/FileName:
34
+ Exclude:
35
+ - 'lib/grape-rabl.rb'
36
+
25
37
  # Offense count: 5
26
38
  Style/Documentation:
27
39
  Exclude:
@@ -38,12 +50,6 @@ Style/DoubleNegation:
38
50
  Exclude:
39
51
  - 'lib/grape-rabl/formatter.rb'
40
52
 
41
- # Offense count: 1
42
- # Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts.
43
- Style/FileName:
44
- Exclude:
45
- - 'lib/grape-rabl.rb'
46
-
47
53
  # Offense count: 1
48
54
  Style/IfInsideElse:
49
55
  Exclude:
@@ -1,3 +1,7 @@
1
+ #### v0.5.0
2
+
3
+ * [#34](https://github.com/ruby-grape/grape-rabl/pulls/34): If no RABL template is specified, fallback to the default response format as determined by Grape - [@chrisbloom7](https://github.com/chrisbloom7).
4
+
1
5
  #### v0.4.3
2
6
 
3
7
  * [#44](https://github.com/ruby-grape/grape-rabl/issues/44): Don't require unused hashie - [@tsuwatch](https://github.com/tsuwatch).
data/Gemfile CHANGED
@@ -3,15 +3,15 @@ source 'https://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  group :development do
6
- gem 'rubocop', '0.40.0'
6
+ gem 'rubocop', '0.51.0'
7
7
  end
8
8
 
9
9
  group :test do
10
+ gem 'coveralls', require: false
10
11
  gem 'json'
11
- gem 'rspec'
12
+ gem 'rabl'
12
13
  gem 'rack-test'
13
14
  gem 'rake'
14
- gem 'coveralls', require: false
15
- gem 'rabl'
15
+ gem 'rspec'
16
16
  gem 'ruby-grape-danger', '~> 0.1.1', require: false
17
17
  end
data/README.md CHANGED
@@ -1,10 +1,9 @@
1
1
  # Grape::Rabl
2
2
 
3
- Use [Rabl](https://github.com/nesquena/rabl) templates in [Grape](https://github.com/intridea/grape)!
3
+ Use [Rabl](https://github.com/nesquena/rabl) templates in [Grape](https://github.com/ruby-grape/grape)!
4
4
 
5
5
  [![Gem Version](http://img.shields.io/gem/v/grape-rabl.svg)](http://badge.fury.io/rb/grape-rabl)
6
6
  [![Build Status](http://img.shields.io/travis/ruby-grape/grape-rabl.svg)](https://travis-ci.org/ruby-grape/grape-rabl)
7
- [![Dependency Status](https://gemnasium.com/ruby-grape/grape-rabl.svg)](https://gemnasium.com/ruby-grape/grape-rabl)
8
7
  [![Code Climate](https://codeclimate.com/github/ruby-grape/grape-rabl.svg)](https://codeclimate.com/github/ruby-grape/grape-rabl)
9
8
  [![Coverage Status](https://img.shields.io/coveralls/ruby-grape/grape-rabl.svg)](https://coveralls.io/r/ruby-grape/grape-rabl?branch=master)
10
9
 
@@ -21,6 +20,10 @@ And then execute:
21
20
 
22
21
  $ bundle
23
22
 
23
+ ## Upgrading
24
+
25
+ See [UPGRADING](UPGRADING.md).
26
+
24
27
  ## Usage
25
28
 
26
29
  ### Setup view root directory
@@ -135,7 +138,7 @@ class UserAPI < Grape::API
135
138
  @history = User.find(params[:id]).history
136
139
  end
137
140
 
138
- # do not use rabl, fallback to the defalt Grape JSON formatter
141
+ # do not use rabl, fallback to the default Grape response formatter
139
142
  get '/users' do
140
143
  User.all
141
144
  end
@@ -191,13 +194,10 @@ end
191
194
 
192
195
  ## Specs
193
196
 
194
- See ["Writing Tests"](https://github.com/intridea/grape#writing-tests) in [https://github.com/intridea/grape](grape) README.
197
+ See ["Writing Tests"](https://github.com/ruby-grape/grape#writing-tests) in [grape](https://github.com/ruby-grape/grape) README.
195
198
 
196
199
  Enjoy :)
197
200
 
198
201
  ## Contributing
199
202
 
200
203
  See [CONTRIBUTING](CONTRIBUTING.md).
201
-
202
- [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/ruby-grape/grape-rabl/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
203
-
data/Rakefile CHANGED
@@ -11,4 +11,4 @@ end
11
11
  require 'rubocop/rake_task'
12
12
  RuboCop::RakeTask.new(:rubocop)
13
13
 
14
- task default: [:rubocop, :spec]
14
+ task default: %i[rubocop spec]
@@ -0,0 +1,32 @@
1
+ # Upgrading Grape::Rabl
2
+
3
+ ## Upgrading to >= 0.5
4
+
5
+ ### Fallback rendering when no RABL template is defined
6
+
7
+ Prior to v0.5.0, Grape::Rabl would always render content as JSON when no Rabl template was specified for a request. Beginning in v0.5.0 Grape::Rabl will now fallback to using the default response format [as determined by Grape](https://github.com/ruby-grape/grape#api-formats)
8
+
9
+ ```ruby
10
+ class SampleApi < Grape::API
11
+ format :xml
12
+ formatter :xml, Grape::Formatter::Rabl
13
+
14
+ get 'list' do
15
+ %w[thing]
16
+ end
17
+ end
18
+ ```
19
+
20
+ #### Former behavior
21
+
22
+ ```ruby
23
+ response.body # => ["thing"]
24
+ ```
25
+
26
+ #### Current behavior
27
+
28
+ ```ruby
29
+ response.body # => <?xml version="1.0" encoding="UTF-8"?>\n<strings type="array">\n <string>thing</string>\n</strings>
30
+ ```
31
+
32
+ See [#34](https://github.com/ruby-grape/grape-rabl/pull/34) for more information.
@@ -1,8 +1,8 @@
1
- # -*- encoding: utf-8 -*-
1
+
2
2
  require File.expand_path('../lib/grape-rabl/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
- gem.authors = ["Piotr Niełacny"]
5
+ gem.authors = ['Piotr Niełacny']
6
6
  gem.email = ['piotr.nielacny@gmail.com']
7
7
  gem.description = 'Use rabl in grape'
8
8
  gem.summary = 'Use rabl in grape'
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
17
17
  gem.required_ruby_version = '>= 2.2.0'
18
18
 
19
19
  gem.add_dependency 'grape'
20
+ gem.add_dependency 'i18n'
20
21
  gem.add_dependency 'rabl'
21
22
  gem.add_dependency 'tilt'
22
- gem.add_dependency 'i18n'
23
23
  end
@@ -29,12 +29,18 @@ module Grape
29
29
  end
30
30
  end
31
31
  else
32
- Grape::Formatter::Json.call object, env
32
+ fallback_formatter.call object, env
33
33
  end
34
34
  end
35
35
 
36
36
  private
37
37
 
38
+ # Find a formatter to fallback to. `env[Grape::Env::API_FORMAT]` will always be a
39
+ # valid formatter, otherwise a HTTP 406 error would have already have been thrown
40
+ def fallback_formatter
41
+ Grape::Formatter.formatter_for(env[Grape::Env::API_FORMAT])
42
+ end
43
+
38
44
  def view_path(template)
39
45
  if template.split('.')[-1] == 'rabl'
40
46
  File.join(env['api.tilt.root'], template)
@@ -1,5 +1,5 @@
1
1
  module Grape
2
2
  module Rabl
3
- VERSION = '0.4.3'.freeze
3
+ VERSION = '0.5.0'.freeze
4
4
  end
5
5
  end
@@ -0,0 +1,84 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Grape::Rabl formatter' do
4
+ subject do
5
+ Class.new(Grape::API)
6
+ end
7
+
8
+ let(:xml_render) do
9
+ %(<?xml version="1.0" encoding="UTF-8"?>
10
+ <hash>
11
+ <errors type="array">
12
+ <error>bad</error>
13
+ <error>things</error>
14
+ <error>happened</error>
15
+ </errors>
16
+ </hash>
17
+ )
18
+ end
19
+
20
+ def app
21
+ subject
22
+ end
23
+
24
+ context 'rendering' do
25
+ context 'when no rabl template is specified' do
26
+ before do
27
+ # Grape::API defaults to the following declarations:
28
+ # content_type :xml, 'application/xml'
29
+ # content_type :json, 'application/json'
30
+ # content_type :binary, 'application/octet-stream'
31
+ # content_type :txt, 'text/plain'
32
+ # default_format :txt
33
+ subject.formatter :xml, Grape::Formatter::Rabl
34
+ subject.formatter :txt, Grape::Formatter::Rabl
35
+ subject.get('/oops') { { errors: %w[bad things happened] } }
36
+ expect_any_instance_of(Grape::Rabl::Formatter).to receive(:render).and_call_original
37
+ end
38
+
39
+ it 'falls back to :txt given no other format information' do
40
+ get '/oops'
41
+ expect(last_response.body).to eq('{:errors=>["bad", "things", "happened"]}')
42
+ expect(last_response.headers['Content-Type']).to eq('text/plain')
43
+ end
44
+
45
+ it 'falls back to the file extension if it is a valid format' do
46
+ get '/oops.xml'
47
+ expect(last_response.body).to eq(xml_render)
48
+ expect(last_response.headers['Content-Type']).to eq('application/xml')
49
+ end
50
+
51
+ it 'falls back to the value of the `format` parameter in the query string if it is provided' do
52
+ get '/oops?format=xml'
53
+ expect(last_response.body).to eq(xml_render)
54
+ expect(last_response.headers['Content-Type']).to eq('application/xml')
55
+ end
56
+
57
+ it 'falls back to the format set by the `format` option if it is a valid format' do
58
+ # `format` option must be declared before endpoint
59
+ subject.format :xml
60
+ subject.get('/oops/2') { { errors: %w[bad things happened] } }
61
+
62
+ get '/oops/2'
63
+ expect(last_response.body).to eq(xml_render)
64
+ expect(last_response.headers['Content-Type']).to eq('application/xml')
65
+ end
66
+
67
+ it 'falls back to the `Accept` header if it is a valid format' do
68
+ get '/oops', {}, 'HTTP_ACCEPT' => 'application/xml'
69
+ expect(last_response.body).to eq(xml_render)
70
+ expect(last_response.headers['Content-Type']).to eq('application/xml')
71
+ end
72
+
73
+ it 'falls back to the default_format option if it is a valid format' do
74
+ # `default_format` option must be declared before endpoint
75
+ subject.default_format :xml
76
+ subject.get('/oops/2') { { errors: %w[bad things happened] } }
77
+
78
+ get '/oops/2'
79
+ expect(last_response.body).to eq(xml_render)
80
+ expect(last_response.headers['Content-Type']).to eq('application/xml')
81
+ end
82
+ end
83
+ end
84
+ end
@@ -1 +1 @@
1
- attributes :type
1
+ attributes :type
@@ -1,6 +1,6 @@
1
1
  object @user => :admin
2
2
  attributes :name
3
3
 
4
- node :details, :unless => lambda { |n| locals[:details].nil? } do |m|
4
+ node :details, unless: ->(_n) { locals[:details].nil? } do |_m|
5
5
  locals[:details]
6
6
  end
@@ -1 +1 @@
1
- attributes :author
1
+ attributes :author
@@ -2,9 +2,9 @@ object @project => :project
2
2
  attributes :name
3
3
 
4
4
  node :info do
5
- partial "partial", object: @project.type
5
+ partial 'partial', object: @project.type
6
6
  end
7
7
 
8
8
  child @author => :author do
9
- extends "info"
10
- end
9
+ extends 'info'
10
+ end
@@ -5,6 +5,6 @@ child @project => :project do
5
5
  attributes :name
6
6
  end
7
7
 
8
- node :details, :unless => lambda { |n| locals[:details].nil? } do |m|
8
+ node :details, unless: ->(_n) { locals[:details].nil? } do |_m|
9
9
  locals[:details]
10
10
  end
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.4.3
4
+ version: 0.5.0
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: 2017-11-17 00:00:00.000000000 Z
11
+ date: 2019-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grape
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rabl
28
+ name: i18n
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: tilt
42
+ name: rabl
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: i18n
56
+ name: tilt
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -87,6 +87,7 @@ files:
87
87
  - README.md
88
88
  - RELEASING.md
89
89
  - Rakefile
90
+ - UPGRADING.md
90
91
  - grape-rabl.gemspec
91
92
  - lib/grape-rabl.rb
92
93
  - lib/grape-rabl/configuration.rb
@@ -96,6 +97,7 @@ files:
96
97
  - lib/grape-rabl/version.rb
97
98
  - lib/grape/rabl.rb
98
99
  - spec/grape_rabl_configuration.rb
100
+ - spec/grape_rabl_formatter_spec.rb
99
101
  - spec/grape_rabl_layout_spec.rb
100
102
  - spec/grape_rabl_partials_spec.rb
101
103
  - spec/grape_rabl_spec.rb
@@ -129,13 +131,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
131
  - !ruby/object:Gem::Version
130
132
  version: '0'
131
133
  requirements: []
132
- rubyforge_project:
133
- rubygems_version: 2.6.12
134
+ rubygems_version: 3.0.3
134
135
  signing_key:
135
136
  specification_version: 4
136
137
  summary: Use rabl in grape
137
138
  test_files:
138
139
  - spec/grape_rabl_configuration.rb
140
+ - spec/grape_rabl_formatter_spec.rb
139
141
  - spec/grape_rabl_layout_spec.rb
140
142
  - spec/grape_rabl_partials_spec.rb
141
143
  - spec/grape_rabl_spec.rb