Class: RSpecSystem::Helper Abstract
- Inherits:
-
Object
- Object
- RSpecSystem::Helper
- Includes:
- InternalHelpers
- Defined in:
- lib/rspec-system/helper.rb
Overview
Subclass and override methods to create a helper object
This class represents an abstract ‘helper’ object.
It provides some DSL and convenience helpers to create rspec-system compatible helper objects so others can create their own helper methods with the same syntactical sugar.
Start by sub-classing this feature and providing your own #execute method, name & properties declaration. See other sub-classes for examples on proper usage.
Direct Known Subclasses
Class Attribute Summary collapse
-
.name_value ⇒ Object
Returns the value of attribute name_value.
Instance Attribute Summary collapse
-
#opts ⇒ Object
readonly
Options when called.
-
#rd ⇒ Object
readonly
private
Cache of previous result data.
Class Method Summary collapse
-
.name(name) ⇒ Object
DSL method for setting the helper name.
-
.properties(*props) ⇒ Object
Accepts a list of properties to automatically create.
Instance Method Summary collapse
-
#[](key) ⇒ Object
This allows the data to be treated as a hash.
-
#default_node ⇒ Object
Return default node.
-
#execute ⇒ Hash <Symbol, Any>
abstract
This method is executed to retrieve the data for this helper.
-
#initialize(opts, clr, &block) ⇒ Helper
constructor
abstract
Setup the helper object.
-
#name ⇒ String
Return the helper name of this helper object.
-
#refresh ⇒ void
(also: #run)
Refresh the data, re-running the action associated with this helper.
-
#result_data ⇒ RSpecSystem::Result
private
Internal method to return any result data from resource execution time.
-
#to_hash ⇒ Hash
Retrieve the data from this helper object as a hash.
-
#to_s ⇒ String
String representation of helper.
Methods included from InternalHelpers
#custom_prefabs_path, #nodeset, #rspec_destroy, #rspec_system_config, #rspec_system_node_set, #rspec_system_tmp, #rspec_virtual_env, #start_nodes, #stop_nodes
Constructor Details
#initialize(opts, clr, &block) ⇒ Helper
Override, but make sure you call super(opts, clr, &block)
Setup the helper object.
Here we establish laziness detection, provide the default :node setting and handle been called as a block automatically for the consumer. This is the main setup for the magic that is behind these helper objects.
This initialize method is usually not overridden for simple cases, but can be overridden for the purposes of munging options and providing defaults.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/rspec-system/helper.rb', line 58 def initialize(opts, clr, &block) dn = default_node # This is a test for the context of how this command was called # # If clr is Class or Object then it could be called as a subject, and it # should lazy execute its action. lazy = nil if [Class, Object].include?(clr.class) # presumes being used as a subject lazy = true elsif clr.is_a? RSpec::Core::ExampleGroup # anything inside an 'it' lazy = false else # We presume everything else wants results immediately lazy = false end opts = { :node => opts[:n] || dn, :n => opts[:node] || dn, :timeout => opts[:timeout] || 0, :lazy => lazy, }.merge(opts) @opts = opts r = result_data unless opts[:lazy] # If called as a block, yield the result as a block if block_given? yield(self) end end |
Class Attribute Details
.name_value ⇒ Object
Returns the value of attribute name_value.
29 30 31 |
# File 'lib/rspec-system/helper.rb', line 29 def name_value @name_value end |
Instance Attribute Details
#opts ⇒ Object (readonly)
Options when called
26 27 28 |
# File 'lib/rspec-system/helper.rb', line 26 def opts @opts end |
#rd ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Cache of previous result data
23 24 25 |
# File 'lib/rspec-system/helper.rb', line 23 def rd @rd end |
Class Method Details
.name(name) ⇒ Object
DSL method for setting the helper name
34 35 36 |
# File 'lib/rspec-system/helper.rb', line 34 def name(name) @name_value = name end |
.properties(*props) ⇒ Object
Accepts a list of properties to automatically create
41 42 43 44 45 |
# File 'lib/rspec-system/helper.rb', line 41 def properties(*props) props.each do |prop| define_method(prop) { result_data.send(prop) } end end |
Instance Method Details
#[](key) ⇒ Object
This allows the data to be treated as a hash
139 140 141 |
# File 'lib/rspec-system/helper.rb', line 139 def [](key) result_data[key] end |
#default_node ⇒ Object
Return default node
165 166 167 |
# File 'lib/rspec-system/helper.rb', line 165 def default_node rspec_system_node_set.default_node end |
#execute ⇒ Hash <Symbol, Any>
Always override this method with your own execution routine.
This method is executed to retrieve the data for this helper. It is always overridden by sub-classes.
Here we perform the actual step to retrieve the helper data, returning the result as a basic hash which gets stored for later retrieval via the helper object.
100 101 102 |
# File 'lib/rspec-system/helper.rb', line 100 def execute raise "The #execute method has not be overridden in this class" end |
#name ⇒ String
Return the helper name of this helper object
153 154 155 |
# File 'lib/rspec-system/helper.rb', line 153 def name self.class.name_value end |
#refresh ⇒ void Also known as: run
This method returns an undefined value.
Refresh the data, re-running the action associated with this helper.
127 128 129 130 131 |
# File 'lib/rspec-system/helper.rb', line 127 def refresh @rd = nil result_data nil end |
#result_data ⇒ RSpecSystem::Result
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Internal method to return any result data from resource execution time
If there are no previous results, it will execute the resource action and return those result. The action only runs once, so subsequent requests return the last result.
112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/rspec-system/helper.rb', line 112 def result_data return rd unless rd.nil? begin Timeout::timeout(opts[:timeout]) do @rd = RSpecSystem::Result.new(execute) end rescue Timeout::Error => e raise RSpecSystem::Exception::TimeoutError, e. end end |
#to_hash ⇒ Hash
Retrieve the data from this helper object as a hash
146 147 148 |
# File 'lib/rspec-system/helper.rb', line 146 def to_hash result_data.to_hash end |
#to_s ⇒ String
String representation of helper
160 161 162 |
# File 'lib/rspec-system/helper.rb', line 160 def to_s name + "(" + opts.inspect + ")" end |