wowr 0.1.1 → 0.1.2
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.
- data/lib/wowr.rb +17 -23
- data/lib/wowr/classes.rb +23 -58
- data/lib/wowr/exceptions.rb +6 -0
- data/lib/wowr/extensions.rb +1 -11
- metadata +42 -33
data/lib/wowr.rb
CHANGED
@@ -5,10 +5,10 @@
|
|
5
5
|
# http://benhumphreys.co.uk/
|
6
6
|
|
7
7
|
begin
|
8
|
-
require '
|
8
|
+
require 'hpricot' # version 0.6
|
9
9
|
rescue LoadError
|
10
10
|
require 'rubygems'
|
11
|
-
require 'hpricot'
|
11
|
+
require 'hpricot' # version 0.6
|
12
12
|
end
|
13
13
|
require 'net/http'
|
14
14
|
require 'cgi'
|
@@ -26,6 +26,8 @@ module Wowr
|
|
26
26
|
@@armory_url = 'http://www.wowarmory.com/'
|
27
27
|
@@eu_armory_url = 'http://eu.wowarmory.com/'
|
28
28
|
|
29
|
+
@@search_url = 'search.xml'
|
30
|
+
|
29
31
|
@@character_sheet_url = 'character-sheet.xml'
|
30
32
|
@@character_talents_url = 'character-talents.xml'
|
31
33
|
@@character_skills_url = 'character-skills.xml'
|
@@ -33,18 +35,15 @@ module Wowr
|
|
33
35
|
|
34
36
|
@@guild_info_url = 'guild-info.xml'
|
35
37
|
|
36
|
-
@@search_url = 'search.xml'
|
37
|
-
|
38
38
|
@@item_info_url = 'item-info.xml'
|
39
39
|
@@item_tooltip_url = 'item-tooltip.xml'
|
40
|
-
|
41
|
-
@@icon_url = 'http://wowbench.com/images/icons/32x32/'
|
42
|
-
|
40
|
+
|
43
41
|
@@arena_team_url = 'team-info.xml'
|
44
42
|
|
45
43
|
@@max_connection_tries = 10
|
46
44
|
|
47
45
|
# Tiny forum-used race/class icons
|
46
|
+
# @@icon_url = 'http://wowbench.com/images/icons/32x32/'
|
48
47
|
# http://forums.worldofwarcraft.com/images/icon/class/4.gif
|
49
48
|
# http://forums.worldofwarcraft.com/images/icon/race/3-0.gif
|
50
49
|
# http://forums.worldofwarcraft.com/images/icon/pvpranks/rank_default_0.gif
|
@@ -111,8 +110,6 @@ module Wowr
|
|
111
110
|
|
112
111
|
@@arena_team_sizes = [2, 3, 5]
|
113
112
|
|
114
|
-
# TODO: Refactor, rethink and remove locale from all requests by passing unused options on to get_xml
|
115
|
-
|
116
113
|
attr_accessor :character_name, :guild_name, :realm, :locale
|
117
114
|
|
118
115
|
# You can set up the API with an optional default guild and realm
|
@@ -128,6 +125,7 @@ module Wowr
|
|
128
125
|
|
129
126
|
|
130
127
|
# General-purpose search
|
128
|
+
# All specific searches are wrappers around this method.
|
131
129
|
def search(options = {:search => nil, :type => nil})
|
132
130
|
if @@search_types.include? options[:type]
|
133
131
|
raise Wowr::Exceptions::InvalidSearchType.new
|
@@ -141,7 +139,7 @@ module Wowr
|
|
141
139
|
|
142
140
|
results = []
|
143
141
|
|
144
|
-
if (xml%'armorySearch'%'searchResults')
|
142
|
+
if (xml) && (xml%'armorySearch') && (xml%'armorySearch'%'searchResults')
|
145
143
|
case options[:type]
|
146
144
|
|
147
145
|
# TODO: Filter stuff
|
@@ -184,18 +182,10 @@ module Wowr
|
|
184
182
|
return Wowr::Classes::CharacterSheet.new(xml)
|
185
183
|
end
|
186
184
|
|
187
|
-
def get_character_list(min_level, klass)
|
188
|
-
|
189
|
-
end
|
190
|
-
|
191
|
-
# ??
|
192
|
-
def get_character_skills(options = {:character_name => @character_name, :realm => @realm})
|
193
|
-
compute_hash(options.merge(:url => @@character_skills_url)) ||
|
194
|
-
process_query(Wowr::Classes::Skill, @character_skills_url, false)
|
195
|
-
end
|
196
185
|
|
197
186
|
|
198
187
|
# Guilds
|
188
|
+
# Note searches go across all realms by default
|
199
189
|
def search_guilds(options = {:search => @guild_name, :locale => @locale})
|
200
190
|
options.merge!(:type => @@search_types[:guild])
|
201
191
|
return search(options)
|
@@ -209,16 +199,17 @@ module Wowr
|
|
209
199
|
|
210
200
|
|
211
201
|
# Items
|
202
|
+
# Items are not realm-specific
|
212
203
|
def search_items(options = {:search => nil})
|
213
204
|
options.merge!(:type => @@search_types[:item])
|
214
205
|
return search(options)
|
215
206
|
end
|
216
207
|
|
217
208
|
# TODO: Is not finding the item an exception or just return nil?
|
218
|
-
def get_item(options = {:item_id => nil, :locale => @locale})
|
209
|
+
#def get_item(options = {:item_id => nil, :locale => @locale})
|
219
210
|
|
220
211
|
#return Wowr::Classes::ItemTooltip.new(xml%'itemTooltip')
|
221
|
-
end
|
212
|
+
#end
|
222
213
|
|
223
214
|
def get_item_info(options = {:item_id => nil, :locale => @locale})
|
224
215
|
xml = get_xml(@@item_info_url, options)
|
@@ -331,6 +322,10 @@ module Wowr
|
|
331
322
|
errors.each do |error|
|
332
323
|
raise Wowr::Exceptions::raise_me(error[:errCode])
|
333
324
|
end
|
325
|
+
# elsif (doc%'page').nil?
|
326
|
+
# puts full_query
|
327
|
+
# puts response
|
328
|
+
# raise Wowr::Exceptions::EmptyPage
|
334
329
|
else
|
335
330
|
return (doc%'page')
|
336
331
|
end
|
@@ -342,14 +337,13 @@ module Wowr
|
|
342
337
|
|
343
338
|
end
|
344
339
|
|
345
|
-
#
|
340
|
+
# :nodoc:
|
346
341
|
def u(str)
|
347
342
|
if str.instance_of?(String)
|
348
343
|
return CGI.escape(str)
|
349
344
|
else
|
350
345
|
return str
|
351
346
|
end
|
352
|
-
#stripslashes(str)
|
353
347
|
end
|
354
348
|
end
|
355
349
|
end
|
data/lib/wowr/classes.rb
CHANGED
@@ -3,8 +3,7 @@
|
|
3
3
|
# sourceType.questReward
|
4
4
|
# sourceType.createdBySpell
|
5
5
|
|
6
|
-
# TODO: Split up classes depending on subject?
|
7
|
-
# Character, Item, Guild, ArenaTeam
|
6
|
+
# TODO: Split up classes depending on subject? Character, Item, Guild, ArenaTeam
|
8
7
|
|
9
8
|
|
10
9
|
# Wowr was written by Ben Humphreys!
|
@@ -12,6 +11,7 @@
|
|
12
11
|
module Wowr
|
13
12
|
module Classes
|
14
13
|
|
14
|
+
# Most basic
|
15
15
|
# Composed of an ItemInfo and
|
16
16
|
# Needs to be consolidated with ItemInfo and other stuff
|
17
17
|
# to be a parent class that they extend?
|
@@ -28,6 +28,10 @@ module Wowr
|
|
28
28
|
|
29
29
|
|
30
30
|
# Short character info, used in guild lists etc.
|
31
|
+
# Note that the way that searches and character listings within guilds works,
|
32
|
+
# there can be a variable amount of information filled in within the class.
|
33
|
+
# Guild listings and search results contain a smaller amount of information than
|
34
|
+
# single queries
|
31
35
|
class Character
|
32
36
|
attr_reader :name, :level, :url, :rank,
|
33
37
|
:klass, :klass_id,
|
@@ -63,6 +67,8 @@ module Wowr
|
|
63
67
|
@relevance = elem[:relevance].to_i
|
64
68
|
@search_rank = elem[:searchRank].to_i
|
65
69
|
|
70
|
+
# Incoming string is 2007-02-24 20:33:04.0, parse to datetime
|
71
|
+
#@last_login = elem[:lastLoginDate] == "" ? nil : DateTime.parse(elem[:lastLoginDate])
|
66
72
|
@last_login = elem[:lastLoginDate] == "" ? nil : elem[:lastLoginDate]
|
67
73
|
|
68
74
|
# From ArenaTeam info, can be blank on normal requests
|
@@ -207,7 +213,7 @@ module Wowr
|
|
207
213
|
|
208
214
|
|
209
215
|
|
210
|
-
#
|
216
|
+
# Second stat bar, depends on character class
|
211
217
|
class SecondBar
|
212
218
|
attr_reader :effective, :casting, :not_casting, :type
|
213
219
|
|
@@ -500,7 +506,7 @@ module Wowr
|
|
500
506
|
end
|
501
507
|
end
|
502
508
|
|
503
|
-
class Resilience
|
509
|
+
class Resilience
|
504
510
|
attr_reader :damage_percent, :hit_percent, :value
|
505
511
|
|
506
512
|
def initialize(elem)
|
@@ -522,7 +528,7 @@ module Wowr
|
|
522
528
|
end
|
523
529
|
|
524
530
|
|
525
|
-
#
|
531
|
+
# Note the list of talent trees starts at 1. This is quirky, but that's what's used in the XML
|
526
532
|
class TalentSpec
|
527
533
|
attr_reader :trees
|
528
534
|
|
@@ -594,25 +600,9 @@ module Wowr
|
|
594
600
|
end
|
595
601
|
end
|
596
602
|
|
597
|
-
|
598
|
-
|
599
|
-
# class Damage
|
600
|
-
# :type, :min, :max, :speed, :dps
|
601
|
-
# end
|
602
|
-
#
|
603
|
-
# class ItemSource
|
604
|
-
# :area_id
|
605
|
-
# :area_name
|
606
|
-
# :creature_id
|
607
|
-
# :creature_name
|
608
|
-
# :difficulty
|
609
|
-
# :drop_rate
|
610
|
-
# :value
|
611
|
-
# end
|
612
603
|
|
613
604
|
# A player guild containing members
|
614
|
-
# note not all of these will be filled out, depending on how the data is found
|
615
|
-
|
605
|
+
# note not all of these will be filled out, depending on how the data is found
|
616
606
|
class Guild
|
617
607
|
attr_reader :name, :url, :realm, :realm_url, :battle_group,
|
618
608
|
:roster_url, :stats_url, :stats_url_escape,
|
@@ -626,14 +616,14 @@ module Wowr
|
|
626
616
|
guild = elem
|
627
617
|
end
|
628
618
|
|
629
|
-
@name
|
630
|
-
@name_url
|
631
|
-
@url
|
632
|
-
@realm
|
633
|
-
@realm_url
|
619
|
+
@name = guild[:name]
|
620
|
+
@name_url = guild[:nameUrl]
|
621
|
+
@url = guild[:url]
|
622
|
+
@realm = guild[:realm]
|
623
|
+
@realm_url = guild[:realmUrl]
|
634
624
|
@battle_group = guild[:battleGroup]
|
635
|
-
@faction
|
636
|
-
@faction_id
|
625
|
+
@faction = guild[:faction]
|
626
|
+
@faction_id = guild[:factionId].to_i
|
637
627
|
|
638
628
|
# some shortened versions
|
639
629
|
if (elem%'guildInfo')
|
@@ -648,31 +638,6 @@ module Wowr
|
|
648
638
|
end
|
649
639
|
|
650
640
|
|
651
|
-
# class Guild
|
652
|
-
# attr_reader :name, :realm, :battle_group,
|
653
|
-
# :roster_url, :stats_url, :stats_url_escape,
|
654
|
-
# :members, :member_count
|
655
|
-
#
|
656
|
-
# def initialize(elem)
|
657
|
-
# @name = elem[:name]
|
658
|
-
# @realm = elem[:realm]
|
659
|
-
# @battle_group = elem[:battleGroup]
|
660
|
-
# @roster_url = elem[:rosterUrl]
|
661
|
-
# @stats_url = elem[:statsUrl]
|
662
|
-
# @stats_url_escape = elem[:statsUrlEscape]
|
663
|
-
# @member_count = (elem%'members')[:memberCount].to_i
|
664
|
-
#
|
665
|
-
# @members = []
|
666
|
-
# (elem%'members'/:character).each do |char|
|
667
|
-
# members << Character.new(char)
|
668
|
-
# end
|
669
|
-
# end
|
670
|
-
# end
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
641
|
# General skill category
|
677
642
|
# eg Weapon Skills, Languages
|
678
643
|
class SkillCategory
|
@@ -738,7 +703,8 @@ module Wowr
|
|
738
703
|
|
739
704
|
|
740
705
|
# Provides detailed item information
|
741
|
-
#
|
706
|
+
# Note that the itemtooltip just returns an empty document when the item
|
707
|
+
# can't be found.
|
742
708
|
class ItemTooltip < Item
|
743
709
|
attr_reader :desc, :overall_quality_id, :bonding, :max_count, #:id, :name, :icon,
|
744
710
|
:class_id, :bonuses, :item_source,
|
@@ -905,7 +871,6 @@ module Wowr
|
|
905
871
|
end
|
906
872
|
end
|
907
873
|
|
908
|
-
|
909
874
|
class ItemDamageData
|
910
875
|
attr_reader :type, :min, :max, :speed, :dps
|
911
876
|
|
@@ -1079,7 +1044,8 @@ module Wowr
|
|
1079
1044
|
end
|
1080
1045
|
end
|
1081
1046
|
|
1082
|
-
|
1047
|
+
# Cost can be gold or a set of required tokens
|
1048
|
+
# See ItemCostToken
|
1083
1049
|
# <cost sellPrice="280" buyPrice="5600"></cost>
|
1084
1050
|
# <cost>
|
1085
1051
|
# <token icon="spell_holy_championsbond" id="29434" count="60"></token>
|
@@ -1293,7 +1259,6 @@ module Wowr
|
|
1293
1259
|
@icon_style = elem[:iconStyle].to_i
|
1294
1260
|
end
|
1295
1261
|
end
|
1296
|
-
|
1297
1262
|
|
1298
1263
|
end
|
1299
1264
|
end
|
data/lib/wowr/exceptions.rb
CHANGED
@@ -11,6 +11,9 @@ module Wowr
|
|
11
11
|
class InvalidXML < StandardError
|
12
12
|
end
|
13
13
|
|
14
|
+
class EmptyPage < StandardError
|
15
|
+
end
|
16
|
+
|
14
17
|
# errCode="noCharacter"
|
15
18
|
class CharacterNotFound < StandardError
|
16
19
|
end
|
@@ -21,6 +24,9 @@ module Wowr
|
|
21
24
|
class GuildNotFound < StandardError
|
22
25
|
end
|
23
26
|
|
27
|
+
class SearchError < StandardError
|
28
|
+
end
|
29
|
+
|
24
30
|
class InvalidSearchType < StandardError
|
25
31
|
end
|
26
32
|
|
data/lib/wowr/extensions.rb
CHANGED
@@ -1,15 +1,5 @@
|
|
1
1
|
module Wowr
|
2
|
-
# All of these are shamelessly nicked from Ruby on Rails.
|
3
|
-
# The String Extensions have a bit more fault tolerance.
|
4
2
|
module Extensions
|
5
|
-
|
6
|
-
def to_time(form = :utc)
|
7
|
-
begin
|
8
|
-
::Time.send(form, *ParseDate.parsedate(self))
|
9
|
-
rescue TypeError
|
10
|
-
self
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
3
|
+
|
14
4
|
end
|
15
5
|
end
|
metadata
CHANGED
@@ -1,49 +1,58 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.2
|
3
|
-
specification_version: 1
|
4
2
|
name: wowr
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
7
|
-
date: 2008-01-23 00:00:00 +00:00
|
8
|
-
summary: An API wrapper for the World of Warcraft Armory.
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: benhumphreys @nospam@ gmail.com
|
12
|
-
homepage: http://wowr.rubyforge.org/
|
13
|
-
rubyforge_project:
|
14
|
-
description: Provides Ruby interface for retrieving item, character, guild and arena team info from the armory.
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.1.2
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Ben Humphreys
|
8
|
+
autorequire:
|
9
|
+
- wowr
|
10
|
+
- hpricot
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
|
14
|
+
date: 2008-02-07 00:00:00 +00:00
|
15
|
+
default_executable:
|
16
|
+
dependencies: []
|
17
|
+
|
18
|
+
description: Provides Ruby interface for retrieving item, character, guild and arena team info from the armory.
|
19
|
+
email: benhumphreys @nospam@ gmail.com
|
20
|
+
executables: []
|
21
|
+
|
22
|
+
extensions: []
|
23
|
+
|
24
|
+
extra_rdoc_files: []
|
25
|
+
|
31
26
|
files:
|
32
27
|
- lib/wowr.rb
|
33
28
|
- lib/wowr/classes.rb
|
34
29
|
- lib/wowr/exceptions.rb
|
35
30
|
- lib/wowr/extensions.rb
|
36
|
-
|
37
|
-
|
31
|
+
has_rdoc: true
|
32
|
+
homepage: http://wowr.rubyforge.org/
|
33
|
+
post_install_message:
|
38
34
|
rdoc_options: []
|
39
35
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
36
|
+
require_paths:
|
37
|
+
- lib
|
38
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: "0"
|
43
|
+
version:
|
44
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: "0"
|
49
|
+
version:
|
46
50
|
requirements: []
|
47
51
|
|
48
|
-
|
52
|
+
rubyforge_project:
|
53
|
+
rubygems_version: 1.0.1
|
54
|
+
signing_key:
|
55
|
+
specification_version: 2
|
56
|
+
summary: An API wrapper for the World of Warcraft Armory.
|
57
|
+
test_files: []
|
49
58
|
|