Class List Method List File List

# Class: GenerateList

Inherits:
  Object
  - Object
  - GenerateList
  show all
Defined in:
  lib/wpstools/plugins/list_generator/generate_list.rb

## Overview

This tool generates a list to use for plugin and theme enumeration

## Instance Attribute Summary (collapse)

- - (Object) verbose

  Returns the value of attribute verbose.

## Instance Method Summary (collapse)

- - (Object) generate_full_list
- - (Object) generate_popular_list(pages)
- - (Object) get_popular_items(pages)

  Send a HTTP request to the WordPress most popular theme or plugin webpage parse the response for the names.

- - (GenerateList) initialize(type, verbose) constructor

  type = themes | plugins.

- - (Object) save(items)

  Save the file.

- - (Object) set_file_name(type)

## Constructor Details

### - (`GenerateList`) initialize(type, verbose)

type = themes | plugins

    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    # File 'lib/wpstools/plugins/list_generator/generate_list.rb', line 9

    def initialize(type, verbose)
      if type =~ /plugins/i
        @type           = 'plugin'
        @svn_url        = 'http://plugins.svn.wordpress.org/'
        @popular_url    = 'http://wordpress.org/extend/plugins/browse/popular/'
        @popular_regex  = %r{<h3><a href="http://wordpress.org/extend/plugins/(.+)/">.+</a></h3>}i
      elsif type =~ /themes/i
        @type           = 'theme'
        @svn_url        = 'http://themes.svn.wordpress.org/'
        @popular_url    = 'http://wordpress.org/extend/themes/browse/popular/'
        @popular_regex  = %r{<h3><a href="http://wordpress.org/extend/themes/(.+)">.+</a></h3>}i
      else
        raise "Type #{type} not defined"
      end
      @verbose  = verbose
      @browser  = Browser.instance
      @hydra    = @browser.hydra
    end

## Instance Attribute Details

### - (`Object`) verbose

Returns the value of attribute verbose

    6
    7
    8
    # File 'lib/wpstools/plugins/list_generator/generate_list.rb', line 6

    def verbose
      @verbose
    end

## Instance Method Details

### - (`Object`) generate_full_list

    53
    54
    55
    56
    57
    # File 'lib/wpstools/plugins/list_generator/generate_list.rb', line 53

    def generate_full_list
      set_file_name(:full)
      items = SvnParser.new(@svn_url).parse
      save items
    end

### - (`Object`) generate_popular_list(pages)

    59
    60
    61
    62
    63
    # File 'lib/wpstools/plugins/list_generator/generate_list.rb', line 59

    def generate_popular_list(pages)
      set_file_name(:popular)
      items = get_popular_items(pages)
      save items
    end

### - (`Object`) get_popular_items(pages)

Send a HTTP request to the WordPress most popular theme or plugin webpage parse the response for the names.

    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    # File 'lib/wpstools/plugins/list_generator/generate_list.rb', line 67

    def get_popular_items(pages)
      found_items = []
      page_count = 1
      queue_count = 0

      (1...(pages.to_i + 1)).each do |page|
        # First page has another URL
        url = (page == 1) ? @popular_url : @popular_url + 'page/' + page.to_s + '/'
        request = @browser.forge_request(url)

        queue_count += 1

        request.on_complete do |response|
          puts "[+] Parsing page #{page_count}" if @verbose
          page_count += 1
          response.body.scan(@popular_regex).each do |item|
            puts "[+] Found popular #@type: #{item}" if @verbose
            found_items << item[0]
          end
        end

        @hydra.queue(request)

        if queue_count == @browser.max_threads
          @hydra.run
          queue_count = 0
        end

      end

      @hydra.run

      found_items.sort!
      found_items.uniq
    end

### - (`Object`) save(items)

Save the file

    104
    105
    106
    107
    108
    109
    110
    # File 'lib/wpstools/plugins/list_generator/generate_list.rb', line 104

    def save(items)
      items.sort!
      items.uniq!
      puts "[*] We have parsed #{items.length} #@types"
      File.open(@file_name, 'w') { |f| f.puts(items) }
      puts "New #@file_name file created"
    end

### - (`Object`) set_file_name(type)

    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    # File 'lib/wpstools/plugins/list_generator/generate_list.rb', line 28

    def set_file_name(type)
      case @type
      when 'plugin'
        case type
        when :full
          @file_name = PLUGINS_FULL_FILE
        when :popular
          @file_name = PLUGINS_FILE
        else
          raise 'Unknown type'
        end
      when 'theme'
        case type
        when :full
          @file_name = THEMES_FULL_FILE
        when :popular
          @file_name = THEMES_FILE
        else
          raise 'Unknown type'
        end
        else
          raise "Unknown type #@type"
      end
    end