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.
703 704 705 706 707 |
# File 'lib/inspec/rspec_json_formatter.rb', line 703 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.
709 710 711 |
# File 'lib/inspec/rspec_json_formatter.rb', line 709 def control @control end |
#profile ⇒ Object (readonly)
Returns the value of attribute profile.
709 710 711 |
# File 'lib/inspec/rspec_json_formatter.rb', line 709 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.
797 798 799 800 801 802 803 |
# File 'lib/inspec/rspec_json_formatter.rb', line 797 def <=>(other) if id == other.id && profile_id == other.profile_id 0 else -1 end end |
#add_example(example) ⇒ Object
734 735 736 737 738 739 740 741 742 743 744 745 |
# File 'lib/inspec/rspec_json_formatter.rb', line 734 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
717 718 719 |
# File 'lib/inspec/rspec_json_formatter.rb', line 717 def anonymous? control[:id].to_s.start_with? '(generated from ' end |
#examples ⇒ Object
725 726 727 |
# File 'lib/inspec/rspec_json_formatter.rb', line 725 def examples control[:results] end |
#id ⇒ Object
713 714 715 |
# File 'lib/inspec/rspec_json_formatter.rb', line 713 def id control[:id] end |
#profile_id ⇒ Object
721 722 723 |
# File 'lib/inspec/rspec_json_formatter.rb', line 721 def profile_id control[:profile_id] end |
#summary ⇒ Object
Return summary of the control which is usually a title with fails and skips
772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 |
# File 'lib/inspec/rspec_json_formatter.rb', line 772 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
729 730 731 732 |
# File 'lib/inspec/rspec_json_formatter.rb', line 729 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.
749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 |
# File 'lib/inspec/rspec_json_formatter.rb', line 749 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 |