diff --git a/app/models/concerns/viewable_model.rb b/app/models/concerns/viewable_model.rb index edff8a036..bfbb3afc0 100644 --- a/app/models/concerns/viewable_model.rb +++ b/app/models/concerns/viewable_model.rb @@ -3,14 +3,23 @@ module ViewableModel extend ActiveSupport::Concern + included do + has_many :view_states, as: :viewable, dependent: :destroy + end + # This module requres that the class which includes it implements these methods: # => default_view_state, returning hash with default state representation # => validate_view_state(view_state), custom validator for the state hash - included do - has_many :view_states, as: :viewable, dependent: :destroy + def default_view_state + raise NotImplementedError, 'default_view_state should be implemented!' end + def validate_view_state(view_state) + raise NotImplementedError, 'validate_view_state(view_state) should be implemented!' + end + + def current_view_state(user) state = view_states.where(user: user).take state || view_states.create!(user: user, state: default_view_state)