Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
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: 3.4.4
- 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: [3.4.4, 3.3.8, 3.2.8, 3.1.7]
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby-version }}
- name: Install dependencies
run: bundle install --jobs 4 --retry 3
- name: Run tests
run: bundle exec rake
4 changes: 4 additions & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ AllCops:
Exclude:
- Guardfile
- grape-active_model_serializers.gemspec
NewCops: enable

Style/BlockDelimiters:
Enabled: false

Style/FrozenStringLiteralComment:
Enabled: false
8 changes: 6 additions & 2 deletions .rubocop_todo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Bundler/DuplicatedGem:

# Offense count: 1
Metrics/AbcSize:
Max: 17
Max: 18

# Offense count: 23
# Configuration parameters: CountComments, ExcludedMethods.
Expand Down Expand Up @@ -63,5 +63,9 @@ Style/GuardClause:
# Offense count: 2
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
# URISchemes: http, https
Metrics/LineLength:
Layout/LineLength:
Max: 87

Lint/ConstantDefinitionInBlock:
Exclude:
- spec/integration/sequel_spec.rb
39 changes: 0 additions & 39 deletions .travis.yml

This file was deleted.

22 changes: 12 additions & 10 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,44 +1,46 @@
## Changelog

### 1.5.3 (Next)
### 2.0.0 (Next)

