grape-active_model_serializers 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3d1fc34293532a51eb2a8694d46c26d874b56d3c
4
- data.tar.gz: dd6d159497a55ee86f431402f02e0991cfae55c9
3
+ metadata.gz: 0833fa7f880a3344cf42f728b3176856e6ffd2a4
4
+ data.tar.gz: d080d1eeb3674e584535668269ed1cef7af531e3
5
5
  SHA512:
6
- metadata.gz: 1012cd5e379a6dd9b988cb23d02d84bc12e6c95a4a2b61390762f7f8bccab6cf4c55254bee506bb8d59a8ca82ab581e30c411a2bfdf09a6e78c979660007c06a
7
- data.tar.gz: 4b9d9dbbd00137e3ed063ccc357efd36aeaabe6a446c2960022c951417cd2abf0b2bd1b175283da38af0bc67f568792b2e589edbbb5b999ff7898fd6282fe5c6
6
+ metadata.gz: b43a17bd55b83913d2d745db519c91e13523d601d318f6d87169ddbfae15105f71997b35461a21d238543d5e6b2cb4115b6a19083c7c39bc3ae4d81cd7ebaefb
7
+ data.tar.gz: 1aa226e6e3e42baa064c8d83f413be3da199e65add7c3cceba5fb2083154cfad2a764d906cd3ad1e4ac5082c7c10d620705584a696522ad6f46e7bf5bca65d6a
@@ -0,0 +1,2 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
@@ -0,0 +1,24 @@
1
+ # This configuration was generated by `rubocop --auto-gen-config`
2
+ # on 2015-01-13 18:47:14 -0500 using RuboCop version 0.28.0.
3
+ # The point is for the user to remove these configuration records
4
+ # one by one as the offenses are removed from the code base.
5
+ # Note that changes in the inspected code, or installation of new
6
+ # versions of RuboCop, may require this file to be generated again.
7
+
8
+ # Offense count: 25
9
+ # Configuration parameters: AllowURI, URISchemes.
10
+ Metrics/LineLength:
11
+ Max: 179
12
+
13
+ # Offense count: 7
14
+ Style/Documentation:
15
+ Enabled: false
16
+
17
+ # Offense count: 2
18
+ # Configuration parameters: Exclude.
19
+ Style/FileName:
20
+ Enabled: false
21
+
22
+ # Offense count: 4
23
+ Style/RegexpLiteral:
24
+ MaxSlashes: 0
@@ -0,0 +1,15 @@
1
+ language: ruby
2
+
3
+ sudo: false
4
+
5
+ rvm:
6
+ - 2.1.1
7
+ - 1.9.3
8
+ - rbx-2.2.10
9
+ - jruby-19mode
10
+
11
+ env:
12
+ - GRAPE_VERSION=0.8.0
13
+ - GRAPE_VERSION=0.9.0
14
+ - GRAPE_VERSION=0.10.1
15
+ - GRAPE_VERSION=HEAD
data/Gemfile CHANGED
@@ -1,3 +1,10 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
+
5
+ case version = ENV['GRAPE_VERSION'] || '~> 0.10.0'
6
+ when 'HEAD'
7
+ gem 'grape', github: 'intridea/grape'
8
+ else
9
+ gem 'grape', version
10
+ end
data/Guardfile CHANGED
@@ -4,15 +4,15 @@
4
4
  guard 'rspec' do
5
5
  watch(%r{^spec/.+_spec\.rb$})
6
6
  watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
- watch('spec/spec_helper.rb') { "spec" }
7
+ watch('spec/spec_helper.rb') { 'spec' }
8
8
 
9
9
  # Rails example
10
10
  watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
11
11
  watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
12
12
  watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
13
- watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
14
- watch('config/routes.rb') { "spec/routing" }
15
- watch('app/controllers/application_controller.rb') { "spec/controllers" }
13
+ watch(%r{^spec/support/(.+)\.rb$}) { 'spec' }
14
+ watch('config/routes.rb') { 'spec/routing' }
15
+ watch('app/controllers/application_controller.rb') { 'spec/controllers' }
16
16
 
17
17
  # Capybara features specs
18
18
  watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
