Skip to content

Commit

Permalink
fix(helpers): handle nil case in serialize resource
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolasguridi committed Aug 18, 2023
1 parent 9aa6363 commit 03a3325
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 4 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).

### Unreleased

* Fix: add `nil` handling in the `serialize_resource` view helper.

### v2.1.0

* Swagger has been deleted from the Exposed Api version.
Expand Down
14 changes: 10 additions & 4 deletions app/helpers/power_api/application_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ module ApplicationHelper

def serialize_resource(resource, options = {})
load_default_serializer_options(options)
serializable = ActiveModelSerializers::SerializableResource.new(resource, options)
serialized_data = serializable.serializable_hash
serialized_data = serialize_data(resource, options)
render_serialized_data(serialized_data, options)
rescue NoMethodError => e
if e.message.include?("undefined method `serializable_hash'")
Expand All @@ -19,12 +18,19 @@ def serialize_resource(resource, options = {})

private

def serialize_data(resource, options)
return {} if resource.nil?

serializable = ActiveModelSerializers::SerializableResource.new(resource, options)
serializable.serializable_hash
end

def render_serialized_data(serialized_data, options)
output_format = options.delete(:output_format)
serialized_data = serialized_data[:root] if options[:root] == :root
serialized_data = serialized_data.fetch(:root, serialized_data)
return serialized_data if output_format == :hash

serialized_data.to_json
serialized_data.presence.to_json
end

def load_default_serializer_options(options)
Expand Down
14 changes: 14 additions & 0 deletions spec/dummy/spec/helpers/power_api/application_helper_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,13 @@ def data
it { expect(data).to eq(expected_serialized_data) }
end

context "with nil resource" do
let(:resource) { nil }
let(:expected_serialized_data) { "null" }

it { expect(data).to eq(expected_serialized_data) }
end

context "with invalid resource" do
let(:resource) do
{ invalid: "resource" }
Expand Down Expand Up @@ -130,6 +137,13 @@ def data

it { expect(data).to eq(expected_serialized_data) }
end

context "with nil resource" do
let(:resource) { nil }
let(:expected_serialized_data) { {} }

it { expect(data).to eq(expected_serialized_data) }
end
end

context "with invalid output option" do
Expand Down

0 comments on commit 03a3325

Please sign in to comment.