tf2r 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d3eea3425354043f9ded54a379f71f341cf8010e
4
- data.tar.gz: d0104958be84f7c9ddada47b9149c60a5fcdb565
3
+ metadata.gz: f93befc5ee498a05c0f863dca2156747a184e75b
4
+ data.tar.gz: 88a9ee5bb47d1eb9725065277f53bc251f309f24
5
5
  SHA512:
6
- metadata.gz: 69b5e73e168c64ea21deae35c377854651add86269f3b371f1a453fc64e255b508e8affcd283f776ae10d444760ba821bb0f5eaa237f0b9b141e5efcfd97be23
7
- data.tar.gz: 27e52dac9061e970a47073b5fffbdc47eb37e3f54d9bf569a1c1ad3a9eaa160d7ab7fde95a428883f231333fda3cae80ea8661cf4576935dca9d61e9e61338bf
6
+ metadata.gz: 1a6339383a2d14a9cc3da5bb378d0f2fbced0d31f7790ea47b311542ec554cb74d0855c6e7fd12493b8e2deb7415d17f2d41d257d4ad5ba78cb451d4da694f81
7
+ data.tar.gz: 8816069f87359a8b4efee8c4dbc6292a23885e16e86a288b7c1c5a3a570ac08f4c87bf2d7bf66270d9e9404af1497679bb5811a2786f1b9a28e37cb2205206c3
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tf2r (0.2.1)
4
+ tf2r (0.3.0)
5
5
  mechanize (~> 2.7)
6
6
 
7
7
  GEM
data/lib/tf2r/api.rb CHANGED
@@ -5,6 +5,9 @@ module TF2R
5
5
  class API
6
6
  HOST = 'http://tf2r.com'
7
7
  ENDPOINT = '/job.php'
8
+ # newentry on a checkraffle job can only return up to 2500 entries. This is
9
+ # a problem for any raffles with a maximum entries greater than 2500.
10
+ MAX_ENTRY_RESPONSE_COUNT = 2500
8
11
 
9
12
  def self.raffle_info(link_snippet)
10
13
  params = {checkraffle: true, rid: link_snippet[1..-1],
@@ -14,7 +17,7 @@ module TF2R
14
17
 
15
18
  private
16
19
 
17
- # Make this sane with something like httparty
20
+ # TODO: Make this sane with something like httparty
18
21
  def self.request(params)
19
22
  uri = URI.parse(HOST)
20
23
  http = Net::HTTP.new(uri.host, uri.port)
data/lib/tf2r/raffle.rb CHANGED
@@ -1,16 +1,18 @@
1
1
  module TF2R
2
2
  # This class provides a simple wrapper around grabbing information for a
3
3
  # raffle from the Scraper and API.
4
- # TODO: make this an actuall wrapper instead of accepting pre-made info.
4
+ # TODO: document
5
5
  class Raffle
6
6
  include TF2R::TextHelpers
7
7
 
8
- attr_reader :link_snippet, :api_info, :scraper_info
8
+ attr_reader :link_snippet
9
9
 
10
- def initialize(link_snippet, api_info, scraper_info)
10
+ def initialize(link_snippet)
11
11
  @link_snippet = link_snippet
12
- @api_info = api_info
13
- @scraper_info = scraper_info
12
+
13
+ @scraper = Scraper.new
14
+ populate_raffle_info
15
+ get_full_participants if max_entries > API::MAX_ENTRY_RESPONSE_COUNT
14
16
  end
15
17
 
16
18
  def info
@@ -25,12 +27,35 @@ module TF2R
25
27
  @scraper_info[1]
26
28
  end
27
29
 
30
+ # TODO: test raffles with max_entries greater than 2500
28
31
  def participants
29
- @normalized_participants ||= normalize_entries(@api_info['newentry'])
32
+ if max_entries > 2500
33
+ @normalized_participants ||= normalize_entries(@api_info['newentry'])
34
+ else
35
+ @full_participants
36
+ end
30
37
  end
31
38
 
32
39
  private
33
40
 
41
+ def populate_raffle_info
42
+ threads = []
43
+ threads << Thread.new do
44
+ @api_info = API.raffle_info(@link_snippet)
45
+ end
46
+ threads << Thread.new do
47
+ page = @scraper.fetch(raffle_link(@link_snippet))
48
+ @scraper_info = @scraper.scrape_raffle(page)
49
+ end
50
+
51
+ threads.each { |t| t.join }
52
+ end
53
+
54
+ def get_full_participants
55
+ page = @scraper.fetch(raffle_link_full(@link_snippet))
56
+ @full_participants = @scraper.scrape_raffle_for_participants(page)
57
+ end
58
+
34
59
  def normalize_entries(entries)
35
60
  entries.map do |entry|
36
61
  entry[:steam_id] = extract_steam_id entry.delete('link')
data/lib/tf2r/scraper.rb CHANGED
@@ -13,7 +13,7 @@ module TF2R
13
13
  # @option opts [String] :user_agent a custom User-Agent header content
14
14
  # @option opts [File] :cookies_txt a cookies.txt to load the Mechanize
15
15
  # agent with
16
- def initialize(options)
16
+ def initialize(options={})
17
17
  @mech = Mechanize.new { |mech|
18
18
  mech.user_agent = options[:user_agent] || "TF2R::Scraper #{VERSION}"
19
19
  }
@@ -156,11 +156,11 @@ module TF2R
156
156
  start_time: start_time, end_time: end_time}