@@ -21,4 +21,3 @@ guard 'rspec' do
21
21
  watch(%r{^spec/acceptance/(.+)\.feature$})
22
22
  watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
23
23
  end
24
-
data/README.md CHANGED
@@ -82,18 +82,18 @@ end
82
82
 
83
83
  ```ruby
84
84
  # Serializer options can be specified on routes or namespaces.
85
- namespace 'foo', :serializer => BarSerializer do
85
+ namespace 'foo', serializer: BarSerializer do
86
86
  get "/" do
87
87
  # will use "bar" serializer
88
88
  end
89
89
 
90
90
  # Options specified on a route or namespace override those of the containing namespace.
91
- get "/home", :serializer => HomeSerializer do
91
+ get "/home", serializer: HomeSerializer do
92
92
  # will use "home" serializer
93
93
  end
94
94
 
95
95
  # All standard options for `ActiveModel::Serializers` are supported.
96
- get "/fancy_homes", :root => 'world', :each_serializer => FancyHomesSerializer
96
+ get "/fancy_homes", root: 'world', each_serializer: FancyHomesSerializer
97
97
  ...
98
98
  end
99
99
  end
@@ -112,11 +112,11 @@ end
112
112
  ### Support for `default_serializer_options`
113
113
 
114
114
  ```ruby
115
- helper do
116
- def default_serializer_options
117
- {only: params[:only], except: params[:except]}
118
- end
115
+ helpers do
116
+ def default_serializer_options
117
+ {only: params[:only], except: params[:except]}
119
118
  end
119
+ end
120
120
  ```
121
121
 
122
122
  ### current_user
@@ -128,15 +128,15 @@ In Grape, you can get the same behavior by defining a `current_user`
128
128
  helper method:
129
129
 
130
130
  ```ruby
131
- helpers do
132
- def current_user
133
- @current_user ||= User.where( :access_token => params[:token]).first
134
- end
135
-
136
- def authenticate!
137
- error!('401 Unauthenticated', 401) unless current_user
138
- end
131
+ helpers do
132
+ def current_user
133
+ @current_user ||= User.where(access_token: params[:token]).first
134
+ end
135
+
136
+ def authenticate!
137
+ error!('401 Unauthenticated', 401) unless current_user
139
138
  end
139
+ end
140
140
  ```
141
141
 
142
142
  Then, in your serializer, you could show or hide some elements
@@ -168,7 +168,7 @@ class API < Grape::API
168
168
  end
169
169
  end
170
170
 
171
- API.new.get "/home" # => '{:user=>{:first_name=>"JR", :last_name=>"HE"}}'
171
+ API.new.get "/home" # => '{ user: { first_name: "JR", last_name: "HE" } }'
172
172
  ```
173
173
 
174
174
 
@@ -180,6 +180,10 @@ Enjoy :)
180
180
 
181
181
  ## Changelog
182
182
 
183
+ #### Next
184
+ * Adds support for Grape 0.10.x
185
+
186
+
183
187
  #### v1.2.1
184
188
  * Adds support for active model serializer 0.9.x
185
189
 
data/Rakefile CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
2
+ require 'bundler/gem_tasks'
3
3
 
4
4
  require 'rspec/core'
5
5
  require 'rspec/core/rake_task'
@@ -8,4 +8,7 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
8
8
  spec.pattern = FileList['spec/**/*_spec.rb']
9
9
  end
10
10
 
