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(description:, parent: nil) ⇒ OrganizedRequest

Returns a new instance of OrganizedRequest.



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

def initialize(description:, parent: nil)
  @description = description
  @parent = parent
  @filename = Pathname.new(DocumentRequests.configuration.filename_generator.call(description))
  @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

#descriptionObject (readonly)

Returns the value of attribute description.



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

def description
  @description
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

#filenameObject (readonly)

Returns the value of attribute filename.



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

def filename
  @filename
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

#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



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/rspec/document_requests/organized_request.rb', line 37

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([:description])
    end
    organized_request.example_requests[request.example] << request
  end

  root
end

Instance Method Details

#child(description) ⇒ Object



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

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

#grouped_childrenObject



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

def grouped_children
  @grouped_children ||= @children.values.select { |child| child.max_level < DocumentRequests.configuration.group_levels }.sort_by(&:filename)
end

#increase_level(child) ⇒ Object



19
20
21
22
23
# File 'lib/rspec/document_requests/organized_request.rb', line 19

def increase_level(child)
  @grouped_children = @ungrouped_children = nil
  @levels[child] += 1
  @parent.increase_level(self) if @parent
end

#max_levelObject



25
26
27
# File 'lib/rspec/document_requests/organized_request.rb', line 25

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

#ungrouped_childrenObject



33
34
35
# File 'lib/rspec/document_requests/organized_request.rb', line 33

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