Sha256: 832e24a1e001bcf07dae00eeb7f6fd866fc27bb48b58b10be723e51d8a966040

Contents?: true

Size: 1.25 KB

Versions: 5

Compression:

Stored size: 1.25 KB

Contents

module Webmention
  module Verification
    module Verifiers
      class JsonVerifier < BaseVerifier
        def self.mime_types
          ['application/json']
        end

        Verifiers.register(self)

        private

        def parse_response_body
          DeepLocator.new(JSON.parse(response_body), target_regexp).results
        end

        class DeepLocator
          def initialize(json, pattern)
            @json = json
            @pattern = pattern
          end

          def results
            @results ||= build_results(comparator, @json)
          end

          def self.values_for(object)
            object.is_a?(Hash) ? object.values : object.entries
          end

          private

          # :reek:TooManyStatements { max_statements: 6 }
          def build_results(comparator, object, matches = [])
            return matches unless object.is_a?(Enumerable)

            matches << object if object.any? { |_, value| comparator.call(value) }

            self.class.values_for(object).each { |value| build_results(comparator, value, matches) }

            matches
          end

          def comparator
            @comparator ||= ->(value) { value.is_a?(String) && value.match?(@pattern) }
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
webmention-verification-2.0.0 lib/webmention/verification/verifiers/json_verifier.rb
webmention-verification-1.2.0 lib/webmention/verification/verifiers/json_verifier.rb
webmention-verification-1.1.1 lib/webmention/verification/verifiers/json_verifier.rb
webmention-verification-1.1.0 lib/webmention/verification/verifiers/json_verifier.rb
webmention-verification-1.0.0 lib/webmention/verification/verifiers/json_verifier.rb