Class: Wikidotrb::Module::ForumCategoryCollection

Inherits:
Array
  • Object
show all
Defined in:
lib/wikidotrb/module/forum_category.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(forum:, categories: []) ⇒ ForumCategoryCollection

初期化メソッド

Parameters:

  • forum (Forum)

    フォーラムオブジェクト

  • categories (Array<ForumCategory>) (defaults to: [])

    カテゴリーのリスト



15
16
17
18
# File 'lib/wikidotrb/module/forum_category.rb', line 15

def initialize(forum:, categories: [])
  super(categories)
  @forum = forum
end

Instance Attribute Details

#forum

Returns the value of attribute forum.



10
11
12
# File 'lib/wikidotrb/module/forum_category.rb', line 10

def forum
  @forum
end

Class Method Details

.acquire_update(forum:, categories:) ⇒ Array<ForumCategory>

カテゴリ情報を取得して更新する

Parameters:

  • forum (Forum)

    フォーラムオブジェクト

  • categories (Array<ForumCategory>)

    カテゴリーのリスト

Returns:

  • (Array<ForumCategory>)

    更新されたカテゴリのリスト



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/wikidotrb/module/forum_category.rb', line 47

def self.acquire_update(forum:, categories:)
  return categories if categories.empty?

  responses = forum.site.amc_request(
    bodies: categories.map { |category| { "c" => category.id, "moduleName" => "forum/ForumViewCategoryModule" } }
  )

  responses.each_with_index do |response, index|
    category = categories[index]
    html = Nokogiri::HTML(response.body.to_s)
    statistics = html.at_css("div.statistics").text
    description = html.at_css("div.description-block").text.strip
    info = html.at_css("div.forum-breadcrumbs").text.match(%r{([ \S]*) / ([ \S]*)})
    counts = statistics.scan(/\d+/).map(&:to_i)

    category.last = nil if category.posts_counts != counts[1]
    category.description = description.match(/[ \S]*$/)[0]
    category.threads_counts, category.posts_counts = counts
    category.group = category.forum.groups.find(info[1])
    category.title = info[2]
    pager_no = html.at_css("span.pager-no")
    category.pagerno = pager_no.nil? ? 1 : pager_no.text.match(/of (\d+)/)[1].to_i
  end

  categories
end

.get_categories(site:, forum:)

サイトとフォーラムからカテゴリを取得

Parameters:

  • site (Site)

    サイトオブジェクト

  • forum (Forum)

    フォーラムオブジェクト



23
24
25
26
27
28
29
30
31
# File 'lib/wikidotrb/module/forum_category.rb', line 23

def self.get_categories(site:, forum:)
  categories = []

  forum.groups.each do |group|
    categories.concat(group.categories)
  end

  forum._categories = ForumCategoryCollection.new(forum: forum, categories: categories)
end

Instance Method Details

#find(id: nil, title: nil) ⇒ ForumCategory?

IDまたはタイトルからカテゴリを検索

Parameters:

  • id (Integer) (defaults to: nil)

    カテゴリID

  • title (String) (defaults to: nil)

    カテゴリのタイトル

Returns:



37
38
39
40
41
# File 'lib/wikidotrb/module/forum_category.rb', line 37

def find(id: nil, title: nil)
  find do |category|
    (id.nil? || category.id == id) && (title.nil? || category.title == title)
  end
end

#update

カテゴリ情報を更新



75
76
77
# File 'lib/wikidotrb/module/forum_category.rb', line 75

def update
  ForumCategoryCollection.acquire_update(forum: @forum, categories: self)
end