Class: Wikidotrb::Module::SiteApplication

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(site:, user:, text:) ⇒ SiteApplication

Returns a new instance of SiteApplication.



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

def initialize(site:, user:, text:)
  @site = site
  @user = user
  @text = text
end

Instance Attribute Details

#site (readonly)

Returns the value of attribute site.



13
14
15
# File 'lib/wikidotrb/module/site_application.rb', line 13

def site
  @site
end

#text (readonly)

Returns the value of attribute text.



13
14
15
# File 'lib/wikidotrb/module/site_application.rb', line 13

def text
  @text
end

#user (readonly)

Returns the value of attribute user.



13
14
15
# File 'lib/wikidotrb/module/site_application.rb', line 13

def user
  @user
end

Class Method Details

.acquire_all(site:)



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
57
58
59
# File 'lib/wikidotrb/module/site_application.rb', line 25

def self.acquire_all(site:)
  # サイトへの未処理の申請を取得する
  # @param site [Site] サイト
  # @return [Array<SiteApplication>] 申請のリスト
  response = site.amc_request(
    bodies: [{ moduleName: "managesite/ManageSiteMembersApplicationsModule" }]
  ).first

  body = response["body"]

  raise Wikidotrb::Common::Exceptions::ForbiddenException, "You are not allowed to access this page" if body.include?("WIKIDOT.page.listeners.loginClick(event)")

  html = Nokogiri::HTML(response["body"])

  applications = []

  user_elements = html.css("h3 span.printuser")
  text_wrapper_elements = html.css("table")

  if user_elements.length != text_wrapper_elements.length
    raise Wikidotrb::Common::Exceptions::UnexpectedException,
          "Length of user_elements and text_wrapper_elements are different"
  end

  user_elements.each_with_index do |user_element, i|
    text_wrapper_element = text_wrapper_elements[i]

    user = Wikidotrb::Util::Parser::UserParser.user(site.client, user_element)
    text = text_wrapper_element.css("td")[1].text.strip

    applications << SiteApplication.new(site: site, user: user, text: text)
  end

  applications
end

Instance Method Details

#_process(action)

Raises:

  • (ArgumentError)


61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/wikidotrb/module/site_application.rb', line 61

def _process(action)
  # 申請を処理する
  # @param action [String] 処理の種類 ('accept' または 'decline')
  raise ArgumentError, "Invalid action: #{action}" unless %w[accept decline].include?(action)

  begin
    site.amc_request(
      bodies: [{
        action: "ManageSiteMembershipAction",
        event: "acceptApplication",
        user_id: user.id,
        text: "your application has been #{action}ed",
        type: action,
        moduleName: "Empty"
      }]
    )
  rescue Wikidotrb::Common::Exceptions::WikidotStatusCodeException => e
    raise e unless e.status_code == "no_application"

    raise Wikidotrb::Common::Exceptions::NotFoundException.new(
      "Application not found: #{user}"
    ), e
  end
end

#accept

申請を承認する



87
88
89
# File 'lib/wikidotrb/module/site_application.rb', line 87

def accept
  _process("accept")
end

#decline

申請を拒否する



92
93
94
# File 'lib/wikidotrb/module/site_application.rb', line 92

def decline
  _process("decline")
end

#to_s



21
22
23
# File 'lib/wikidotrb/module/site_application.rb', line 21

def to_s
  "SiteApplication(user=#{user}, site=#{site}, text=#{text})"
end