Sha256: 425faf15bb641c7f3d31dd4daa19bf36a95203eef405f967887170f3f4e61a33

Contents?: true

Size: 1.26 KB

Versions: 9

Compression:

Stored size: 1.26 KB

Contents

# frozen_string_literal: true

module Quby
  module Questionnaires
    class API
      def initialize(questionnaire_repo:)
        @repo = questionnaire_repo
        @cache = {}
      end

      def find(key)
        if fresh?(key)
          # print "HIT:#{key} "
          return @cache[key][:questionnaire]
          # else
          # print "MISS:#{key} "
        end

        definition = @repo.find key
        @cache[key] = {questionnaire: build_from_definition(definition), timestamp: definition.timestamp}
        @cache[key][:questionnaire]
      end

      def exists?(questionnaire_key)
        @repo.exists? questionnaire_key
      end

      def all
        @repo.keys.map { |key| find(key) }
      end

      def validate(key, sourcecode)
        definition = Entities::Definition.new(key: key, sourcecode: sourcecode, path: "validating '#{key}'")
        definition.valid?
        definition
      end

      private

      def build_from_definition(definition)
        ActiveSupport::Notifications.instrument('quby.questionaire.build') do
          DSL.build_from_definition(definition)
        end
      end

      def fresh?(key)
        return false unless @cache.key?(key)
        @cache[key][:timestamp].to_i == @repo.timestamp(key).to_i
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
quby-4.0.4 lib/quby/questionnaires/api.rb
quby-4.0.3 lib/quby/questionnaires/api.rb
quby-4.0.2 lib/quby/questionnaires/api.rb
quby-4.0.1 lib/quby/questionnaires/api.rb
quby-4.0.0 lib/quby/questionnaires/api.rb
quby-3.2.2 lib/quby/questionnaires/api.rb
quby-3.2.1 lib/quby/questionnaires/api.rb
quby-3.2.0 lib/quby/questionnaires/api.rb
quby-3.2.0.pre.pre1 lib/quby/questionnaires/api.rb