class Crabfarm::BaseNavigator

Attributes

params[R]

Public Class Methods

new(_context, _params) click to toggle source
# File lib/crabfarm/base_navigator.rb, line 15
def initialize(_context,  _params)
  @context = _context
  @params = _params
end

Public Instance Methods

browser(_name=nil) click to toggle source
# File lib/crabfarm/base_navigator.rb, line 30
def browser(_name=nil)
  @context.pool.driver(_name)
end
fork_each(_enumerator, &_block) click to toggle source
# File lib/crabfarm/base_navigator.rb, line 51
def fork_each(_enumerator, &_block)
  session_id = 0
  mutex = Mutex.new
  ths = _enumerator.map do |value|
    session_id += 1
    start_forked_navigation("th_session_#{session_id}", value, _block, mutex)
  end
  ThreadsWait.all_waits(*ths)
end
nav(_name, _params={})
Alias for: navigate
navigate(_name, _params={}) click to toggle source
Also aliased as: nav
reduce(_target=nil, _options={}) click to toggle source
# File lib/crabfarm/base_navigator.rb, line 38
def reduce(_target=nil, _options={})
  if _target.is_a? Hash
    _options = _target
    _target = browser
  elsif _target.nil?
    _target = browser
  end

  reduce_using(_options.delete(:using) || self.class.name, _target, _options)
end
Also aliased as: reduce_with_defaults
reduce_with_defaults(_target=nil, _options={})
Alias for: reduce
run() click to toggle source
# File lib/crabfarm/base_navigator.rb, line 34
def run
  raise NotImplementedError.new
end
session() click to toggle source
# File lib/crabfarm/base_navigator.rb, line 20
def session
  @context.store
end

Private Instance Methods

reduce_using(_name_or_class, _target, _options={}) click to toggle source
# File lib/crabfarm/base_navigator.rb, line 63
def reduce_using(_name_or_class, _target, _options={})
  reducer_class = Utils::Resolve.reducer_class _name_or_class
  reducer = Factories::Reducer.build reducer_class, _target, @params.merge(_options)
  reducer.run
  reducer
end
start_forked_navigation(_name, _value, _block, _mutex) click to toggle source
# File lib/crabfarm/base_navigator.rb, line 70
def start_forked_navigation(_name, _value, _block, _mutex)
  Thread.new {
    fork = ForkedNavigator.new @context, self, _name, _mutex
    begin
      fork.instance_exec _value, &_block
    ensure
      @context.pool.reset _name
    end
  }
end