Sha256: 00223e15041a70735cb185626a81de3aea4010cb9914923b6b3b3af913f8e8c7

Contents?: true

Size: 1.72 KB

Versions: 14

Compression:

Stored size: 1.72 KB

Contents

module Pact
  module Provider

    module DSL
      def provider_state name, &block
        ProviderState.provider_state(name, &block).register
      end

      def provider_states_for name, &block
        ProviderState.current_namespaces << name
        instance_eval(&block)
        ProviderState.current_namespaces.pop
      end
    end

    class ProviderState

      attr_accessor :name
      attr_accessor :namespace

      def self.provider_state name, &block
        ProviderState.new(name, current_namespaces.join('.'), &block)
      end

      def self.register name, provider_state
        provider_states[name] = provider_state
      end

      def self.provider_states
        @@provider_states ||= {}
      end

      def self.current_namespaces
        @@current_namespaces ||= []
      end

      def self.get name, options = {}
        fullname = options[:for] ? "#{options[:for]}.#{name}" : name
        (provider_states[fullname] || provider_states[fullname.to_sym]) || provider_states[name]
      end

      def register
        self.class.register(namespaced(name), self)
      end

      def initialize name, namespace, &block
        @name = name
        @namespace = namespace
        instance_eval(&block)
      end

      def set_up &block
        if block_given?
          @set_up_block = block
        elsif @set_up_block
          instance_eval &@set_up_block
        end
      end

      def tear_down &block
        if block_given?
          @tear_down_block = block
        elsif @tear_down_block
          instance_eval &@tear_down_block
        end
      end

      private

      def namespaced(name)
        if namespace.empty?
          name
        else
          "#{namespace}.#{name}"
        end
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
pact-1.0.13 lib/pact/provider/provider_state.rb
pact-1.0.12 lib/pact/provider/provider_state.rb
pact-1.0.11 lib/pact/provider/provider_state.rb
pact-1.0.10 lib/pact/provider/provider_state.rb
pact-1.0.9 lib/pact/provider/provider_state.rb
pact-1.0.8 lib/pact/provider/provider_state.rb
pact-1.0.7 lib/pact/provider/provider_state.rb
pact-1.0.6 lib/pact/provider/provider_state.rb
pact-1.0.5 lib/pact/provider/provider_state.rb
pact-1.0.4 lib/pact/provider/provider_state.rb
pact-1.0.3 lib/pact/provider/provider_state.rb
pact-1.0.2 lib/pact/provider/provider_state.rb
pact-1.0.1 lib/pact/provider/provider_state.rb
pact-1.0.0 lib/pact/provider/provider_state.rb