Class: Saper::Runtime
- Inherits:
-
Object
- Object
- Saper::Runtime
- Defined in:
- lib/saper/core/runtime.rb
Instance Attribute Summary collapse
-
#action ⇒ Object
readonly
Returns action instance.
-
#children ⇒ Object
readonly
Returns subsequent runtime instances.
-
#depth ⇒ Object
readonly
Returns the size of action chain.
-
#error ⇒ Object
readonly
Returns error instance (if any).
-
#input ⇒ Object
readonly
Returns action input.
-
#output ⇒ Object
readonly
Returns action output.
-
#subrecipes ⇒ Object
readonly
Returns embedded recipes.
Instance Method Summary collapse
-
#[](name) ⇒ Object
Get variable value.
-
#[]=(name, value) ⇒ Object
Set variable value.
-
#backtrace ⇒ void
Writes full runtime log to logger instance.
-
#browser ⇒ Saper::Browser
Returns Saper::Browser instance used by runtime.
-
#bytes_received ⇒ Integer
Returns volume of incoming traffic (in bytes).
-
#bytes_sent ⇒ Integer
Returns volume of outgoing traffic (in bytes).
-
#credentials(service) ⇒ Object?
Returns access credentials for specified service.
-
#descendants(level = 0) ⇒ Array<Saper::Runtime>
Returns descendant runtime instances at a given depth level.
-
#error? ⇒ Boolean
Returns ‘true` if action raised at least one error.
-
#http_requests ⇒ Integer
Returns number of HTTP requests.
-
#initialize(stack = [], input = nil, options = {}) ⇒ Saper::Runtime
constructor
Returns a new Saper::Runtime instance.
-
#keychain ⇒ Saper::Keychain
Returns Saper::Keychain instance used by runtime.
-
#logger ⇒ Saper::Logger
Returns Saper::Logger.
-
#multiple? ⇒ Boolean
Returns ‘true` if this or any of the subsequent actions produces multiple results.
-
#native_results ⇒ Object+
Returns runtime results as native Ruby objects.
-
#non_native_results ⇒ Saper::Item+
Returns runtime results as Saper::Item instances.
-
#recipe(recipe, input = nil, &block) ⇒ Saper::Runtime
Runs an arbitrary recipe, specified by ID, block or as instance.
-
#result_array ⇒ Array
Returns an array of results.
-
#results ⇒ Array<Object>, Object
Returns runtime results.
-
#success? ⇒ Boolean
Returns ‘true` if action raised no errors.
-
#to_json(*args) ⇒ Array
Returns runtime results as JSON.
-
#variables ⇒ Hash
Return a hash with all variables.
Constructor Details
#initialize(stack = [], input = nil, options = {}) ⇒ Saper::Runtime
Returns a new Saper::Runtime instance.
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, = {}) if stack.is_a?(Recipe) stack = stack.actions end @input = input @output = nil @error = nil @action = nil @children = [] @subrecipes = [] @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
#action ⇒ Object (readonly)
Returns action instance.
14 15 16 |
# File 'lib/saper/core/runtime.rb', line 14 def action @action end |
#children ⇒ Object (readonly)
Returns subsequent runtime instances.
20 21 22 |
# File 'lib/saper/core/runtime.rb', line 20 def children @children end |
#depth ⇒ Object (readonly)
Returns the size of action chain.
23 24 25 |
# File 'lib/saper/core/runtime.rb', line 23 def depth @depth end |
#error ⇒ Object (readonly)
Returns error instance (if any)
11 12 13 |
# File 'lib/saper/core/runtime.rb', line 11 def error @error end |
#input ⇒ Object (readonly)
Returns action input.
5 6 7 |
# File 'lib/saper/core/runtime.rb', line 5 def input @input end |
#output ⇒ Object (readonly)
Returns action output.
8 9 10 |
# File 'lib/saper/core/runtime.rb', line 8 def output @output end |
#subrecipes ⇒ Object (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
73 74 75 |
# File 'lib/saper/core/runtime.rb', line 73 def [](name) @options[:variables][name] end |
#[]=(name, value) ⇒ Object
Set variable value
81 82 83 |
# File 'lib/saper/core/runtime.rb', line 81 def []=(name, value) @options[:variables][name] = value end |
#backtrace ⇒ void
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 |
#browser ⇒ Saper::Browser
Returns Saper::Browser instance used by runtime.
118 119 120 |
# File 'lib/saper/core/runtime.rb', line 118 def browser @options[:browser] end |
#bytes_received ⇒ Integer
Returns volume of incoming traffic (in bytes)
54 55 56 |
# File 'lib/saper/core/runtime.rb', line 54 def bytes_received browser.received end |
#bytes_sent ⇒ Integer
Returns volume of outgoing traffic (in bytes)
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
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.
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.
171 172 173 |
# File 'lib/saper/core/runtime.rb', line 171 def error? !success? end |
#http_requests ⇒ Integer
Returns number of HTTP requests
66 67 68 |
# File 'lib/saper/core/runtime.rb', line 66 def http_requests browser.requests end |
#keychain ⇒ Saper::Keychain
Returns Saper::Keychain instance used by runtime.
124 125 126 |
# File 'lib/saper/core/runtime.rb', line 124 def keychain @options[:keychain] end |
#logger ⇒ Saper::Logger
Returns Saper::Logger.
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.
112 113 114 |
# File 'lib/saper/core/runtime.rb', line 112 def multiple? (action.nil? ? false : action.multiple?) || children.any?(&:multiple?) end |
#native_results ⇒ Object+
Returns runtime results as native Ruby objects.
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_results ⇒ Saper::Item+
Returns runtime results as Saper::Item instances.
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.
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_array ⇒ Array
Returns an array of results.
106 107 108 |
# File 'lib/saper/core/runtime.rb', line 106 def result_array native_result_array end |
#results ⇒ Array<Object>, Object
Returns runtime results.
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.
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.
177 178 179 |
# File 'lib/saper/core/runtime.rb', line 177 def to_json(*args) JSON.generate non_native_results.map(&:serialize) end |
#variables ⇒ Hash
Return a hash with all variables
87 88 89 |
# File 'lib/saper/core/runtime.rb', line 87 def variables @options[:variables].dup end |