class Consent::Rspec::ConsentView

@private

Public Class Methods

new(view_key, conditions) click to toggle source
# File lib/consent/rspec/consent_view.rb, line 7
def initialize(view_key, conditions)
  @conditions = comparable_conditions(conditions) if conditions
  @view_key = view_key
end

Public Instance Methods

description() click to toggle source
# File lib/consent/rspec/consent_view.rb, line 17
def description
  message = "consents view #{@view_key}"
  "#{message} with conditions #{@conditions}" if @conditions
end
failure_message() click to toggle source
# File lib/consent/rspec/consent_view.rb, line 38
def failure_message
  failure_message_base 'to'
end
failure_message_when_negated() click to toggle source
# File lib/consent/rspec/consent_view.rb, line 42
def failure_message_when_negated
  failure_message_base 'to not'
end
matches?(subject_key) click to toggle source
# File lib/consent/rspec/consent_view.rb, line 27
def matches?(subject_key)
  @subject_key = subject_key
  @target = Consent.find_subjects(subject_key)
                   .map do |subject|
                     subject.views[@view_key]&.conditions(*@context)
                   end
                   .compact
                   .map(&method(:comparable_conditions))
  @target.include?(@conditions)
end
to(*context) click to toggle source
# File lib/consent/rspec/consent_view.rb, line 12
def to(*context)
  @context = context
  self
end
with_conditions(conditions) click to toggle source
# File lib/consent/rspec/consent_view.rb, line 22
def with_conditions(conditions)
  @conditions = comparable_conditions(conditions)
  self
end

Private Instance Methods

comparable_conditions(conditions) click to toggle source
# File lib/consent/rspec/consent_view.rb, line 48
def comparable_conditions(conditions)
  return conditions.to_sql if conditions.respond_to?(:to_sql)

  conditions
end
failure_message_base(failure) click to toggle source
# File lib/consent/rspec/consent_view.rb, line 54
def failure_message_base(failure) # rubocop:disable Metrics/MethodLength
  message = format(
    'expected %<skey>s (%<sclass>s) %<fail>s provide view %<view>s with`\
    `%<conditions>p, but',
    skey: @subject_key.to_s, sclass: @subject_key.class,
    view: @view_key, conditions: @conditions, fail: failure
  )

  if @target.any?
    format(
      '%<message>s conditions are %<conditions>p',
      message: message, conditions: @target
    )
  else
    actual_views = Consent.find_subjects(subject_key)
                          .map(&:views)
                          .map(&:keys).flatten
    format(
      '%<message>s available views are %<views>p',
      message: message, views: actual_views
    )
  end
end