mirror of
https://github.com/teamcapybara/capybara.git
synced 2022-11-09 12:08:07 -05:00
79 lines
2.4 KiB
Ruby
79 lines
2.4 KiB
Ruby
|
YARD::Templates::Engine.register_template_path Pathname.new('./.yard/templates_custom')
|
||
|
|
||
|
YARD::Tags::Library.define_tag "Locator", :locator
|
||
|
YARD::Tags::Library.define_tag "Filter", :filter, :with_types_and_name
|
||
|
|
||
|
class SelectorObject < YARD::CodeObjects::Base
|
||
|
def path
|
||
|
"__Capybara" + sep + super
|
||
|
end
|
||
|
end
|
||
|
|
||
|
class AddSelectorHandler < YARD::Handlers::Ruby::Base
|
||
|
handles method_call(:add_selector)
|
||
|
namespace_only
|
||
|
process do
|
||
|
name = statement.parameters.first.jump(:tstring_content, :ident).source
|
||
|
# object = YARD::CodeObjects::MethodObject.new(namespace, name.to_sym)
|
||
|
# object = SelectorObject.new(YARD::Registry.resolve(P("Capybara"), "#add_selector", false, true), name.to_sym)
|
||
|
object = SelectorObject.new(namespace, name)
|
||
|
register(object)
|
||
|
parse_block(statement.last.last, :owner => object)
|
||
|
|
||
|
# modify the object
|
||
|
object.dynamic = true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
class AddExpressionFilterHandler < YARD::Handlers::Ruby::Base
|
||
|
handles method_call(:xpath)
|
||
|
handles method_call(:css)
|
||
|
|
||
|
process do
|
||
|
return unless owner.is_a?(SelectorObject)
|
||
|
return if statement.parameters.empty?
|
||
|
# names = statement.parameters.children.map { |p| p.jump(:tstring_content, :ident).source.sub(/^:/, '') }
|
||
|
names = statement.parameters.children.map &:source
|
||
|
current_names = owner.tags(:filter).map(&:name)
|
||
|
(names-current_names).each do |name|
|
||
|
owner.add_tag(YARD::Tags::Tag.new(:filter, nil, nil, name))
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
class AddFilterHandler < YARD::Handlers::Ruby::Base
|
||
|
handles method_call(:filter)
|
||
|
|
||
|
process do
|
||
|
return unless owner.is_a?(SelectorObject)
|
||
|
return if statement.parameters.empty?
|
||
|
name = statement.parameters.first.source
|
||
|
type = if statement.parameters[1] && statement.parameters[1].source == ':boolean'
|
||
|
'Boolean'
|
||
|
else
|
||
|
nil
|
||
|
end
|
||
|
if owner.tags(:filter).none? {|tag| tag.name == name }
|
||
|
filter_tag = YARD::Tags::Tag.new(:filter, nil, type, name)
|
||
|
owner.add_tag(filter_tag)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
class FilterSetHandler < YARD::Handlers::Ruby::Base
|
||
|
handles method_call(:filter_set)
|
||
|
|
||
|
process do
|
||
|
return unless owner.is_a?(SelectorObject)
|
||
|
return if statement.parameters.empty? || !statement.parameters[1]
|
||
|
|
||
|
names = statement.parameters[1].flatten.map { |name| ":#{name}" }
|
||
|
names.each do |name|
|
||
|
if owner.tags(:filter).none? {|tag| tag.name == name }
|
||
|
filter_tag = YARD::Tags::Tag.new(:filter, nil, nil, name)
|
||
|
owner.add_tag(filter_tag)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|