Compare commits

..

No commits in common. "master" and "v1.5.2" have entirely different histories.

25 changed files with 136 additions and 207 deletions

View file

@ -1,38 +0,0 @@
name: CI
on: [push, pull_request]
jobs:
danger:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: 4.0.0
- name: Install dependencies
run: bundle install --jobs 4 --retry 3
- name: Run Danger
run: |
# the token is public, has public_repo scope and belongs to the grape-bot user owned by @dblock, this is ok
TOKEN=$(echo -n Z2hwX2lYb0dPNXNyejYzOFJyaTV3QUxUdkNiS1dtblFwZTFuRXpmMwo= | base64 --decode)
DANGER_GITHUB_API_TOKEN=$TOKEN bundle exec danger --verbose
test:
runs-on: ubuntu-latest
strategy:
matrix:
ruby-version: [4.0.0, 3.4.8, 3.3.10, 3.2.9]
grape-version: ['~> 3.0.0', '~> 2.3.0']
steps:
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby-version }}
- name: Install dependencies
run: bundle install --jobs 4 --retry 3
env:
GRAPE_VERSION: ${{ matrix.grape-version }}
- name: Run tests
run: bundle exec rake
env:
GRAPE_VERSION: ${{ matrix.grape-version }}

View file

@ -4,10 +4,6 @@ AllCops:
Exclude: Exclude:
- Guardfile - Guardfile
- grape-active_model_serializers.gemspec - grape-active_model_serializers.gemspec
NewCops: enable
Style/BlockDelimiters: Style/BlockDelimiters:
Enabled: false Enabled: false
Style/FrozenStringLiteralComment:
Enabled: false

View file

@ -1,47 +1,33 @@
# This configuration was generated by # This configuration was generated by
# `rubocop --auto-gen-config` # `rubocop --auto-gen-config`
# on 2018-03-14 14:59:23 -0400 using RuboCop version 0.53.0. # on 2017-10-09 10:22:52 -0500 using RuboCop version 0.41.2.
# The point is for the user to remove these configuration records # The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base. # one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new # Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again. # versions of RuboCop, may require this file to be generated again.
# Offense count: 1
# Configuration parameters: Include.
# Include: **/*.gemfile, **/Gemfile, **/gems.rb
Bundler/DuplicatedGem:
Exclude:
- 'Gemfile'
# Offense count: 1 # Offense count: 1
Metrics/AbcSize: Metrics/AbcSize:
Max: 18 Max: 18
# Offense count: 23
# Configuration parameters: CountComments, ExcludedMethods.
Metrics/BlockLength:
Max: 133
# Offense count: 1 # Offense count: 1
Metrics/CyclomaticComplexity: Metrics/CyclomaticComplexity:
Max: 9 Max: 9
# Offense count: 1
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
# URISchemes: http, https
Metrics/LineLength:
Max: 87
# Offense count: 1 # Offense count: 1
# Configuration parameters: CountComments. # Configuration parameters: CountComments.
Metrics/MethodLength: Metrics/MethodLength:
Max: 15 Max: 18
# Offense count: 1 # Offense count: 1
Metrics/PerceivedComplexity: Metrics/PerceivedComplexity:
Max: 10 Max: 11
# Offense count: 2
# Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
# 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
Naming/FileName:
Exclude:
- 'lib/grape-active_model_serializers.rb'
- 'spec/grape-active_model_serializers_spec.rb'
# Offense count: 5 # Offense count: 5
Style/Documentation: Style/Documentation:
@ -54,18 +40,9 @@ Style/Documentation:
- 'lib/grape-active_model_serializers/options_builder.rb' - 'lib/grape-active_model_serializers/options_builder.rb'
- 'lib/grape-active_model_serializers/serializer_resolver.rb' - 'lib/grape-active_model_serializers/serializer_resolver.rb'
# Offense count: 1
# Configuration parameters: MinBodyLength.
Style/GuardClause:
Exclude:
- 'lib/grape-active_model_serializers/serializer_resolver.rb'
# Offense count: 2 # Offense count: 2
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns. # Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts.
# URISchemes: http, https Style/FileName:
Layout/LineLength:
Max: 87
Lint/ConstantDefinitionInBlock:
Exclude: Exclude:
- spec/integration/sequel_spec.rb - 'lib/grape-active_model_serializers.rb'
- 'spec/grape-active_model_serializers_spec.rb'