11
- task :default => :spec
11
+ require 'rubocop/rake_task'
12
+ RuboCop::RakeTask.new(:rubocop)
13
+
14
+ task default: [:rubocop, :spec]
@@ -2,25 +2,26 @@
2
2
  require File.expand_path('../lib/grape-active_model_serializers/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
- gem.authors = ["Jonathan Richard Henry Evans"]
6
- gem.email = ["contact@jrhe.co.uk"]
7
- gem.summary = %q{Use active_model_serializer in grape}
8
- gem.description = %q{Provides a Formatter for the Grape API DSL to emit objects serialized with active_model_serializers.}
9
- gem.homepage = "https://github.com/jrhe/grape-active_model_serializers"
5
+ gem.authors = ['Jonathan Richard Henry Evans']
6
+ gem.email = ['contact@jrhe.co.uk']
7
+ gem.summary = 'Use active_model_serializer in grape'
8
+ gem.description = 'Provides a Formatter for the Grape API DSL to emit objects serialized with active_model_serializers.'
9
+ gem.homepage = 'https://github.com/jrhe/grape-active_model_serializers'
10
10
 
11
- gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
12
12
  gem.files = `git ls-files`.split("\n")
13
13
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
- gem.name = "grape-active_model_serializers"
15
- gem.require_paths = ["lib"]
14
+ gem.name = 'grape-active_model_serializers'
15
+ gem.require_paths = ['lib']
16
16
  gem.version = Grape::ActiveModelSerializers::VERSION
17
17
  gem.licenses = ['MIT']
18
18
 
19
- gem.add_dependency "grape", "~> 0.3"
20
- gem.add_dependency "active_model_serializers", ">= 0.9.0"
19
+ gem.add_dependency 'grape'
20
+ gem.add_dependency 'active_model_serializers', '>= 0.9.0'
21
21
 
22
- gem.add_development_dependency "rspec"
23
- gem.add_development_dependency "rack-test"
24
- gem.add_development_dependency "rake"
25
- gem.add_development_dependency "guard-rspec"
22
+ gem.add_development_dependency 'rspec'
23
+ gem.add_development_dependency 'rack-test'
24
+ gem.add_development_dependency 'rake'
25
+ gem.add_development_dependency 'guard-rspec'
26
+ gem.add_development_dependency 'rubocop', '0.28.0'
26
27
  end
@@ -9,11 +9,19 @@ module Grape
9
9
  attr_accessor :controller_name
10
10
 
11
11
  def namespace_options
12
- settings[:namespace] ? settings[:namespace].options : {}
12
+ if self.respond_to?(:inheritable_setting)
13
+ inheritable_setting.namespace
14
+ else
15
+ settings[:namespace] ? settings[:namespace].options : {}
16
+ end
13
17
  end
14
18
 
15
19
  def route_options
16
- options[:route_options]
20
+ if self.respond_to?(:inheritable_setting)
21
+ inheritable_setting.route
22
+ else
23
+ options[:route_options]
24
+ end
17
25
  end
18
26
 
19
27
  def self.included(base)
@@ -27,26 +35,17 @@ module Grape
27
35
  end
28
36
  end
29
37
 
30
- def render(resources, meta={})
31
- set_meta_and_meta_key(meta)
38
+ def render(resources, meta = {})
39
+ env['ams_meta'] = meta
32
40
  resources
33
41
  end
34
42
 
35
- def default_serializer_options; end
36
-
37
- def url_options; end
38
-
39
- private
40
-
41
- def set_meta_and_meta_key(meta)
42
- if meta.has_key?(:meta)
43
- Formatter::ActiveModelSerializers.meta = meta[:meta]
44
- if meta.has_key?(:meta_key)
45
- Formatter::ActiveModelSerializers.meta_key = meta[:meta_key]
46
- end
47
- end
43
+ def default_serializer_options
48
44
  end
49
45
 
46
+ def url_options
47
+ end
50
48
  end
49
+
51
50
  Endpoint.send(:include, EndpointExtension)
52
51
  end
@@ -16,56 +16,40 @@ module Grape
16
16
  endpoint = env['api.endpoint']
17
17
  options = build_options_from_endpoint(endpoint)
18
18
 
19
- if serializer = options.fetch(:serializer, ActiveModel::Serializer.serializer_for(resource))
20
- options[:scope] = endpoint unless options.has_key?(:scope)
21
- # ensure we have an root to fallback on
22
- options[:resource_name] = default_root(endpoint) if resource.respond_to?(:to_ary)
23
- serializer.new(resource, options.merge(other_options))
24
- end
19
+ serializer = options.fetch(:serializer, ActiveModel::Serializer.serializer_for(resource))
20
+ return nil unless serializer
21
+
22
+ options[:scope] = endpoint unless options.key?(:scope)
23
+ # ensure we have an root to fallback on
24
+ options[:resource_name] = default_root(endpoint) if resource.respond_to?(:to_ary)
25
+ serializer.new(resource, options.merge(other_options(env)))
25
26
  end
26
27
 
27
- def other_options
28
+ def other_options(env)
28
29
  options = {}
29
- if @meta_content_items
30
- if @meta_key
31
- key_option = @meta_key[:meta_key]
32
- @meta_key.delete(:meta_key)
33
- options[:meta_key] = key_option if key_option
34
- end
35
- meta_option = @meta_content_items[:meta]
36
- @meta_content_items.delete(:meta)
37
- options[key_option || :meta] = meta_option if meta_option
38
- end
30
+ ams_meta = env['ams_meta'] || {}
31
+ meta = ams_meta.delete(:meta)
32
+ meta_key = ams_meta.delete(:meta_key)
33
+ options[:meta_key] = meta_key if meta && meta_key
34
+ options[meta_key || :meta] = meta if meta
39
35
  options
40
36
  end
41
37
 
42
- def meta
43
- @meta_content_items || {}
44
- end
45
-
46
- def meta=(meta_content)
47
- @meta_content_items = { meta: meta_content } if meta_content
48
- end
49
-
50
- def meta_key
51
- @meta_key || {}
52
- end
53
-
54
- def meta_key=(key)
55
- @meta_key = { meta_key: key } if key
56
- end
57
-
58
38
  def build_options_from_endpoint(endpoint)
59
- [endpoint.default_serializer_options || {}, endpoint.namespace_options, endpoint.route_options].reduce(:merge)
39
+ [endpoint.default_serializer_options || {}, endpoint.namespace_options, endpoint.route_options, endpoint.options, endpoint.options.fetch(:route_options)].reduce(:merge)
60
40
  end
61
41
 
62
42
  # array root is the innermost namespace name ('space') if there is one,
63
43
  # otherwise the route name (e.g. get 'name')
64
44
  def default_root(endpoint)
65
- innermost_scope = endpoint.settings.peek
66
-
67
- if innermost_scope[:namespace]
68
- innermost_scope[:namespace].space
45
+ innermost_scope = if endpoint.respond_to?(:namespace_stackable)
46
+ endpoint.namespace_stackable(:namespace).last
47
+ else
48
+ endpoint.settings.peek[:namespace]
49
+ end
50
+
51
+ if innermost_scope
52
+ innermost_scope.space
69
53
  else
70
54
  endpoint.options[:path][0].to_s.split('/')[-1]
71
55
  end
@@ -1,5 +1,5 @@
1
1
  module Grape
2
2
  module ActiveModelSerializers
3
- VERSION = '1.3.1'
3
+ VERSION = '1.3.2'
4
4
  end
5
5
  end
@@ -20,43 +20,40 @@ describe '#render' do
20
20
 
21
21
  context 'with meta key' do
22
22
  it 'includes meta key and content' do
23
- result = get_resource_with({ meta: { total: 2 }})
23
+ result = get_resource_with(meta: { total: 2 })
24
24
  expect(result).to have_key('meta')
25
- expect(result.fetch('meta')).to eq({ 'total' => 2 })
25
+ expect(result.fetch('meta')).to eq('total' => 2)
26
26
  end
27
27
  end
28
28
 
29
29
  context 'with a custom meta_key' do
30
-
31
30
  it 'includes the custom meta key name' do
32
- result = get_resource_with({ meta: { total: 2 }, meta_key: :custom_key_name })
31
+ result = get_resource_with(meta: { total: 2 }, meta_key: :custom_key_name)
33
32
  expect(result).to have_key('custom_key_name')
34
- expect(result.fetch('custom_key_name')).to eq({ 'total' => 2 })
33
+ expect(result.fetch('custom_key_name')).to eq('total' => 2)
35
34
  end
36
35
 
37
36
  it 'ignores a lonely meta_key' do
38
- result = get_resource_with({ meta_key: :custom_key_name })
37
+ result = get_resource_with(meta_key: :custom_key_name)
39
38
  expect(result).not_to have_key('meta')
40
39
  expect(result).not_to have_key('custom_key_name')
41
40
  end
42
41
  end
43
42
 
44
43
  context 'junk keys' do
45
-
46
44
  it 'ignores junk keys' do
47
- result = get_resource_with({ junk_key: { total: 2 } })
45
+ result = get_resource_with(junk_key: { total: 2 })
48
46
  expect(result).not_to have_key('junk_key')
49
47
  end
50
48
 
51
49
  it 'ignores empty meta_key' do
52
- result = get_resource_with({ meta: { total: 2 }, meta_key: nil })
50
+ result = get_resource_with(meta: { total: 2 }, meta_key: nil)
53
51
  expect(result).to have_key('meta')
54
52
  end
55
53
 
56
54
  it 'ignores empty meta' do
57
- result = get_resource_with({ meta: nil })
55
+ result = get_resource_with(meta: nil)
58
56
  expect(result).not_to have_key('meta')
59
57
  end
60
-
61
58
  end
62
59
  end
@@ -1,8 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'Grape::EndpointExtension' do
4
-
5
- subject { Grape::Endpoint.new({}, {path: '/', method: 'foo'}) }
4
+ if Grape::Util.const_defined?('InheritableSetting')
5
+ subject { Grape::Endpoint.new(Grape::Util::InheritableSetting.new, path: '/', method: 'foo') }
6
+ else
7
+ subject { Grape::Endpoint.new({}, path: '/', method: 'foo') }
8
+ end
6
9
 
7
10
  let(:serializer) { Grape::Formatter::ActiveModelSerializers }
8
11
 
@@ -16,24 +19,25 @@ describe 'Grape::EndpointExtension' do
16
19
 
17
20
  let(:users) { [user, user] }
18
21
 
19
- describe "#render" do
22
+ describe '#render' do
23
+ before do
24
+ allow(subject).to receive(:env).and_return({})
25
+ end
20
26
  it { should respond_to(:render) }
21
- let (:meta_content) { { total: 2 } }
22
- let (:meta_full) { { meta: meta_content } }
27
+ let(:meta_content) { { total: 2 } }
28
+ let(:meta_full) { { meta: meta_content } }
23
29
  context 'supplying meta' do
24
30
  it 'passes through the Resource and uses given meta settings' do
25
- expect(serializer).to receive(:meta=).with(meta_content)
31
+ allow(subject).to receive(:env).and_return(meta: meta_full)
26
32
  expect(subject.render(users, meta_full)).to eq(users)
27
33
  end
28
34
  end
29
35
  context 'supplying meta and key' do
30
- let (:meta_key) { { meta_key: :custom_key_name } }
36
+ let(:meta_key) { { meta_key: :custom_key_name } }
31
37
  it 'passes through the Resource and uses given meta settings' do
32
- expect(serializer).to receive(:meta=).with(meta_content)
33
- expect(serializer).to receive(:meta_key=).with(meta_key[:meta_key])
38
+ allow(subject).to receive(:env).and_return(meta: meta_full.merge(meta_key))
34
39
  expect(subject.render(users, meta_full.merge(meta_key))).to eq(users)
35
40
  end
36
41
  end
37
42
  end
38
-
39
43
  end
@@ -3,38 +3,35 @@ require 'grape-active_model_serializers/formatter'
3
3
 
4
4
  describe Grape::Formatter::ActiveModelSerializers do
5
5
  subject { Grape::Formatter::ActiveModelSerializers }
6
- it { should respond_to(:meta) }
7
- it { should respond_to(:meta=) }
8
- it { should respond_to(:meta_key) }
9
- it { should respond_to(:meta_key=) }
10
-
11
- context '#meta' do
12
- it 'will silently accept falsy input but return empty Hash' do
13
- subject.meta = nil
14
- expect(subject.meta).to eq({})
15
- end
16
6
 
17
- it 'will wrap valid input in the meta: {} wrapper' do
18
- subject.meta = { total: 2 }
19
- expect(subject.meta).to eq({ meta: { total: 2 } })
20
- end
21
- end
7
+ describe 'serializer options from namespace' do
8
+ let(:app) { Class.new(Grape::API) }
22
9
 
23
- context '#meta_key' do
24
- it 'will silently accept falsy input but return empty Hash' do
25
- subject.meta_key = nil
26
- expect(subject.meta_key).to eq({})
10
+ before do
11
+ app.format :json
12
+ app.formatter :json, Grape::Formatter::ActiveModelSerializers
13
+
14
+ app.namespace('space') do |ns|
15
+ ns.get('/', root: false) do
16
+ { user: { first_name: 'JR', last_name: 'HE' } }
17
+ end
18
+ end
27
19
  end
28
20
 
29
- it 'will wrap valid input in the meta_key: {} wrapper' do
30
- subject.meta_key = :custom_key_name
31
- expect(subject.meta_key).to eq({ meta_key: :custom_key_name })
21
+ it 'should read serializer options like "root"' do
22
+ expect(described_class.build_options_from_endpoint(app.endpoints.first)).to include :root
32
23
  end
33
24
  end
34
25
 
35
26
  describe '.fetch_serializer' do
36
27
  let(:user) { User.new(first_name: 'John') }
37
- let(:endpoint) { Grape::Endpoint.new({}, {path: '/', method: 'foo'}) }
28
+
29
+ if Grape::Util.const_defined?('InheritableSetting')
30
+ let(:endpoint) { Grape::Endpoint.new(Grape::Util::InheritableSetting.new, path: '/', method: 'foo', root: false) }
31
+ else
32
+ let(:endpoint) { Grape::Endpoint.new({}, path: '/', method: 'foo', root: false) }
33
+ end
34
+
38
35
  let(:env) { { 'api.endpoint' => endpoint } }
39
36
 
40
37
  before do
@@ -59,5 +56,9 @@ describe Grape::Formatter::ActiveModelSerializers do
59
56
  expect(subject.instance_variable_get('@only')).to eq([:only])
60
57
  expect(subject.instance_variable_get('@except')).to eq([:except])
61
58
  end
59
+
60
+ it 'should read serializer options like "root"' do
61
+ expect(described_class.build_options_from_endpoint(endpoint).keys).to include :root
62
+ end
62
63
  end
63
64
  end
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'grape-active_model_serializers' do
4
-
5
4
  end
@@ -3,90 +3,90 @@ require 'support/models/user'
3
3
  require 'support/models/blog_post'
4
4
  require 'support/serializers/user_serializer'
5
5
  require 'support/serializers/blog_post_serializer'
6
- require "grape-active_model_serializers"
6
+ require 'grape-active_model_serializers'
7
7
 
8
8
  describe Grape::ActiveModelSerializers do
9
9
  let(:app) { Class.new(Grape::API) }
10
+ subject { last_response.body }
10
11
 
11
12
  before do
12
13
  app.format :json
13
14
  app.formatter :json, Grape::Formatter::ActiveModelSerializers
14
15
  end
15
16
 
16
-
17
- it "should respond with proper content-type" do
18
- app.get("/home/users", :serializer => UserSerializer) do
17
+ it 'should respond with proper content-type' do
18
+ app.get('/home/users', serializer: UserSerializer) do
19
19
  User.new
20
20
  end
21
- get("/home/users")
22
- last_response.headers["Content-Type"].should == "application/json"
21
+ get('/home/users')
22
+ expect(last_response.headers['Content-Type']).to eql 'application/json'
23
23
  end
24
24
 
25
25
  context 'serializer is set to nil' do
26
26
  before do
27
- app.get("/home", serializer: nil) do
28
- {user: {first_name: "JR", last_name: "HE"}}
27
+ app.get('/home', serializer: nil) do
28
+ { user: { first_name: 'JR', last_name: 'HE' } }
29
29
  end
30
30
  end
31
- it 'uses the built in grape serializer' do
32
- get("/home")
33
- last_response.body.should == "{\"user\":{\"first_name\":\"JR\",\"last_name\":\"HE\"}}"
31
+ it 'uses the built in grape serializer' do
32
+ get('/home')
33
+ expect(subject).to eql "{\"user\":{\"first_name\":\"JR\",\"last_name\":\"HE\"}}"
34
34
  end
35
35
  end
36
36
 
37
37
  context "serializer isn't set" do
38
38
  before do
39
- app.get("/home") do
40
- User.new({first_name: 'JR', last_name: 'HE', email: 'contact@jrhe.co.uk'})
39
+ app.get('/home') do
40
+ User.new(first_name: 'JR', last_name: 'HE', email: 'contact@jrhe.co.uk')
41
41
  end
42
42
  end
43
43
 
44
44
  it 'infers the serializer' do
45
- get "/home"
46
- last_response.body.should == "{\"user\":{\"first_name\":\"JR\",\"last_name\":\"HE\"}}"
45
+ get '/home'
46
+ expect(subject).to eql "{\"user\":{\"first_name\":\"JR\",\"last_name\":\"HE\"}}"
47
47
  end
48
48
  end
49
49
 
50
- it "serializes arrays of objects" do
51
- app.get("/users") do
52
- user = User.new({first_name: 'JR', last_name: 'HE', email: 'contact@jrhe.co.uk'})
50
+ it 'serializes arrays of objects' do
51
+ app.get('/users') do
52
+ user = User.new(first_name: 'JR', last_name: 'HE', email: 'contact@jrhe.co.uk')
53
53
  [user, user]
54
54
  end
55
55
 
56
- get "/users"
57
- last_response.body.should == "{\"users\":[{\"first_name\":\"JR\",\"last_name\":\"HE\"},{\"first_name\":\"JR\",\"last_name\":\"HE\"}]}"
56
+ get '/users'
57
+ expect(subject).to eql "{\"users\":[{\"first_name\":\"JR\",\"last_name\":\"HE\"},{\"first_name\":\"JR\",\"last_name\":\"HE\"}]}"
58
58
  end
59
59
 
60
- context "models with compound names" do
60
+ context 'models with compound names' do
61
61
  it "generates the proper 'root' node for individual objects" do
62
- app.get("/home") do
63
- BlogPost.new({title: 'Grape AM::S Rocks!', body: 'Really, it does.'})
62
+ app.get('/home') do
63
+ BlogPost.new(title: 'Grape AM::S Rocks!', body: 'Really, it does.')
64
64
  end
65
65
 
66
- get "/home"
67
- last_response.body.should == "{\"blog_post\":{\"title\":\"Grape AM::S Rocks!\",\"body\":\"Really, it does.\"}}"
66
+ get '/home'
67
+ expect(subject).to eql "{\"blog_post\":{\"title\":\"Grape AM::S Rocks!\",\"body\":\"Really, it does.\"}}"
68
68
  end
69
69
 
70
70
  it "generates the proper 'root' node for serialized arrays" do
71
- app.get("/blog_posts") do
72
- blog_post = BlogPost.new({title: 'Grape AM::S Rocks!', body: 'Really, it does.'})
71
+ app.get('/blog_posts') do
72
+ blog_post = BlogPost.new(title: 'Grape AM::S Rocks!', body: 'Really, it does.')
73
73
  [blog_post, blog_post]
74
74
  end
75
75
 
76
- get "/blog_posts"
77
- last_response.body.should == "{\"blog_posts\":[{\"title\":\"Grape AM::S Rocks!\",\"body\":\"Really, it does.\"},{\"title\":\"Grape AM::S Rocks!\",\"body\":\"Really, it does.\"}]}"
76
+ get '/blog_posts'
77
+ expect(subject).to eql "{\"blog_posts\":[{\"title\":\"Grape AM::S Rocks!\",\"body\":\"Really, it does.\"},{\"title\":\"Grape AM::S Rocks!\",\"body\":\"Really, it does.\"}]}"
78
78
  end
79
79
  end
80
80
 
81
- it "uses namespace options when provided" do
82
- app.namespace :admin, :serializer => UserSerializer do
81
+ it 'uses namespace options when provided' do
82
+ app.namespace :admin, serializer: UserSerializer do
83
83
  get('/jeff') do
84
84
  User.new(first_name: 'Jeff')
85
85
  end
86
86
  end
87
87
 
88
- get "/admin/jeff"
89
- last_response.body.should == "{\"user\":{\"first_name\":\"Jeff\",\"last_name\":null}}"
88
+ get '/admin/jeff'
89
+ expect(subject).to eql "{\"user\":{\"first_name\":\"Jeff\",\"last_name\":null}}"
90
90
  end
91
91
 
92
92
  context 'route is in a namespace' do
@@ -98,8 +98,8 @@ describe Grape::ActiveModelSerializers do
98
98
  end
99
99
  end
100
100
 
101
- get "/admin/jeff"
102
- last_response.body.should == "{\"admin\":[{\"first_name\":\"Jeff\",\"last_name\":null},{\"first_name\":\"Jeff\",\"last_name\":null}]}"
101
+ get '/admin/jeff'
102
+ expect(subject).to eql "{\"admin\":[{\"first_name\":\"Jeff\",\"last_name\":null},{\"first_name\":\"Jeff\",\"last_name\":null}]}"
103
103
  end
104
104
  end
105
105
 
@@ -110,9 +110,8 @@ describe Grape::ActiveModelSerializers do
110
110
  [user, user]
111
111
  end
112
112
 
113
- get "/people"
114
- last_response.body.should == "{\"people\":[{\"first_name\":\"Jeff\",\"last_name\":null},{\"first_name\":\"Jeff\",\"last_name\":null}]}"
113
+ get '/people'
114
+ expect(subject).to eql "{\"people\":[{\"first_name\":\"Jeff\",\"last_name\":null},{\"first_name\":\"Jeff\",\"last_name\":null}]}"
115
115
  end
116
116
  end
117
117
  end
118
-
@@ -4,9 +4,9 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
4
4
  require 'bundler'
5
5
  Bundler.setup :default, :test
6
6
 
7
- require "active_model_serializers"
7
+ require 'active_model_serializers'
8
8
  require 'active_support/core_ext/hash/conversions'
9
- require "active_support/json"
9
+ require 'active_support/json'
10
10
  require 'rspec'
11
11
  require 'rack/test'
12
12
  require 'grape-active_model_serializers'
@@ -15,4 +15,4 @@ RSpec.configure do |config|
15
15
  config.include Rack::Test::Methods
16
16
  end
17
17
 
18
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
18
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
@@ -2,8 +2,8 @@ class BlogPost
2
2
  include ActiveModel::SerializerSupport
3
3
  attr_accessor :title, :body
4
4
 
5
- def initialize(params={})
6
- params.each do |k,v|
5
+ def initialize(params = {})
6
+ params.each do |k, v|
7
7
  instance_variable_set("@#{k}", v) unless v.nil?
8
8
  end
9
9
  end
@@ -2,8 +2,8 @@ class User
2
2
  include ActiveModel::SerializerSupport
3
3
  attr_accessor :first_name, :last_name, :password, :email
4
4
 
5
- def initialize(params={})
6
- params.each do |k,v|
5
+ def initialize(params = {})
6
+ params.each do |k, v|
7
7
  instance_variable_set("@#{k}", v) unless v.nil?
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,99 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-active_model_serializers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Richard Henry Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-20 00:00:00.000000000 Z
11
+ date: 2015-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grape
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0.3'
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0.3'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: active_model_serializers
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.9.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.9.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rack-test
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: guard-rspec
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 0.28.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 0.28.0
97
111
  description: Provides a Formatter for the Grape API DSL to emit objects serialized
98
112
  with active_model_serializers.
99
113
  email:
@@ -102,7 +116,10 @@ executables: []
102
116
  extensions: []
103
117
  extra_rdoc_files: []
104
118
  files:
105
- - .gitignore
119
+ - ".gitignore"
120
+ - ".rubocop.yml"
121
+ - ".rubocop_todo.yml"
122
+ - ".travis.yml"
106
123
  - Gemfile
107
124
  - Guardfile
108
125
  - LICENSE.txt
@@ -135,17 +152,17 @@ require_paths:
135
152
  - lib
136
153
  required_ruby_version: !ruby/object:Gem::Requirement
137
154
  requirements:
138
- - - '>='
155
+ - - ">="
139
156
  - !ruby/object:Gem::Version
140
157
  version: '0'
141
158
  required_rubygems_version: !ruby/object:Gem::Requirement
142
159
  requirements:
143
- - - '>='
160
+ - - ">="
144
161
  - !ruby/object:Gem::Version
145
162
  version: '0'
146
163
  requirements: []
147
164
  rubyforge_project:
148
- rubygems_version: 2.0.14
165
+ rubygems_version: 2.4.5
149
166
  signing_key:
150
167
  specification_version: 4
151
168
  summary: Use active_model_serializer in grape