class RSpec::DocumentRequests::OrganizedRequest

Attributes

children[R]
example_requests[R]
levels[R]
metadata[R]
parent[R]

Public Class Methods

new(metadata, parent: nil) click to toggle source
# File lib/rspec/document_requests/organized_request.rb, line 5
def initialize(metadata, parent: nil)
  @metadata = metadata
  @parent = parent
  @example_requests = Hash.new { |h, k| h[k] = [] }
  @children = {}
  @levels = Hash.new { |h, k| h[k] = 0 }
  @parent.increase_level(self) if @parent
end
organize() click to toggle source
# File lib/rspec/document_requests/organized_request.rb, line 40
def self.organize
  root = OrganizedRequest.new(description: DocumentRequests.configuration.root)

  DSL.documented_requests.each do |request|
    current = request.example.example_group.metadata
    metadata_tree = [current]
    metadata_tree.unshift(current) while current = current[:parent_example_group]

    organized_request = root
    metadata_tree.each do |metadata|
      organized_request = organized_request.child(metadata)
    end
    organized_request.example_requests[request.example] << request
  end

  root
end

Public Instance Methods

child(metadata) click to toggle source
# File lib/rspec/document_requests/organized_request.rb, line 18
def child(metadata)
  @children[DocumentRequests.configuration.filename_generator.call(metadata[:description])] ||= OrganizedRequest.new(metadata, parent: self)
end
filename() click to toggle source
# File lib/rspec/document_requests/organized_request.rb, line 14
def filename
  @filename ||= Pathname.new(DocumentRequests.configuration.filename_generator.call(@metadata[:description]))
end
grouped_children() click to toggle source
# File lib/rspec/document_requests/organized_request.rb, line 32
def grouped_children
  @grouped_children ||= @children.values.select { |child| child.max_level < DocumentRequests.configuration.group_levels }.sort_by(&:filename)
end
increase_level(child) click to toggle source
# File lib/rspec/document_requests/organized_request.rb, line 22
def increase_level(child)
  @grouped_children = @ungrouped_children = nil
  @levels[child] += 1
  @parent.increase_level(self) if @parent
end
max_level() click to toggle source
# File lib/rspec/document_requests/organized_request.rb, line 28
def max_level
  @levels.values.max || 0
end
ungrouped_children() click to toggle source
# File lib/rspec/document_requests/organized_request.rb, line 36
def ungrouped_children
  @ungrouped_children ||= (@children.values - grouped_children).sort_by(&:filename)
end