Class: Saper::Runtime

Inherits:
Object
  • Object
show all
Defined in:
lib/saper/core/runtime.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(stack = [], input = nil, options = {}) ⇒ Saper::Runtime

Returns a new Saper::Runtime instance.

Parameters:

  • stack (Array<Saper::Action>) (defaults to: [])

    chain of actions

  • input (Object, nil) (defaults to: nil)

    action input

  • options (Hash) (defaults to: {})


30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/saper/core/runtime.rb', line 30

def initialize(stack = [], input = nil, options = {})
  if stack.is_a?(Recipe)
    stack = stack.actions
  end
  @input      = input
  @output     = nil
  @error      = nil
  @action     = nil
  @children   = []
  @subrecipes = []
  @options    = options
  @depth      = stack.size
  @options[:keychain]  ||= Keychain.new
  @options[:logger]    ||= Logger.new(@options[:log])
  @options[:browser]   ||= Browser.new(:logger => logger)
  @options[:variables] ||= {}
  if block_given?
    yield self
  end
  execute(stack.dup)
end

Instance Attribute Details

#actionObject (readonly)

Returns action instance.



14
15
16
# File 'lib/saper/core/runtime.rb', line 14

def action
  @action
end

#childrenObject (readonly)

Returns subsequent runtime instances.



20
21
22
# File 'lib/saper/core/runtime.rb', line 20

def children
  @children
end

#depthObject (readonly)

Returns the size of action chain.



23
24
25
# File 'lib/saper/core/runtime.rb', line 23

def depth
  @depth
end

#errorObject (readonly)

Returns error instance (if any)



11
12
13
# File 'lib/saper/core/runtime.rb', line 11

def error
  @error
end

#inputObject (readonly)

Returns action input.



5
6
7
# File 'lib/saper/core/runtime.rb', line 5

def input
  @input
end

#outputObject (readonly)

Returns action output.



8
9
10
# File 'lib/saper/core/runtime.rb', line 8

def output
  @output
end

#subrecipesObject (readonly)

Returns embedded recipes



17
18
19
# File 'lib/saper/core/runtime.rb', line 17

def subrecipes
  @subrecipes
end

Instance Method Details

#[](name) ⇒ Object

Get variable value

Parameters:

  • name (Symbol)

Returns:

  • (Object)


73
74
75
# File 'lib/saper/core/runtime.rb', line 73

def [](name)
  @options[:variables][name]
end

#[]=(name, value) ⇒ Object

Set variable value

Parameters:

  • name (Symbol)
  • value (Object)

Returns:

  • (Object)


81
82
83
# File 'lib/saper/core/runtime.rb', line 81

def []=(name, value)
  @options[:variables][name] = value
end

#backtracevoid

This method returns an undefined value.

Writes full runtime log to logger instance.



136
137
138
# File 'lib/saper/core/runtime.rb', line 136

def backtrace
  logger.runtime(self)
end

#browserSaper::Browser

Returns Saper::Browser instance used by runtime.

Returns:



118
119
120
# File 'lib/saper/core/runtime.rb', line 118

def browser
  @options[:browser]
end

#bytes_receivedInteger

Returns volume of incoming traffic (in bytes)

Returns:

  • (Integer)


54
55
56
# File 'lib/saper/core/runtime.rb', line 54

def bytes_received
  browser.received
end

#bytes_sentInteger

Returns volume of outgoing traffic (in bytes)

Returns:

  • (Integer)


60
61
62
# File 'lib/saper/core/runtime.rb', line 60

def bytes_sent
  browser.sent
end

#credentials(service) ⇒ Object?

Returns access credentials for specified service

Parameters:

  • service (Symbol)

Returns:

  • (Object, nil)


143
144
145
# File 'lib/saper/core/runtime.rb', line 143

def credentials(service)
  keychain[service]
end

#descendants(level = 0) ⇒ Array<Saper::Runtime>

Returns descendant runtime instances at a given depth level.

Parameters:

  • level (Integer) (defaults to: 0)

Returns:



94
95
96
# File 'lib/saper/core/runtime.rb', line 94

def descendants(level = 0)
  level < 1 ? [self] : children.map { |i| i.descendants(level - 1) }.flatten
end

#error?Boolean

Returns ‘true` if action raised at least one error.

Returns:

  • (Boolean)


171
172
173
# File 'lib/saper/core/runtime.rb', line 171

def error?
  !success?
end

#http_requestsInteger

Returns number of HTTP requests

Returns:

  • (Integer)


66
67
68
# File 'lib/saper/core/runtime.rb', line 66

def http_requests
  browser.requests
end

#keychainSaper::Keychain

Returns Saper::Keychain instance used by runtime.

Returns:



124
125
126
# File 'lib/saper/core/runtime.rb', line 124

def keychain
  @options[:keychain]
end

#loggerSaper::Logger

Returns Saper::Logger.

Returns:



130
131
132
# File 'lib/saper/core/runtime.rb', line 130

def logger
  @options[:logger]
end

#multiple?Boolean

Returns ‘true` if this or any of the subsequent actions produces multiple results.

Returns:

  • (Boolean)


112
113
114
# File 'lib/saper/core/runtime.rb', line 112

def multiple?
  (action.nil? ? false : action.multiple?) || children.any?(&:multiple?)
end

#native_resultsObject+

Returns runtime results as native Ruby objects.

Returns:

  • (Object, Array<Object>)


189
190
191
# File 'lib/saper/core/runtime.rb', line 189

def native_results
  multiple? ? native_result_array : native_result_array.first
end

#non_native_resultsSaper::Item+

Returns runtime results as Saper::Item instances.

Returns:



183
184
185
# File 'lib/saper/core/runtime.rb', line 183

def non_native_results
  multiple? ? non_native_result_array : non_native_result_array.first
end

#recipe(recipe, input = nil, &block) ⇒ Saper::Runtime

Runs an arbitrary recipe, specified by ID, block or as instance.

Parameters:

Returns:



151
152
153
154
155
156
157
158
159
160
161
# File 'lib/saper/core/runtime.rb', line 151

def recipe(recipe, input = nil, &block)
  unless recipe.is_a?(Recipe)
    raise RecipeNotFound, recipe
  end
  runtime = Runtime.new(recipe, input, @options.merge(:variables => {}))
  if runtime.error?
    @error = runtime.error
  end
  subrecipes << runtime
  runtime.non_native_results
end

#result_arrayArray

Returns an array of results.

Returns:

  • (Array)


106
107
108
# File 'lib/saper/core/runtime.rb', line 106

def result_array
  native_result_array
end

#resultsArray<Object>, Object

Returns runtime results.

Returns:

  • (Array<Object>, Object)


100
101
102
# File 'lib/saper/core/runtime.rb', line 100

def results
  native_results
end

#success?Boolean

Returns ‘true` if action raised no errors.

Returns:

  • (Boolean)


165
166
167
# File 'lib/saper/core/runtime.rb', line 165

def success?
  error.nil?
end

#to_json(*args) ⇒ Array

Returns runtime results as JSON.

Returns:

  • (Array)


177
178
179
# File 'lib/saper/core/runtime.rb', line 177

def to_json(*args)
  JSON.generate non_native_results.map(&:serialize)
end

#variablesHash

Return a hash with all variables

Returns:

  • (Hash)


87
88
89
# File 'lib/saper/core/runtime.rb', line 87

def variables
  @options[:variables].dup
end