Skip to content

Commit 212d600

Browse files
author
Lee Richmond
committed
Move to jsonapi-serializable
1 parent 0a4aabc commit 212d600

File tree

6 files changed

+21
-19
lines changed

6 files changed

+21
-19
lines changed

jsonapi_errorable.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
1919
spec.require_paths = ["lib"]
2020

2121
spec.add_dependency 'rails', [">= 4.1", "< 6"]
22-
spec.add_dependency 'active_model_serializers', '~> 0.10'
22+
spec.add_dependency 'jsonapi-serializable', '~> 0.1'
2323

2424
spec.add_development_dependency "bundler", "~> 1.11"
2525
spec.add_development_dependency "rake", "~> 10.0"

lib/jsonapi_errorable.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
require 'active_model_serializers'
1+
require 'jsonapi/serializable'
2+
23
require 'jsonapi_errorable/version'
34
require 'jsonapi_errorable/exception_handler'
45
require 'jsonapi_errorable/validatable'
5-
require 'jsonapi_errorable/serializers/validation_serializer'
6+
require 'jsonapi_errorable/serializers/serializable_validation'
67

78
module JsonapiErrorable
89
def self.included(klass)
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,32 @@
11
module JsonapiErrorable
22
module Serializers
3-
class ValidationSerializer < ActiveModel::Serializer
4-
attribute :errors
3+
class SerializableValidation < JSONAPI::Serializable::Resource
4+
type :validation_errors
55

6-
def errors
7-
object.errors.to_hash.map do |attribute, messages|
6+
attribute :errors do
7+
@object.errors.to_hash.map do |attribute, messages|
88
messages.map do |message|
99
{
1010
code: 'unprocessable_entity',
1111
status: '422',
1212
title: 'Validation Error',
1313
detail: "#{attribute.capitalize} #{message}",
14-
source: { pointer: pointer_for(object, attribute) },
14+
source: { pointer: pointer_for(@object, attribute) },
1515
meta: { attribute: attribute, message: message }
1616
}
1717
end
1818
end.flatten
1919
end
2020

21-
def activerecord?
22-
object.is_a?(ActiveRecord::Base)
23-
end
24-
2521
def relationship?(name)
2622
return false unless activerecord?
2723

28-
relation_names = object.class.reflect_on_all_associations.map(&:name)
24+
relation_names = @object.class.reflect_on_all_associations.map(&:name)
2925
relation_names.include?(name)
3026
end
3127

3228
def attribute?(name)
33-
object.respond_to?(name)
29+
@object.respond_to?(name)
3430
end
3531

3632
private
@@ -45,6 +41,10 @@ def pointer_for(object, name)
4541
"/data/relationships/#{name}"
4642
end
4743
end
44+
45+
def activerecord?
46+
object.is_a?(ActiveRecord::Base)
47+
end
4848
end
4949
end
5050
end

lib/jsonapi_errorable/validatable.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ def render_errors_for(record)
44
render \
55
json: record,
66
status: :unprocessable_entity,
7-
serializer: Serializers::ValidationSerializer,
7+
serializer: Serializers::SerializableValidation,
88
adapter: :attributes
99
end
1010
end

spec/serializers/validation_serializer_spec.rb renamed to spec/serializers/serializable_validation_spec.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
require 'spec_helper'
22

3-
RSpec.describe JsonapiErrorable::Serializers::ValidationSerializer do
3+
RSpec.describe JsonapiErrorable::Serializers::SerializableValidation do
44
let(:errors_hash) { { username: ["can't be blank"] } }
55

6-
let(:object) { double.as_null_object }
7-
let(:instance) { described_class.new(object) }
6+
let(:object) { double(id: 123).as_null_object }
7+
let(:instance) { described_class.new(object: object) }
88

99
before do
1010
allow(instance).to receive(:activerecord?) { true }
@@ -15,7 +15,7 @@
1515
end
1616

1717
describe '#errors' do
18-
subject { instance.errors }
18+
subject { instance.as_jsonapi[:attributes][:errors] }
1919

2020
before do
2121
allow(object).to receive(:respond_to?).with(:username) { true }

spec/spec_helper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
require 'jsonapi_errorable'
99

1010
require File.expand_path("../support/basic_rails_app.rb", __FILE__)
11+
require "action_controller/railtie"
1112
require 'rspec/rails'
1213
Rails.application = BasicRailsApp.generate
1314

0 commit comments

Comments
 (0)