# frozen_string_literal: true module Quby module Questionnaires module Entities class QuestionOption include ::Quby::InspectExcept.new(:@question, :@questions) MARKDOWN_ATTRIBUTES = %w(description).freeze attr_reader :key attr_reader :value attr_reader :description attr_reader :questions attr_reader :inner_title attr_reader :hides_questions attr_reader :shows_questions attr_reader :hidden attr_reader :placeholder attr_reader :question attr_reader :view_id attr_reader :input_key def initialize(key, question, options = {}) @key = key @question = question @value = options[:value] @description = options[:description] @context_free_description = options[:context_free_description] @questions = [] @inner_title = options[:inner_title] @hides_questions = options[:hides_questions] || [] @shows_questions = options[:shows_questions] || [] @hidden = options[:hidden] || false @placeholder = options[:placeholder] || false question.extra_data[:placeholder] = key if @placeholder @input_key = (question.type == :check_box ? @key : "#{question.key}_#{key}".to_sym) @view_id = "answer_#{input_key}" end def inner_title? inner_title.present? end def key_in_use?(k) return true if k == input_key @questions.each { |q| return true if q.key_in_use?(k) } false end def context_free_description @context_free_description || @description end def as_json(options = {}) { key: key, value: value, description: Quby::MarkdownParser.new(description).to_html, context_free_description: Quby::MarkdownParser.new(context_free_description).to_html, questions: questions, innerTitle: inner_title, hidesQuestions: hides_questions, showsQuestions: shows_questions, hidden: hidden, placeholder: placeholder, viewId: view_id } end end end end end