Class: RSpecSystem::Helper Abstract

Inherits:
Object
  • Object
show all
Includes:
InternalHelpers
Defined in:
lib/rspec-system/helper.rb

Overview

This class is abstract.

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.

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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

This method is abstract.

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_valueObject

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

#optsObject (readonly)

Options when called



26
27
28
# File 'lib/rspec-system/helper.rb', line 26

def opts
  @opts
end

#rdObject (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

Parameters:

  • name (String)

    unique helper method 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

Parameters:

  • props (Array <Symbol>)

    an array of property methods to 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

Parameters:

  • key (Symbol)

    key of value to retrieve



139
140
141
# File 'lib/rspec-system/helper.rb', line 139

def [](key)
  result_data[key]
end

#default_nodeObject

Return default node



165
166
167
# File 'lib/rspec-system/helper.rb', line 165

def default_node
  rspec_system_node_set.default_node
end

#executeHash <Symbol, Any>

This method is abstract.

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.

Returns:

  • (Hash <Symbol, Any>)

    return a hash of results, with symbolic keys



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

#nameString

Return the helper name of this helper object

Returns:

  • (String)

    name of helper



153
154
155
# File 'lib/rspec-system/helper.rb', line 153

def name
  self.class.name_value
end

#refreshvoid 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_dataRSpecSystem::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.

Returns:



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.message
  end
end

#to_hashHash

Retrieve the data from this helper object as a hash

Returns:

  • (Hash)

    result data as a hash



146
147
148
# File 'lib/rspec-system/helper.rb', line 146

def to_hash
  result_data.to_hash
end

#to_sString

String representation of helper

Returns:

  • (String)

    helper_name(args) formatted string



160
161
162
# File 'lib/rspec-system/helper.rb', line 160

def to_s
  name + "(" + opts.inspect + ")"
end