Sha256: c4d4b6e92f61325eb7f9b62f3719ba71f27d3aa8fb68c8095168ec756985dfeb

Contents?: true

Size: 1.29 KB

Versions: 31

Compression:

Stored size: 1.29 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.now] }
  end

end

Version data entries

31 entries across 31 versions & 1 rubygems

Version Path
mumuki-domain-9.8.1 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.8.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.7.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.6.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.5.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.4.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.3.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.2.1 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.2.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.1.2 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.1.1 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.1.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.0.6 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.0.5 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.0.4 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.0.3 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.0.2 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-9.0.0 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-8.6.1 app/models/concerns/with_terms_acceptance.rb
mumuki-domain-8.6.0 app/models/concerns/with_terms_acceptance.rb