class Rspec::Usecases::Document
A document represents a list of groups, the main group type being usecases
A document can have a title, description and a list of groups A group is just an Rspec
context or describe block with the attribute usecase set to true - usecase: true
The list of groups can have their own child list of groups that can go down to any practical depth.
Attributes
description[R]
groups[R]
options[R]
title[R]
Public Class Methods
new(root_example_group, **options)
click to toggle source
# File lib/rspec/usecases/document.rb, line 19 def initialize(root_example_group, **options) @root = root_example_group @options = if options.nil? || options.empty? Rspec::Usecases::Options::DocumentOptions.new(@root.metadata) else Rspec::Usecases::Options::DocumentOptions.new(options) end parse_title_description build_groups end
Public Instance Methods
debug?()
click to toggle source
# File lib/rspec/usecases/document.rb, line 35 def debug? options.debug.active? end
json?()
click to toggle source
# File lib/rspec/usecases/document.rb, line 31 def json? options.json.active? end
markdown?()
click to toggle source
# File lib/rspec/usecases/document.rb, line 39 def markdown? options.markdown.active? end
skip_render?()
click to toggle source
# File lib/rspec/usecases/document.rb, line 43 def skip_render? @skip_render end
to_h()
click to toggle source
# File lib/rspec/usecases/document.rb, line 47 def to_h { settings: { json: json?, debug: debug?, markdown: markdown?, markdown_file: markdown_file, markdown_prettier: markdown_prettier?, markdown_open: markdown_open?, skip_render: skip_render? }, title: title, description: description, groups: groups.map(&:to_h) } end
Private Instance Methods
build_groups()
click to toggle source
# File lib/rspec/usecases/document.rb, line 114 def build_groups @groups = [] # This is a documentor setting return unless @root.metadata[:usecases] # Get a list of describe or context blocks with the :usecase # metadata flag, or use `usecase 'xyz' do end` in your code. @groups = flatten_group_hierarchy(@root, 1) # debug end
extract_meta_options()
click to toggle source
rubocop:enable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity, Metrics/AbcSize
# File lib/rspec/usecases/document.rb, line 95 def extract_meta_options { json: @root.metadata[:json], debug: @root.metadata[:debug], markdown: @root.metadata[:markdown], document_title: @root.metadata[:document_title], document_description: @root.metadata[:document_description] } end
flatten_group_hierarchy(example_group, level)
click to toggle source
rubocop:disable Metrics/AbcSize
# File lib/rspec/usecases/document.rb, line 128 def flatten_group_hierarchy(example_group, level) # puts "name : #{example_group.name}" # puts "entering level : #{level}" # if example_group.metadata[:usecase] == true # group = Rspec::Usecases::Groups::Usecase.parse(example_group.name, example_group) # return [group] # end # { name: example_group.name, is_group: example_group.metadata[:group], child_count: example_group.children.length } # { name: child_example_group.name, is_group: child_example_group.metadata[:group], child_count: child_example_group.children.length } level_groups = [] example_group.children.each do |child_example_group| if child_example_group.metadata[:usecase] == true raise(Rspec::Usecases::Error, 'Group required') if child_example_group.metadata[:group_type].nil? group = Rspec::Usecases::Groups::BaseGroup.parse(child_example_group.name, child_example_group) child_groups = flatten_group_hierarchy(child_example_group, level + 1) group.groups = child_groups groups.push group level_groups.push group else # puts 'keep looking' sibling_groups = flatten_group_hierarchy(child_example_group, level) # puts "level : #{level}" # puts "level_groups : #{level_groups.length}" # puts "sibling_groups : #{sibling_groups.length}" level_groups += sibling_groups end end # puts "leaving level : #{level}" # puts "count for level : #{level_groups.length}" level_groups end
parse_title_description()
click to toggle source
# File lib/rspec/usecases/document.rb, line 106 def parse_title_description @skip_render = !!@root.metadata[:skip_render] && @root.metadata[:skip_render] == true # # Document data @title = @root.metadata[:document_title] || '' @description = @root.metadata[:document_description] || '' end
value_to_type(value, default_value: :detail, fail_value: :skip)
click to toggle source
rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity, Metrics/AbcSize
# File lib/rspec/usecases/document.rb, line 67 def value_to_type(value, default_value: :detail, fail_value: :skip) if value.nil? [fail_value] elsif !!value == value value ? [default_value] : [fail_value] elsif value.is_a?(String) [value.to_sym] elsif value.is_a?(Symbol) [value] elsif value.is_a?(Array) value.map do |v| case value when Symbol v when String v.to_sym when !!value value ? default_value : fail_value else raise Rspec::Usecases::Error, 'Unknown option paramater' end end else raise Rspec::Usecases::Error, 'Unknown option paramater' end end