grape-active_model_serializers 1.3.1 → 1.3.2

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: 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