Class: InspecRspecCli::Control
- Inherits:
-
Object
- Object
- InspecRspecCli::Control
- Includes:
- Comparable
- Defined in:
- lib/inspec/rspec_json_formatter.rb
Overview
This class wraps a control hash object to provide a useful inteface for maintaining the associated profile, ids, results, title, etc.
Constant Summary collapse
- STATUS_TYPES =
{ 'unknown' => -3, 'passed' => -2, 'skipped' => -1, 'minor' => 1, 'major' => 2, 'failed' => 2.5, 'critical' => 3, }.freeze
Instance Attribute Summary collapse
-
#control ⇒ Object
(also: #as_hash)
readonly
Returns the value of attribute control.
-
#profile ⇒ Object
readonly
Returns the value of attribute profile.
Instance Method Summary collapse
-
#<=>(other) ⇒ Object
We are interested in comparing controls against other controls.
- #add_example(example) ⇒ Object
- #anonymous? ⇒ Boolean
- #examples ⇒ Object
- #id ⇒ Object
-
#initialize(control, profile) ⇒ Control
constructor
A new instance of Control.
- #profile_id ⇒ Object
-
#summary ⇒ Object
Return summary of the control which is usually a title with fails and skips.
- #summary_indicator ⇒ Object
-
#title ⇒ Object
Determine title for control given current_control.
Constructor Details
#initialize(control, profile) ⇒ Control
Returns a new instance of Control.
601 602 603 604 605 |
# File 'lib/inspec/rspec_json_formatter.rb', line 601 def initialize(control, profile) @control = control @profile = profile summary_calculation_is_needed end |
Instance Attribute Details
#control ⇒ Object (readonly) Also known as: as_hash
Returns the value of attribute control.
607 608 609 |
# File 'lib/inspec/rspec_json_formatter.rb', line 607 def control @control end |
#profile ⇒ Object (readonly)
Returns the value of attribute profile.
607 608 609 |
# File 'lib/inspec/rspec_json_formatter.rb', line 607 def profile @profile end |
Instance Method Details
#<=>(other) ⇒ Object
We are interested in comparing controls against other controls. It is important to compare their id values and the id values of their profiles. In the event that a control has the same id in a different profile we do not want them to be considered the same.
Controls are never ordered so we don’t care about the remaining implementation of the spaceship operator.
695 696 697 698 699 700 701 |
# File 'lib/inspec/rspec_json_formatter.rb', line 695 def <=>(other) if id == other.id && profile_id == other.profile_id 0 else -1 end end |
#add_example(example) ⇒ Object
632 633 634 635 636 637 638 639 640 641 642 643 |
# File 'lib/inspec/rspec_json_formatter.rb', line 632 def add_example(example) control[:id] = example[:id] control[:profile_id] = example[:profile_id] example[:status_type] = status_type(example) example.delete(:id) example.delete(:profile_id) control[:results] ||= [] control[:results].push(example) summary_calculation_is_needed end |
#anonymous? ⇒ Boolean
615 616 617 |
# File 'lib/inspec/rspec_json_formatter.rb', line 615 def anonymous? control[:id].to_s.start_with? '(generated from ' end |
#examples ⇒ Object
623 624 625 |
# File 'lib/inspec/rspec_json_formatter.rb', line 623 def examples control[:results] end |
#id ⇒ Object
611 612 613 |
# File 'lib/inspec/rspec_json_formatter.rb', line 611 def id control[:id] end |
#profile_id ⇒ Object
619 620 621 |
# File 'lib/inspec/rspec_json_formatter.rb', line 619 def profile_id control[:profile_id] end |
#summary ⇒ Object
Return summary of the control which is usually a title with fails and skips
670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 |
# File 'lib/inspec/rspec_json_formatter.rb', line 670 def summary calculate_summary! if summary_calculation_needed? suffix = if examples.length == 1 # Single test - be nice and just print the exception message if the test # failed. No need to say "1 failed". examples[0][:message].to_s else [ !fails.empty? ? "#{fails.uniq.length} failed" : nil, !skips.empty? ? "#{skips.uniq.length} skipped" : nil, ].compact.join(' ') end suffix == '' ? title : title + ' (' + suffix + ')' end |
#summary_indicator ⇒ Object
627 628 629 630 |
# File 'lib/inspec/rspec_json_formatter.rb', line 627 def summary_indicator calculate_summary! if summary_calculation_needed? STATUS_TYPES.key(@summary_status) end |
#title ⇒ Object
Determine title for control given current_control. Called from current_control_summary.
647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 |
# File 'lib/inspec/rspec_json_formatter.rb', line 647 def title title = control[:title] if title title elsif examples.length == 1 # If it's an anonymous control, just go with the only description # available for the underlying test. examples[0][:code_desc].to_s elsif examples.empty? # Empty control block - if it's anonymous, there's nothing we can do. # Is this case even possible? 'Empty anonymous control' else # Multiple tests - but no title. Do our best and generate some form of # identifier or label or name. title = (examples.map { |example| example[:code_desc] }).join('; ') max_len = MULTI_TEST_CONTROL_SUMMARY_MAX_LEN title = title[0..(max_len-1)] + '...' if title.length > max_len title end end |