Class: Arachni::Page::DOM::Transition
- Defined in:
- lib/arachni/page/dom/transition.rb
Defined Under Namespace
Classes: Error
Constant Summary collapse
- NON_PLAYABLE =
Non-playable events.
Set.new([:request])
- ZERO_DEPTH =
Events without a DOM depth.
Set.new([:request])
Instance Attribute Summary collapse
-
#element ⇒ Browser::ElementLocator
readonly
HTML element which received the #event.
-
#event ⇒ Symbol
Event triggered on #element.
-
#options ⇒ Hash
readonly
Extra options.
- #time ⇒ Float
Class Method Summary collapse
Instance Method Summary collapse
- #==(other) ⇒ Object
-
#complete ⇒ Transition
Marks the transition as finished.
-
#completed? ⇒ Bool
‘true` if the transition has completed, `false` otherwise.
-
#depth ⇒ Integer
Depth for this transition.
- #dup ⇒ Object
- #hash ⇒ Object
-
#initialize(*args, &block) ⇒ Transition
constructor
A new instance of Transition.
-
#play(browser) ⇒ Transition?
New transition as a result of the play, ‘nil` if the play wasn’t successful.
-
#playable? ⇒ Bool
‘true` if the transition is for an event that can be played, `false` otherwise.
-
#running? ⇒ Bool
‘true` if the transition is in progress, `false` otherwise.
-
#start(element, event, options = {}, &block) ⇒ Transition
‘self`.
- #to_hash ⇒ Hash (also: #to_h)
-
#to_rpc_data ⇒ Hash
Data representing this instance that are suitable the RPC transmission.
- #to_s ⇒ String
Constructor Details
#initialize(*args, &block) ⇒ Transition
If arguments are provided they will be passed to #start.
Returns a new instance of Transition.
102 103 104 105 106 107 |
# File 'lib/arachni/page/dom/transition.rb', line 102 def initialize( *args, &block ) @options = {} return if !args.any? start( *args, &block ) end |
Instance Attribute Details
#element ⇒ Browser::ElementLocator (readonly)
Returns HTML element which received the #event.
78 79 80 |
# File 'lib/arachni/page/dom/transition.rb', line 78 def element @element end |
#event ⇒ Symbol
Returns Event triggered on #element.
82 83 84 |
# File 'lib/arachni/page/dom/transition.rb', line 82 def event @event end |
#options ⇒ Hash (readonly)
Returns Extra options.
86 87 88 |
# File 'lib/arachni/page/dom/transition.rb', line 86 def @options end |
Class Method Details
.from_rpc_data(data) ⇒ Transition
263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 |
# File 'lib/arachni/page/dom/transition.rb', line 263 def self.from_rpc_data( data ) instance = allocate data.each do |name, value| value = case name when 'event' value.to_sym when 'element' if value.is_a? String data['event'].to_s == 'request' ? value : value.to_sym else Browser::ElementLocator.from_rpc_data( value ) end when 'options' value.my_symbolize_keys(false) else value end instance.instance_variable_set( "@#{name}", value ) end instance end |
Instance Method Details
#==(other) ⇒ Object
294 295 296 |
# File 'lib/arachni/page/dom/transition.rb', line 294 def ==( other ) hash == other.hash end |
#complete ⇒ Transition
Will stop the timer for #time.
Marks the transition as finished.
166 167 168 169 170 171 172 173 174 |
# File 'lib/arachni/page/dom/transition.rb', line 166 def complete fail Error::Completed, 'Transition has completed.' if completed? fail Error::NotRunning, 'Transition is not running.' if !running? @time = Time.now - @clock @clock = nil self end |
#completed? ⇒ Bool
Returns ‘true` if the transition has completed, `false` otherwise.
219 220 221 |
# File 'lib/arachni/page/dom/transition.rb', line 219 def completed? !!@time end |
#depth ⇒ Integer
Returns Depth for this transition.
180 181 182 |
# File 'lib/arachni/page/dom/transition.rb', line 180 def depth ZERO_DEPTH.include?( event ) ? 0 : 1 end |
#dup ⇒ Object
237 238 239 |
# File 'lib/arachni/page/dom/transition.rb', line 237 def dup deep_clone end |
#hash ⇒ Object
290 291 292 |
# File 'lib/arachni/page/dom/transition.rb', line 290 def hash to_hash.tap { |h| h.delete :time }.hash end |
#play(browser) ⇒ Transition?
Returns New transition as a result of the play, ‘nil` if the play wasn’t successful.
193 194 195 196 197 198 199 200 201 |
# File 'lib/arachni/page/dom/transition.rb', line 193 def play( browser ) fail Error::NotPlayable, "Transition is not playable: #{self}" if !playable? if element == :page && event == :load return browser.goto [:url], cookies: [:cookies] end browser.fire_event element, event, end |
#playable? ⇒ Bool
Returns ‘true` if the transition is for an event that can be played, `false` otherwise.
228 229 230 |
# File 'lib/arachni/page/dom/transition.rb', line 228 def playable? !NON_PLAYABLE.include?( event ) end |
#running? ⇒ Bool
Returns ‘true` if the transition is in progress, `false` otherwise.
209 210 211 |
# File 'lib/arachni/page/dom/transition.rb', line 209 def running? !!@clock end |
#start(element, event, options = {}, &block) ⇒ Transition
Will start the timer for #time.
Returns ‘self`.
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/arachni/page/dom/transition.rb', line 135 def start( element, event, = {}, &block ) fail Error::Completed, 'Transition has completed.' if completed? fail Error::Running, 'Transition is already running' if running? if ![Symbol, String, Browser::ElementLocator].include?( element.class ) fail Error::InvalidElement end self.event = event @element = element @options = .my_symbolize_keys(false) @clock = Time.now return self if !block_given? block.call complete end |
#to_hash ⇒ Hash Also known as: to_h
242 243 244 245 246 247 248 249 250 |
# File 'lib/arachni/page/dom/transition.rb', line 242 def to_hash { element: element.is_a?( Browser::ElementLocator ) ? element.to_h : element, event: event, options: , time: time } end |
#to_rpc_data ⇒ Hash
Returns Data representing this instance that are suitable the RPC transmission.
255 256 257 258 259 |
# File 'lib/arachni/page/dom/transition.rb', line 255 def to_rpc_data h = to_hash.my_stringify_keys(false) h['element'] = element.to_rpc_data_or_self h end |
#to_s ⇒ String
233 234 235 |
# File 'lib/arachni/page/dom/transition.rb', line 233 def to_s "[#{time.to_f}s] '#{event}' on: #{element}" end |