diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d6cba9..4274e08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### 1.5.1 (Next) * Your contribution here. +* [#74](https://github.com/ruby-grape/grape-active_model_serializers/pull/74): Add support for Sequel - [@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). diff --git a/Gemfile b/Gemfile index 1423961..5ebdb78 100644 --- a/Gemfile +++ b/Gemfile @@ -10,5 +10,7 @@ else end group :test do + gem 'sqlite3' + gem 'sequel', '~> 4.37', require: false gem 'ruby-grape-danger', '~> 0.1.0', require: false end diff --git a/spec/integration/sequel_spec.rb b/spec/integration/sequel_spec.rb new file mode 100644 index 0000000..e2d6d4b --- /dev/null +++ b/spec/integration/sequel_spec.rb @@ -0,0 +1,68 @@ +require 'sequel' +require 'spec_helper' + +describe 'Sequel Integration' do + before do + DB = Sequel.sqlite unless defined?(DB) + DB.create_table(:users) do + primary_key :id + String :name + end + ActiveModelSerializers.config.adapter = :json + app.format :json + app.formatter :json, Grape::Formatter::ActiveModelSerializers + end + + after do + DB.drop_table(:users) + Object.send(:remove_const, :SequelUser) + Object.send(:remove_const, :SequelUserSerializer) + end + + let!(:model) { + SequelUser = Class.new(Sequel::Model(:users)) do + include ActiveModel::Serialization + def self.model_name + 'User' + end + end + } + let!(:serializer) { + SequelUserSerializer = Class.new(ActiveModel::Serializer) do + attributes :id, :name + end + } + let(:app) { Class.new(Grape::API) } + + context 'collection' do + let!(:users) { + [ + model.create(name: 'one'), + model.create(name: 'two') + ] + } + + it 'renders' do + app.get('/users') { render SequelUser.dataset } + response = get '/users' + expect(JSON.parse(response.body)).to eq( + 'users' => [ + { 'id' => 1, 'name' => 'one' }, + { 'id' => 2, 'name' => 'two' } + ] + ) + end + end + + context 'member' do + let!(:user) { model.create(name: 'name') } + + it 'renders' do + app.get('/user/1') { render SequelUser.first } + response = get '/user/1' + expect(JSON.parse(response.body)).to eq( + 'user' => { 'id' => 1, 'name' => 'name' } + ) + end + end +end