Sha256: 150a90bddfc5d39819431898a43b26ab7717157ef1f5b98662f63662060c3d47
Contents?: true
Size: 1.83 KB
Versions: 3
Compression:
Stored size: 1.83 KB
Contents
# frozen_string_literal: true module Sbmt module Pact module Matchers # see https://github.com/pact-foundation/pact-reference/blob/master/rust/pact_ffi/IntegrationJson.md class Base attr_reader :spec_version, :kind, :template, :opts class MatcherInitializationError < Sbmt::Pact::Error; end def initialize(spec_version:, kind:, template:, opts: {}) @spec_version = spec_version @kind = kind @template = template @opts = opts end def as_basic { "pact:matcher:type" => serialize!(@kind.deep_dup, :basic), "value" => serialize!(@template.deep_dup, :basic) }.merge(serialize!(@opts.deep_dup, :basic)) end def as_plugin params = @opts.values.map { |v| format_primitive(v) }.join(",") value = format_primitive(@template) return "matching(#{@kind}, #{params}, #{value})" if params.present? "matching(#{@kind}, #{value})" end private def serialize!(data, format) # serialize complex types recursively case data when TrueClass, FalseClass, Numeric, String data when Array data.map { |v| serialize!(v, format) } when Hash data.transform_values { |v| serialize!(v, format) } when Sbmt::Pact::Matchers::Base return data.as_basic if format == :basic data.as_plugin if format == :plugin else data end end def format_primitive(arg) case arg when TrueClass, FalseClass, Numeric arg.to_s when String "'#{arg}'" else raise "#{arg.class} is not a primitive" end end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
sbmt-pact-0.12.2 | lib/sbmt/pact/matchers/base.rb |
sbmt-pact-0.12.1 | lib/sbmt/pact/matchers/base.rb |
sbmt-pact-0.12.0 | lib/sbmt/pact/matchers/base.rb |