From bad411134605e9a99844d82d72035e21e348967d Mon Sep 17 00:00:00 2001 From: Florian Dejonckheere Date: Thu, 11 Aug 2022 09:47:48 +0200 Subject: [PATCH] Let subclassed serializers inherit attributes from the superclass --- lib/cache_crispies/base.rb | 2 +- spec/cache_crispies/base_spec.rb | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/cache_crispies/base.rb b/lib/cache_crispies/base.rb index 88705e5..1529126 100644 --- a/lib/cache_crispies/base.rb +++ b/lib/cache_crispies/base.rb @@ -15,7 +15,7 @@ class Base # @param other [Class] the inheriting child class # @return [void] def self.inherited(other) - other.instance_variable_set(:@attributes, []) + other.instance_variable_set(:@attributes, @attributes.dup || []) other.instance_variable_set(:@nesting, []) other.instance_variable_set(:@conditions, []) end diff --git a/spec/cache_crispies/base_spec.rb b/spec/cache_crispies/base_spec.rb index 14b1dbc..b15ab9a 100644 --- a/spec/cache_crispies/base_spec.rb +++ b/spec/cache_crispies/base_spec.rb @@ -2,10 +2,17 @@ require 'ostruct' describe CacheCrispies::Base do - class NutritionSerializer < CacheCrispies::Base + class CaloriesSerializer < CacheCrispies::Base serialize :calories end + class NutritionSerializer < CaloriesSerializer + serialize :fat, + :carbohydrates, + :sodium, + :protein + end + class CacheCrispiesTestSerializer < CacheCrispies::Base serialize :id, :company, to: String @@ -45,7 +52,7 @@ def visible? brand: 'Cookie Crisp', company: 'General Mills', deeply_nested: true, - nutrition_info: OpenStruct.new(calories: 1_000), + nutrition_info: OpenStruct.new(calories: 1_000, fat: 20, carbohydrates: 60, sodium: 30, protein: 10), organic: 'true', legal: OpenStruct.new(parent_company: 'Disney probably') ) @@ -67,7 +74,11 @@ def visible? } }, nutrition_info: { - calories: 1000 + calories: 1000, + fat: 20, + carbohydrates: 60, + sodium: 30, + protein: 10 }, organic: true, parent_company: 'Disney probably'