Sha256: cad30e62485a01207e2ebaaac024b32e9107e29ad8cd91e910660bdb039f27fc
Contents?: true
Size: 1.3 KB
Versions: 18
Compression:
Stored size: 1.3 KB
Contents
module WithTermsAcceptance def has_forum_terms_to_accept? !has_accepted_all?(forum_terms) end def has_profile_terms_to_accept? !has_accepted_all?(profile_terms) end def has_role_terms_to_accept? !has_accepted_all?(role_specific_terms) end def role_specific_terms @role_specific_terms ||= Term.role_specific_terms_for(self) end def forum_terms @forum_terms ||= Term.forum_related_terms end def profile_terms @profile_terms ||= Term.profile_terms_for(self) end def accept_profile_terms! accept_terms! profile_terms end def accept_forum_terms! accept_terms! forum_terms end def has_accepted?(term) term_accepted_at_for(term.scope).try { |it| it > term.updated_at }.present? end private def unaccepted_terms_in(terms) terms.reject { |term| has_accepted? term} end def unaccepted_terms_scopes_in(terms) unaccepted_terms_in(terms).map(&:scope) end def has_accepted_all?(terms) unaccepted_terms_in(terms).blank? end def term_accepted_at_for(role) send term_acceptance_field_for(role) end def term_acceptance_field_for(role) "#{role}_terms_accepted_at" end def accept_terms!(terms) update! unaccepted_terms_scopes_in(terms).to_h { |scope| [term_acceptance_field_for(scope), Time.current] } end end
Version data entries
18 entries across 18 versions & 1 rubygems