Sha256: 9faa80dbccba0dc34d3a3736ac5d87c0830cfd275dbc6ab6c5032efac86a11f5

Contents?: true

Size: 1.81 KB

Versions: 4

Compression:

Stored size: 1.81 KB

Contents

module Itest5ch
  class Board
    include HttpMethods

    # @!attribute [rw] url
    #   @return [String]
    attr_accessor :url

    # @!attribute [rw] name
    #   @return [String]
    attr_accessor :name

    # @param url  [String]
    # @param name [String]
    def initialize(url, name: nil)
      @url = url
      @name = name
    end

    # @param other [Itest5ch::Board]
    #
    # @return [Boolean]
    def ==(other)
      other.is_a?(Board) && url == other.url && name == other.name
    end

    # @return [Array<Itest5ch::Thread>]
    def threads
      hash = get_json(json_url, referer: url)
      hash["threads"].map do |thread|
        board, dat = thread[3].split("/", 2)
        Itest5ch::Thread.new(
          subdomain: thread[2],
          board:     board,
          dat:       dat.to_i,
          name:      thread[5],
        )
      end
    end

    # @return [String]
    def json_url
      if (m = url.match(%r{^https?://itest\.5ch\.net/subback/(.+?)/?$}))
        return "http://itest.5ch.net/subbacks/#{m[1]}.json"
      end

      if (m = url.match(%r{^https?://.+\.5ch\.net/(.+?)/?$}))
        return "http://itest.5ch.net/subbacks/#{m[1]}.json"
      end

      raise "Unknown url: #{url}"
    end

    # Get all boards
    #
    # @return [Hash<String, Array<Itest5ch::Board>>] key: category name, value: boards
    def self.all
      BoardListPage.new.all
    end

    # @param category_name [String]
    #
    # @return [Array<Itest5ch::Board>]
    def self.find_category_boards(category_name)
      all[category_name]
    end

    # @param board_name [String] name or id
    #
    # @return [Itest5ch::Board]
    def self.find(board_name)
      url = "#{Itest5ch::BoardListPage::BOARDS_URL}subback/#{board_name}"
      all.values.flatten.find {|board| board_name == board.name || url == board.url }
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
itest5ch-2.0.2 lib/itest5ch/board.rb
itest5ch-2.0.1 lib/itest5ch/board.rb
itest5ch-2.0.0 lib/itest5ch/board.rb
itest5ch-1.0.0 lib/itest5ch/board.rb