lib/chop/dsl.rb
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