elvarg 0.0.0 → 0.0.3

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
  SHA256:
3
- metadata.gz: 3a73e04f7442ae531c15f667e4e544a64a9899bc2d323300a7fd01a6db0ba263
4
- data.tar.gz: 4b9da900dfa97063ee9eb608a3ac6a48f95d8ec5413567a5ecc31788aa00823b
3
+ metadata.gz: f996173667b01d63eb1fc686c3ab1567e39756d552de283926a1501dccd6008d
4
+ data.tar.gz: ed61f3c8fad382a412ba1bf9d9f65d63b90ef8dfc84ea077725de369964d464b
5
5
  SHA512:
6
- metadata.gz: 3756ef35e235a83c791d225899a38cf9e856c285263a56246e091b01d406bab0215bac4491c627bc33fa23d68881adf8a390956e07acad9a4c0894482c86b355
7
- data.tar.gz: e9d787772afc8d3684cf8d5387e55f9245ed246205af27548b9d14a165d082d16cc81550d7f196073b947a9df90f0cf537735ce3a65d118082dccc6edcc8d92e
6
+ metadata.gz: 215449333501c3ef8c79b114c08c2439a197ea17f61a835b776f872ea27719c1080a39503c358b9d989ae605a0682e9dea960ca2d9a1acad08d487e22fa55e7c
7
+ data.tar.gz: 2b2788d9b646573f48c27c40c07af33016c75fa81bfbb03fd01603811398130e7d2f9a2b6d1f884ecedb800d5d516cfdc7d55409512b32875007d122c996d3e1
@@ -1,4 +1,12 @@
1
+ require_relative "stats/stats"
2
+ require_relative "skills/skill"
3
+ require_relative "hiscores/player"
4
+ require_relative "hiscores/hiscores"
5
+
1
6
  ##
2
- # Elvarg
7
+ # A Ruby Gem that provides useful methods for OldSchool
8
+ # RuneScape related applications.
9
+ #
10
+ # Author: Marcello A. Sabino
3
11
  module Elvarg
4
12
  end
