Sha256: a5a2da69e372b17844a13517e37569b9b5e01147d48ad058da7b9d3a8741d6d3

Contents?: true

Size: 1 KB

Versions: 7

Compression:

Stored size: 1 KB

Contents

module SoberSwag
  module Reporting
    module Input
      ##
      # Input values that validate against a pattern
      class Pattern < Base
        def initialize(input, pattern)
          @input = input
          @pattern = pattern
        end

        ##
        # @return [#call] input type
        attr_reader :input

        ##
        # @return [#matches] regexp matcher
        attr_reader :pattern

        def call(value)
          val = input.call(value)

          return val if val.is_a?(Report::Base)

          if pattern.match?(value)
            value
          else
            Report::Value.new(["did not match pattern #{pattern}"])
          end
        end

        def swagger_schema
          single, found = input.swagger_schema

          [add_schema_key(single, { pattern: formatted_pattern }), found]
        end

        ##
        # Try to format a pattern so it'll work nicely with JS.
        def formatted_pattern
          pattern.to_s.gsub('?-mix:', '')
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
sober_swag-0.25.2 lib/sober_swag/reporting/input/pattern.rb
sober_swag-0.25.1 lib/sober_swag/reporting/input/pattern.rb
sober_swag-0.25.0 lib/sober_swag/reporting/input/pattern.rb
sober_swag-0.24.1 lib/sober_swag/reporting/input/pattern.rb
sober_swag-0.24.0 lib/sober_swag/reporting/input/pattern.rb
sober_swag-0.23.0 lib/sober_swag/reporting/input/pattern.rb
sober_swag-0.22.0 lib/sober_swag/reporting/input/pattern.rb