Class: RSpec::DocumentRequests::OrganizedRequest

Inherits:
Object
  • Object
show all
Defined in:
lib/rspec/document_requests/organized_request.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(metadata, parent: nil) ⇒ OrganizedRequest

Returns a new instance of OrganizedRequest.



5
6
7
8
9
10
11
12
# File 'lib/rspec/document_requests/organized_request.rb', line 5

def initialize(, parent: nil)
  @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

Instance Attribute Details

#childrenObject (readonly)

Returns the value of attribute children.



4
5
6
# File 'lib/rspec/document_requests/organized_request.rb', line 4

def children
  @children
end

#example_requestsObject (readonly)

Returns the value of attribute example_requests.



4
5
6
# File 'lib/rspec/document_requests/organized_request.rb', line 4

def example_requests
  @example_requests
end

#levelsObject (readonly)

Returns the value of attribute levels.



4
5
6
# File 'lib/rspec/document_requests/organized_request.rb', line 4

def levels
  @levels
end

#metadataObject (readonly)

Returns the value of attribute metadata.



4
5
6
# File 'lib/rspec/document_requests/organized_request.rb', line 4

def 
  @metadata
end

#parentObject (readonly)

Returns the value of attribute parent.



4
5
6
# File 'lib/rspec/document_requests/organized_request.rb', line 4

def parent
  @parent
end

Class Method Details

.organizeObject



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 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.
     = [current]
    .unshift(current) while current = current[:parent_example_group]

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

  root
end

Instance Method Details

#child(metadata) ⇒ Object



18
19
20
# File 'lib/rspec/document_requests/organized_request.rb', line 18

def child()
  @children[DocumentRequests.configuration.filename_generator.call([:description])] ||= OrganizedRequest.new(, parent: self)
end

#filenameObject



14
15
16
# File 'lib/rspec/document_requests/organized_request.rb', line 14

def filename
  @filename ||= Pathname.new(DocumentRequests.configuration.filename_generator.call(@metadata[:description]))
end

#grouped_childrenObject



32
33
34
# 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) ⇒ Object



22
23
24
25
26
# 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_levelObject



28
29
30
# File 'lib/rspec/document_requests/organized_request.rb', line 28

def max_level
  @levels.values.max || 0
end

#ungrouped_childrenObject



36
37
38
# File 'lib/rspec/document_requests/organized_request.rb', line 36

def ungrouped_children
  @ungrouped_children ||= (@children.values - grouped_children).sort_by(&:filename)
end