reddit_api 0.3.1 → 0.3.2

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: 95496fe9b310bbefc4284972a1b0640eb3483ee4
4
- data.tar.gz: 273ec25b43b9750515e8c196541e4c4f159b0293
3
+ metadata.gz: ecb8bef6c6fda639741f35cab9bcbf3905e36a3e
4
+ data.tar.gz: cd5383ebe99e47b2da9e60dff4e11abdf7aa2a82
5
5
  SHA512:
6
- metadata.gz: 130b83adc2be324210b121a77303e8f0e8d108f55af5540f3d5120467af4f01fdf1cb8333ecd7e7bab7a671feca5862e4284199a17bd2a7e90d001fe605243fd
7
- data.tar.gz: 6d4128d86d1a19b83b733e7ef4faf83beef9fb88de866d3de1e6870a6123524057438cd2ed2fee084813f742477af41adde6553f91d3cefceca752840e6feb20
6
+ metadata.gz: b1c8a44241094bc9bd01cb42a4f3b436218f6d8c2533021443e3494f0390925e04e79d7e474b5d6a1e6a404e83b8d885f5db3597b8d563f8bce15ab4965c8398
7
+ data.tar.gz: dee4025ee3b6d84ee86e1032a9e2274edf9fbb83e7f44ae8a6f8fe8e4c67b2dcff6e8de872f9c9346c120d379d0b9af043b2dde8c690823108b88d5a206a6428
@@ -12,9 +12,9 @@ module RedditApi
12
12
  end
13
13
 
14
14
  SLEEP_TIME = self.sleep_time
15
- MAX_FAILURES = 5
15
+ DEFAULT_MAX_FAILURES = 2
16
16
 
17
- attr_reader :failures
17
+ attr_reader :failures, :max_failures
18
18
 
19
19
  def initialize(args = {})
20
20
  @client = args.fetch(:client, HTTParty)
@@ -22,10 +22,11 @@ module RedditApi
22
22
  @parser = args.fetch(:parser, RedditApi::ResponseParser)
23
23
  @null_response_factory = RedditApi:: NullResponse
24
24
  @failures = args.fetch(:failures, 0)
25
+ @max_failures = args.fetch(:max_fail, DEFAULT_MAX_FAILURES)
25
26
  end
26
27
 
27
28
  def get(query)
28
- while query.capture_count < query.count && failures < MAX_FAILURES
29
+ while query.capture_count < query.count && failures < max_failures
29
30
  response = send_request(query)
30
31
  response = parser.parse_response(response, query.count)
31
32
  update_progress(query, response)
@@ -2,28 +2,28 @@
2
2
  module RedditApi
3
3
  class Comments
4
4
 
5
- MAX_FAILURES = 5
5
+ DEFAULT_MAX_MISSES = 2
6
+
7
+ attr_reader :misses
6
8
 
7
9
  def initialize(args = {})
8
10
  @client = args.fetch(:client, RedditApi::Client.new)
9
11
  @comment_factory = RedditApi::Comment
10
12
  @query_factory = RedditApi::Query
11
13
  @offset = nil
12
- @failures = 0
14
+ @max_misses = args.fetch(:max_miss, DEFAULT_MAX_MISSES)
15
+ @misses = args.fetch(:misses, 0)
16
+ @last_count = 0
13
17
  end
14
18
 
15
19
  def most_recent_subreddits(user, count)
16
- self.failures = 0
17
20
  subreddits = {}
18
- loops = 0
19
- while subreddits.length < count &&
20
- failures < MAX_FAILURES &&
21
- loops < MAX_FAILURES
21
+ while subreddits.length < count && misses < max_misses
22
22
  comments = most_recent_comments(user, 100, offset)
23
- update_progress(comments)
24
23
  collect_subreddits(comments, count, subreddits)
25
- loops += 1
24
+ update_progress(comments, subreddits.length)
26
25
  end
26
+ reset_misses
27
27
  subreddits.keys
28
28
  end
29
29
 
@@ -33,10 +33,11 @@ module RedditApi
33
33
  end
34
34
 
35
35
  protected
36
- attr_accessor :failures
37
- attr_writer :offset, :failures
36
+ attr_writer :offset, :misses
37
+ attr_accessor :last_count
38
38
  private
39
- attr_reader :client, :comment_factory, :offset, :query_factory
39
+ attr_reader :client, :comment_factory, :offset, :query_factory,
40
+ :max_misses
40
41
 
41
42
  def most_recent_comment_data(username, count, offset)
42
43
  return [] if username == "[deleted]"
@@ -53,14 +54,19 @@ module RedditApi
53
54
  offset: offset)
54
55
  end
55
56
 
56
- def update_progress(comments)
57
- if comments.empty?
58
- self.failures += 1
57
+ def update_progress(comments, new_count)
58
+ if comments.empty? || last_count >= new_count
59
+ self.misses += 1
59
60
  else
60
61
  self.offset = comments.last.reddit_id
62
+ self.last_count += new_count
61
63
  end
62
64
  end
63
65
 
66
+ def reset_misses
67
+ self.misses = 0
68
+ end
69
+
64
70
  def build_all_comments(comments_data)
65
71
  comments_data.map! do |comment_data|
66
72
  build_comment(comment_data)
@@ -80,3 +86,4 @@ module RedditApi
80
86
 
81
87
  end
82
88
  end
89
+
@@ -2,31 +2,33 @@
2
2
  module RedditApi
3
3
  class Users
4
4
 
5
+ DEFAULT_MAX_MISSES = 2
6
+
5
7
  attr_reader :misses
6
8
 
7
9
  def initialize(args = {})
8
10
  @post_api = RedditApi::Posts.new
9
11
  @user_factory = RedditApi::User
10
12
  @misses = args.fetch(:misses, 0)
13
+ @max_misses = args.fetch(:max_miss, DEFAULT_MAX_MISSES)
11
14
  @last_count = 0
12
15
  end
13
16
 
14
- MAX_MISSES = 5
15
-
16
17
  def top_posters(subreddit, count)
17
18
  users = {}
18
- while users.length < count && misses < MAX_MISSES
19
+ while users.length < count && misses < max_misses
19
20
  posts = post_api.top(subreddit, count)
20
21
  collect_users(posts, count, users)
21
22
  update_misses(users.length)
22
23
  end
24
+ reset_misses
23
25
  users.values
24
26
  end
25
27
 
26
28
  protected
27
29
  attr_writer :misses, :last_count
28
30
  private
29
- attr_reader :post_api, :user_factory, :last_count
31
+ attr_reader :post_api, :user_factory, :last_count, :max_misses
30
32
 
31
33
  def collect_users(posts, count, users)
32
34
  usernames = get_usernames(posts, count, users)
@@ -66,13 +68,16 @@ module RedditApi
66
68
  end
67
69
  end
68
70
 
69
- def update_misses(length)
70
- if (length - last_count).zero?
71
+ def update_misses(new_count)
72
+ if (new_count - last_count).zero?
71
73
  self.misses += 1
72
- self.last_count = length
73
74
  end
74
75
  end
75
76
 
77
+ def reset_misses
78
+ self.misses = 0
79
+ end
80
+
76
81
  end
77
82
  end
78
83
 
@@ -1,3 +1,3 @@
1
1
  module RedditApi
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reddit_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Fuentes