Sha256: eea6f401e816da506e1ee01216a400e0102241f5ca1d443388845872a2044ede

Contents?: true

Size: 908 Bytes

Versions: 5

Compression:

Stored size: 908 Bytes

Contents

module Screengem
  module Factories
    #
    # Knows how to create a Question from a question name.
    #
    class QuestionFactory < BasicObject
      include ::Singleton

      def method_missing(question_name, *args)
        question_class_name = "#{question_name}_question".camelize
        question_class = "#{question_scope}::#{question_class_name}".constantize

        question_class.new(*args)
      rescue => e
        QuestionError.new(<<~MSG)
          Unable to create question: '#{question_class_name}'.
            Details: #{e.message}
        MSG
      end

      def respond_to_missing?(_question_name, *)
        true
      end

      class QuestionError < ::Screengem::Question
        include FactoryCreationError

        skip_dampening
      end

      private

      def question_scope
        @question_scope ||= ::Screengem.configuration.question_scope
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
screengem-0.16.0 lib/screengem/factories/question_factory.rb
screengem-0.15.0 lib/screengem/factories/question_factory.rb
screengem-0.14.0 lib/screengem/factories/question_factory.rb
screengem-0.13.0 lib/screengem/factories/question_factory.rb
screengem-0.12.0 lib/screengem/factories/question_factory.rb