desuraify 0.0.5.pre → 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: 7c1a3942027163f722a2cbd49e66bbe0602f431f
4
- data.tar.gz: f650f2b1f69d5784eb0b241b515da28f48e5da0c
3
+ metadata.gz: d3f974d4084840430812f963f50fb0e0e4beb848
4
+ data.tar.gz: 02c0d4e2f13e8fb1ad4bfb015713e577845841cd
5
5
  SHA512:
6
- metadata.gz: 0f20d841726544fbcbe8379236dd8d6b661e52e417ed343a9f9d5e45e8451117bd12426f8e890ccb605f7828be0fe1f48c2256ea4540f0c2b5ed3d7ef7187b41
7
- data.tar.gz: 6a92c5b32271cf52ad48a4747f83f7377b71926ae6ee3a52d863bc35bcb4bba41add78339f31ff536aee28e3dbd241396d41435d9bb67d5d1e8798d91315128b
6
+ metadata.gz: 1c72d769244e50e74160f1a99ce2126f7b7141e43e5ffbb762b18170fda2cb5803a15fa50e86048c8b03eca3ce5580ac8966bab8723679a897321bc7cdef7eb7
7
+ data.tar.gz: 7a7f994e7375c074aecaaca69dfe94f529dfe7772f4b5617afe488556eaeba3a232394876baa767d8839180e2687e03aa96f85a4ebbf108e95ee33df5d25a32c
@@ -1,4 +1,4 @@
1
- Copyright (c) 2015 TODO: Write your name
1
+ Copyright (c) 2015 Jason Franz
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -14,7 +14,7 @@ And then execute:
14
14
 
15
15
  Or install it yourself as:
16
16
 
17
- $ gem install desuraify
17
+ $ gem install desuraify --pre
18
18
 
19
19
  ## Usage
20
20
  ```
@@ -62,21 +62,20 @@ Or install it yourself as:
62
62
  => "illwinter-game-design"
63
63
  ```
64
64
 
65
- \# numerous other attributes are available (some partially or poorly implemented)
65
+ \# numerous other attributes are available
66
66
  ```
67
67
  puts Desuraify::Game::ATTRIBUTES.inspect
68
68
  or
69
- puts game.attributes.inspect
69
+ puts game.attributes
70
70
  ```
71
71
 
72
- ## TODO in no particular order
72
+ ## TODO
73
73
 
74
- 1. Maybe nothing, apparently the parent company of Desura filed for bankruptcy yesterday...
75
- 2. Gather Engine data (currently game data is all that is functional)
76
- 3. Gather Member data
77
- 4. Gather Company data
74
+ 1. Gather Engine data - June 12, 2015
75
+ 2. Gather Member data - July 21, 2015
76
+ 4. Gather Company data - June 13, 2015
78
77
  5. Documentation...
