class FFXIV::Lodestone::FreeCompany

Attributes

active[RW]
focus[RW]
formed[RW]
grand_company[RW]
grand_company_standing[RW]
housing[RW]
id[RW]
logo_uri[RW]
members[RW]
monthly_rank[RW]
name[RW]
num_members[RW]
rank[RW]
recruiting[RW]
recruiting?[RW]
seeking[RW]
server[RW]
slogan[RW]
tag[RW]
weekly_rank[RW]

Public Class Methods

find_by_id(id) click to toggle source
# File lib/ffxiv/lodestone/free-company.rb, line 52
def find_by_id(id)
  begin
    dom = Lodestone.fetch("freecompany/#{id}")

    props = {}
    props[:id] = id

    props[:logo_uri] = dom.search("div.ic_crest_64 img").map{|n| n.attr("src")}

    gcs_node = dom.at("span.friendship_color")
    props[:grand_company_standing] = gcs_node.inner_text[1...-1]

    gc_node = gcs_node.previous_sibling
    props[:grand_company] = gc_node.inner_text.strip

    name_node = gcs_node.next_sibling.next_sibling.next_sibling
    props[:name] = name_node.inner_text

    server_node = name_node.next_sibling.next_sibling
    props[:server] = server_node.inner_text[1...-1]

    props[:tag] = dom.at("td.vm").last_element_child.next_sibling.inner_text[1...-1]

    dom.search("table.table_style2 tr").each do |tr|
      td_node = tr.at("td")
      td_text = td_node.inner_text.strip
      case tr.at("th").inner_text
        when "Formed"
          props[:formed] = Time.at(td_text.match(/ldst_strftime\((\d{10}), 'YMD'\)/)[1].to_i).utc
        when "Rank"
          props[:rank] = td_text.to_i
        when "Active Members"
          props[:num_members] = td_text.to_i
        when "Ranking"
          weekly, monthly, __garbage = td_node.inner_html.split("<br>").map(&:strip)
          props[:weekly_rank] = weekly.include?("--") ? nil : weekly.match(/\d+/)[0].to_i
          props[:monthly_rank] = monthly.include?("--") ? nil : monthly.match(/\d+/)[0].to_i
        when "Company Slogan"
          props[:slogan] = td_text == "" ? nil : td_text
        when "Active"
          props[:active] = td_text == "Not specified" ? nil : td_text
        when "Recruitment"
          props[:recruiting] = td_text == "Open"
        when "Focus"
          props[:focus] = td_node.search("li:not(.icon_off) img").map{|n| n.attr("title")}
        when "Seeking"
          props[:seeking] = td_node.search("li:not(.icon_off) img").map{|n| n.attr("title")}
        when "Estate Profile"
          name_node = td_node.at("div.txt_yellow")
          if name_node
            address_size, greeting = td_node.search("p").map(&:inner_text)
            address, size = address_size.split(" (")
            props[:housing] = {
              name: name_node.inner_text,
              address: address,
              size: size[0...-1],
              greeting: greeting == "No greeting available." ? nil : greeting
            }
          else
            props[:housing] = nil
          end
      end
    end
    self.new(props)
  rescue => e
    pp e
    nil
  end
end
name_to_id(name, server) click to toggle source
# File lib/ffxiv/lodestone/free-company.rb, line 42
def name_to_id(name, server)
  search_results = self.search(name, server: server)
  if search_results
    search_results[:free_companies].each do |fc|
      return fc.id if name.downcase == fc.name.downcase
    end
  end
  nil
end