* [#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).
* Your contribution here.

### 1.5.2 (March 14, 2018)
### 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).

### 1.5.1 (April 25, 2017)
### 1.5.1 (2017/04/25)

* [#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).
* [#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).

### 1.5.0 (August 24, 2016)
### 1.5.0 (2016/08/24)

* [#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).
* [#59](https://github.com/ruby-grape/grape-active_model_serializers/pull/59): Refactor option and serializer resolution - [@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).

### 1.4.0 (July 14, 2016)
### 1.4.0 (2016/07/14)

* [#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).

### v1.3.2 (February 27, 2015)
### 1.3.2 (2015/02/27)

* [#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).

### v1.3.1 (November 20, 2014)
### 1.3.1 (2014/11/20)

* [#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).

### v1.2.1 (July 23, 2014)
### 1.2.1 (2014/07/23)

* [#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).
Expand All @@ -48,12 +50,12 @@
* [#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).

### v1.0.1 (September 9, 2013)
### 1.0.1 (2013/09/09)

* [#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).
* [#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).

### v1.0.0
### 1.0.0 (2013/09/09)

* Initial public release - [@jrhe](https://github.com/jrhe).
10 changes: 5 additions & 5 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ source 'https://rubygems.org'

gemspec

case version = ENV['GRAPE_VERSION'] || '~> 1.0.0'
case version = ENV['GRAPE_VERSION'] || '~> 2.3.0'
when 'HEAD'
gem 'grape', github: 'intridea/grape'
else
Expand All @@ -11,15 +11,15 @@ end

group :test do
gem 'rack-test'
gem 'ruby-grape-danger', '~> 0.1.0', require: false
gem 'sequel', '~> 4.37', require: false
gem 'ruby-grape-danger', '~> 0.2.0', require: false
gem 'sequel', '~> 5.91', require: false
gem 'sqlite3'
end

group :development, :test do
gem 'guard-rspec'
gem 'listen', '~> 3.0.7'
gem 'listen', '~> 3.9.0'
gem 'rake'
gem 'rspec'
gem 'rubocop', '0.53.0'
gem 'rubocop', '1.75.7'
end
26 changes: 23 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,29 @@
# 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

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)
[![Build Status](https://api.travis-ci.org/ruby-grape/grape-active_model_serializers.svg)](http://travis-ci.org/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)
[![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)

## Installation

Expand All @@ -17,8 +37,8 @@ See [UPGRADING](UPGRADING.md) if you're upgrading from a previous version.

## Dependencies

* >= Ruby v2.2
* >= [grape](https://github.com/ruby-grape/grape) v0.8.0
* >= Ruby v3.1
* >= [grape](https://github.com/ruby-grape/grape) v2.3.0
* >= [active_model_serializers](https://github.com/rails-api/active_model_serializers) v0.10.0

## Usage
Expand Down
1 change: 1 addition & 0 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#!/usr/bin/env rake

require 'bundler/gem_tasks'

require 'rspec/core'
Expand Down
2 changes: 1 addition & 1 deletion grape-active_model_serializers.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ Gem::Specification.new do |gem|
gem.version = Grape::ActiveModelSerializers::VERSION
gem.licenses = ['MIT']

gem.add_dependency 'grape', '>= 0.8.0'
gem.add_dependency 'grape', '>= 2.3.0'
gem.add_dependency 'active_model_serializers', '>= 0.10.0'
end
3 changes: 2 additions & 1 deletion lib/grape-active_model_serializers/endpoint_extension.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ def self.included(base)
def serialization_scope
return unless _serialization_scope
return unless respond_to?(_serialization_scope, true)

send(_serialization_scope)
end
end
Expand All @@ -55,5 +56,5 @@ def default_serializer_options; end
def url_options; end
end

Endpoint.send(:include, EndpointExtension)
Endpoint.include EndpointExtension
end
4 changes: 1 addition & 3 deletions lib/grape-active_model_serializers/error_formatter.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
module Grape
module ErrorFormatter
module ActiveModelSerializers
extend Base

class ActiveModelSerializers < Base
class << self
def call(message, backtrace, options = {}, env = nil, original_exception = nil)
message = present(message, env) if respond_to?(:present)
Expand Down
2 changes: 1 addition & 1 deletion lib/grape-active_model_serializers/formatter.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module Grape
module Formatter
module ActiveModelSerializers
class ActiveModelSerializers
class << self
def call(resource, env)
options = build_options(resource, env)
Expand Down
1 change: 1 addition & 0 deletions lib/grape-active_model_serializers/options_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ def adapter_options
def extra_options
options = env['ams_extra'] || {}
return options if options.is_a?(Hash)

raise 'Extra options must be a hash'
end
end
Expand Down
5 changes: 4 additions & 1 deletion lib/grape-active_model_serializers/serializer_resolver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ def initialize(resource, options)
end

def serializer
serializer_class.new(resource, serializer_options) if serializer_class
serializer_class&.new(resource, serializer_options)
end

private
Expand All @@ -16,6 +16,7 @@ def serializer

def serializer_class
return @serializer_class if defined?(@serializer_class)

@serializer_class = resource_defined_class
@serializer_class ||= collection_class
@serializer_class ||= options[:serializer]
Expand Down Expand Up @@ -55,12 +56,14 @@ def collection_class

def namespace_inferred_class
return nil unless options.key?(:for)

namespace = options[:for].to_s.deconstantize
"#{namespace}::#{resource_serializer_klass}".safe_constantize
end

def version_inferred_class
return nil unless options.key?(:version)

"#{version}::#{resource_serializer_klass}".safe_constantize
end

Expand Down
2 changes: 1 addition & 1 deletion lib/grape-active_model_serializers/version.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module Grape
module ActiveModelSerializers
VERSION = '1.5.3'.freeze
VERSION = '2.0.0'.freeze
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
subject do
Grape::Endpoint.new(
Grape::Util::InheritableSetting.new,
path: '/',
path: '/',
method: 'foo'
)
end
Expand All @@ -27,7 +27,7 @@ def name

describe '#render' do
let(:env) { {} }
let(:env_key) {}
let(:env_key) { nil }

before do
allow(subject).to receive(:env).and_return(env)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
{
user: {
first_name: 'JR',
last_name: 'HE',
email: 'jrhe@github.com'
last_name: 'HE',
email: 'jrhe@github.com'
}
}
end
Expand Down
4 changes: 0 additions & 4 deletions spec/grape-active_model_serializers_spec.rb

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
let(:env) { super().merge('ams_meta' => meta_options) }
let(:meta_options) {
{
meta: meta,
meta: meta,
meta_key: meta_key
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
let(:options) {
{
serializer: options_serializer_class, # options defined
for: V4::UsersApi, # namespace inference
version: 'v5' # version inference
for: V4::UsersApi, # namespace inference
version: 'v5' # version inference
}
}
# resource defined
Expand Down
Loading