xiv_lodestone 0.0.5 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 900f8547e08b2e76ee9b9392bb936fbc92c9b977
4
- data.tar.gz: 12f1fe3b77ca3771923ca7b116b56d3d29a414a7
3
+ metadata.gz: a92571930948bd80f2cea06378f6e4fe4eb6b017
4
+ data.tar.gz: 3d89acd7ca2b5791daa40fe6441fe479d70a1378
5
5
  SHA512:
6
- metadata.gz: 2720c1bb7badfdbbe00d1cd2289f2b1a064c15aabf0bc9527f7f38ad81781e6e892789df9e50038d657fe93c53bf44749136104813fc96782bf555a27dc0f5b9
7
- data.tar.gz: b37c89c1ae581c130cb57d697fa6a48d717798377757a080d91821e367909eb7aeea465723303783db078b2dd8a35a8992df2c4abc7046a828721f98a6a66c63
6
+ metadata.gz: d0c15baf24184bf633f8b6a495a3c4c2369ac049f549ac20068ff576026389ebe20737d265fb1e3240ef7bb7e0e7206de043e411e0157384fcaf23b225fb45b5
7
+ data.tar.gz: bab943d7731b5201be6a1232d6d9c07258b7549c7b2ad4a4c41b6b3f77fd8ad62b1ecff958c7d89db3f6c1be5e3a18f00f21afe38775825ab515d8abda49ddad
data/.travis.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.0
3
+ - 2.2.1
4
4
  sudo: false
5
5
  cache: bundler
6
6
  addons:
@@ -35,7 +35,7 @@ module XIVLodestone
35
35
  end
36
36
  # Returns the current character job
37
37
  def job
38
- @profile[:gear].soul_crystal.name.gsub("Soul of the ", "")
38
+ @profile[:gear].soul_crystal.name.gsub("Soul of the ", "").delete!("\n\t")
39
39
  end
40
40
  # Generates missing methods from @profile hash keys
41
41
  def method_missing(method)
