twitter 5.10.0 → 5.11.0
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 +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:
|