include YARD::Templates::Helpers::HtmlHelper def init super # Additional javascript that power the additional menus, collapsing, etc. asset("js/cucumber.js",file("js/cucumber.js",true)) # # Generate pages for each feature, with the 'feature' template and then # generate the page which is the full list of features # @features = Registry.all(:feature) if @features @features.each {|feature| serialize(feature) } #generate_full_list @features.sort {|x,y| x.value.to_s <=> y.value.to_s }, :feature end # # Generate pages for each tag, with the 'tag' template and then generate the # page which is the full list of tags. Tags are ordered in descending order # by the size of how many scenarios that the affect # @tags = Registry.all(:tag) if @tags @tags.each {|tag| serialize(tag) } #generate_full_list @tags.sort {|x,y| y.all_scenarios.size <=> x.all_scenarios.size }, :tag end # Generates the requirements splash page with the 'requirements' template serialize(YARD::CodeObjects::Cucumber::CUCUMBER_NAMESPACE) # Generates a page for step definitions and step transforms with the 'steptransformers' template serialize(YARD::CodeObjects::Cucumber::CUCUMBER_STEPTRANSFORM_NAMESPACE) # Generates the tags page with the 'featuretags' template serialize(YARD::CodeObjects::Cucumber::CUCUMBER_TAG_NAMESPACE) # Generate pages for each of the directories with features with the 'featuredirectory' template feature_directories = YARD::CodeObjects::Cucumber::CUCUMBER_NAMESPACE.children.find_all {|child| child.is_a?(YARD::CodeObjects::Cucumber::FeatureDirectory) } serialize_feature_directories(feature_directories) end # Generate feature list # @note this method is called automically by YARD based on the menus defined in the layout def generate_feature_list @features = Registry.all(:feature) generate_full_list @features.sort {|x,y| x.value.to_s <=> y.value.to_s }, :feature end # Generate tag list # @note this method is called automically by YARD based on the menus defined in the layout def generate_tag_list @tags = Registry.all(:tag) generate_full_list @tags.sort {|x,y| y.all_scenarios.size <=> x.all_scenarios.size }, :tag end # Generate a step definition list # @note this menu is not automatically added until yard configuration has this menu added # See the layout template method that loads the menus def generate_stepdefinition_list generate_full_list YARD::Registry.all(:stepdefinition), :stepdefinition end # Generate a step list # @note this menu is not automatically added until yard configuration has this menu added # See the layout template method that loads the menus def generate_step_list generate_full_list YARD::Registry.all(:step), :step end # Helpler method to generate a full_list page of the specified objects with the # specified type. def generate_full_list(objects,list_type,friendly_name=nil) @items = objects @list_type = "#{list_type}s" @list_title = "#{friendly_name || list_type.to_s.capitalize} List" @list_class = "class" asset("#{list_type}_list.html",erb(:full_list)) end # # The existing 'Class List' search field would normally contain the Cucumber # Namespace object that has been added. Here we call the class_list method # that is contained in the YARD template and we remove the namespace. Returning # it when we are done. # def class_list(root = Registry.root) root.instance_eval { children.delete YARD::CodeObjects::Cucumber::CUCUMBER_NAMESPACE } if root == Registry.root out = super(root) root.instance_eval { children << YARD::CodeObjects::Cucumber::CUCUMBER_NAMESPACE } if root == Registry.root out end # # Generate a page for each Feature Directory. This is called recursively to # ensure that all feature directories contained as children are rendered to # pages. # def serialize_feature_directories(namespaces) namespaces.each do |namespace| Templates::Engine.with_serializer(namespace, options[:serializer]) do options[:object] = namespace T('layout').run(options) end serialize_feature_directories(namespace.children.find_all {|child| child.is_a?(YARD::CodeObjects::Cucumber::FeatureDirectory)}) end end # # Generate a link to the 'All Features' in the features_list.html # # When there are no feature directories or multiple top-level feature directories # then we want to link to the 'Requirements' page # # When there are is just one feature directory then we want to link to that directory # def all_features_link root_feature_directories = YARD::CodeObjects::Cucumber::CUCUMBER_NAMESPACE.children.find_all {|child| child.is_a?(YARD::CodeObjects::Cucumber::FeatureDirectory)} if root_feature_directories.length == 0 || root_feature_directories.length > 1 linkify YARD::CodeObjects::Cucumber::CUCUMBER_NAMESPACE, "All Features" else linkify root_feature_directories.first, "All Features" end end