gatherer 0.0.5 → 0.0.6
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/gatherer/card_parser.rb +65 -59
- data/lib/gatherer/version.rb +1 -1
- metadata +2 -2
data/lib/gatherer/card_parser.rb
CHANGED
@@ -26,34 +26,38 @@ module Gatherer
|
|
26
26
|
raise CardNotFound if document.css(SELECTORS[:illustrator]).empty?
|
27
27
|
end
|
28
28
|
|
29
|
+
def find_row(css)
|
30
|
+
document.css(SELECTORS[css])
|
31
|
+
end
|
32
|
+
|
29
33
|
def title(parsed_text = extract_title)
|
30
34
|
parsed_text.strip
|
31
35
|
end
|
32
36
|
|
33
37
|
def extract_title
|
34
|
-
row =
|
35
|
-
|
36
|
-
title_line = row.css('div.value').text
|
38
|
+
row = find_row(:title)
|
39
|
+
title_line = row.css('div.value').text if row
|
37
40
|
end
|
38
41
|
|
39
42
|
def types(parsed_text = extract_types)
|
40
|
-
|
43
|
+
if parsed_text
|
44
|
+
types = parsed_text.strip.split("\u2014").first
|
45
|
+
types.split.flatten
|
46
|
+
end
|
41
47
|
end
|
42
48
|
|
43
49
|
def extract_types
|
44
|
-
row =
|
45
|
-
|
46
|
-
type_line = row.css('div.value').text
|
50
|
+
row = find_row(:types)
|
51
|
+
row.css('div.value').text unless row.empty?
|
47
52
|
end
|
48
53
|
|
49
54
|
def converted_mana_cost(parsed_text = extract_converted_mana_cost)
|
50
|
-
parsed_text.strip.to_i
|
55
|
+
parsed_text.strip.to_i if parsed_text
|
51
56
|
end
|
52
57
|
|
53
58
|
def extract_converted_mana_cost
|
54
|
-
row =
|
55
|
-
|
56
|
-
cmc_line = row.css('div.value').text
|
59
|
+
row = find_row(:cmc)
|
60
|
+
cmc_line = row.css('div.value').text unless row.empty?
|
57
61
|
end
|
58
62
|
|
59
63
|
def mana_cost(parsed_text = extract_mana_cost)
|
@@ -62,13 +66,15 @@ module Gatherer
|
|
62
66
|
end
|
63
67
|
|
64
68
|
def extract_mana_cost
|
65
|
-
row =
|
66
|
-
|
67
|
-
|
69
|
+
row = find_row(:mana)
|
70
|
+
|
71
|
+
if row
|
72
|
+
mana_cost_line = row.css('div.value').css('img').map { |img| img['alt'] }
|
73
|
+
end
|
68
74
|
end
|
69
75
|
|
70
76
|
def subtypes(parsed_text = extract_subtypes)
|
71
|
-
if parsed_text.include?("\u2014")
|
77
|
+
if parsed_text && parsed_text.include?("\u2014")
|
72
78
|
parsed_text.split("\u2014").last.split(' ').map { |type| type.strip }
|
73
79
|
else
|
74
80
|
[]
|
@@ -76,20 +82,22 @@ module Gatherer
|
|
76
82
|
end
|
77
83
|
|
78
84
|
def extract_subtypes
|
79
|
-
row =
|
80
|
-
|
81
|
-
row.css('div.value').text
|
85
|
+
row = find_row(:subtypes)
|
86
|
+
row.css('div.value').text unless row.empty?
|
82
87
|
end
|
83
88
|
|
84
89
|
def text(parsed_text = extract_text)
|
85
|
-
parsed_text.map { |line| line.strip }.compact.join("\n")
|
90
|
+
parsed_text.map { |line| line.strip }.compact.join("\n") if parsed_text
|
86
91
|
end
|
87
92
|
|
88
93
|
def extract_text
|
89
|
-
row =
|
90
|
-
|
91
|
-
|
92
|
-
|
94
|
+
row = find_row(:text)
|
95
|
+
|
96
|
+
unless row.empty?
|
97
|
+
text_element = row.first
|
98
|
+
text_element.inner_html = replace_mana_symbols(text_element.inner_html)
|
99
|
+
text_element.css('div.value div.cardtextbox').map(&:text)
|
100
|
+
end
|
93
101
|
end
|
94
102
|
|
95
103
|
def replace_mana_symbols(html)
|
@@ -101,22 +109,23 @@ module Gatherer
|
|
101
109
|
end
|
102
110
|
|
103
111
|
def flavor_text(parsed_text = extract_flavor_text)
|
104
|
-
parsed_text.strip
|
112
|
+
parsed_text.strip if parsed_text
|
105
113
|
end
|
106
114
|
|
107
115
|
def extract_flavor_text
|
108
|
-
row =
|
109
|
-
|
110
|
-
row.css('div.cardtextbox').text
|
116
|
+
row = find_row(:flavor_text)
|
117
|
+
row.css('div.cardtextbox').text unless row.empty?
|
111
118
|
end
|
112
119
|
|
113
120
|
def parse_printing(printing)
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
121
|
+
if printing
|
122
|
+
title = printing.split(' (').first
|
123
|
+
Printing.new(
|
124
|
+
expansion: Expansion.new(title: title, abbreviation: abbreviation(title)),
|
125
|
+
rarity: printing.split(' (').last.chop,
|
126
|
+
number: (number if current_printing?(title))
|
127
|
+
)
|
128
|
+
end
|
120
129
|
end
|
121
130
|
|
122
131
|
def printings(parsed_text = extract_printings)
|
@@ -130,7 +139,7 @@ module Gatherer
|
|
130
139
|
end
|
131
140
|
|
132
141
|
def current_printing(parsed_text = extract_current_printing)
|
133
|
-
parse_printing(parsed_text)
|
142
|
+
parse_printing(parsed_text) if parsed_text
|
134
143
|
end
|
135
144
|
|
136
145
|
def current_printing?(title)
|
@@ -140,9 +149,8 @@ module Gatherer
|
|
140
149
|
end
|
141
150
|
|
142
151
|
def extract_current_printing
|
143
|
-
row =
|
144
|
-
|
145
|
-
row.css('img').map { |img| img['title'] }.first
|
152
|
+
row = find_row(:set)
|
153
|
+
row.css('img').map { |img| img['title'] }.first unless row.empty?
|
146
154
|
end
|
147
155
|
|
148
156
|
def other_printings(parsed_text = extract_other_printings)
|
@@ -155,9 +163,8 @@ module Gatherer
|
|
155
163
|
end
|
156
164
|
|
157
165
|
def extract_other_printings
|
158
|
-
row =
|
159
|
-
|
160
|
-
row.css('img').map { |img| img['title'] }
|
166
|
+
row = find_row(:other_sets)
|
167
|
+
row.css('img').map { |img| img['title'] } if row
|
161
168
|
end
|
162
169
|
|
163
170
|
def abbreviation(title, parsed_text = nil)
|
@@ -166,32 +173,33 @@ module Gatherer
|
|
166
173
|
end
|
167
174
|
|
168
175
|
def extract_abbreviation(title)
|
169
|
-
images =
|
170
|
-
return '' unless images
|
171
|
-
images += document.css(SELECTORS[:other_sets]).css('img')
|
176
|
+
images = find_row(:set).css('img')
|
172
177
|
|
173
|
-
images.
|
174
|
-
|
175
|
-
|
178
|
+
unless images.empty?
|
179
|
+
images += document.css(SELECTORS[:other_sets]).css('img')
|
180
|
+
|
181
|
+
images.map do |image|
|
182
|
+
image['src'] if image['title'].include?(title)
|
183
|
+
end.compact.uniq.first
|
184
|
+
end
|
176
185
|
end
|
177
186
|
|
178
187
|
def power(parsed_text = extract_power_toughness)
|
179
|
-
parsed_text.split('/').first if parsed_text.include?('/')
|
188
|
+
parsed_text.split('/').first if parsed_text && parsed_text.include?('/')
|
180
189
|
end
|
181
190
|
|
182
191
|
def toughness(parsed_text = extract_power_toughness)
|
183
|
-
parsed_text.split('/').last if parsed_text.include?('/')
|
192
|
+
parsed_text.split('/').last if parsed_text && parsed_text.include?('/')
|
184
193
|
end
|
185
194
|
|
186
195
|
def extract_power_toughness
|
187
|
-
row =
|
188
|
-
|
189
|
-
row.css('div.value').text
|
196
|
+
row = find_row(:pt)
|
197
|
+
row.css('div.value').text unless row.empty?
|
190
198
|
end
|
191
199
|
|
192
200
|
# gatherer uses the pt row to display loyalty
|
193
201
|
def loyalty(parsed_text = extract_power_toughness)
|
194
|
-
|
202
|
+
if parsed_text && !parsed_text.include?('/')
|
195
203
|
parsed_text.to_i if parsed_text.to_i > 0
|
196
204
|
end
|
197
205
|
end
|
@@ -201,19 +209,17 @@ module Gatherer
|
|
201
209
|
end
|
202
210
|
|
203
211
|
def extract_number
|
204
|
-
row =
|
205
|
-
|
206
|
-
row.css('div.value').text
|
212
|
+
row = find_row(:number)
|
213
|
+
row.css('div.value').text unless row.empty?
|
207
214
|
end
|
208
215
|
|
209
216
|
def illustrator(parsed_text = extract_illustrator)
|
210
|
-
parsed_text.strip
|
217
|
+
parsed_text.strip if parsed_text
|
211
218
|
end
|
212
219
|
|
213
220
|
def extract_illustrator
|
214
|
-
row =
|
215
|
-
|
216
|
-
row.css('div.value').text
|
221
|
+
row = find_row(:illustrator)
|
222
|
+
row.css('div.value').text unless row.empty?
|
217
223
|
end
|
218
224
|
|
219
225
|
def to_hash
|
data/lib/gatherer/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gatherer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|