@@ -1,39 +1,41 @@
1
- require 'xiv_lodestone/lodestone_helper'
2
- require 'json'
3
-
4
- module XIVLodestone
5
- # A Object that represents a set of atrributes from
6
- # lodestone website. The class parsers a given xpath
7
- # for attributes and stores them in a Hash. All method
8
- # names are based of names of attributes from lodestone website
9
- class AttributeList
10
- def initialize(attribute_path)
11
- @attributes = {}
12
- parse_attributes(attribute_path)
13
- end
14
- # Generate methods from each key in the @attribute hash
15
- def method_missing(method)
16
- return @attributes[method] if @attributes.key?(method)
17
- super
18
- end
19
- # Converts t
20
- def to_json()
21
- @attributes.to_json
22
- end
23
- #### Private Methods ####
24
- # Parsers attributes from a document into @attribute hash
25
- def parse_attributes(attribute_path)
26
- attribute_path.each_with_index do |li, index|
27
- # For some weird reason the first 6 elements don't use span tags like the rest.
28
- if index < 6
29
- @attributes[Helper.replace_downcase(li['class']).to_sym] = li.text.to_i
30
- else
31
- ele = li.text.split(/(?<=\D)(?=\d)/)
32
- @attributes[Helper.replace_downcase(ele[0]).to_sym] = ele[1].to_i
33
- end
34
- end
35
- end
36
-
37
- private :parse_attributes
38
- end
39
- end
1
+ require 'xiv_lodestone/lodestone_helper'
2
+ require 'json'
3
+
4
+ module XIVLodestone
5
+ # A Object that represents a set of atrributes from
6
+ # lodestone website. The class parsers a given xpath
7
+ # for attributes and stores them in a Hash. All method
8
+ # names are based of names of attributes from lodestone website
9
+ class AttributeList
10
+ @@attribute_hash = [ "strength", "dexterity", "vitality", "intelligence", "mind", "piety" ]
11
+
12
+ def initialize(attribute_path)
13
+ @attributes = {}
14
+ parse_attributes(attribute_path)
15
+ end
16
+ # Generate methods from each key in the @attribute hash
17
+ def method_missing(method)
18
+ return @attributes[method] if @attributes.key?(method)
19
+ super
20
+ end
21
+ # Converts t
22
+ def to_json()
23
+ @attributes.to_json
24
+ end
25
+ #### Private Methods ####
26
+ # Parsers attributes from a document into @attribute hash
27
+ def parse_attributes(attribute_path)
28
+ attribute_path.each_with_index do |li, index|
29
+ # For some weird reason the first 6 elements don't use span tags like the rest.
30
+ if index < 6
31
+ @attributes[@@attribute_hash[index].to_sym] = li.text.to_i
32
+ else
33
+ ele = li.text.split(/(?<=\D)(?=\d)/)
34
+ @attributes[Helper.replace_downcase(ele[0]).to_sym] = ele[1].to_i
35
+ end
36
+ end
37
+ end
38
+
39
+ private :parse_attributes
40
+ end
41
+ end
@@ -1,29 +1,29 @@
1
- require 'xiv_lodestone/lodestone_helper'
2
- require 'json'
3
-
4
- module XIVLodestone
5
- class CollectableList
6
- attr_reader :list
7
-
8
- Collectable = Struct.new(:name, :icon_url)
9
-
10
- def initialize(collectable_path)
11
- @list = []
12
- parse_collectable(collectable_path)
13
- end
14
- # Uses gem Oj to dump MountList to JSON
15
- def to_json()
16
- @list.map { |obj| Hash[obj.each_pair.to_a] }.to_json
17
- end
18
- #### Private Methods ####
19
- def parse_collectable(collectable_path)
20
- collectable_path.each do |collectable|
21
- @list.push(Collectable.new(
22
- collectable['title'].split.map(&:capitalize)*' ',
23
- collectable.at_xpath('img')['src']))
24
- end
25
- end
26
-
27
- private :parse_collectable
28
- end
29
- end
1
+ require 'xiv_lodestone/lodestone_helper'
2
+ require 'json'
3
+
4
+ module XIVLodestone
5
+ class CollectableList
6
+ attr_reader :list
7
+
8
+ Collectable = Struct.new(:name, :icon_url)
9
+
10
+ def initialize(collectable_path)
11
+ @list = []
12
+ parse_collectable(collectable_path)
13
+ end
14
+ # Uses gem Oj to dump MountList to JSON
15
+ def to_json()
16
+ @list.map { |obj| Hash[obj.each_pair.to_a] }.to_json
17
+ end
18
+ #### Private Methods ####
19
+ def parse_collectable(collectable_path)
20
+ collectable_path.each do |collectable|
21
+ @list.push(Collectable.new(
22
+ collectable['title'].split.map(&:capitalize)*' ',
23
+ collectable.at_xpath('img')['src']))
24
+ end
25
+ end
26
+
27
+ private :parse_collectable
28
+ end
29
+ end
@@ -1,44 +1,44 @@
1
- require 'nokogiri'
2
- require 'json'
3
-
4
- module XIVLodestone
5
- # A object representation of disciples(classes)
6
- # The initialiser takes a hash of Disciple, that layout follows
7
- # { :rogue => ["Rogue", 1, 0, 300, "http://..."] }
8
- class DiscipleList
9
- # This strct representents a disciple
10
- Disciple = Struct.new(:name, :level, :current_exp, :total_exp, :icon_url) do
11
- def next_level
12
- total_exp - current_exp
13
- end
14
- end
15
-
16
- def initialize(disciple_path)
17
- @disciple = {}
18
- parse_disciple(disciple_path)
19
- end
20
- # Returns a json repsentation of all disciples
21
- def to_json()
22
- @disciple.to_json
23
- end
24
- # Generates missing methods using @disciple hash keys
25
- def method_missing(method)
26
- return @disciple[method] if @disciple.key?(method)
27
- super
28
- end
29
- #### Private Methods ####
30
- def parse_disciple(disciple_path)
31
- disciple_path.each_slice(3) do |table|
32
- next if table[0].text.empty? #skip empty cols
33
- @disciple[table[0].text.downcase.to_sym] = Disciple.new(
34
- table[0].text,
35
- table[1].text.to_i,
36
- table[2].text.split(/\//)[0].to_i,
37
- table[2].text.split(/\//)[1].to_i,
38
- table[0].at_css('img')['src'])
39
- end
40
- end
41
-
42
- private :parse_disciple
43
- end
44
- end
1
+ require 'nokogiri'
2
+ require 'json'
3
+
4
+ module XIVLodestone
5
+ # A object representation of disciples(classes)
6
+ # The initialiser takes a hash of Disciple, that layout follows
7
+ # { :rogue => ["Rogue", 1, 0, 300, "http://..."] }
8
+ class DiscipleList
9
+ # This strct representents a disciple
10
+ Disciple = Struct.new(:name, :level, :current_exp, :total_exp, :icon_url) do
11
+ def next_level
12
+ total_exp - current_exp
13
+ end
14
+ end
15
+
16
+ def initialize(disciple_path)
17
+ @disciple = {}
18
+ parse_disciple(disciple_path)
19
+ end
20
+ # Returns a json repsentation of all disciples
21
+ def to_json()
22
+ @disciple.to_json
23
+ end
24
+ # Generates missing methods using @disciple hash keys
25
+ def method_missing(method)
26
+ return @disciple[method] if @disciple.key?(method)
27
+ super
28
+ end
29
+ #### Private Methods ####
30
+ def parse_disciple(disciple_path)
31
+ disciple_path.each_slice(3) do |table|
32
+ next if table[0].text.empty? #skip empty cols
33
+ @disciple[table[0].text.downcase.gsub(" ", "_").to_sym] = Disciple.new(
34
+ table[0].text,
35
+ table[1].text.to_i,
36
+ table[2].text.split(/\//)[0].to_i,
37
+ table[2].text.split(/\//)[1].to_i,
38
+ table[0].at_css('img')['src'])
39
+ end
40
+ end
41
+
42
+ private :parse_disciple
43
+ end
44
+ end
@@ -1,70 +1,70 @@
1
- require 'nokogiri'
2
- require 'json'
3
- require 'xiv_lodestone/lodestone_helper'
4
-
5
- module XIVLodestone
6
- # A Object that represents a list of Gear pieces
7
- # The initialiser takes a hash of items in the following layout
8
- # { :weapon => ["Fist", 110, "Weapon", "http://...."], ... }
9
- class GearList
10
- # This struct representation a piece of gear.
11
- Gear = Struct.new(:name, :ilevel, :slot, :url)
12
-
13
- def initialize(gear_path)
14
- @items = {}
15
- parse_gear(gear_path)
16
- end
17
- # Calculates the total gear list ilevel
18
- # Rounds to the nearest whole number like FFXIV ingame calculation
19
- # returns a #Integer
20
- def ilevel()
21
- ilevel = 0
22
- ilevel = @items[:weapon].ilevel if @items[:shield].nil?
23
- @items.each_value do |value|
24
- ilevel += value.ilevel unless value.name =~ /Soul of the/i
25
- end
26
- (ilevel/13).round
27
- end
28
- # Returns a JSON string of all items
29
- def to_json()
30
- @items.to_json
31
- end
32
- # Generates access methods for each item slot
33
- def method_missing(method)
34
- return @items[method] if @items.key?(method)
35
- super
36
- end
37
- #### Private Methods ####
38
- # Parses each piece of gear and stores it in @items hash
39
- def parse_gear(gear_path)
40
- gear_path.each do |item|
41
- @items[type(item.at_css('h3.category_name').text).to_sym] = Gear.new(
42
- item.css('h2').text,
43
- item.at_css('div.pt3.pb3').text.split(/ /).last.to_i,
44
- item.at_css('h3').text,
45
- "http://na.finalfantasyxiv.com#{item.at_css('a')['href']}")
46
- end
47
- end
48
- # Returns a string representation of item slot
49
- def type(name)
50
- if name =~ /(Arm|Arms|Grimoire|Primary Tool)/i
51
- return "weapon"
52
- elsif name =~ /Shield/i
53
- return "shield"
54
- elsif name.eql?("Ring")
55
- return "ring#{ring_inc}"
56
- else
57
- return Helper.replace_downcase(name)
58
- end
59
- end
60
- # Initialise @num and count upwards, if @num >= 2 reset to 1
61
- # @num += 1 reset if @num >= 2
62
- def ring_inc()
63
- @num ||= 0
64
- @num = 0 if @num >= 2
65
- @num += 1
66
- end
67
-
68
- private :parse_gear, :type, :ring_inc
69
- end
70
- end
1
+ require 'nokogiri'
2
+ require 'json'
3
+ require 'xiv_lodestone/lodestone_helper'
4
+
5
+ module XIVLodestone
6
+ # A Object that represents a list of Gear pieces
7
+ # The initialiser takes a hash of items in the following layout
8
+ # { :weapon => ["Fist", 110, "Weapon", "http://...."], ... }
9
+ class GearList
10
+ # This struct representation a piece of gear.
11
+ Gear = Struct.new(:name, :ilevel, :slot, :url)
12
+
13
+ def initialize(gear_path)
14
+ @items = {}
15
+ parse_gear(gear_path)
16
+ end
17
+ # Calculates the total gear list ilevel
18
+ # Rounds to the nearest whole number like FFXIV ingame calculation
19
+ # returns a #Integer
20
+ def ilevel()
21
+ ilevel = 0
22
+ ilevel = @items[:weapon].ilevel if @items[:shield].nil?
23
+ @items.each_value do |value|
24
+ ilevel += value.ilevel unless value.name =~ /Soul of the/i
25
+ end
26
+ (ilevel/13).round
27
+ end
28
+ # Returns a JSON string of all items
29
+ def to_json()
30
+ @items.to_json
31
+ end
32
+ # Generates access methods for each item slot
33
+ def method_missing(method)
34
+ return @items[method] if @items.key?(method)
35
+ super
36
+ end
37
+ #### Private Methods ####
38
+ # Parses each piece of gear and stores it in @items hash
39
+ def parse_gear(gear_path)
40
+ gear_path.each do |item|
41
+ @items[type(item.at_css('h3.category_name').text).to_sym] = Gear.new(
42
+ item.css('h2').text.delete!("\n\t"),
43
+ item.at_css('div.pt3.pb3').text.split(/ /).last.to_i,
44
+ item.at_css('h3').text,
45
+ "http://na.finalfantasyxiv.com#{item.at_css('a')['href']}")
46
+ end
47
+ end
48
+ # Returns a string representation of item slot
49
+ def type(name)
50
+ if name =~ /(Arm|Arms|Grimoire|Primary Tool)/i
51
+ return "weapon"
52
+ elsif name =~ /Shield/i
53
+ return "shield"
54
+ elsif name.eql?("Ring")
55
+ return "ring#{ring_inc}"
56
+ else
57
+ return Helper.replace_downcase(name)
58
+ end
59
+ end
60
+ # Initialise @num and count upwards, if @num >= 2 reset to 1
61
+ # @num += 1 reset if @num >= 2
62
+ def ring_inc()
63
+ @num ||= 0
64
+ @num = 0 if @num >= 2
65
+ @num += 1
66
+ end
67
+
68
+ private :parse_gear, :type, :ring_inc
69
+ end
70
+ end
@@ -102,22 +102,22 @@ module XIVLodestone
102
102
  end
103
103
  # Returns a #String with the nameday
104
104
  def self.get_nameday(page)
105
- nameday = page.at_xpath('(//div[@class="chara_profile_table"]/dl/dd)[1]')
105
+ nameday = page.at_xpath('(//dd[@class="txt_name"])[1]')
106
106
  nameday ? nameday.text : ""
107
107
  end
108
108
  # Returns a #String with the guardian name
109
109
  def self.get_guardian(page)
110
- guardian = page.at_xpath('(//div[@class="chara_profile_table"]/dl/dd)[2]')
110
+ guardian = page.at_xpath('(//dd[@class="txt_name"])[2]')
111
111
  guardian ? guardian.text : ""
112
112
  end
113
113
  # Returns a #String the city name
114
114
  def self.get_city(page)
115
- city = page.at_xpath('(//dd[@class="txt_name"])[1]')
115
+ city = page.at_xpath('(//dd[@class="txt_name"])[3]')
116
116
  city ? city.text : ""
117
117
  end
118
118
  # Returns a #String with the grandcompany
119
119
  def self.get_grand_company(page)
120
- company = page.at_xpath('(//dd[@class="txt_name"])[2]')
120
+ company = page.at_xpath('(//dd[@class="txt_name"])[4]')
121
121
  company ? company.text : ""
122
122
  end
123
123
  # Returns a #Array with the freecompany name and url
@@ -1,34 +1,34 @@
1
- require 'xiv_lodestone/lodestone_helper'
2
- require 'json'
3
-
4
- module XIVLodestone
5
- # This is a basic class fetchs the server status from
6
- # lodestone.
7
- class ServerStatus
8
- Server = Struct.new(:name, :status, :registration)
9
-
10
- def initialize()
11
- @list = {}
12
- fetch_server_status(Helper.open_server_status)
13
- end
14
- # Generates methods from @server hash keys
15
- def method_missing(method)
16
- return @list[method] if @list.key?(method)
17
- super
18
- end
19
- # Fills the @server hash with each servers status
20
- def fetch_server_status(page)
21
- rego = Helper.open_registration_status
22
- page.xpath('//td').each_slice(2) do |elem|
23
- @list[elem[0].text.strip.downcase.to_sym] = Server.new(
24
- elem[0].text.strip,
25
- elem[1].text.strip,
26
- rego.css('div.area_inner_cont').text[/○ #{elem[0].text.strip}/] ? "Open" : "Closed")
27
- end
28
- end
29
- # Returns a JSON string of server list
30
- def to_json
31
- @list.to_json
32
- end
33
- end
1
+ require 'xiv_lodestone/lodestone_helper'
2
+ require 'json'
3
+
4
+ module XIVLodestone
5
+ # This is a basic class fetchs the server status from
6
+ # lodestone.
7
+ class ServerStatus
8
+ Server = Struct.new(:name, :status, :registration)
9
+
10
+ def initialize()
11
+ @list = {}
12
+ fetch_server_status(Helper.open_server_status)
13
+ end
14
+ # Generates methods from @server hash keys
15
+ def method_missing(method)
16
+ return @list[method] if @list.key?(method)
17
+ super
18
+ end
19
+ # Fills the @server hash with each servers status
20
+ def fetch_server_status(page)
21
+ rego = Helper.open_registration_status
22
+ page.xpath('//td').each_slice(2) do |elem|
23
+ @list[elem[0].text.strip.downcase.to_sym] = Server.new(
24
+ elem[0].text.strip,
25
+ elem[1].text.strip,
26
+ rego.css('div.area_inner_cont').text[/○ #{elem[0].text.strip}/] ? "Open" : "Closed")
27
+ end
28
+ end
29
+ # Returns a JSON string of server list
30
+ def to_json
31
+ @list.to_json
32
+ end
33
+ end
34
34
  end