@@ -0,0 +1,36 @@
1
+ require 'open-uri'
2
+
3
+ module Elvarg # :nodoc:
4
+ module Hiscores
5
+ MODES = {
6
+ default: "https://secure.runescape.com/m=hiscore_oldschool/",
7
+ ironman: "http://services.runescape.com/m=hiscore_oldschool_ironman/",
8
+ ultimate: "http://services.runescape.com/m=hiscore_oldschool_ultimate/",
9
+ hardcore: "http://services.runescape.com/m=hiscore_oldschool_hardcore_ironman/",
10
+ deadman: "http://services.runescape.com/m=hiscore_oldschool_deadman/",
11
+ seasonal: "http://services.runescape.com/m=hiscore_oldschool_seasonal/",
12
+ tournament: "http://services.runescape.com/m=hiscore_oldschool_tournament/",
13
+ }
14
+ ENDPOINT = {
15
+ stats: "index_lite.ws?player=",
16
+ scores: 'overall.ws?',
17
+ }
18
+
19
+ ##
20
+ # Searches for a specific user on a specified mode on the OldSchool
21
+ # RuneScape HiScores website.
22
+ #
23
+ # ==== Parameters
24
+ #
25
+ # * [String] +username+ - The user's username
26
+ # * [Symbol] +mode+ - the mode to look in, see Hiscores::MODES for available modes. Default is `:default`.
27
+ #
28
+ # ==== Examples
29
+ #
30
+ # player = Elvarg::Hiscores.search_for 'ruby'
31
+ # player = Elvarg::Hiscores.search_for('github', :ironman)
32
+ def self.search_for(username, mode = :default)
33
+ open(MODES[mode] + ENDPOINT[:stats] + username, &:read)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,120 @@
1
+ require_relative './hiscores'
2
+ require_relative '../stats/stats'
3
+ require_relative '../skills/skill'
4
+
5
+ module Elvarg
6
+ module Hiscores
7
+ ##
8
+ # Represents a single player on OldSchool Runescape
9
+ class Player include Hiscores, Stats
10
+ attr_reader :username
11
+ attr_reader :mode
12
+ attr_reader :skills
13
+
14
+ ##
15
+ # Creates a new Player object
16
+ #
17
+ # ==== Parameters
18
+ #
19
+ # * [String] +username+ - The user's username
20
+ # * [Symbol] +mode+ - The mode to search in. see +Hiscores::MODES+, defaults to +:default+
21
+ #
22
+ # ==== Examples
23
+ #
24
+ # # Search through the default overall hiscores
25
+ # player = Elvarg::Hiscores::Player.new 'ruby'
26
+ # # Search through the ultimate ironman hiscores
27
+ # player = Elvarg::Hiscores::Player.new('ruby', :ultimate)
28
+ def initialize(username, mode = :default)
29
+ @username = username
30
+ @mode = mode
31
+ @skills = {}
32
+
33
+ extract(Hiscores.search_for(username, mode))
34
+ end
35
+
36
+ ##
37
+ # Determines if this player is a member
38
+ #
39
+ # ==== Details
40
+ #
41
+ # This detects membership if the user has greater than 0 experience in
42
+ # any member's only skill.
43
+ #
44
+ # ==== Returns
45
+ #
46
+ # [true] if the player has experience in a member's only skill, false otherwise
47
+ #
48
+ # ==== Examples
49
+ #
50
+ # player = Elvarg::Hiscores::Player.new 'ruby'
51
+ # player.is_member?
52
+ # #=> true
53
+ def is_member?
54
+ @skills.each { |key, skill| return true if skill.xp > 0 && skill.is_member? }
55
+ false
56
+ end
57
+
58
+ ##
59
+ # The inverse of +is_member?+
60
+ def is_free?
61
+ !is_member?
62
+ end
63
+
64
+ ##
65
+ # Determines if this player is a skiller
66
+ # A user is a skiller when they do not have any combat skill
67
+ # (other than 10 hitpoints) greater than 1.
68
+ #
69
+ # ==== Returns
70
+ #
71
+ # [true] if the player has 1 in all combat skills (and 10 hitpoints) false otherwise
72
+ #
73
+ # ==== Examples
74
+ #
75
+ # player = Elvarg::Hiscores::Player.new 'ruby'
76
+ # player.is_skiller?
77
+ # #=> false
78
+ def is_skiller?
79
+ @skills.each { |key, skill|
80
+ next if key == :hitpoints && skill.level <= 10
81
+ return false if skill.level > 1 && skill.is_combat?
82
+ }
83
+ true
84
+ end
85
+
86
+ private
87
+
88
+ ##
89
+ # Extracts the data from the OldSchool RuneScape HiScores API and
90
+ # creates an array so that we can work with the data.
91
+ #
92
+ # Parameters:
93
+ # [String] data - The HiScores data from
94
+ # the OldSchool Runescape HiScores API
95
+ def extract(data)
96
+ hiscores_data = []
97
+ data.split("\n").each { |skill|
98
+ hiscores_data.push(skill.split(',').map(&:to_i))
99
+ }
100
+
101
+ extract_skills hiscores_data
102
+ end
103
+
104
+ ##
105
+ # Extracts only the skills' data from the hiscores array
106
+ def extract_skills(hiscores_data)
107
+ i = 0
108
+ SKILLS.each { |skill|
109
+ @skills[skill] = Elvarg::Skill.new(
110
+ skill,
111
+ hiscores_data[i][0],
112
+ hiscores_data[i][1],
113
+ hiscores_data[i][2],
114
+ i)
115
+ i += 1
116
+ }
117
+ end
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,66 @@
1
+ require_relative '../stats/stats'
2
+
3
+ module Elvarg
4
+ class Skill include Stats
5
+ attr_reader :id
6
+ attr_reader :symbol
7
+ attr_reader :name
8
+ attr_reader :rank
9
+ attr_reader :level
10
+ attr_reader :xp
11
+ attr_reader :icon
12
+
13
+ ##
14
+ # Creates a new Skill object
15
+ #
16
+ # Paramters:
17
+ # [Symbol] symbol - The symbol of the skill, like :attack, :magic, :ranged
18
+ # [Integer] rank - The user's rank. Default is -1
19
+ # [Integer] level - The user's level in this skill. Default is 1
20
+ # [Integer] xp - The user's experience in this skill. Default is 0
21
+ # [Integer] id - The id of this skill, default is -1
22
+ def initialize(symbol, rank = -1, level = 1, xp = 0, id = -1)
23
+ @id = id
24
+ @symbol = symbol
25
+ @name = symbol.to_s.capitalize
26
+ @rank = rank
27
+ @level = level
28
+ @level = 10 if level == 1 && symbol == :hitpoints
29
+ @xp = xp
30
+ @xp = 1154 if xp == 0 && symbol == :hitpoints
31
+ @icon = "https://www.runescape.com/img/rsp777/hiscores/skill_icon_#{@name.downcase}1.gif"
32
+ end
33
+
34
+ ##
35
+ # Determines if this Skill is a member's only skill
36
+ #
37
+ # Returns:
38
+ # true - if this skill is member's only, false otherwise
39
+ def is_member?
40
+ Stats::MEMBER_SKILLS.include? @symbol
41
+ end
42
+
43
+ ##
44
+ # Determines if this Skill is a free to play skill
45
+ # The inverse of `is_member?`
46
+ def is_free?
47
+ !is_member?
48
+ end
49
+
50
+ ##
51
+ # Determines if this Skill will affect a user's combat level
52
+ #
53
+ # Returns:
54
+ # true - if this skill will affect combat level, false otherwise
55
+ def is_combat?
56
+ Stats::COMBAT_SKILLS.include? @symbol
57
+ end
58
+
59
+ ##
60
+ # Determines if this Skill is skiller friendly
61
+ # The inverse of `is_combat?`
62
+ def is_skiller_friendly?
63
+ !combat?
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,27 @@
1
+ module Elvarg
2
+ module Stats
3
+ SKILLS = %i(
4
+ overall attack defence strength
5
+ hitpoints ranged prayer magic
6
+ cooking woodcutting fletching fishing
7
+ firemaking crafting smithing mining
8
+ herblore agility thieving slayer
9
+ farming runecraft hunter construction
10
+ )
11
+ MEMBER_SKILLS = %i(
12
+ fletching herblore agility thieving
13
+ slayer farming hunter construction
14
+ )
15
+ COMBAT_SKILLS = %i(
16
+ attack defence strength hitpoints
17
+ ranged prayer magic
18
+ )
19
+ MINIGAMES = %i(
20
+ bounty_hunter bounty_rogue
21
+ )
22
+ CLUES = %i(
23
+ all easy medium hard
24
+ elite master
25
+ )
26
+ end
27
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elvarg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcello A. Sabino
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-26 00:00:00.000000000 Z
11
+ date: 2018-12-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A Ruby Gem that provides useful methods for OldSchool RuneScape related
14
14
  applications.
@@ -18,6 +18,10 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - lib/elvarg.rb
21
+ - lib/hiscores/hiscores.rb
22
+ - lib/hiscores/player.rb
23
+ - lib/skills/skill.rb
24
+ - lib/stats/stats.rb
21
25
  homepage: https://github.com/marchsabino/Elvarg
22
26
  licenses:
23
27
  - MIT
@@ -41,5 +45,5 @@ rubyforge_project:
41
45
  rubygems_version: 2.7.6
42
46
  signing_key:
43
47
  specification_version: 4
44
- summary: Provides OldSchool Runescape tools
48
+ summary: A Ruby Gem with useful methods for OldSchool Runescape related applications.
45
49
  test_files: []