class Riddler::UseCases::ShowSlug

Attributes

content_definition_repo[R]
context_director[R]
interaction[R]
interaction_class[R]
interaction_repo[R]
slug[R]
slug_name[R]
slug_repo[R]

Public Class Methods

new(content_definition_repo:, slug_repo:, interaction_repo:, interaction_class:, slug_name:, params: {}) click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 7
def initialize content_definition_repo:, slug_repo:, interaction_repo:,
  interaction_class:, slug_name:, params: {}, headers: {}

  @content_definition_repo = content_definition_repo
  @slug_repo = slug_repo
  @interaction_repo = interaction_repo
  @interaction_class = interaction_class
  @context_director = ::Riddler::ContextDirector.new params: params, headers: headers
  @slug_name = slug_name
  @slug = lookup_slug
end

Public Instance Methods

completed?() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 35
def completed?
  return false unless slug_defines_identity?
  find_interaction
  return false if @interaction.nil?
  @interaction.status == "COMPLETED"
end
dismissed?() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 28
def dismissed?
  return false unless slug_defines_identity?
  find_interaction
  return false if @interaction.nil?
  @interaction.status == "DISMISSED"
end
excluded?() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 46
def excluded?
  definition_use_case.excluded?
end
exists?() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 19
def exists?
  !slug.nil?
end
paused?() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 23
def paused?
  return true if slug.nil?
  slug.status == "PAUSED"
end
process() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 50
def process
  find_interaction || create_interaction
  context.assign "interaction", interaction.to_hash

  content_hash = definition_use_case.process.merge \
    interaction_id: interaction.id,
    dismiss_url: "/interactions/#{interaction.id}/dismiss"

  interaction.content_type = content_hash[:content_type]
  interaction.content_id = content_hash[:id]

  interaction_repo.update interaction

  content_hash
end
targeted?() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 42
def targeted?
  slug_targeted?
end

Private Instance Methods

blank_interaction_identity() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 108
def blank_interaction_identity
  @blank_interaction_identity ||= ::Riddler::Context.new.render slug.interaction_identity
end
context() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 95
def context
  context_director.context
end
create_interaction() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 75
def create_interaction
  @interaction = interaction_class.new \
    slug_name: slug.name,
    slug_id: slug.id,
    status: "ACTIVE",
    content_definition_id: slug.content_definition_id,
    identifiers: context.ids

  @interaction.identity = identity if request_is_unique?

  interaction_repo.create interaction
end
definition_use_case() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 88
def definition_use_case
  @definition_use_case ||= ShowContentDefinition.new \
    content_definition_repo: content_definition_repo,
    content_definition_id: slug.content_definition_id,
    context_director: context_director
end
find_interaction() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 68
def find_interaction
  return nil unless request_is_unique?

  @interaction ||= interaction_repo.last_by slug_id: slug.id,
    identity: identity
end
identity() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 104
def identity
  @identity ||= simple_context.render slug.interaction_identity
end
interaction_identity_is_blank?() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 116
def interaction_identity_is_blank?
  identity == blank_interaction_identity
end
lookup_slug() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 124
def lookup_slug
  slug_repo.find_by name: slug_name
end
request_is_unique?() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 112
def request_is_unique?
  slug_defines_identity? && !interaction_identity_is_blank?
end
simple_context() click to toggle source

Only has IDs extracted - context builders have not been processed

# File lib/riddler/use_cases/show_slug.rb, line 100
def simple_context
  context_director.simple_context
end
slug_defines_identity?() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 120
def slug_defines_identity?
  !(slug.interaction_identity.nil? || slug.interaction_identity == "")
end
slug_has_target_predicate?() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 133
def slug_has_target_predicate?
  slug.target_predicate.to_s.strip != ""
end
slug_targeted?() click to toggle source
# File lib/riddler/use_cases/show_slug.rb, line 128
def slug_targeted?
  return true unless slug_has_target_predicate?
  Predicator.evaluate slug.target_predicate, context.to_liquid
end