Skip to content

Commit de888c0

Browse files
committed
[*] Records Display - Restrict record data serialization based the schema collection fields in the #create and #update actions
1 parent 31afb96 commit de888c0

File tree

5 files changed

+31
-10
lines changed

5 files changed

+31
-10
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Change Log
22

33
## [Unreleased]
4+
### Fixed
5+
- Records Display - Restrict record data serialization based the schema collection fields in the #create and #update actions.
46

57
## RELEASE 2.15.7 - 2019-02-28
68
### Fixed

app/controllers/forest_liana/resources_controller.rb

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def show
8383
getter = ForestLiana::ResourceGetter.new(@resource, params)
8484
getter.perform
8585

86-
render serializer: nil, json: render_record_jsonapi(getter)
86+
render serializer: nil, json: render_record_jsonapi(getter.record)
8787
rescue => error
8888
FOREST_LOGGER.error "Record Show error: #{error}\n#{format_stacktrace(error)}"
8989
internal_server_error
@@ -102,8 +102,7 @@ def create
102102
render serializer: nil, json: JSONAPI::Serializer.serialize_errors(
103103
creator.errors), status: 400
104104
elsif creator.record.valid?
105-
render serializer: nil,
106-
json: serialize_model(get_record(creator.record), include: record_includes)
105+
render serializer: nil, json: render_record_jsonapi(creator.record)
107106
else
108107
render serializer: nil, json: JSONAPI::Serializer.serialize_errors(
109108
creator.record.errors), status: 400
@@ -126,8 +125,7 @@ def update
126125
render serializer: nil, json: JSONAPI::Serializer.serialize_errors(
127126
updater.errors), status: 400
128127
elsif updater.record.valid?
129-
render serializer: nil,
130-
json: serialize_model(get_record(updater.record), include: record_includes)
128+
render serializer: nil, json: render_record_jsonapi(updater.record)
131129
else
132130
render serializer: nil, json: JSONAPI::Serializer.serialize_errors(
133131
updater.record.errors), status: 400
@@ -188,14 +186,15 @@ def get_record record
188186
is_sti_model? ? record.becomes(@resource) : record
189187
end
190188

191-
def render_record_jsonapi getter
192-
collection_fields = getter.collection.fields.map { |field| field[:field] }
189+
def render_record_jsonapi record
190+
collection = ForestLiana::SchemaHelper.find_collection_from_model(@resource)
191+
collection_fields = collection.fields.map { |field| field[:field] }
193192
fields_to_serialize = {
194193
ForestLiana.name_for(@resource) => collection_fields.join(',')
195194
}
196195

197-
serialize_model(get_record(getter.record), {
198-
include: includes(getter),
196+
serialize_model(get_record(record), {
197+
include: record_includes,
199198
fields: fields_to_serialize
200199
})
201200
end
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module ForestLiana
2+
module SchemaHelper
3+
def self.find_collection_from_model(active_record_class)
4+
collection_name = ForestLiana.name_for(active_record_class)
5+
ForestLiana.apimap.find { |collection| collection.name.to_s == collection_name }
6+
end
7+
end
8+
end

app/services/forest_liana/resource_getter.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
module ForestLiana
22
class ResourceGetter < BaseGetter
33
attr_accessor :record
4-
attr_reader :collection
54

65
def initialize(resource, params)
76
@resource = resource
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module ForestLiana
2+
describe SchemaHelper do
3+
describe '#find_collection_from_model' do
4+
context 'on a simple model' do
5+
it 'should return the schema collection related to the model' do
6+
collection = SchemaHelper.find_collection_from_model(User)
7+
expect(collection.class).to eq(ForestLiana::Model::Collection)
8+
expect(collection.name).to eq('User')
9+
end
10+
end
11+
end
12+
end
13+
end

0 commit comments

Comments
 (0)