Class: Wikidotrb::Module::PrivateMessageCollection

Inherits:
Array
  • Object
show all
Extended by:
Common::Decorators
Defined in:
lib/wikidotrb/module/private_message.rb

Direct Known Subclasses

PrivateMessageInbox, PrivateMessageSentBox

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

._acquire(client:, module_name:)



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/wikidotrb/module/private_message.rb', line 58

def self._acquire(client:, module_name:)
  response = client.amc_client.request(bodies: [{ moduleName: module_name }])[0]

  html = Nokogiri::HTML(response["body"]) if response && response["body"]
  pager = html.css("div.pager span.target")
  max_page = pager.length > 2 ? pager[-2].text.to_i : 1

  responses = if max_page > 1
                bodies = (1..max_page).map { |page| { page: page, moduleName: module_name } }
                client.amc_client.request(bodies: bodies, return_exceptions: false)
              else
                [response]
              end

  message_ids = []
  responses.each do |res|
    html = Nokogiri::HTML(res["body"]) if res && res["body"]
    message_ids += html.css("tr.message").map { |tr| tr["data-href"].split("/").last.to_i }
  end

  from_ids(client: client, message_ids: message_ids)
end

.from_ids(client:, message_ids:)



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/wikidotrb/module/private_message.rb', line 22

def self.from_ids(client:, message_ids:)
  bodies = message_ids.map do |message_id|
    { item: message_id, moduleName: "dashboard/messages/DMViewMessageModule" }
  end

  responses = client.amc_client.request(bodies: bodies, return_exceptions: true)

  messages = []

  responses.each_with_index do |response, index|
    if response.is_a?(Wikidotrb::Common::Exceptions::WikidotStatusCodeException) && response.status_code == "no_message"
      raise Wikidotrb::Common::Exceptions::ForbiddenException.new(
        "Failed to get message: #{message_ids[index]}"
      ), response
    end

    raise response if response.is_a?(Exception)

    next unless response && response["body"]

    html = Nokogiri::HTML(response["body"])
    sender, recipient = html.css("div.pmessage div.header span.printuser")
    messages << PrivateMessage.new(
      client: client,
      id: message_ids[index],
      sender: Wikidotrb::Util::Parser::UserParser.parse(client, sender),
      recipient: Wikidotrb::Util::Parser::UserParser.parse(client, recipient),
      subject: html.css("div.pmessage div.header span.subject").text.strip,
      body: html.css("div.pmessage div.body").text.strip,
      created_at: Wikidotrb::Util::Parser::ODateParser.parse(html.css("div.header span.odate"))
    )
  end

  new(messages)
end

.login_required(*methods) Originally defined in module Common::Decorators

Instance Method Details

#to_s



18
19
20
# File 'lib/wikidotrb/module/private_message.rb', line 18

def to_s
  "#{self.class.name}(#{size} messages)"
end