157
157
  end
158
158
 
159
- # @deprecated Please use {#TF2R::API} instead. The API provides a far more
160
- # efficient and reliable method of retrieving the entry list.
161
- #
162
159
  # Scrapes a raffle page for all the participants.
163
160
  #
161
+ # This should rarely be used. This will only be necessary in the case that
162
+ # a raffle has maximum entries greater than 2500.
163
+ #
164
164
  # @param page [Mechanize::Page] the raffle page.
165
165
  # @return [Array] contains Hashes representing each of the participants,
166
166
  # in chronological order (first entered to last).
@@ -168,8 +168,6 @@ module TF2R
168
168
  # * :username (+String+) — the participant's username.
169
169
  # * :colour (+String+) — hex colour code of the participant's username.
170
170
  def scrape_raffle_for_participants(page)
171
- warn '[DEPRECATION] `scrape_raffle_for_participants` is deprecated. '\
172
- 'Please use `TF2R::API` instead.'
173
171
  participants = []
174
172
  participant_divs = page.parser.css('.pentry')
175
173
  participant_divs.each do |participant|
@@ -1,4 +1,5 @@
1
1
  module TF2R
2
+ # TODO: document
2
3
  module TextHelpers
3
4
  # Extracts a hex colour code.
4
5
  #
@@ -30,5 +31,20 @@ module TF2R
30
31
  def extract_steam_id(href)
31
32
  /http:\/\/tf2r.com\/user\/(\d+)\.html/.match(href)[1].to_i
32
33
  end
34
+
35
+ # Generates the TF2R link for a raffle given a link snippet.
36
+ #
37
+ # @example
38
+ # raffle_link('kabc123') => 'http://tf2r.com/kabc123.html'
39
+ #
40
+ # @param link_snippet [String] the raffle link snippet.
41
+ # @return [String] the raffle link.
42
+ def raffle_link(link_snippet)
43
+ link = "http://tf2r.com/#{link_snippet}.html"
44
+ end
45
+
46
+ def raffle_link_full(link_snippet)
47
+ "#{raffle_link(link_snippet)}?full"
48
+ end
33
49
  end
34
50
  end
data/lib/tf2r/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module TF2R
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.0'
3
3
  end
data/spec/raffle_spec.rb CHANGED
@@ -1,15 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe TF2R::Raffle do
4
- let(:scraper) { TF2R::Scraper.new({}) }
5
- let(:scraper_info) {
4
+ let(:raffle) {
6
5
  VCR.use_cassette('kstzcbd') do
7
- scraper.scrape_raffle(scraper.fetch('http://tf2r.com/kstzcbd.html'))
6
+ raffle = TF2R::Raffle.new('kstzcbd')
8
7
  end
9
8
  }
10
- let(:raffle) {
11
- TF2R::Raffle.new('kstzcbd', TF2R::API.raffle_info('kstzcbd'), scraper_info)
12
- }
13
9
 
14
10
  describe '#info' do
15
11
  let(:result) { raffle.info }
data/spec/scraper_spec.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe TF2R::Scraper do
4
- let(:scraper) { TF2R::Scraper.new({}) }
4
+ let(:scraper) { TF2R::Scraper.new() }
5
5
  let(:raffle_page) {
6
6
  VCR.use_cassette('raffle_kstzcbd') do
7
7
  scraper.fetch('http://tf2r.com/kstzcbd.html')
@@ -10,14 +10,14 @@ describe TF2R::Scraper do
10
10
 
11
11
  it 'is instantiable' do
12
12
  expect{
13
- TF2R::Scraper.new({})
13
+ TF2R::Scraper.new()
14
14
  }.not_to raise_error
15
15
  end
16
16
 
17
17
  describe '#new' do
18
18
  context 'no options are given' do
19
19
  it 'creates an agent with default user agent if none is specified' do
20
- scraper = TF2R::Scraper.new({})
20
+ scraper = TF2R::Scraper.new()
21
21
  expect(
22
22
  scraper.instance_variable_get(:@mech).user_agent
23
23
  ).to eql("TF2R::Scraper #{TF2R::VERSION}")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tf2r
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Kim
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-17 00:00:00.000000000 Z
11
+ date: 2014-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler