jxl-lewtlynx 0.0.1

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/lewtlynx.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "lewtlynx"
3
+ s.version = "0.0.1"
4
+ s.date = "2008-12-13"
5
+ s.summary = "wowhead links ftw"
6
+ s.email = "jxl@ganja.nl"
7
+ s.homepage = "http://github.com/jxl/lewtlynx"
8
+ s.description = "wowhead links ftw"
9
+ s.has_rdoc = false
10
+ s.author = "Ron Damen"
11
+ s.files = [
12
+ "lewtlynx.gemspec",
13
+ "lib/lewtlynx.rb",
14
+ "lib/lewtcloth.rb"
15
+ ]
16
+ s.test_files = [
17
+ "spec/spec_helper.rb",
18
+ "spec/spec.opts",
19
+ "spec/lewtlynx_spec.rb",
20
+ "spec/lewtcloth_spec.rb",
21
+ "spec/stubs/valid.xml",
22
+ "spec/stubs/invalid.xml"
23
+ ]
24
+ end
data/lib/lewtcloth.rb ADDED
@@ -0,0 +1,14 @@
1
+ require File.join(File.dirname(__FILE__), 'lewtlynx')
2
+
3
+ module LewtCloth
4
+ include LewtLynx
5
+ def lewt(text)
6
+ text.gsub!(/\[\[(.+)\]\]/) do |m|
7
+ Item.new($1).link
8
+ end
9
+ end
10
+ end
11
+
12
+ # RedCloth.send(:include, LewtCloth)
13
+ # input = "i hope [spirit world glass] drops"
14
+ # output = RedCloth.new(input).to_html(:textile, :lewt)
data/lib/lewtlynx.rb ADDED
@@ -0,0 +1,61 @@
1
+ require 'rubygems'
2
+ require 'nokogiri'
3
+ require 'open-uri'
4
+
5
+ module LewtLynx
6
+ class Item
7
+ attr_reader :name
8
+ attr_reader :quality
9
+ attr_reader :qid
10
+ attr_reader :url
11
+ attr_reader :link
12
+
13
+ def initialize(query)
14
+ @query = query
15
+ valid? ? parse : @link = query
16
+ end
17
+
18
+ def parse
19
+ @name = xml.xpath('//name').inner_text
20
+ @quality = xml.xpath('//quality').inner_text
21
+ @qid = xml.xpath('//quality').attr("id")
22
+ @url = xml.xpath('//link').inner_text
23
+ @link = "<a class=\"q#{@qid}\" href=\"#{@url}\">#{@name}</a>"
24
+ end
25
+
26
+ def xml
27
+ Request.new(query_url).xml
28
+ end
29
+
30
+ def query_url
31
+ "http://www.wowhead.com/?item=#{format_query}&xml"
32
+ end
33
+
34
+ def format_query
35
+ @query.downcase!
36
+ @query.gsub!("'", "")
37
+ @query.gsub!('"', "")
38
+ @query.strip!
39
+ @query.gsub(/\s+/,"+")
40
+ end
41
+
42
+ def valid?
43
+ !!xml.xpath('/wowhead/error').empty? &&
44
+ !xml.xpath('/wowhead/item').empty?
45
+ end
46
+ end
47
+
48
+ class Request
49
+ def initialize(url)
50
+ @url = url
51
+ end
52
+
53
+ def xml
54
+ @xml ||= Nokogiri.XML(get)
55
+ end
56
+
57
+ def get
58
+ @get ||= open(@url).read
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,13 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+ require 'redcloth'
3
+
4
+ describe LewtCloth do
5
+ describe "parse" do
6
+ it "makes a pretty link" do
7
+ RedCloth.send(:include, LewtCloth)
8
+ input = "i hope [[spirit world glass]] drops"
9
+ output = RedCloth.new(input).to_html(:textile, :lewt)
10
+ output.should == "<p>i hope <a class=\"q4\" href=\"http://www.wowhead.com/?item=42284\">Hateful Gladiator&#8217;s Slicer</a> drops</p>"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,38 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe LewtLynx do
4
+ describe "item" do
5
+ before(:each) do
6
+ @item = LewtLynx::Item.new('hateful slicer')
7
+ end
8
+
9
+ it "makes a pretty link" do
10
+ @item.link.should ===
11
+ "<a class=\"q4\" href=\"http://www.wowhead.com/?item=42284\">" +
12
+ "Hateful Gladiator's Slicer" +
13
+ "</a>"
14
+ end
15
+
16
+ it "gets info" do
17
+ @item.name.should === "Hateful Gladiator's Slicer"
18
+ @item.quality.should === "Epic"
19
+ @item.qid.should === "4"
20
+ @item.url.should === "http://www.wowhead.com/?item=42284"
21
+ end
22
+
23
+ it "composes query url" do
24
+ @item.query_url.should ==
25
+ "http://www.wowhead.com/?item=hateful+slicer&xml"
26
+ end
27
+
28
+ it "formats query for url" do
29
+ @item.format_query.should == "hateful+slicer"
30
+ end
31
+
32
+ it "return set link to query when invalid" do
33
+ request_invalid
34
+ @item = LewtLynx::Item.new('hateful slicer')
35
+ @item.link.should == 'hateful slicer'
36
+ end
37
+ end
38
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,4 @@
1
+ --colour
2
+ --format progress
3
+ --loadby mtime
4
+ --reverse
@@ -0,0 +1,25 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+
4
+ require File.join(File.dirname(__FILE__), "../lib/lewtlynx")
5
+ require File.join(File.dirname(__FILE__), "../lib/lewtcloth")
6
+
7
+ Spec::Runner.configure do |config|
8
+ config.mock_with :mocha
9
+ config.before do
10
+ request_valid
11
+ end
12
+ end
13
+
14
+ def request(type)
15
+ stub = open(File.join(File.dirname(__FILE__), "stubs/#{type}.xml")).read
16
+ LewtLynx::Request.any_instance.stubs(:get).returns(stub)
17
+ end
18
+
19
+ def request_valid
20
+ request(:valid)
21
+ end
22
+
23
+ def request_invalid
24
+ request(:invalid)
25
+ end
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><wowhead><error>Item not found!</error></wowhead>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><wowhead><item id="42284"><name><![CDATA[Hateful Gladiator's Slicer]]></name><level>200</level><quality id="4">Epic</quality><class id="2"><![CDATA[Weapons]]></class><subclass id="7"><![CDATA[One-Handed Swords]]></subclass><icon displayId="57298">INV_Sword_86</icon><inventorySlot id="13">One-Hand</inventorySlot><htmlTooltip><![CDATA[<table><tr><td><b class="q4">Hateful Gladiator's Slicer</b><br />Binds when picked up<table width="100%"><tr><td>One-Hand</td><th>Sword</th></tr></table><table width="100%"><tr><td>298 - 448 Damage</td><th>Speed 2.60</th></tr></table>(143.5 damage per second)<br />+58 Stamina<!--e--><br />Durability 105 / 105<br />Requires Level 80</td></tr></table><table><tr><td><span class="q2">Equip: Improves critical strike rating by 26&nbsp;<small>(<!--r80:32:26-->0.57%&nbsp;@&nbsp;L80)</small>.</span><br /><span class="q2">Equip: Improves your resilience rating by 25&nbsp;<small>(<!--r80:35:25-->0.3%&nbsp;@&nbsp;L80)</small>.</span><br /><span class="q2">Equip: Increases attack power by 76.</span></td></tr></table>]]></htmlTooltip><json><![CDATA[id:42284,name:'3Hateful Gladiator\'s Slicer',level:200,reqlevel:80,dps:143.5,speed:2.60,slot:13,classs:2,subclass:7]]></json><jsonEquip><![CDATA[slotbak:13,displayid:57298,reqlevel:80,dmgmin1:298,dmgmax1:448,dmgtype1:0,speed:2.60,atkpwr:76,critstrkrtng:26,resirtng:25,sta:58,dura:105,dps:143.5,mledps:143.5,mledmgmin:298,mledmgmax:448,mlespeed:2.60]]></jsonEquip><link>http://www.wowhead.com/?item=42284</link></item></wowhead>
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jxl-lewtlynx
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ron Damen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-12-13 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: wowhead links ftw
17
+ email: jxl@ganja.nl
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lewtlynx.gemspec
26
+ - lib/lewtlynx.rb
27
+ - lib/lewtcloth.rb
28
+ has_rdoc: false
29
+ homepage: http://github.com/jxl/lewtlynx
30
+ post_install_message:
31
+ rdoc_options: []
32
+
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: "0"
40
+ version:
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
47
+ requirements: []
48
+
49
+ rubyforge_project:
50
+ rubygems_version: 1.2.0
51
+ signing_key:
52
+ specification_version: 2
53
+ summary: wowhead links ftw
54
+ test_files:
55
+ - spec/spec_helper.rb
56
+ - spec/spec.opts
57
+ - spec/lewtlynx_spec.rb
58
+ - spec/lewtcloth_spec.rb
59
+ - spec/stubs/valid.xml
60
+ - spec/stubs/invalid.xml