module SpiderCore::FieldDSL

Public Instance Methods

field(display, pattern, opts = {}, &block) click to toggle source

Get a field on current page.

@param display [String] display name

# File lib/spider_core/field_dsl.rb, line 7
def field(display, pattern, opts = {}, &block)
  actions << lambda {
    action_for(:field, {display: display, pattern: pattern}, opts, &block)
  }
end
fields(display, pattern, opts = {}, &block) click to toggle source
# File lib/spider_core/field_dsl.rb, line 13
def fields(display, pattern, opts = {}, &block)
  actions << lambda {
    action_for(:fields, {display: display, pattern: pattern}, opts, &block)
  }
end
foreach(pattern, opts = {}) { |element| ... } click to toggle source
# File lib/spider_core/field_dsl.rb, line 19
def foreach(pattern, opts = {}, &block)
  return unless block_given?

  actions << lambda {
    scan_all(pattern, opts).each do |element|
      yield(element)
    end
  }
end

Protected Instance Methods

action_for(action, action_opts = {}, opts = {}, &block) click to toggle source
# File lib/spider_core/field_dsl.rb, line 31
def action_for(action, action_opts = {}, opts = {}, &block)
  begin
    logger.info "Start to get `#{action_opts[:pattern]}` displayed `#{action_opts[:display]}`."

    elements = case action
    when :field
      scan_first action_opts[:pattern]
    when :fields
      scan_all action_opts[:pattern], opts
    else
      raise 'Unknow action.'
    end

    put(
      action_opts[:display].to_s,
      handle_elements(elements, &block)
    )
  rescue Exception => err
    logger.fatal("Caught exception when get `#{action_opts[:pattern]}`.")
    logger.fatal(err)
  end
end