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

Version Path
mumuki-domain-9.23.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.22.1 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.22.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.21.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.20.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.19.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.18.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.17.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.16.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.15.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.14.1 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.14.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.13.1 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.13.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.12.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.11.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.10.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.9.0 app/models/concerns/with_terms_acceptance.rb