botandrose/chop

View on GitHub
lib/chop/dsl.rb

Summary

Maintainability
A
25 mins
Test Coverage
require "active_support/inflector"

module Chop
  module DSL
    extend self

    def create! klass, table, &block
      Create.create! klass, table, &block
    end

    def diff! selector, table, session: Capybara.current_session, as: nil, timeout: nil, &block
      class_name = if as
        as.to_s
      elsif selector.respond_to?(:tag_name)
        selector.tag_name
      else
        session.find(selector).tag_name
      end.camelize
      klass = const_get("Chop::#{class_name}")
      kwargs = { session: session }
      kwargs[:timeout] = timeout if timeout.present?
      klass.diff! selector, table, **kwargs, &block
    end

    def fill_in! table
      Form.fill_in! table
    end
  end

  if defined?(Cucumber::MultilineArgument::DataTable)
    Cucumber::MultilineArgument::DataTable.prepend Module.new {
      def create! klass, &block
        DSL.create! klass, self, &block
      end

      def diff! other_table="table", **kwargs, &block
        if other_table.respond_to?(:tag_name) || (other_table.is_a?(String) && !other_table.include?("|"))
          DSL.diff! other_table, self, **kwargs, &block
        else
          super
        end
      end

      def fill_in!
        DSL.fill_in! self
      end
    }
  end
end