79
- 6. Tests (I know, I'm a horrible person)
78
+ 6. Tests - July 21, 2015
80
79
 
81
80
  ## Contributing
82
81
 
@@ -53,6 +53,8 @@ module Desuraify
53
53
  headers.each do |header|
54
54
  next if header.text.strip.empty?
55
55
 
56
+ attribute = header.text.strip.split(" ").join("_").downcase.intern
57
+
56
58
  case header.text.strip
57
59
  when /^Platforms?$/i
58
60
 
@@ -71,53 +73,30 @@ module Desuraify
71
73
  eng
72
74
  end.uniq
73
75
 
74
- when "Engines"
75
-
76
- result[:engine_count] = header.next.next.text.strip.to_i rescue nil
76
+ when /^Developers?/i, /Publishers?$/i
77
77
 
78
- when /^Developers?/i
78
+ attribute = header.text.downcase
79
+ attribute << "s" unless attribute[-1] == "s"
79
80
 
80
- result[:developers] = header.parent.children.select do |developer|
81
- developer unless developer == header || developer.text.strip.empty?
82
- end.map do |develop|
83
- developer = Hash.new
84
- developer[:name] = develop.text.strip
85
- href = develop.child.attribute('href').value.split('/')
86
- developer[:company] = !!href.find{|company| company.match(/^company$/i)}
87
- developer[:id] = href.last
88
- developer
81
+ result[attribute.intern] = header.parent.children.select do |entity|
82
+ entity unless entity == header || entity.text.strip.empty?
83
+ end.map do |entity|
84
+ target = Hash.new
85
+ target[:name] = entity.text.strip
86
+ href = entity.child.attribute('href').value.split('/')
87
+ target[:company] = !!href.find{|company| company.match(/^company$/i)}
88
+ target[:id] = href.last
89
+ target
89
90
  end.uniq
90
91
 
91
- when /Publishers?$/i
92
-
93
- result[:publishers] = header.parent.children.select do |publisher|
94
- publisher unless publisher == header || publisher.text.strip.empty?
95
- end.map do |pub|
96
- publisher = Hash.new
97
- publisher[:name] = pub.text.strip
98
- href = pub.child.attribute('href').value.split('/')
99
- publisher[:company] = !!href.find{|company| company.match(/^company$/i)}
100
- publisher[:id] = href.last
101
- publisher
102
- end.uniq
103
-
104
- when /Languages?/i
105
-
106
- result[:languages] = header.parent.children.select do |language|
107
- language unless language == header || language.text.strip.empty?
108
- end.map! {|language| language.text.strip }.uniq
92
+ when /Languages?/i, /^Genres?/i, /^Themes?$/i, "Players", /^Projects?$/
109
93
 
110
- when /^Genres?/i
94
+ attribute = header.text.downcase
95
+ attribute << "s" unless attribute[-1] == "s"
111
96
 
112
- result[:genres] = header.parent.children.select do |genre|
113
- genre unless genre == header || genre.text.strip.empty?
114
- end.map {|genre| genre.text.strip }.uniq
115
-
116
- when /^Themes?$/i
117
-
118
- result[:themes] = header.parent.children.select do |theme|
119
- theme unless theme == header || theme.text.strip.empty?
120
- end.map {|theme| theme.text.strip }.uniq
97
+ result[attribute.intern] = header.parent.children.select do |entity|
98
+ entity unless entity == header || entity.text.strip.empty?
99
+ end.map! {|entity| entity.text.strip }.uniq
121
100
 
122
101
  when /^This game is an expansion for\s+?/i
123
102
 
@@ -128,86 +107,39 @@ module Desuraify
128
107
  expansion[:id] = header.parent.search('a').attribute('href').value.split('/').last.strip
129
108
  result[:expansion] = expansion
130
109
 
131
- when /^Projects?$/
132
-
133
- result[:project] = header.parent.children.select do |project|
134
- project unless project == header || project.text.strip.empty?
135
- end.map {|project| project.text.strip }.uniq
136
-
137
- when "Players"
138
-
139
- result[:players] = header.parent.children.select do |player|
140
- player unless player == header || player.text.strip.empty?
141
- end.map{|player| player.text.strip }.uniq
142
-
143
110
  when "Boxshot"
144
111
 
145
- result[:boxshot] = header.parent.search('a').attribute('href').value.strip rescue nil
112
+ result[attribute] = header.parent.search('a').attribute('href').value.strip rescue nil
146
113
 
147
114
  when "Last Update"
148
115
 
149
116
  result[:updated] = header.next.next.text.strip rescue nil
150
117
 
151
- when "License"
152
-
153
- result[:license] = header.next.next.text.strip rescue nil
154
-
155
- when "Release Date"
156
-
157
- result[:release_date] = header.next.next.text.strip rescue nil
158
-
159
- when "Watchers"
160
-
161
- result[:watchers] = header.next.next.text.strip rescue nil
162
-
163
- when "Images"
118
+ when "News", "Members", "Videos", "Games", "Images", "Engines"
164
119
 
165
- result[:image_count] = header.next.next.text.strip.to_i rescue nil
120
+ attribute = header.text.strip.split(" ").push("count").join("_").downcase.intern
121
+ result[attribute] = header.next.next.text.strip.to_i rescue nil
166
122
 
167
- when "Games"
168
123
 
169
- result[:game_count] = header.next.next.text.strip.to_i rescue nil
170
-
171
- when "News"
172
-
173
- result[:news_count] = header.next.next.text.strip.to_i rescue nil
174
-
175
- when "Rank"
176
-
177
- result[:rank] = header.next.next.text.strip rescue nil
178
-
179
- when "Videos"
180
-
181
- result[:video_count] = header.next.next.text.strip.to_i rescue nil
182
-
183
- when "Visits"
124
+ when "Visits", "Profile Visitors"
184
125
 
185
126
  result[:visits] = header.next.next.text.strip rescue nil
186
127
 
187
- when "Official Page"
188
-
189
- result[:official_page] = header.parent.search('a').attribute('href').value.strip rescue nil
190
-
191
-
192
- when "Homepage"
128
+ when "Official Page", "Homepage"
193
129
 
194
130
  result[:official_page] = header.parent.search('a').attribute('href').value.strip rescue nil
195
131
 
196
- when "Members"
197
-
198
- result[:member_count] = header.next.next.text.strip.to_i rescue nil
132
+ when "Offline Since"
199
133
 
200
- when "Established"
134
+ result[:offline] = header.next.next.text.strip rescue nil
201
135
 
202
- result[:established] = header.next.next.text.strip rescue nil
136
+ when "Activity Points"
203
137
 
204
- when "Company"
138
+ result[:activity_points] = header.next.next.text.strip.to_i rescue nil
205
139
 
206
- result[:company] = header.next.next.text.strip rescue nil
140
+ when "Company", "Office", "Time Online", "Site Visits", /^Gender/, /^Country/, "Established", "Watchers", "Rank", "License", "Release Date", "Phone"
207
141
 
208
- when "Office"
209
-
210
- result[:office] = header.next.next.text.strip rescue nil
142
+ result[attribute] = header.next.next.text.strip rescue nil
211
143
 
212
144
  when "Address"
213
145
 
@@ -221,30 +153,35 @@ module Desuraify
221
153
 
222
154
  result[:address] = addresses.map { |address| address.split("\n") }.flatten
223
155
 
224
- when "Phone"
225
-
226
- result[:phone] = header.next.next.text.strip rescue nil
227
156
  end
228
157
 
229
158
  end
230
159
 
160
+ result[:engines_count] = result[:engines_count] || 0
161
+ result[:images_count] = result[:images_count] || 0
162
+ result[:videos_count] = result[:videos_count] || 0
163
+ result[:games_count] = result[:games_count] || 0
164
+ result[:news_count] = result[:news_count] || 0
165
+
231
166
  result
232
167
  end
233
168
 
234
169
  def parse_similar(doc, img_count=0, vid_count=0)
235
170
  result = Hash.new
236
171
 
237
- result[:rating] = doc.at_css('.score').text.strip rescue nil
172
+ result[:rating] = doc.at_css('.score').text.strip.to_f rescue nil
173
+ result[:level] = result[:rating]
238
174
 
239
175
  result[:videos] = doc.css('.videobox').search('a').map do |video|
240
176
  values = video.attribute('href').value.strip.split('/')
241
177
  values.pop
242
178
  "http://www.desura.com#{values.join('/')}"
243
179
  end rescue nil
244
- result[:videos] = rss_update(video_rss) if result[:videos].size < vid_count
180
+
181
+ result[:videos] = rss_update(video_rss) if result[:videos].size < vid_count rescue nil
245
182
 
246
183
  result[:images] = doc.css('.mediaitem').search('a').select{|item| item if item.attribute('href').value.match(/^https?/i) }.map{|pic| pic.attribute('href').value.strip }
247
- result[:images] = rss_update(image_rss) if result[:images].size < img_count
184
+ result[:images] = rss_update(image_rss) if result[:images].size < img_count rescue nil
248
185
 
249
186
  result[:summary] = doc.at_css('.body.clear').search('p').map{ |paragraph| paragraph.text.strip }
250
187
  result[:page_title] = doc.css('title').text.strip
@@ -290,4 +227,4 @@ module Desuraify
290
227
  end
291
228
 
292
229
  end
293
- end
230
+ end
@@ -2,9 +2,9 @@ module Desuraify
2
2
  class Company < Base
3
3
 
4
4
  ATTRIBUTES = [
5
- :members, :member_count, :html, :official_page, :company, :rank, :visits, :game_count,
6
- :office, :watchers, :address, :phone, :engine_count, :news_count, :images,
7
- :image_count, :videos, :video_count
5
+ :address, :company, :engines_count, :games_count, :html, :images, :images_count,
6
+ :members, :members_count, :news_count, :office, :official_page, :phone, :rank,
7
+ :videos, :videos_count, :visits, :watchers
8
8
  ]
9
9
 
10
10
  attr_reader *ATTRIBUTES
@@ -1,10 +1,10 @@
1
1
  module Desuraify
2
2
  class Engine < Base
3
3
  ATTRIBUTES = [
4
- :developers, :games, :game_count, :html, :images, :image_count, :license, :news,
4
+ :developers, :games, :games_count, :html, :images, :images_count, :license, :news,
5
5
  :news_count, :official_page, :page_title, :platforms, :publishers, :rank,
6
6
  :rating, :release_date, :reviews, :summary, :title, :updated, :videos,
7
- :video_count, :visits, :watchers
7
+ :videos_count, :visits, :watchers
8
8
  ]
9
9
 
10
10
  attr_reader *ATTRIBUTES
@@ -21,6 +21,8 @@ module Desuraify
21
21
  result.merge!(parse_similar(doc, result[:image_count], result[:video_count]))
22
22
  result[:html] = html
23
23
 
24
+ result[:publishers] = result[:developers].map{ |dev| dev.dup } unless result[:publishers] if result[:developers]
25
+
24
26
  result
25
27
 
26
28
  end
@@ -3,10 +3,10 @@ module Desuraify
3
3
  class Game < Base
4
4
  ATTRIBUTES = [
5
5
  :boxshot, :developers, :engines, :expansion, :genres, :html,
6
- :image_count, :images, :languages, :news, :news_count, :official_page,
7
- :original_price, :page_title, :platforms, :players, :price, :project,
6
+ :images_count, :images, :languages, :news, :news_count, :official_page,
7
+ :original_price, :page_title, :platforms, :players, :price, :projects,
8
8
  :publishers, :rank, :rating, :reviews, :summary, :themes, :title,
9
- :updated, :video_count, :videos, :visits, :watchers
9
+ :updated, :videos, :videos_count, :visits, :watchers
10
10
  ]
11
11
 
12
12
  attr_reader *ATTRIBUTES
@@ -56,4 +56,4 @@ module Desuraify
56
56
  end
57
57
 
58
58
  end # end of class
59
- end
59
+ end
@@ -2,17 +2,41 @@ module Desuraify
2
2
  class Member < Base
3
3
 
4
4
  ATTRIBUTES = [
5
-
5
+ :activity_points, :comments, :country, :gender, :html, :images, :images_count,
6
+ :level, :offline, :rank, :site_visits, :time_online, :videos, :videos_count,
7
+ :visits, :watchers
6
8
  ]
7
9
 
8
- def initialize(id, options)
10
+ attr_reader *ATTRIBUTES
11
+
12
+ def initialize(id, options={})
9
13
  super(id, options)
10
14
  end
11
15
 
16
+ def parse(html)
17
+ doc = Nokogiri::HTML(html)
18
+
19
+ result = parse_headers(doc.css('h5'))
20
+ result.merge!(parse_similar(doc, result[:image_count], result[:video_count]))
21
+ result[:html] = html
22
+
23
+ result
24
+ end
25
+
12
26
  def attributes
13
27
  ATTRIBUTES
14
28
  end
29
+
30
+ def url
31
+ "http://www.desura.com/members/#{@id}"
32
+ end
33
+
34
+ def image_rss
35
+ "http://rss.desura.com/members/#{@id}/images/feed/rss.xml"
36
+ end
37
+
38
+ def video_rss
39
+ "http://rss.desura.com/members/#{@id}/videos/feed/rss.xml"
40
+ end
15
41
  end
16
42
  end
17
-
18
- # http://rss.desura.com/games/arbalest-3035/images/feed/rss.xml
@@ -1,3 +1,3 @@
1
1
  module Desuraify
2
- VERSION = "0.0.5.pre"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -0,0 +1,87 @@
1
+ require_relative '../../lib/desuraify'
2
+
3
+ RSpec.describe Desuraify::Company do
4
+ before do
5
+ @company = Desuraify::Company.new('illwinter-game-design')
6
+ @company.update
7
+ end
8
+
9
+ describe 'company data' do
10
+ it 'should have an address array' do
11
+ expect(@company.address.class).to eq(Array)
12
+ expect(@company.address).not_to eq([])
13
+ end
14
+
15
+ it 'should have a company' do
16
+ expect(@company.company.class).to eq(String)
17
+ end
18
+
19
+ it 'should have an engines_count' do
20
+ expect(@company.engines_count.class).to eq(Fixnum)
21
+ end
22
+
23
+ it 'should have a games_count' do
24
+ expect(@company.games_count.class).to eq(Fixnum)
25
+ end
26
+
27
+ it 'should have the html page available' do
28
+ expect(@company.html.class).to eq(String)
29
+ end
30
+
31
+ it 'should have an array of images' do
32
+ expect(@company.images.class).to eq(Array)
33
+ expect(@company.images).to eq([])
34
+ end
35
+
36
+ it 'should have an images_count' do
37
+ expect(@company.images_count.class).to eq(Fixnum)
38
+ end
39
+
40
+ it 'should have a members_count' do
41
+ expect(@company.members_count.class).to eq(Fixnum)
42
+ end
43
+
44
+ # not yet implemented
45
+ # it 'should have a members array' do
46
+ # expect(@company.members.class).to eq(Array)
47
+ # expect(@company.members).not_to eq([])
48
+ # end
49
+
50
+ it 'should have a news_count' do
51
+ expect(@company.news_count.class).to eq(Fixnum)
52
+ end
53
+
54
+ it 'should have an office' do
55
+ expect(@company.office.class).to eq(String)
56
+ end
57
+
58
+ it 'should have an official_page' do
59
+ expect(@company.official_page.class).to eq(String)
60
+ end
61
+
62
+ it 'should have a phone' do
63
+ expect(@company.phone.class).to eq(String)
64
+ end
65
+
66
+ it 'should have a rank' do
67
+ expect(@company.rank.class).to eq(String)
68
+ end
69
+
70
+ it 'should have an array of videos' do
71
+ expect(@company.videos.class).to eq(Array)
72
+ # expect(@company.videos).not_to eq([])
73
+ end
74
+
75
+ it 'should have a videos_count' do
76
+ expect(@company.videos_count.class).to eq(Fixnum)
77
+ end
78
+
79
+ it 'should have a visits attribute' do
80
+ expect(@company.visits.class).to eq(String)
81
+ end
82
+
83
+ it 'should have a watchers attribute' do
84
+ expect(@company.watchers.class).to eq(String)
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,9 @@
1
+ require_relative '../lib/desuraify'
2
+
3
+ RSpec.describe Desuraify do
4
+ it 'can not be instantiated' do
5
+ expect {
6
+ Desuraify.new
7
+ }.to raise_error(NoMethodError)
8
+ end
9
+ end
@@ -0,0 +1,139 @@
1
+ require_relative '../../lib/desuraify'
2
+
3
+ RSpec.describe Desuraify::Engine do
4
+ before do
5
+ @engine = Desuraify::Engine.new('unity')
6
+ @engine.update
7
+ end
8
+
9
+ describe 'engine data' do
10
+ describe "developers" do
11
+ it 'should have an array of developer hashes' do
12
+ expect(@engine.developers.class).to eq(Array)
13
+ expect(@engine.developers).not_to eq([])
14
+ expect(@engine.developers.first.class).to eq(Hash)
15
+ end
16
+
17
+ it 'should have attributes in the developer hash' do
18
+ expect(@engine.developers.first[:name].class).to eq(String)
19
+ expect([TrueClass, FalseClass].include?(@engine.developers.first[:company].class)).to eq(true)
20
+ expect(@engine.developers.first[:id].class).to eq(String)
21
+ end
22
+ end
23
+
24
+ # not yet implemented
25
+ # it 'should have an array of games' do
26
+ # expect(@engine.games.class).to eq(Array)
27
+ # expect(@engine.games).not_to eq([])
28
+ # end
29
+
30
+ it 'should have a games_count attribute' do
31
+ expect(@engine.games_count.class).to eq(Fixnum)
32
+ end
33
+
34
+ it 'should have the html page available' do
35
+ expect(@engine.html).not_to eq(nil)
36
+ expect(@engine.html.class).to eq(String)
37
+ end
38
+
39
+ it 'should have an array of images' do
40
+ expect(@engine.images.class).to eq(Array)
41
+ expect(@engine.images).to eq([])
42
+ end
43
+
44
+ it 'should have an image_count' do
45
+ expect(@engine.images_count.class).to eq(Fixnum)
46
+ end
47
+
48
+ it 'has a license attribute' do
49
+ expect(@engine.license.class).to eq(String)
50
+ end
51
+
52
+ # not yet implemented
53
+ # it 'has an array of news' do
54
+ # expect(@engine.news.class).to eq(Array)
55
+ # expect(@engine.news).not_to eq([])
56
+ # end
57
+
58
+ it 'should have a news_count' do
59
+ expect(@engine.news_count.class).to eq(Fixnum)
60
+ end
61
+
62
+ it 'should have an official_page' do
63
+ expect(@engine.official_page.class).to eq(String)
64
+ end
65
+
66
+ it 'should have a page_title' do
67
+ expect(@engine.page_title.class).to eq(String)
68
+ end
69
+
70
+ it 'should have an array of platforms' do
71
+ expect(@engine.platforms.class).to eq(Array)
72
+ expect(@engine.platforms).not_to eq([])
73
+ end
74
+
75
+ describe "publishers" do
76
+ it 'should have an array of publisher hashes' do
77
+ expect(@engine.publishers.class).to eq(Array)
78
+ expect(@engine.publishers).not_to eq([])
79
+ expect(@engine.publishers.first.class).to eq(Hash)
80
+ end
81
+
82
+ it 'should have attributes in the publisher hash' do
83
+ expect(@engine.publishers.first[:name].class).to eq(String)
84
+ expect([TrueClass, FalseClass].include?(@engine.publishers.first[:company].class)).to eq(true)
85
+ expect(@engine.publishers.first[:id].class).to eq(String)
86
+ end
87
+ end
88
+
89
+ it 'should have a rank attribute' do
90
+ expect(@engine.rank.class).to eq(String)
91
+ end
92
+
93
+ it 'should have a rating attribute' do
94
+ expect(@engine.rating.class).to eq(Float)
95
+ end
96
+
97
+ it 'should have a release_date attribute' do
98
+ expect(@engine.release_date.class).to eq(String)
99
+ end
100
+
101
+ describe 'summary' do
102
+ it 'should be an array' do
103
+ expect(@engine.summary.class).to eq(Array)
104
+ expect(@engine.summary).not_to eq([])
105
+ end
106
+
107
+ it 'should be an array of strings' do
108
+ @engine.summary.each do |sentence|
109
+ expect(sentence.class).to eq(String)
110
+ end
111
+ end
112
+ end
113
+
114
+ it "should have a title attribute" do
115
+ expect(@engine.title.class).to eq(String)
116
+ end
117
+
118
+ it 'should have an updated attribute' do
119
+ expect(@engine.updated.class).to eq(String)
120
+ end
121
+
122
+ it 'should have an array of videos' do
123
+ expect(@engine.videos.class).to eq(Array)
124
+ # expect(@engine.videos).not_to eq([])
125
+ end
126
+
127
+ it 'should have a videos_count' do
128
+ expect(@engine.videos_count.class).to eq(Fixnum)
129
+ end
130
+
131
+ it 'should have a visits attribute' do
132
+ expect(@engine.visits.class).to eq(String)
133
+ end
134
+
135
+ it 'should have a watchers attribute' do
136
+ expect(@engine.watchers.class).to eq(String)
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,202 @@
1
+ require_relative '../../lib/desuraify'
2
+
3
+ RSpec.describe Desuraify::Game do
4
+ before do
5
+ @game = Desuraify::Game.new("dominions-4-thrones-of-ascensions")
6
+ end
7
+
8
+ describe "initialization" do
9
+ it 'has an ancestor chain that includes Desuraify::Base' do
10
+ expect(@game.class.ancestors.include?(Desuraify::Base)).to eq(true)
11
+ end
12
+
13
+ it 'should be an instance of Desuraify::Game' do
14
+ expect(@game.instance_of?(Desuraify::Game)).to eq(true)
15
+ end
16
+
17
+ it 'should have a Typhoeus::Hydra instance available' do
18
+ expect(@game.hydra.class).to eq(Typhoeus::Hydra)
19
+ end
20
+
21
+ it 'should have an id' do
22
+ expect(@game.id).to eq("dominions-4-thrones-of-ascensions")
23
+ end
24
+
25
+ it 'should have an attributes array of methods that are nil' do
26
+ @game.attributes.each do |attribute|
27
+ expect(@game.send(attribute)).to eq(nil)
28
+ end
29
+ end
30
+ end
31
+
32
+ describe "game data" do
33
+ before do
34
+ @game.update
35
+ end
36
+
37
+ it "should have a title" do
38
+ expect(@game.title.class).to eq(String)
39
+ end
40
+
41
+ it 'should have a page_title' do
42
+ expect(@game.page_title.class).to eq(String)
43
+ end
44
+
45
+ it 'should have an official_page' do
46
+ expect(@game.official_page.class).to eq(String)
47
+ end
48
+
49
+ # this may change if the developer adds game videos
50
+ it 'should have an array of videos' do
51
+ expect(@game.videos.class).to eq(Array)
52
+ expect(@game.videos).to eq([])
53
+ end
54
+
55
+ it 'should have an array of images' do
56
+ expect(@game.images.class).to eq(Array)
57
+ expect(@game.images).not_to eq([])
58
+ end
59
+
60
+ describe "developers" do
61
+ it 'should have an array of developer hashes' do
62
+ expect(@game.developers.class).to eq(Array)
63
+ expect(@game.developers).not_to eq([])
64
+ expect(@game.developers.first.class).to eq(Hash)
65
+ end
66
+
67
+ it 'should have attributes in the developer hash' do
68
+ expect(@game.developers.first[:name].class).to eq(String)
69
+ expect([TrueClass, FalseClass].include?(@game.developers.first[:company].class)).to eq(true)
70
+ expect(@game.developers.first[:id].class).to eq(String)
71
+ end
72
+ end
73
+
74
+ describe "publishers" do
75
+ it 'should have an array of publisher hashes' do
76
+ expect(@game.publishers.class).to eq(Array)
77
+ expect(@game.publishers).not_to eq([])
78
+ expect(@game.publishers.first.class).to eq(Hash)
79
+ end
80
+
81
+ it 'should have attributes in the publisher hash' do
82
+ expect(@game.publishers.first[:name].class).to eq(String)
83
+ expect([TrueClass, FalseClass].include?(@game.publishers.first[:company].class)).to eq(true)
84
+ expect(@game.publishers.first[:id].class).to eq(String)
85
+ end
86
+ end
87
+
88
+ describe 'engines' do
89
+ it 'should have an array of engine hashes' do
90
+ expect(@game.publishers.class).to eq(Array)
91
+ expect(@game.publishers).not_to eq([])
92
+ expect(@game.publishers.first.class).to eq(Hash)
93
+ end
94
+
95
+ it 'should have attributes in the engine hash' do
96
+ expect(@game.engines.first[:name].class).to eq(String)
97
+ expect(@game.engines.first[:id].class).to eq(String)
98
+ end
99
+ end
100
+
101
+ describe 'platforms' do
102
+ it 'should have an array of platforms' do
103
+ expect(@game.platforms.class).to eq(Array)
104
+ expect(@game.platforms).not_to eq([])
105
+ end
106
+
107
+ # it is my understanding that desura does not support platforms other that those listed
108
+ it 'should be included in ["Windows", "Mac", "Linux"]' do
109
+ platforms = ["Windows", "Mac", "Linux"]
110
+
111
+ @game.platforms.each do |platform|
112
+ expect(platforms.include?(platform)).to eq(true)
113
+ end
114
+ end
115
+ end
116
+
117
+ it 'should have an array of player modes' do
118
+ expect(@game.players.class).to eq(Array)
119
+ expect(@game.players).not_to eq([])
120
+ end
121
+
122
+ it 'should have an array of game classifications (projects)' do
123
+ expect(@game.projects.class).to eq(Array)
124
+ expect(@game.projects).not_to eq([])
125
+ end
126
+
127
+ it 'should have an array of themes' do
128
+ expect(@game.themes.class).to eq(Array)
129
+ expect(@game.themes).not_to eq([])
130
+ end
131
+
132
+ it 'should have a rank' do
133
+ expect(@game.rank.class).to eq(String)
134
+ end
135
+
136
+ it 'should have a rating' do
137
+ expect(@game.rating.class).to eq(Float)
138
+ end
139
+
140
+ describe 'summary' do
141
+ it 'should be an array' do
142
+ expect(@game.summary.class).to eq(Array)
143
+ expect(@game.summary).not_to eq([])
144
+ end
145
+
146
+ it 'should be an array of strings' do
147
+ @game.summary.each do |sentence|
148
+ expect(sentence.class).to eq(String)
149
+ end
150
+ end
151
+ end
152
+
153
+ it 'should have a boxshot image extension of jpg' do
154
+ ext = @game.boxshot.split("/").last.split(".").last
155
+ expect(ext).to eq("jpg")
156
+ end
157
+
158
+ it 'should have an updated attribute' do
159
+ expect(@game.updated.class).to eq(String)
160
+ end
161
+
162
+ it 'should have an images_count' do
163
+ expect(@game.images_count.class).to eq(Fixnum)
164
+ end
165
+
166
+ it 'should have a videos_count' do
167
+ expect(@game.videos_count.class).to eq(Fixnum)
168
+ end
169
+
170
+ it 'should have a news_count' do
171
+ expect(@game.news_count.class).to eq(Fixnum)
172
+ end
173
+
174
+ it 'should have an array of genres' do
175
+ expect(@game.genres.class).to eq(Array)
176
+ expect(@game.genres).not_to eq([])
177
+ end
178
+
179
+ it 'should have the html page available' do
180
+ expect(@game.html).not_to eq(nil)
181
+ expect(@game.html.class).to eq(String)
182
+ end
183
+
184
+ it 'should have a visits attribute' do
185
+ expect(@game.visits.class).to eq(String)
186
+ end
187
+
188
+ it 'should have a watchers attribute' do
189
+ expect(@game.watchers.class).to eq(String)
190
+ end
191
+
192
+ #langauges not yet implemented by desura, we'll be ready when they do
193
+ it 'should have languages equal to nil' do
194
+ expect(@game.languages).to eq(nil)
195
+ end
196
+
197
+ describe /\$\d+.\d+/ do
198
+ it { should match(@game.price) }
199
+ it { should match(@game.original_price) }
200
+ end
201
+ end
202
+ end
@@ -0,0 +1,74 @@
1
+ require_relative '../../lib/desuraify'
2
+
3
+ RSpec.describe Desuraify::Member do
4
+ before do
5
+ @member = Desuraify::Member.new('animdude')
6
+ @member.update
7
+ end
8
+
9
+ describe 'member data' do
10
+
11
+ it 'should have an activity_points attribute' do
12
+ expect(@member.activity_points.class).to eq(Fixnum)
13
+ end
14
+
15
+ it 'should have a country attribute' do
16
+ expect(@member.country.class).to eq(String)
17
+ end
18
+
19
+ it 'should have a gender attribute' do
20
+ expect(@member.gender.class).to eq(String)
21
+ end
22
+
23
+ it 'should have the html page available' do
24
+ expect(@member.html).not_to eq(nil)
25
+ expect(@member.html.class).to eq(String)
26
+ end
27
+
28
+ it 'should have an array of images' do
29
+ expect(@member.images.class).to eq(Array)
30
+ expect(@member.images).to eq([])
31
+ end
32
+
33
+ it 'should have an image_count' do
34
+ expect(@member.images_count.class).to eq(Fixnum)
35
+ end
36
+
37
+ it 'should have a level attribute' do
38
+ expect(@member.level.class).to eq(Float)
39
+ end
40
+
41
+ it 'should have an offline attribute' do
42
+ expect(@member.offline.class).to eq(String)
43
+ end
44
+
45
+ it 'should have a rank attribute' do
46
+ expect(@member.rank.class).to eq(String)
47
+ end
48
+
49
+ it 'should have a site_visits attribute' do
50
+ expect(@member.site_visits.class).to eq(String)
51
+ end
52
+
53
+ it 'should have a time_online attribute' do
54
+ expect(@member.time_online.class).to eq(String)
55
+ end
56
+
57
+ it 'should have an array of videos' do
58
+ expect(@member.videos.class).to eq(Array)
59
+ expect(@member.videos).to eq([])
60
+ end
61
+
62
+ it 'should have a videos_count' do
63
+ expect(@member.videos_count.class).to eq(Fixnum)
64
+ end
65
+
66
+ it 'should have a visits attribute' do
67
+ expect(@member.visits.class).to eq(String)
68
+ end
69
+
70
+ it 'should have a watchers attribute' do
71
+ expect(@member.watchers.class).to eq(String)
72
+ end
73
+ end
74
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: desuraify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5.pre
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - jfrazx
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-13 00:00:00.000000000 Z
11
+ date: 2015-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -87,6 +87,11 @@ files:
87
87
  - lib/desuraify/game.rb
88
88
  - lib/desuraify/member.rb
89
89
  - lib/desuraify/version.rb
90
+ - tests/company/company_spec.rb
91
+ - tests/desuraify_spec.rb
92
+ - tests/engine/engine_spec.rb
93
+ - tests/game/game_spec.rb
94
+ - tests/member/member_spec.rb
90
95
  homepage: https://github.com/jfrazx/desuraify
91
96
  licenses:
92
97
  - MIT
@@ -102,9 +107,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
107
  version: '0'
103
108
  required_rubygems_version: !ruby/object:Gem::Requirement
104
109
  requirements:
105
- - - ">"
110
+ - - ">="
106
111
  - !ruby/object:Gem::Version
107
- version: 1.3.1
112
+ version: '0'
108
113
  requirements: []
109
114
  rubyforge_project:
110
115
  rubygems_version: 2.2.2