39
.travis.yml Normal file
View file

@ -0,0 +1,39 @@
language: ruby
sudo: false
matrix:
include:
- rvm: 2.5.0
script:
- bundle exec danger
- rvm: 2.5.0
env: GRAPE_VERSION=0.8.0
- rvm: 2.5.0
env: GRAPE_VERSION=0.9.0
- rvm: 2.5.0
env: GRAPE_VERSION=0.10.1
- rvm: 2.5.0
env: GRAPE_VERSION=0.12.0
- rvm: 2.5.0
env: GRAPE_VERSION=0.13.0
- rvm: 2.5.0
env: GRAPE_VERSION=0.14.0
- rvm: 2.5.0
env: GRAPE_VERSION=0.15.0
- rvm: 2.5.0
env: GRAPE_VERSION=0.16.2
- rvm: 2.5.0
env: GRAPE_VERSION=HEAD
- rvm: 2.4.3
- rvm: 2.3.6
- rvm: 2.2.9
- rvm: rbx-2
- rvm: jruby-19mode
- rvm: ruby-head
- rvm: jruby-head
allow_failures:
- rvm: rbx-2
- rvm: jruby-19mode
- rvm: ruby-head
- rvm: jruby-head

View file

@ -1,31 +1,17 @@
## Changelog ## Changelog
### 2.0.2 (Next) ### 1.5.2 (March 14, 2018)
* Your contribution here.
### 2.0.1 (2025/12/08)
* [#92](https://github.com/ruby-grape/grape-active_model_serializers/pull/92): Fix: accept nil serializer - [@mateusnava](https://github.com/mateusnava).
* [#100](https://github.com/ruby-grape/grape-active_model_serializers/pull/100): Fix compatibility with Grape 3.0 and test in CI - [@samsonjs](https://github.com/samsonjs).
### 2.0.0 (2025/06/02)
* [#96](https://github.com/ruby-grape/grape-active_model_serializers/pull/96): Add compatibility for Grape 2.3 - [@samsonjs](https://github.com/samsonjs).
* [#98](https://github.com/ruby-grape/grape-active_model_serializers/pull/98): Out with Travis CI, in with GitHub Actions - [@samsonjs](https://github.com/samsonjs).
### 1.5.2 (2018/03/14)
* [#76](https://github.com/ruby-grape/grape-active_model_serializers/pull/76): Add custom error formatter - [@xn](https://github.com/xn). * [#76](https://github.com/ruby-grape/grape-active_model_serializers/pull/76): Add custom error formatter - [@xn](https://github.com/xn).
### 1.5.1 (2017/04/25) ### 1.5.1 (April 25, 2017)
* [#74](https://github.com/ruby-grape/grape-active_model_serializers/pull/74): Add support for Sequel - [@drn](https://github.com/drn). * [#74](https://github.com/ruby-grape/grape-active_model_serializers/pull/74): Add support for Sequel - [@drn](https://github.com/drn).
* [#73](https://github.com/ruby-grape/grape-active_model_serializers/pull/73): Ensure all AMS options are passed through - [@drn](https://github.com/drn). * [#73](https://github.com/ruby-grape/grape-active_model_serializers/pull/73): Ensure all AMS options are passed through - [@drn](https://github.com/drn).
* [#65](https://github.com/ruby-grape/grape-active_model_serializers/pull/65): Added Danger, PR linter - [@dblock](https://github.com/dblock). * [#65](https://github.com/ruby-grape/grape-active_model_serializers/pull/65): Added Danger, PR linter - [@dblock](https://github.com/dblock).
* [#63](https://github.com/ruby-grape/grape-active_model_serializers/pull/63): Pass adapter options through render - [@drn](https://github.com/drn). * [#63](https://github.com/ruby-grape/grape-active_model_serializers/pull/63): Pass adapter options through render - [@drn](https://github.com/drn).
### 1.5.0 (2016/08/24) ### 1.5.0 (August 24, 2016)
* [#61](https://github.com/ruby-grape/grape-active_model_serializers/pull/61): Adds support for collection serializers - [@drn](https://github.com/drn). * [#61](https://github.com/ruby-grape/grape-active_model_serializers/pull/61): Adds support for collection serializers - [@drn](https://github.com/drn).
* [#60](https://github.com/ruby-grape/grape-active_model_serializers/pull/60): Namespace serializer inference - [@drn](https://github.com/drn). * [#60](https://github.com/ruby-grape/grape-active_model_serializers/pull/60): Namespace serializer inference - [@drn](https://github.com/drn).
@ -33,22 +19,22 @@
* [#57](https://github.com/ruby-grape/grape-active_model_serializers/pull/57): Solve line length linter issues - [@drn](https://github.com/drn). * [#57](https://github.com/ruby-grape/grape-active_model_serializers/pull/57): Solve line length linter issues - [@drn](https://github.com/drn).
* [#54](https://github.com/ruby-grape/grape-active_model_serializers/pull/54): Adding support for ASM v0.10. Drops support for ASM v0.9 - [@drn](https://github.com/drn). * [#54](https://github.com/ruby-grape/grape-active_model_serializers/pull/54): Adding support for ASM v0.10. Drops support for ASM v0.9 - [@drn](https://github.com/drn).
### 1.4.0 (2016/07/14) ### 1.4.0 (July 14, 2016)
* [#49](https://github.com/ruby-grape/grape-active_model_serializers/pull/49): Adds support for active model serializer namespace - [@syntaxTerr0r](https://github.com/syntaxTerr0r). * [#49](https://github.com/ruby-grape/grape-active_model_serializers/pull/49): Adds support for active model serializer namespace - [@syntaxTerr0r](https://github.com/syntaxTerr0r).
* [#36](https://github.com/ruby-grape/grape-active_model_serializers/pull/36), [#50](https://github.com/jrhe/grape-active_model_serializers/pull/50): Added support through Grape 0.16.x - [@dblock](https://github.com/dblock). * [#36](https://github.com/ruby-grape/grape-active_model_serializers/pull/36), [#50](https://github.com/jrhe/grape-active_model_serializers/pull/50): Added support through Grape 0.16.x - [@dblock](https://github.com/dblock).
### 1.3.2 (2015/02/27) ### v1.3.2 (February 27, 2015)
* [#40](https://github.com/ruby-grape/grape-active_model_serializers/pull/40): Use env to pass AMS meta around - [@dblock](https://github.com/dblock). * [#40](https://github.com/ruby-grape/grape-active_model_serializers/pull/40): Use env to pass AMS meta around - [@dblock](https://github.com/dblock).
* [#39](https://github.com/ruby-grape/grape-active_model_serializers/pull/39): Look for namespace and other options to configure serializers - [@jwkoelewijn](https://github.com/jwkoelewijn). * [#39](https://github.com/ruby-grape/grape-active_model_serializers/pull/39): Look for namespace and other options to configure serializers - [@jwkoelewijn](https://github.com/jwkoelewijn).
### 1.3.1 (2014/11/20) ### v1.3.1 (November 20, 2014)
* [#30](https://github.com/ruby-grape/grape-active_model_serializers/pull/30): Read options from default_serializer_options - [@siong1987](https://github.com/siong1987). * [#30](https://github.com/ruby-grape/grape-active_model_serializers/pull/30): Read options from default_serializer_options - [@siong1987](https://github.com/siong1987).
* [#24](https://github.com/ruby-grape/grape-active_model_serializers/pull/24): Makes it possible to use `current_user` within serializers - [@sonxurxo](https://github.com/sonxurxo). * [#24](https://github.com/ruby-grape/grape-active_model_serializers/pull/24): Makes it possible to use `current_user` within serializers - [@sonxurxo](https://github.com/sonxurxo).
### 1.2.1 (2014/07/23) ### v1.2.1 (July 23, 2014)
* [#21](https://github.com/ruby-grape/grape-active_model_serializers/pull/21): Correctly fetch serialization scope - [@radanskoric](https://github.com/radanskoric). * [#21](https://github.com/ruby-grape/grape-active_model_serializers/pull/21): Correctly fetch serialization scope - [@radanskoric](https://github.com/radanskoric).
* [#18](https://github.com/ruby-grape/grape-active_model_serializers/pull/18): Added support for active model serializer 0.9.x - [@sbounmy](https://github.com/sbounmy). * [#18](https://github.com/ruby-grape/grape-active_model_serializers/pull/18): Added support for active model serializer 0.9.x - [@sbounmy](https://github.com/sbounmy).
@ -58,12 +44,12 @@
* [#12](https://github.com/ruby-grape/grape-active_model_serializers/pull/12): Added support for `current_user` - [@kpassapk](https://github.com/kpassapk). * [#12](https://github.com/ruby-grape/grape-active_model_serializers/pull/12): Added support for `current_user` - [@kpassapk](https://github.com/kpassapk).
* [#11](https://github.com/ruby-grape/grape-active_model_serializers/pull/11): Fixed require path - [@schickling](https://github.com/schickling). * [#11](https://github.com/ruby-grape/grape-active_model_serializers/pull/11): Fixed require path - [@schickling](https://github.com/schickling).
### 1.0.1 (2013/09/09) ### v1.0.1 (September 9, 2013)
* [#6](https://github.com/ruby-grape/grape-active_model_serializers/pull/6): Conform to ActiveModel::Serializers way of determining array-ness - [@tfe](https://github.com/tfe). * [#6](https://github.com/ruby-grape/grape-active_model_serializers/pull/6): Conform to ActiveModel::Serializers way of determining array-ness - [@tfe](https://github.com/tfe).
* [#4](https://github.com/ruby-grape/grape-active_model_serializers/pull/4): Support for namespace options and rely more on active_model_serializers - [@johnallen3d](https://github.com/johnallen3d). * [#4](https://github.com/ruby-grape/grape-active_model_serializers/pull/4): Support for namespace options and rely more on active_model_serializers - [@johnallen3d](https://github.com/johnallen3d).
* [#1](https://github.com/ruby-grape/grape-active_model_serializers/pull/1): Fix: Grape::ActiveModelSerializers for models with compound names - [@george](https://github.com/george). * [#1](https://github.com/ruby-grape/grape-active_model_serializers/pull/1): Fix: Grape::ActiveModelSerializers for models with compound names - [@george](https://github.com/george).
### 1.0.0 (2013/09/09) ### v1.0.0
* Initial public release - [@jrhe](https://github.com/jrhe). * Initial public release - [@jrhe](https://github.com/jrhe).

15
Gemfile
View file

@ -2,7 +2,7 @@ source 'https://rubygems.org'
gemspec gemspec
case version = ENV['GRAPE_VERSION'] || '~> 3.0.0' case version = ENV['GRAPE_VERSION'] || '~> 1.0.0'
when 'HEAD' when 'HEAD'
gem 'grape', github: 'intridea/grape' gem 'grape', github: 'intridea/grape'
else else
@ -10,16 +10,7 @@ else
end end
group :test do group :test do
gem 'rack-test'
gem 'ruby-grape-danger', '~> 0.2.0', require: false
gem 'sequel', '~> 5.91', require: false
gem 'sqlite3' gem 'sqlite3'
end gem 'sequel', '~> 4.37', require: false
gem 'ruby-grape-danger', '~> 0.1.0', require: false
group :development, :test do
gem 'guard-rspec'
gem 'listen', '~> 3.9.0'
gem 'rake'
gem 'rspec'
gem 'rubocop', '1.75.7'
end end

View file

@ -1,29 +1,9 @@
# Table of Contents
- [Grape::ActiveModelSerializers](#grapeactivemodelserializers)
- [Installation](#installation)
- [Dependencies](#dependencies)
- [Usage](#usage)
- [Require grape-active_model_serializers](#require-grape-active_model_serializers)
- [Tell your API to use Grape::Formatter::ActiveModelSerializers](#tell-your-api-to-use-grapeformatteractivemodelserializers)
- [Writing Serializers](#writing-serializers)
- [Serializers are inferred by active_record model names](#serializers-are-inferred-by-active_record-model-names)
- [Array Roots](#array-roots)
- [API Versioning](#api-versioning)
- [Manually specifying serializer / adapter options](#manually-specifying-serializer--adapter-options)
- [Custom Metadata](#custom-metadata)
- [Default Serializer Options](#default-serializer-options)
- [Current User](#current-user)
- [Full Example](#full-example)
- [Contributing](#contributing)
- [History](#history)
# Grape::ActiveModelSerializers # Grape::ActiveModelSerializers
Use [active_model_serializers](https://github.com/rails-api/active_model_serializers) with [Grape](https://github.com/intridea/grape)! Use [active_model_serializers](https://github.com/rails-api/active_model_serializers) with [Grape](https://github.com/intridea/grape)!
[![Gem Version](https://badge.fury.io/rb/grape-active_model_serializers.svg)](https://badge.fury.io/rb/grape-active_model_serializers) [![Gem Version](https://badge.fury.io/rb/grape-active_model_serializers.svg)](https://badge.fury.io/rb/grape-active_model_serializers)
[![Build Status](https://github.com/ruby-grape/grape-active_model_serializers/actions/workflows/ci.yml/badge.svg)](https://github.com/ruby-grape/grape-active_model_serializers/actions/workflows/ci.yml) [![Code Climate](https://codeclimate.com/github/ruby-grape/grape-active_model_serializers.svg)](https://codeclimate.com/github/ruby-grape/grape-active_model_serializers) [![Build Status](https://api.travis-ci.org/ruby-grape/grape-active_model_serializers.svg)](http://travis-ci.org/ruby-grape/grape-active_model_serializers) [![Dependency Status](https://gemnasium.com/ruby-grape/grape-active_model_serializers.svg)](https://gemnasium.com/ruby-grape/grape-active_model_serializers) [![Code Climate](https://codeclimate.com/github/ruby-grape/grape-active_model_serializers.svg)](https://codeclimate.com/github/ruby-grape/grape-active_model_serializers)
## Installation ## Installation
@ -37,9 +17,9 @@ See [UPGRADING](UPGRADING.md) if you're upgrading from a previous version.
## Dependencies ## Dependencies
* >= Ruby v3.1 * >= Ruby v2.2
* >= [grape](https://github.com/ruby-grape/grape) v2.3.0 * >= [grape](https://github.com/intridea/grape) v0.8.0
* >= [active_model_serializers](https://github.com/rails-api/active_model_serializers) v0.10.0 * >= [active_model_serializers](https://github.com/rails-api/active_model_serializers) v0.10.0
## Usage ## Usage
@ -303,4 +283,4 @@ See [CONTRIBUTING](CONTRIBUTING.md).
## History ## History
Structured and based upon [grape-rabl](https://github.com/ruby-grape/grape-rabl). Structured and based upon [grape-rabl](https://github.com/LTe/grape-rabl).

View file

@ -11,12 +11,12 @@ bundle install
rake rake
``` ```
Check that the last build succeeded in [GitHub Actions](https://github.com/ruby-grape/grape-active_model_serializers/actions/workflows/ci.yml) for all supported platforms. Check that the last build succeeded in [Travis CI](https://travis-ci.org/ruby-grape/grape-active_model_serializers) for all supported platforms.
Change "Next Release" in [CHANGELOG.md](CHANGELOG.md) to the new version. Change "Next Release" in [CHANGELOG.md](CHANGELOG.md) to the new version.
``` ```
### 0.7.2 (2014/02/06) ### 0.7.2 (February 6, 2014)
``` ```
Remove the line with "Your contribution here.", since there will be no more contributions to this release. Remove the line with "Your contribution here.", since there will be no more contributions to this release.

3
Rakefile Executable file → Normal file
View file

@ -1,5 +1,4 @@
#!/usr/bin/env rake #!/usr/bin/env rake
require 'bundler/gem_tasks' require 'bundler/gem_tasks'
require 'rspec/core' require 'rspec/core'
@ -12,4 +11,4 @@ end
require 'rubocop/rake_task' require 'rubocop/rake_task'
RuboCop::RakeTask.new(:rubocop) RuboCop::RakeTask.new(:rubocop)
task default: %i[rubocop spec] task default: [:rubocop, :spec]

View file

@ -16,6 +16,13 @@ Gem::Specification.new do |gem|
gem.version = Grape::ActiveModelSerializers::VERSION gem.version = Grape::ActiveModelSerializers::VERSION
gem.licenses = ['MIT'] gem.licenses = ['MIT']
gem.add_dependency 'grape', '>= 2.3.0' gem.add_dependency 'grape', '>= 0.8.0'
gem.add_dependency 'active_model_serializers', '>= 0.10.0' gem.add_dependency 'active_model_serializers', '>= 0.10.0'
gem.add_development_dependency 'listen', '~> 3.0.7'
gem.add_development_dependency 'rspec'
gem.add_development_dependency 'rack-test'
gem.add_development_dependency 'rake'
gem.add_development_dependency 'guard-rspec'
gem.add_development_dependency 'rubocop', '0.41.2'
end end

View file

@ -32,7 +32,6 @@ module Grape
def serialization_scope def serialization_scope
return unless _serialization_scope return unless _serialization_scope
return unless respond_to?(_serialization_scope, true) return unless respond_to?(_serialization_scope, true)
send(_serialization_scope) send(_serialization_scope)
end end
end end
@ -51,10 +50,12 @@ module Grape
resources resources
end end
def default_serializer_options; end def default_serializer_options
end
def url_options; end def url_options
end
end end
Endpoint.include EndpointExtension Endpoint.send(:include, EndpointExtension)
end end

View file

@ -1,6 +1,8 @@
module Grape module Grape
module ErrorFormatter module ErrorFormatter
class ActiveModelSerializers < Base module ActiveModelSerializers
extend Base
class << self class << self
def call(message, backtrace, options = {}, env = nil, original_exception = nil) def call(message, backtrace, options = {}, env = nil, original_exception = nil)
message = present(message, env) if respond_to?(:present) message = present(message, env) if respond_to?(:present)

View file

@ -1,6 +1,6 @@
module Grape module Grape
module Formatter module Formatter
class ActiveModelSerializers module ActiveModelSerializers
class << self class << self
def call(resource, env) def call(resource, env)
options = build_options(resource, env) options = build_options(resource, env)

View file

@ -7,7 +7,7 @@ module Grape
end end
def options def options
@options ||= begin @options ||= (
options = endpoint_options options = endpoint_options
options[:scope] = endpoint unless options.key?(:scope) options[:scope] = endpoint unless options.key?(:scope)
options.merge!(default_root_options) unless options.key?(:root) options.merge!(default_root_options) unless options.key?(:root)
@ -15,7 +15,7 @@ module Grape
options.merge!(adapter_options) options.merge!(adapter_options)
options.merge!(extra_options) options.merge!(extra_options)
options options
end )
end end
private private
@ -49,7 +49,11 @@ module Grape
end end
def innermost_scope def innermost_scope
endpoint.inheritable_setting.namespace_stackable[:namespace]&.last if endpoint.respond_to?(:namespace_stackable)
endpoint.namespace_stackable(:namespace).last
else
endpoint.settings.peek[:namespace]
end
end end
def meta_options def meta_options
@ -69,7 +73,6 @@ module Grape
def extra_options def extra_options
options = env['ams_extra'] || {} options = env['ams_extra'] || {}
return options if options.is_a?(Hash) return options if options.is_a?(Hash)
raise 'Extra options must be a hash' raise 'Extra options must be a hash'
end end
end end

View file

@ -7,7 +7,7 @@ module Grape
end end
def serializer def serializer
serializer_class&.new(resource, serializer_options) serializer_class.new(resource, serializer_options) if serializer_class
end end
private private
@ -16,15 +16,12 @@ module Grape
def serializer_class def serializer_class
return @serializer_class if defined?(@serializer_class) return @serializer_class if defined?(@serializer_class)
@serializer_class = resource_defined_class
return nil if options.key?(:serializer) && options[:serializer].nil? @serializer_class ||= collection_class
@serializer_class ||= options[:serializer]
@serializer_class = resource_defined_class || @serializer_class ||= namespace_inferred_class
collection_class || @serializer_class ||= version_inferred_class
options[:serializer] || @serializer_class ||= resource_serializer_class
namespace_inferred_class ||
version_inferred_class ||
resource_serializer_class
end end
def serializer_options def serializer_options
@ -58,14 +55,12 @@ module Grape
def namespace_inferred_class def namespace_inferred_class
return nil unless options.key?(:for) return nil unless options.key?(:for)
namespace = options[:for].to_s.deconstantize namespace = options[:for].to_s.deconstantize
"#{namespace}::#{resource_serializer_klass}".safe_constantize "#{namespace}::#{resource_serializer_klass}".safe_constantize
end end
def version_inferred_class def version_inferred_class
return nil unless options.key?(:version) return nil unless options.key?(:version)
"#{version}::#{resource_serializer_klass}".safe_constantize "#{version}::#{resource_serializer_klass}".safe_constantize
end end

View file

@ -1,5 +1,5 @@
module Grape module Grape
module ActiveModelSerializers module ActiveModelSerializers
VERSION = '2.0.2'.freeze VERSION = '1.5.2'.freeze
end end
end end

View file

@ -5,7 +5,7 @@ describe 'Grape::EndpointExtension' do
subject do subject do
Grape::Endpoint.new( Grape::Endpoint.new(
Grape::Util::InheritableSetting.new, Grape::Util::InheritableSetting.new,
path: '/', path: '/',
method: 'foo' method: 'foo'
) )
end end
@ -27,7 +27,7 @@ describe 'Grape::EndpointExtension' do
describe '#render' do describe '#render' do
let(:env) { {} } let(:env) { {} }
let(:env_key) { nil } let(:env_key) {}
before do before do
allow(subject).to receive(:env).and_return(env) allow(subject).to receive(:env).and_return(env)

View file

@ -4,7 +4,7 @@ require 'grape-active_model_serializers/error_formatter'
describe Grape::ErrorFormatter::ActiveModelSerializers do describe Grape::ErrorFormatter::ActiveModelSerializers do
subject { Grape::ErrorFormatter::ActiveModelSerializers } subject { Grape::ErrorFormatter::ActiveModelSerializers }
let(:backtrace) { ['Line:1'] } let(:backtrace) { ['Line:1'] }
let(:options) { {} } let(:options) { Hash.new }
let(:env) { { 'api.endpoint' => app.endpoints.first } } let(:env) { { 'api.endpoint' => app.endpoints.first } }
let(:original_exception) { StandardError.new('oh noes!') } let(:original_exception) { StandardError.new('oh noes!') }

View file

@ -18,8 +18,8 @@ describe Grape::Formatter::ActiveModelSerializers do
{ {
user: { user: {
first_name: 'JR', first_name: 'JR',
last_name: 'HE', last_name: 'HE',
email: 'jrhe@github.com' email: 'jrhe@github.com'
} }
} }
end end

View file

@ -0,0 +1,4 @@
require 'spec_helper'
describe 'grape-active_model_serializers' do
end

View file

@ -12,7 +12,7 @@ describe Grape::ActiveModelSerializers::OptionsBuilder do
let(:env) { super().merge('ams_meta' => meta_options) } let(:env) { super().merge('ams_meta' => meta_options) }
let(:meta_options) { let(:meta_options) {
{ {
meta: meta, meta: meta,
meta_key: meta_key meta_key: meta_key
} }
} }

View file

@ -15,8 +15,8 @@ describe Grape::ActiveModelSerializers::SerializerResolver do
let(:options) { let(:options) {
{ {
serializer: options_serializer_class, # options defined serializer: options_serializer_class, # options defined
for: V4::UsersApi, # namespace inference for: V4::UsersApi, # namespace inference
version: 'v5' # version inference version: 'v5' # version inference
} }
} }
# resource defined # resource defined
@ -52,18 +52,6 @@ describe Grape::ActiveModelSerializers::SerializerResolver do
expect(serializer).to be_kind_of(serializer_class) expect(serializer).to be_kind_of(serializer_class)
end end
context 'specified nil by options' do
let(:options) {
super().merge(
serializer: nil
)
}
it 'returns nil' do
expect(serializer).to be_nil
end
end
context 'each serializer' do context 'each serializer' do
let(:options) { let(:options) {
super().except(:serializer).merge( super().except(:serializer).merge(

View file

@ -22,7 +22,6 @@ describe 'Sequel Integration' do
let!(:model) { let!(:model) {
SequelUser = Class.new(Sequel::Model(:users)) do SequelUser = Class.new(Sequel::Model(:users)) do
include ActiveModel::Serialization include ActiveModel::Serialization
def self.model_name def self.model_name
'User' 'User'
end end

View file

@ -42,8 +42,8 @@ describe Grape::ActiveModelSerializers do
app.get('/home') do app.get('/home') do
User.new( User.new(
first_name: 'JR', first_name: 'JR',
last_name: 'HE', last_name: 'HE',
email: 'contact@jrhe.co.uk' email: 'contact@jrhe.co.uk'
) )
end end
end end
@ -60,17 +60,17 @@ describe Grape::ActiveModelSerializers do
app.get('/users') do app.get('/users') do
user = User.new( user = User.new(
first_name: 'JR', first_name: 'JR',
last_name: 'HE', last_name: 'HE',
email: 'contact@jrhe.co.uk' email: 'contact@jrhe.co.uk'
) )
[user, user] [user, user]
end end
get '/users' get '/users'
expect(subject).to eq( expect(subject).to eq(
'{"users":[' \ '{"users":['\
'{"first_name":"JR","last_name":"HE"},' \ '{"first_name":"JR","last_name":"HE"},'\
'{"first_name":"JR","last_name":"HE"}' \ '{"first_name":"JR","last_name":"HE"}'\
']}' ']}'
) )
end end
@ -83,8 +83,8 @@ describe Grape::ActiveModelSerializers do
get '/home' get '/home'
expect(subject).to eq( expect(subject).to eq(
'{"blog_post":' \ '{"blog_post":'\
'{"title":"Grape AM::S Rocks!","body":"Really, it does."}' \ '{"title":"Grape AM::S Rocks!","body":"Really, it does."}'\
'}' '}'
) )
end end
@ -93,16 +93,16 @@ describe Grape::ActiveModelSerializers do
app.get('/blog_posts') do app.get('/blog_posts') do
blog_post = BlogPost.new( blog_post = BlogPost.new(
title: 'Grape AM::S Rocks!', title: 'Grape AM::S Rocks!',
body: 'Really, it does.' body: 'Really, it does.'
) )
[blog_post, blog_post] [blog_post, blog_post]
end end
get '/blog_posts' get '/blog_posts'
expect(subject).to eq( expect(subject).to eq(
'{"blog_posts":[' \ '{"blog_posts":['\
'{"title":"Grape AM::S Rocks!","body":"Really, it does."},' \ '{"title":"Grape AM::S Rocks!","body":"Really, it does."},'\
'{"title":"Grape AM::S Rocks!","body":"Really, it does."}' \ '{"title":"Grape AM::S Rocks!","body":"Really, it does."}'\
']}' ']}'
) )
end end
@ -132,9 +132,9 @@ describe Grape::ActiveModelSerializers do
get '/admin/jeff' get '/admin/jeff'
expect(subject).to eq( expect(subject).to eq(
'{"admin":[' \ '{"admin":['\
'{"first_name":"Jeff","last_name":null},' \ '{"first_name":"Jeff","last_name":null},'\
'{"first_name":"Jeff","last_name":null}' \ '{"first_name":"Jeff","last_name":null}'\
']}' ']}'
) )
end end
@ -149,9 +149,9 @@ describe Grape::ActiveModelSerializers do
get '/people' get '/people'
expect(subject).to eq( expect(subject).to eq(
'{"people":[' \ '{"people":['\
'{"first_name":"Jeff","last_name":null},' \ '{"first_name":"Jeff","last_name":null},'\
'{"first_name":"Jeff","last_name":null}' \ '{"first_name":"Jeff","last_name":null}'\
']}' ']}'
) )
end end

View file

@ -15,4 +15,4 @@ RSpec.configure do |config|
config.include Rack::Test::Methods config.include Rack::Test::Methods
end end
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].sort.each { |f| require f } Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }