---
class_types:
  RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate: RR::DoubleDefinitions::DoubleDefinition
  RR::DoubleDefinitions::DoubleDefinitionCreate: RR::DoubleDefinitions::DoubleDefinition
method_types:
  RR:
    DoubleDefinitions:
      Strategies:
        StrategyMethods:
          stub!:
            variants:
            - RR::DoubleDefinitions::DoubleDefinitionCreate
            - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate
          mock!:
            variants:
            - RR::DoubleDefinitions::DoubleDefinitionCreate
            - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate
          dont_allow!:
             variants:
             - RR::DoubleDefinitions::DoubleDefinitionCreate
             - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate
          do_not_allow:
             variants:
             - RR::DoubleDefinitions::DoubleDefinitionCreate
             - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate
          do_not_allow!:
             variants:
             - RR::DoubleDefinitions::DoubleDefinitionCreate
             - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate

          probe:
             variants:
             - RR::DoubleDefinitions::DoubleDefinitionCreate
             - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate

          probe!:
             variants:
             - RR::DoubleDefinitions::DoubleDefinitionCreate
             - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate

          new_instance_of:
             variants:
             - RR::DoubleDefinitions::DoubleDefinitionCreate
             - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate

          new_instance_of!:
             variants:
             - RR::DoubleDefinitions::DoubleDefinitionCreate
             - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate

          all_instances_of:
             variants:
             - RR::DoubleDefinitions::DoubleDefinitionCreate
             - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate

          all_instances_of!:
             variants:
             - RR::DoubleDefinitions::DoubleDefinitionCreate
             - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate

      DoubleDefinitionCreate:
        stub:
          variants:
          - RR::DoubleDefinitions::DoubleDefinitionCreate
          - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate
        mock:
          variants:
          - RR::DoubleDefinitions::DoubleDefinitionCreate
          - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate
        dont_allow:
          variants:
          - RR::DoubleDefinitions::DoubleDefinitionCreate
          - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate
        do_not_allow:
          variants:
          - RR::DoubleDefinitions::DoubleDefinitionCreate
          - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate
        proxy:
          variants:
          - RR::DoubleDefinitions::DoubleDefinitionCreate
          - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate
        strong:
          variants:
          - RR::DoubleDefinitions::DoubleDefinitionCreate
          - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate
        instance_of:
          variants:
          - RR::DoubleDefinitions::DoubleDefinitionCreate
          - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate
    Adapters:
      RRMethods:
        stub:
          variants:
          - RR::DoubleDefinitions::DoubleDefinitionCreate
          #- RR::DoubleDefinitions::DoubleDefinition
          - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate

        mock:
          variants:
          - RR::DoubleDefinitions::DoubleDefinitionCreate
          #- RR::DoubleDefinitions::DoubleDefinition
          - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate

        dont_allow:
          variants:
          - RR::DoubleDefinitions::DoubleDefinitionCreate
          #- RR::DoubleDefinitions::DoubleDefinition
          - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate

        proxy:
          variants:
          - RR::DoubleDefinitions::DoubleDefinitionCreate
          #- RR::DoubleDefinitions::DoubleDefinition
          - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate

        strong:
          variants:
          - RR::DoubleDefinitions::DoubleDefinitionCreate
          #- RR::DoubleDefinitions::DoubleDefinition
          - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate

        instance_of:
          variants:
          - RR::DoubleDefinitions::DoubleDefinitionCreate
          #- RR::DoubleDefinitions::DoubleDefinition
          - RR::DoubleDefinitions::DoubleDefinitionCreateBlankSlate

  # RSpec bundled mocking framework
  Spec:
    Mocks:
      Methods:
        null_object?: Boolean
        stub!: Spec::Mocks::MessageExpectation
        should_not_receive: Spec::Mocks::MessageExpectation
        unstub!: Spec::Mocks::MessageExpectation
        received_message?: Boolean
        should_receive: Spec::Mocks::MessageExpectation
        stub_chain: Spec::Mocks::MessageExpectation
  RSpec:
    Mocks:
      Methods:
        stub: RSpec::Mocks::MessageExpectation
        should_receive: RSpec::Mocks::MessageExpectation
        should_not_receive: RSpec::Mocks::NegativeMessageExpectation
        unstub: RSpec::Mocks::MessageExpectation
        stub_chain: RSpec::Mocks::MessageExpectation
        null_object?: Boolean
        received_message?: Boolean
    Matchers:
        expect: RSpec::Expectations::ExpectationTarget

  Object:
        stub: RSpec::Mocks::MessageExpectation
        stub!: RSpec::Mocks::MessageExpectation
        should_receive: RSpec::Mocks::MessageExpectation
        should_not_receive: RSpec::Mocks::MessageExpectation
        unstub: RSpec::Mocks::MessageExpectation
        unstub!: RSpec::Mocks::MessageExpectation
        stub_chain: RSpec::Mocks::MessageExpectation
        received_message?: Boolean

dynamic_members:
  Kernel:
    rspec-expectations >=2.11.0:
      instance_methods:
        should: RSpec::Expectations::Syntax.enable_should
        should_not: RSpec::Expectations::Syntax.enable_should
    rspec-core >= 3.0.0:
      instance_methods:
        describe: RSpec::Core::ExampleGroup::self.define_example_group_method
        context: RSpec::Core::ExampleGroup::self.define_example_group_method
        example_group: RSpec::Core::ExampleGroup::self.define_example_group_method

  RR:
    # add stub, mock, don't allow using verification strategy,
    # see: rr-0.10.0/lib/rr/double_definitions/strategies/verification/[stub.rb, mock.rb, dont_allow.rb]

    # stub, stub! -> :class_to_resolve => "RR::DoubleDefinitions::Strategies::Verification::Stub"
    # mock, mock! -> :class_to_resolve => "RR::DoubleDefinitions::Strategies::Verification::Mock"
    # do_not_allow, do_not_call, dont_allow, dont_call -> :class_to_resolve => "RR::DoubleDefinitions::Strategies::Verification::DontAllow"
    DoubleDefinitions:
      Strategies:
        StrategyMethods:
          instance_methods: do_not_allow, rr_do_not_allow, do_not_allow!, rr_do_not_allow!, probe, probe!, rr_probe, rr_probe!, new_instance_of, rr_new_instance_of, all_instances_of, rr_all_instances_of, all_instances_of!, rr_all_instances_of!

  Object:
    rspec-mocks >=2.14.0:
      instance_methods:
        stub: RSpec::Mocks::Syntax.enable_should
        stub!: RSpec::Mocks::Syntax.enable_should
        should_receive: RSpec::Mocks::Syntax.enable_should
        should_not_receive: RSpec::Mocks::Syntax.enable_should
        unstub: RSpec::Mocks::Syntax.enable_should
        unstub!: RSpec::Mocks::Syntax.enable_should
        stub_chain: RSpec::Mocks::Syntax.enable_should
        received_message?: RSpec::Mocks::Syntax.enable_should

  RSpec:
    rspec-core >= 3.0.0:
      instance_methods:
        describe: RSpec::Core::ExampleGroup::self.define_example_group_method
        context: RSpec::Core::ExampleGroup::self.define_example_group_method
        example_group: RSpec::Core::ExampleGroup::self.define_example_group_method

  RSpec:
    Matchers:
      rspec-expectations >=2.14.0:
        instance_methods:
          expect: RSpec::Expectations::Syntax.enable_expect

  Spec:
    Matchers:
      instance_methods:
        be_true: Spec::Matchers.be
        be_nil: Spec::Matchers.be
        be_arbitrary_predicate: Spec::Matchers.be
        be_false: Spec::Matchers.be

