twitter 5.10.0 → 5.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/Rakefile +1 -1
- data/lib/twitter/base.rb +5 -5
- data/lib/twitter/metadata.rb +1 -1
- data/lib/twitter/place.rb +1 -1
- data/lib/twitter/profile.rb +4 -4
- data/lib/twitter/rest/lists.rb +2 -0
- data/lib/twitter/utils.rb +4 -16
- data/lib/twitter/version.rb +1 -1
- data/spec/twitter/place_spec.rb +8 -0
- data/spec/twitter/tweet_spec.rb +2 -2
- data/spec/twitter/utils_spec.rb +34 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6d7d42d9e3c81c1633f4d439a2986371be492475
|
4
|
+
data.tar.gz: ff20ed8b670c4843eaa02650184f74e99e70507b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bec1abcdc08fbfd1e4b1f13dbccef720951ee61b18259f82a14e70e19fce5a856f57ebd7d127a131d2e39b8369bd4151cecc4393c8946c81542f8a2b9fb29599
|
7
|
+
data.tar.gz: a0025ecdd3e1802588789dc53ae5dd6f6801fb94e8ee1b8e7f0ed6c8c5a5ebee3ce79442e69ab7015bdcc0d595a059466235b7e7f952e3d1a212f0df6bc9e85b
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
5.11.0
|
2
|
+
------
|
3
|
+
* [Return a Twitter::NullObject for empty attributes](https://github.com/sferik/twitter/commit/bca179eefb1c157f19b882a88ba608f6817b76bb)
|
4
|
+
* [Add `iso_language_code` attribute to `Twitter::Metadata`](https://github.com/sferik/twitter/commit/7bf3a1b6ad0c35dc608b03ba2b3321b594e4da1c)
|
5
|
+
|
1
6
|
5.10.0
|
2
7
|
------
|
3
8
|
* [Add support for extended entities](https://github.com/sferik/twitter/commit/ed7c708e4208de1df27d141678c14e23422504a0)
|
data/Rakefile
CHANGED
data/lib/twitter/base.rb
CHANGED
@@ -84,11 +84,11 @@ module Twitter
|
|
84
84
|
# @param key2 [Symbol]
|
85
85
|
def define_attribute_method(key1, klass = nil, key2 = nil)
|
86
86
|
define_method(key1) do ||
|
87
|
-
if
|
88
|
-
|
87
|
+
if @attrs[key1].nil? || @attrs[key1].respond_to?(:empty?) && @attrs[key1].empty?
|
88
|
+
NullObject.new
|
89
89
|
else
|
90
|
-
if
|
91
|
-
|
90
|
+
if klass.nil?
|
91
|
+
@attrs[key1]
|
92
92
|
else
|
93
93
|
attrs = attrs_for_object(key1, key2)
|
94
94
|
Twitter.const_get(klass).new(attrs)
|
@@ -115,7 +115,7 @@ module Twitter
|
|
115
115
|
# @param key2 [Symbol]
|
116
116
|
def define_predicate_method(key1, key2 = key1)
|
117
117
|
define_method(:"#{key1}?") do ||
|
118
|
-
!@attrs[key2].nil? && @attrs[key2] != false
|
118
|
+
!@attrs[key2].nil? && @attrs[key2] != false && !(@attrs[key2].respond_to?(:empty?) && @attrs[key2].empty?)
|
119
119
|
end
|
120
120
|
memoize(:"#{key1}?")
|
121
121
|
end
|
data/lib/twitter/metadata.rb
CHANGED
data/lib/twitter/place.rb
CHANGED
data/lib/twitter/profile.rb
CHANGED
@@ -24,7 +24,7 @@ module Twitter
|
|
24
24
|
# Return the URL to the user's profile banner image
|
25
25
|
#
|
26
26
|
# @param size [String, Symbol] The size of the image. Must be one of: 'mobile', 'mobile_retina', 'web', 'web_retina', 'ipad', or 'ipad_retina'
|
27
|
-
# @return [
|
27
|
+
# @return [Addressable::URI]
|
28
28
|
def profile_banner_uri(size = :web)
|
29
29
|
parse_encoded_uri(insecure_uri([@attrs[:profile_banner_url], size].join('/'))) unless @attrs[:profile_banner_url].nil?
|
30
30
|
end
|
@@ -33,7 +33,7 @@ module Twitter
|
|
33
33
|
# Return the secure URL to the user's profile banner image
|
34
34
|
#
|
35
35
|
# @param size [String, Symbol] The size of the image. Must be one of: 'mobile', 'mobile_retina', 'web', 'web_retina', 'ipad', or 'ipad_retina'
|
36
|
-
# @return [
|
36
|
+
# @return [Addressable::URI]
|
37
37
|
def profile_banner_uri_https(size = :web)
|
38
38
|
parse_encoded_uri([@attrs[:profile_banner_url], size].join('/')) unless @attrs[:profile_banner_url].nil?
|
39
39
|
end
|
@@ -49,7 +49,7 @@ module Twitter
|
|
49
49
|
# Return the URL to the user's profile image
|
50
50
|
#
|
51
51
|
# @param size [String, Symbol] The size of the image. Must be one of: 'mini', 'normal', 'bigger' or 'original'
|
52
|
-
# @return [
|
52
|
+
# @return [Addressable::URI]
|
53
53
|
def profile_image_uri(size = :normal)
|
54
54
|
parse_encoded_uri(insecure_uri(profile_image_uri_https(size))) unless @attrs[:profile_image_url_https].nil?
|
55
55
|
end
|
@@ -58,7 +58,7 @@ module Twitter
|
|
58
58
|
# Return the secure URL to the user's profile image
|
59
59
|
#
|
60
60
|
# @param size [String, Symbol] The size of the image. Must be one of: 'mini', 'normal', 'bigger' or 'original'
|
61
|
-
# @return [
|
61
|
+
# @return [Addressable::URI]
|
62
62
|
def profile_image_uri_https(size = :normal)
|
63
63
|
# The profile image URL comes in looking like like this:
|
64
64
|
# https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png
|
data/lib/twitter/rest/lists.rb
CHANGED
@@ -92,10 +92,12 @@ module Twitter
|
|
92
92
|
# @return [Twitter::Cursor]
|
93
93
|
# @overload memberships(options = {})
|
94
94
|
# @param options [Hash] A customizable set of options.
|
95
|
+
# @option options [Integer] :count The amount of results to return per page. Defaults to 20. No more than 1000 results will ever be returned in a single page.
|
95
96
|
# @option options [Boolean, String, Integer] :filter_to_owned_lists When set to true, t or 1, will return just lists the authenticating user owns, and the user represented by user_id or screen_name is a member of.
|
96
97
|
# @overload memberships(user, options = {})
|
97
98
|
# @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object.
|
98
99
|
# @param options [Hash] A customizable set of options.
|
100
|
+
# @option options [Integer] :count The amount of results to return per page. Defaults to 20. No more than 1000 results will ever be returned in a single page.
|
99
101
|
# @option options [Boolean, String, Integer] :filter_to_owned_lists When set to true, t or 1, will return just lists the authenticating user owns, and the user represented by user_id or screen_name is a member of.
|
100
102
|
def memberships(*args)
|
101
103
|
cursor_from_response_with_user(:lists, Twitter::List, :get, '/1.1/lists/memberships.json', args)
|
data/lib/twitter/utils.rb
CHANGED
@@ -26,7 +26,7 @@ module Twitter
|
|
26
26
|
# @return [Array, Enumerator]
|
27
27
|
def flat_pmap(enumerable)
|
28
28
|
return to_enum(:flat_pmap, enumerable) unless block_given?
|
29
|
-
pmap(enumerable, &Proc.new).flatten(1)
|
29
|
+
pmap(enumerable, &Proc.new).flatten!(1)
|
30
30
|
end
|
31
31
|
module_function :flat_pmap
|
32
32
|
|
@@ -37,24 +37,12 @@ module Twitter
|
|
37
37
|
# @return [Array, Enumerator]
|
38
38
|
def pmap(enumerable)
|
39
39
|
return to_enum(:pmap, enumerable) unless block_given?
|
40
|
-
pmap_with_index(enumerable).sort_by { |_, index| index }.collect { |object, _| yield(object) }
|
41
|
-
end
|
42
|
-
module_function :pmap
|
43
|
-
|
44
|
-
# Calls block with two arguments, the item and its index, for each item in enumerable. Given arguments are passed through to pmap.
|
45
|
-
# If no block is given, an enumerator is returned instead.
|
46
|
-
#
|
47
|
-
# @param enumerable [Enumerable]
|
48
|
-
# @return [Array, Enumerator]
|
49
|
-
def pmap_with_index(enumerable)
|
50
|
-
return to_enum(:pmap_with_index, enumerable) unless block_given?
|
51
|
-
# Don't bother spawning a new thread if there's only one item
|
52
40
|
if enumerable.count == 1
|
53
|
-
enumerable.collect { |object| yield(object
|
41
|
+
enumerable.collect { |object| yield(object) }
|
54
42
|
else
|
55
|
-
enumerable.
|
43
|
+
enumerable.collect { |object| Thread.new { yield(object) } }.collect(&:value)
|
56
44
|
end
|
57
45
|
end
|
58
|
-
module_function :
|
46
|
+
module_function :pmap
|
59
47
|
end
|
60
48
|
end
|
data/lib/twitter/version.rb
CHANGED
data/spec/twitter/place_spec.rb
CHANGED
@@ -2,6 +2,14 @@ require 'helper'
|
|
2
2
|
|
3
3
|
describe Twitter::Place do
|
4
4
|
|
5
|
+
describe '.new' do
|
6
|
+
it 'raises an IndexError when id or woeid is not specified' do
|
7
|
+
expect { Twitter::Place.new(:id => 1) }.not_to raise_error
|
8
|
+
expect { Twitter::Place.new(:woeid => 1) }.not_to raise_error
|
9
|
+
expect { Twitter::Place.new }.to raise_error(IndexError)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
5
13
|
describe '#eql?' do
|
6
14
|
it 'returns true when objects WOE IDs are the same' do
|
7
15
|
place = Twitter::Place.new(:woeid => 1, :name => 'foo')
|
data/spec/twitter/tweet_spec.rb
CHANGED
@@ -210,7 +210,7 @@ describe Twitter::Tweet do
|
|
210
210
|
|
211
211
|
describe '#metadata' do
|
212
212
|
it 'returns a Twitter::Metadata when metadata is set' do
|
213
|
-
tweet = Twitter::Tweet.new(:id => 28_669_546_014, :metadata => {})
|
213
|
+
tweet = Twitter::Tweet.new(:id => 28_669_546_014, :metadata => {:result_type => 'recent'})
|
214
214
|
expect(tweet.metadata).to be_a Twitter::Metadata
|
215
215
|
end
|
216
216
|
it 'returns nil when metadata is not set' do
|
@@ -221,7 +221,7 @@ describe Twitter::Tweet do
|
|
221
221
|
|
222
222
|
describe '#metadata?' do
|
223
223
|
it 'returns true when metadata is set' do
|
224
|
-
tweet = Twitter::Tweet.new(:id => 28_669_546_014, :metadata => {})
|
224
|
+
tweet = Twitter::Tweet.new(:id => 28_669_546_014, :metadata => {:result_type => 'recent'})
|
225
225
|
expect(tweet.metadata?).to be true
|
226
226
|
end
|
227
227
|
it 'returns false when metadata is not set' do
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'benchmark'
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
describe Twitter::Utils do
|
5
|
+
describe '#pmap' do
|
6
|
+
it 'maps in parallel' do
|
7
|
+
delay = 0.1
|
8
|
+
array = (0..9).to_a
|
9
|
+
size = array.size
|
10
|
+
block = proc { |x| sleep(delay) && x + 1 }
|
11
|
+
block_without_sleep = proc { |x| x + 1 }
|
12
|
+
expected = array.collect(&block_without_sleep)
|
13
|
+
elapsed_time = Benchmark.realtime do
|
14
|
+
expect(subject.pmap(array, &block)).to eq(expected)
|
15
|
+
end
|
16
|
+
expect(elapsed_time).to be_between(delay, delay * size)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#flat_pmap' do
|
21
|
+
it 'flat maps in parallel' do
|
22
|
+
delay = 0.1
|
23
|
+
array = (0..4).to_a.combination(2).to_a
|
24
|
+
size = array.size
|
25
|
+
block = proc { |x| sleep(delay) && x.reverse }
|
26
|
+
block_without_sleep = proc { |x| x.reverse }
|
27
|
+
expected = array.collect(&block_without_sleep).flatten!(1)
|
28
|
+
elapsed_time = Benchmark.realtime do
|
29
|
+
expect(subject.flat_pmap(array, &block)).to eq(expected)
|
30
|
+
end
|
31
|
+
expect(elapsed_time).to be_between(delay, delay * size)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twitter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erik Michaels-Ober
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2014-06-
|
15
|
+
date: 2014-06-20 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: addressable
|
@@ -389,6 +389,7 @@ files:
|
|
389
389
|
- spec/twitter/trend_spec.rb
|
390
390
|
- spec/twitter/tweet_spec.rb
|
391
391
|
- spec/twitter/user_spec.rb
|
392
|
+
- spec/twitter/utils_spec.rb
|
392
393
|
- twitter.gemspec
|
393
394
|
homepage: http://sferik.github.com/twitter/
|
394
395
|
licenses:
|
@@ -410,7 +411,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
410
411
|
version: 1.3.5
|
411
412
|
requirements: []
|
412
413
|
rubyforge_project:
|
413
|
-
rubygems_version: 2.
|
414
|
+
rubygems_version: 2.3.0
|
414
415
|
signing_key:
|
415
416
|
specification_version: 4
|
416
417
|
summary: A Ruby interface to the Twitter API.
|
@@ -540,4 +541,5 @@ test_files:
|
|
540
541
|
- spec/twitter/trend_spec.rb
|
541
542
|
- spec/twitter/tweet_spec.rb
|
542
543
|
- spec/twitter/user_spec.rb
|
544
|
+
- spec/twitter/utils_spec.rb
|
543
545
|
has_rdoc:
|