twitter 5.1.0 → 5.2.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.
- data/.yardopts +2 -0
- data/CHANGELOG.md +14 -1
- data/CONTRIBUTING.md +2 -2
- data/README.md +30 -20
- data/Rakefile +26 -5
- data/lib/twitter/arguments.rb +0 -1
- data/lib/twitter/base.rb +13 -16
- data/lib/twitter/basic_user.rb +3 -3
- data/lib/twitter/client.rb +7 -8
- data/lib/twitter/configuration.rb +5 -5
- data/lib/twitter/core_ext/enumerable.rb +0 -2
- data/lib/twitter/core_ext/kernel.rb +0 -2
- data/lib/twitter/creatable.rb +0 -1
- data/lib/twitter/cursor.rb +7 -10
- data/lib/twitter/direct_message.rb +1 -1
- data/lib/twitter/entity/uri.rb +2 -2
- data/lib/twitter/enumerable.rb +1 -2
- data/lib/twitter/error/already_favorited.rb +1 -1
- data/lib/twitter/error/already_posted.rb +1 -1
- data/lib/twitter/error/already_retweeted.rb +1 -1
- data/lib/twitter/error/too_many_requests.rb +2 -2
- data/lib/twitter/error.rb +4 -6
- data/lib/twitter/factory.rb +2 -6
- data/lib/twitter/geo/point.rb +3 -5
- data/lib/twitter/geo.rb +1 -1
- data/lib/twitter/geo_factory.rb +1 -5
- data/lib/twitter/geo_results.rb +5 -8
- data/lib/twitter/identity.rb +1 -2
- data/lib/twitter/list.rb +4 -5
- data/lib/twitter/media/photo.rb +1 -2
- data/lib/twitter/media_factory.rb +1 -5
- data/lib/twitter/null_object.rb +4 -6
- data/lib/twitter/oembed.rb +1 -1
- data/lib/twitter/place.rb +17 -6
- data/lib/twitter/profile_banner.rb +1 -3
- data/lib/twitter/rate_limit.rb +1 -3
- data/lib/twitter/relationship.rb +1 -2
- data/lib/twitter/rest/api/direct_messages.rb +13 -14
- data/lib/twitter/rest/api/favorites.rb +10 -11
- data/lib/twitter/rest/api/friends_and_followers.rb +36 -36
- data/lib/twitter/rest/api/help.rb +8 -9
- data/lib/twitter/rest/api/lists.rb +62 -63
- data/lib/twitter/rest/api/oauth.rb +3 -4
- data/lib/twitter/rest/api/places_and_geo.rb +9 -10
- data/lib/twitter/rest/api/saved_searches.rb +5 -6
- data/lib/twitter/rest/api/search.rb +2 -3
- data/lib/twitter/rest/api/spam_reporting.rb +1 -2
- data/lib/twitter/rest/api/suggested_users.rb +4 -5
- data/lib/twitter/rest/api/timelines.rb +17 -18
- data/lib/twitter/rest/api/trends.rb +10 -11
- data/lib/twitter/rest/api/tweets.rb +15 -16
- data/lib/twitter/rest/api/undocumented.rb +6 -7
- data/lib/twitter/rest/api/users.rb +51 -52
- data/lib/twitter/rest/api/utils.rb +23 -30
- data/lib/twitter/rest/client.rb +8 -9
- data/lib/twitter/rest/request/multipart_with_file.rb +0 -1
- data/lib/twitter/rest/response/parse_error_json.rb +0 -2
- data/lib/twitter/rest/response/parse_json.rb +0 -2
- data/lib/twitter/rest/response/raise_error.rb +1 -3
- data/lib/twitter/search_results.rb +12 -15
- data/lib/twitter/settings.rb +2 -2
- data/lib/twitter/size.rb +2 -2
- data/lib/twitter/source_user.rb +1 -1
- data/lib/twitter/streaming/client.rb +71 -18
- data/lib/twitter/streaming/connection.rb +1 -3
- data/lib/twitter/streaming/deleted_tweet.rb +8 -0
- data/lib/twitter/streaming/event.rb +8 -8
- data/lib/twitter/streaming/friend_list.rb +2 -9
- data/lib/twitter/streaming/message_parser.rb +13 -7
- data/lib/twitter/streaming/response.rb +0 -2
- data/lib/twitter/streaming/stall_warning.rb +7 -0
- data/lib/twitter/suggestion.rb +0 -1
- data/lib/twitter/token.rb +2 -3
- data/lib/twitter/trend_results.rb +5 -8
- data/lib/twitter/tweet.rb +16 -24
- data/lib/twitter/user.rb +30 -32
- data/lib/twitter/version.rb +1 -4
- data/spec/fixtures/track_streaming_user.json +2 -1
- data/spec/helper.rb +6 -2
- data/spec/twitter/base_spec.rb +9 -9
- data/spec/twitter/basic_user_spec.rb +6 -6
- data/spec/twitter/configuration_spec.rb +4 -4
- data/spec/twitter/cursor_spec.rb +27 -27
- data/spec/twitter/direct_message_spec.rb +36 -36
- data/spec/twitter/entity/uri_spec.rb +27 -27
- data/spec/twitter/error_spec.rb +21 -21
- data/spec/twitter/geo/point_spec.rb +9 -9
- data/spec/twitter/geo/polygon_spec.rb +5 -5
- data/spec/twitter/geo_factory_spec.rb +7 -7
- data/spec/twitter/geo_results_spec.rb +11 -11
- data/spec/twitter/geo_spec.rb +5 -5
- data/spec/twitter/identifiable_spec.rb +9 -9
- data/spec/twitter/list_spec.rb +38 -38
- data/spec/twitter/media/photo_spec.rb +54 -54
- data/spec/twitter/media_factory_spec.rb +5 -5
- data/spec/twitter/null_object_spec.rb +6 -6
- data/spec/twitter/oembed_spec.rb +65 -65
- data/spec/twitter/place_spec.rb +89 -60
- data/spec/twitter/profile_banner_spec.rb +3 -3
- data/spec/twitter/rate_limit_spec.rb +18 -18
- data/spec/twitter/relationship_spec.rb +16 -16
- data/spec/twitter/rest/api/direct_messages_spec.rb +61 -61
- data/spec/twitter/rest/api/favorites_spec.rb +93 -93
- data/spec/twitter/rest/api/friends_and_followers_spec.rb +349 -349
- data/spec/twitter/rest/api/geo_spec.rb +33 -33
- data/spec/twitter/rest/api/help_spec.rb +24 -24
- data/spec/twitter/rest/api/lists_spec.rb +487 -487
- data/spec/twitter/rest/api/oauth_spec.rb +30 -30
- data/spec/twitter/rest/api/saved_searches_spec.rb +40 -40
- data/spec/twitter/rest/api/search_spec.rb +16 -16
- data/spec/twitter/rest/api/spam_reporting_spec.rb +9 -9
- data/spec/twitter/rest/api/suggested_users_spec.rb +23 -23
- data/spec/twitter/rest/api/timelines_spec.rb +58 -58
- data/spec/twitter/rest/api/trends_spec.rb +26 -26
- data/spec/twitter/rest/api/tweets_spec.rb +284 -284
- data/spec/twitter/rest/api/undocumented_spec.rb +51 -51
- data/spec/twitter/rest/api/users_spec.rb +360 -360
- data/spec/twitter/rest/client_spec.rb +99 -103
- data/spec/twitter/saved_search_spec.rb +16 -16
- data/spec/twitter/search_results_spec.rb +44 -44
- data/spec/twitter/settings_spec.rb +8 -8
- data/spec/twitter/size_spec.rb +5 -5
- data/spec/twitter/source_user_spec.rb +6 -6
- data/spec/twitter/streaming/client_spec.rb +53 -49
- data/spec/twitter/streaming/deleted_tweet_spec.rb +23 -0
- data/spec/twitter/streaming/event_spec.rb +20 -22
- data/spec/twitter/streaming/friend_list_spec.rb +11 -0
- data/spec/twitter/streaming/message_parser_spec.rb +54 -0
- data/spec/twitter/suggestion_spec.rb +11 -11
- data/spec/twitter/target_user_spec.rb +6 -6
- data/spec/twitter/token_spec.rb +4 -4
- data/spec/twitter/trend_results_spec.rb +30 -30
- data/spec/twitter/trend_spec.rb +20 -20
- data/spec/twitter/tweet_spec.rb +170 -173
- data/spec/twitter/user_spec.rb +179 -179
- data/twitter.gemspec +2 -2
- data.tar.gz.sig +0 -0
- metadata +21 -4
- metadata.gz.sig +2 -3
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{"friends":[488736931,311444249]}
|
|
2
2
|
{"created_at":"Wed Apr 06 19:13:37 +0000 2011","id":55709764298092545,"id_str":"55709764298092545","text":"The problem with your code is that it's doing exactly what you told it to do.","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":7505382,"id_str":"7505382","name":"Erik Michaels-Ober","screen_name":"sferik","location":"San Francisco","description":"Write code. Not too much. Mostly Ruby.","url":"https:\/\/github.com\/sferik","entities":{"url":{"urls":[{"url":"https:\/\/github.com\/sferik","expanded_url":null,"indices":[0,25]}]},"description":{"urls":[]}},"protected":false,"followers_count":2479,"friends_count":200,"listed_count":132,"created_at":"Mon Jul 16 12:59:01 +0000 2007","favourites_count":4421,"utc_offset":-28800,"time_zone":"Pacific Time (US & Canada)","geo_enabled":true,"verified":false,"statuses_count":8730,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"000000","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/677717672\/bb0b3653dcf0644e344823e0a2eb3382.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/677717672\/bb0b3653dcf0644e344823e0a2eb3382.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1759857427\/image1326743606_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1759857427\/image1326743606_normal.png","profile_banner_url":"https:\/\/si0.twimg.com\/profile_banners\/7505382\/1349499693","profile_link_color":"0084B4","profile_sidebar_border_color":"000000","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"geo":{"type":"Point","coordinates":[37.78349999,-122.39362884]},"coordinates":{"type":"Point","coordinates":[-122.39362884,37.78349999]},"place":{"id":"5c92ab5379de3839","url":"https:\/\/api.twitter.com\/1.1\/geo\/id\/5c92ab5379de3839.json","place_type":"neighborhood","name":"South Beach","full_name":"South Beach, San Francisco","country_code":"US","country":"United States","bounding_box":{"type":"Polygon","coordinates":[[[-122.403482,37.777529],[-122.387436,37.777529],[-122.387436,37.794486],[-122.403482,37.794486]]]},"attributes":{}},"contributors":null,"retweet_count":316,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false}
|
|
3
|
-
{"created_at":"Wed Apr 06 19:13:37 +0000 2011","id":55709764298092545,"id_str":"55709764298092545","text":"The problem with your code is that it's doing exactly what you told it to do.","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":7505382,"id_str":"7505382","name":"Erik Michaels-Ober","screen_name":"sferik","location":"San Francisco","description":"Write code. Not too much. Mostly Ruby.","url":"https:\/\/github.com\/sferik","entities":{"url":{"urls":[{"url":"https:\/\/github.com\/sferik","expanded_url":null,"indices":[0,25]}]},"description":{"urls":[]}},"protected":false,"followers_count":2479,"friends_count":200,"listed_count":132,"created_at":"Mon Jul 16 12:59:01 +0000 2007","favourites_count":4421,"utc_offset":-28800,"time_zone":"Pacific Time (US & Canada)","geo_enabled":true,"verified":false,"statuses_count":8730,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"000000","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/677717672\/bb0b3653dcf0644e344823e0a2eb3382.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/677717672\/bb0b3653dcf0644e344823e0a2eb3382.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1759857427\/image1326743606_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1759857427\/image1326743606_normal.png","profile_banner_url":"https:\/\/si0.twimg.com\/profile_banners\/7505382\/1349499693","profile_link_color":"0084B4","profile_sidebar_border_color":"000000","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"geo":{"type":"Point","coordinates":[37.78349999,-122.39362884]},"coordinates":{"type":"Point","coordinates":[-122.39362884,37.78349999]},"place":{"id":"5c92ab5379de3839","url":"https:\/\/api.twitter.com\/1.1\/geo\/id\/5c92ab5379de3839.json","place_type":"neighborhood","name":"South Beach","full_name":"South Beach, San Francisco","country_code":"US","country":"United States","bounding_box":{"type":"Polygon","coordinates":[[[-122.403482,37.777529],[-122.387436,37.777529],[-122.387436,37.794486],[-122.403482,37.794486]]]},"attributes":{}},"contributors":null,"retweet_count":316,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false}
|
|
4
3
|
{"direct_message":{"id":389327745617891328,"id_str":"389327745617891328","text":"hello bot","sender":{"id":10083602,"id_str":"10083602","name":"Adam Bird","screen_name":"adambird","location":"Nottingham, UK","url":"http:\/\/about.me\/adambird", "description":"CEO @onediaryapp, ex @esendex CTO and co-founder, still cycling","protected":false,"followers_count":1286,"friends_count":850,"listed_count":51,"created_at":"Fri Nov 09 00:35:12 +0000 2007","favourites_count":93,"utc_offset":3600,"time_zone":"London","geo_enabled":true,"verified":false,"statuses_count":13480,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000477232297\/23d85bb78f71534eea1e1133fb771f86_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000477232297\/23d85bb78f71534eea1e1133fb771f86_normal.jpeg","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"sender_id":10083602,"sender_id_str":"10083602","sender_screen_name":"adambird","recipient":{"id":1292911088,"id_str":"1292911088","name":"One Diary Bot","screen_name":"onediarybot","location":"","url":"http:\/\/www.onediary.com","description":"I'm the One Diary bot, here to help you with your life including personal cycling weather forecasts.","protected":false,"followers_count":113,"friends_count":148,"listed_count":1,"created_at":"Sat Mar 23 23:52:18 +0000 2013","favourites_count":0,"utc_offset":"","time_zone":"","geo_enabled":false,"verified":false,"statuses_count":7919,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/3651575369\/090551d8dd92080198f707769239ff43_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/3651575369\/090551d8dd92080198f707769239ff43_normal.jpeg","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"recipient_id":1292911088,"recipient_id_str":"1292911088","recipient_screen_name":"onediarybot","created_at":"Sun Oct 13 09:52:22 +0000 2013","entities":{"hashtags":[],"symbols":[],"urls":[],"user_mentions":[]}}}
|
|
5
4
|
{"event":"follow","source":{"id":10083602,"id_str":"10083602","name":"Adam Bird","screen_name":"adambird","location":"Nottingham, UK","url":"http://t.co/M1eaIKDQyz","description":"CEO @onediaryapp, ex @esendex CTO and co-founder, still cycling","protected":false,"followers_count":1295,"friends_count":850,"listed_count":53,"created_at":"Fri Nov 09 00:35:12 +0000 2007","favourites_count":93,"utc_offset":0,"time_zone":"London","geo_enabled":true,"verified":false,"statuses_count":13507,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png","profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png","profile_background_tile":false,"profile_image_url":"http://pbs.twimg.com/profile_images/378800000477232297/23d85bb78f71534eea1e1133fb771f86_normal.jpeg","profile_image_url_https":"https://pbs.twimg.com/profile_images/378800000477232297/23d85bb78f71534eea1e1133fb771f86_normal.jpeg","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"target":{"id":1292911088,"id_str":"1292911088","name":"One Diary Bot","screen_name":"onediarybot","location":null,"url":"http://t.co/etHGc0xHX4","description":"I'm the One Diary bot, here to help you with your life including personal cycling weather forecasts.","protected":false,"followers_count":123,"friends_count":157,"listed_count":1,"created_at":"Sat Mar 23 23:52:18 +0000 2013","favourites_count":0,"utc_offset":null,"time_zone":null,"geo_enabled":false,"verified":false,"statuses_count":9637,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png","profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png","profile_background_tile":false,"profile_image_url":"http://pbs.twimg.com/profile_images/3651575369/090551d8dd92080198f707769239ff43_normal.jpeg","profile_image_url_https":"https://pbs.twimg.com/profile_images/3651575369/090551d8dd92080198f707769239ff43_normal.jpeg","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"created_at":"Sun Oct 27 20:35:25 +0000 2013"}
|
|
5
|
+
{"delete":{"status":{"id":272691609211117568,"user_id":478569062,"id_str":"272691609211117568","user_id_str":"478569062","deleted":true}}}
|
|
6
|
+
{"warning":{"code":"FALLING_BEHIND","message":"Your connection is falling behind and messages are being queued for delivery to you. Your queue is now over 60% full. You will be disconnected when the queue is full.","percent_full":60}}
|
data/spec/helper.rb
CHANGED
|
@@ -5,7 +5,11 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
|
|
5
5
|
SimpleCov::Formatter::HTMLFormatter,
|
|
6
6
|
Coveralls::SimpleCov::Formatter
|
|
7
7
|
]
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
SimpleCov.start do
|
|
10
|
+
add_filter '/spec/'
|
|
11
|
+
minimum_coverage(99.07)
|
|
12
|
+
end
|
|
9
13
|
|
|
10
14
|
require 'twitter'
|
|
11
15
|
require 'rspec'
|
|
@@ -55,7 +59,7 @@ def stub_put(path)
|
|
|
55
59
|
end
|
|
56
60
|
|
|
57
61
|
def fixture_path
|
|
58
|
-
File.expand_path(
|
|
62
|
+
File.expand_path('../fixtures', __FILE__)
|
|
59
63
|
end
|
|
60
64
|
|
|
61
65
|
def fixture(file)
|
data/spec/twitter/base_spec.rb
CHANGED
|
@@ -5,22 +5,22 @@ describe Twitter::Base do
|
|
|
5
5
|
@base = Twitter::Base.new(:id => 1)
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
-
describe
|
|
9
|
-
it
|
|
8
|
+
describe '#[]' do
|
|
9
|
+
it 'calls methods using [] with symbol' do
|
|
10
10
|
expect(@base[:object_id]).to be_an Integer
|
|
11
11
|
end
|
|
12
|
-
it
|
|
13
|
-
expect(@base[
|
|
12
|
+
it 'calls methods using [] with string' do
|
|
13
|
+
expect(@base['object_id']).to be_an Integer
|
|
14
14
|
end
|
|
15
|
-
it
|
|
15
|
+
it 'returns nil for missing method' do
|
|
16
16
|
expect(@base[:foo]).to be_nil
|
|
17
|
-
expect(@base[
|
|
17
|
+
expect(@base['foo']).to be_nil
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
describe
|
|
22
|
-
it
|
|
23
|
-
expect(@base.attrs).to eq(
|
|
21
|
+
describe '#attrs' do
|
|
22
|
+
it 'returns a hash of attributes' do
|
|
23
|
+
expect(@base.attrs).to eq(:id => 1)
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
26
|
|
|
@@ -2,18 +2,18 @@ require 'helper'
|
|
|
2
2
|
|
|
3
3
|
describe Twitter::BasicUser do
|
|
4
4
|
|
|
5
|
-
describe
|
|
6
|
-
it
|
|
7
|
-
saved_search = Twitter::BasicUser.new(:id => 1, :name =>
|
|
8
|
-
other = Twitter::BasicUser.new(:id => 1, :name =>
|
|
5
|
+
describe '#==' do
|
|
6
|
+
it 'returns true when objects IDs are the same' do
|
|
7
|
+
saved_search = Twitter::BasicUser.new(:id => 1, :name => 'foo')
|
|
8
|
+
other = Twitter::BasicUser.new(:id => 1, :name => 'bar')
|
|
9
9
|
expect(saved_search == other).to be true
|
|
10
10
|
end
|
|
11
|
-
it
|
|
11
|
+
it 'returns false when objects IDs are different' do
|
|
12
12
|
saved_search = Twitter::BasicUser.new(:id => 1)
|
|
13
13
|
other = Twitter::BasicUser.new(:id => 2)
|
|
14
14
|
expect(saved_search == other).to be false
|
|
15
15
|
end
|
|
16
|
-
it
|
|
16
|
+
it 'returns false when classes are different' do
|
|
17
17
|
saved_search = Twitter::BasicUser.new(:id => 1)
|
|
18
18
|
other = Twitter::Identity.new(:id => 1)
|
|
19
19
|
expect(saved_search == other).to be false
|
|
@@ -2,13 +2,13 @@ require 'helper'
|
|
|
2
2
|
|
|
3
3
|
describe Twitter::Configuration do
|
|
4
4
|
|
|
5
|
-
describe
|
|
6
|
-
it
|
|
7
|
-
photo_sizes = Twitter::Configuration.new(:photo_sizes => {:small => {:h => 226, :w => 340, :resize =>
|
|
5
|
+
describe '#photo_sizes' do
|
|
6
|
+
it 'returns a hash of sizes when photo_sizes is set' do
|
|
7
|
+
photo_sizes = Twitter::Configuration.new(:photo_sizes => {:small => {:h => 226, :w => 340, :resize => 'fit'}, :large => {:h => 466, :w => 700, :resize => 'fit'}, :medium => {:h => 399, :w => 600, :resize => 'fit'}, :thumb => {:h => 150, :w => 150, :resize => 'crop'}}).photo_sizes
|
|
8
8
|
expect(photo_sizes).to be_a Hash
|
|
9
9
|
expect(photo_sizes[:small]).to be_a Twitter::Size
|
|
10
10
|
end
|
|
11
|
-
it
|
|
11
|
+
it 'is empty when photo_sizes is not set' do
|
|
12
12
|
photo_sizes = Twitter::Configuration.new.photo_sizes
|
|
13
13
|
expect(photo_sizes).to be_empty
|
|
14
14
|
end
|
data/spec/twitter/cursor_spec.rb
CHANGED
|
@@ -2,64 +2,64 @@ require 'helper'
|
|
|
2
2
|
|
|
3
3
|
describe Twitter::Cursor do
|
|
4
4
|
|
|
5
|
-
describe
|
|
5
|
+
describe '#each' do
|
|
6
6
|
before do
|
|
7
|
-
@client = Twitter::REST::Client.new(:consumer_key =>
|
|
8
|
-
stub_get(
|
|
9
|
-
stub_get(
|
|
7
|
+
@client = Twitter::REST::Client.new(:consumer_key => 'CK', :consumer_secret => 'CS', :access_token => 'AT', :access_token_secret => 'AS')
|
|
8
|
+
stub_get('/1.1/followers/ids.json').with(:query => {:cursor => '-1', :screen_name => 'sferik'}).to_return(:body => fixture('ids_list.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
|
|
9
|
+
stub_get('/1.1/followers/ids.json').with(:query => {:cursor => '1305102810874389703', :screen_name => 'sferik'}).to_return(:body => fixture('ids_list2.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
|
|
10
10
|
end
|
|
11
|
-
it
|
|
12
|
-
@client.follower_ids(
|
|
13
|
-
expect(a_get(
|
|
14
|
-
expect(a_get(
|
|
11
|
+
it 'requests the correct resources' do
|
|
12
|
+
@client.follower_ids('sferik').each {}
|
|
13
|
+
expect(a_get('/1.1/followers/ids.json').with(:query => {:cursor => '-1', :screen_name => 'sferik'})).to have_been_made
|
|
14
|
+
expect(a_get('/1.1/followers/ids.json').with(:query => {:cursor => '1305102810874389703', :screen_name => 'sferik'})).to have_been_made
|
|
15
15
|
end
|
|
16
|
-
it
|
|
16
|
+
it 'iterates' do
|
|
17
17
|
count = 0
|
|
18
|
-
@client.follower_ids(
|
|
18
|
+
@client.follower_ids('sferik').each { count += 1 }
|
|
19
19
|
expect(count).to eq(6)
|
|
20
20
|
end
|
|
21
|
-
context
|
|
22
|
-
it
|
|
21
|
+
context 'with start' do
|
|
22
|
+
it 'iterates' do
|
|
23
23
|
count = 0
|
|
24
|
-
@client.follower_ids(
|
|
24
|
+
@client.follower_ids('sferik').each(5) { count += 1 }
|
|
25
25
|
expect(count).to eq(1)
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
describe
|
|
31
|
-
context
|
|
30
|
+
describe '#first?' do
|
|
31
|
+
context 'when previous cursor equals zero' do
|
|
32
32
|
before do
|
|
33
|
-
@cursor = Twitter::Cursor.new({:previous_cursor => 0}, :ids, nil, Twitter::REST::Client.new, :get,
|
|
33
|
+
@cursor = Twitter::Cursor.new({:previous_cursor => 0}, :ids, nil, Twitter::REST::Client.new, :get, '/1.1/followers/ids.json', {})
|
|
34
34
|
end
|
|
35
|
-
it
|
|
35
|
+
it 'returns true' do
|
|
36
36
|
expect(@cursor.first?).to be true
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
|
-
context
|
|
39
|
+
context 'when previous cursor does not equal zero' do
|
|
40
40
|
before do
|
|
41
|
-
@cursor = Twitter::Cursor.new({:previous_cursor => 1}, :ids, nil, Twitter::REST::Client.new, :get,
|
|
41
|
+
@cursor = Twitter::Cursor.new({:previous_cursor => 1}, :ids, nil, Twitter::REST::Client.new, :get, '/1.1/followers/ids.json', {})
|
|
42
42
|
end
|
|
43
|
-
it
|
|
43
|
+
it 'returns true' do
|
|
44
44
|
expect(@cursor.first?).to be false
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
-
describe
|
|
50
|
-
context
|
|
49
|
+
describe '#last?' do
|
|
50
|
+
context 'when next cursor equals zero' do
|
|
51
51
|
before do
|
|
52
|
-
@cursor = Twitter::Cursor.new({:next_cursor => 0}, :ids, nil, Twitter::REST::Client.new, :get,
|
|
52
|
+
@cursor = Twitter::Cursor.new({:next_cursor => 0}, :ids, nil, Twitter::REST::Client.new, :get, '/1.1/followers/ids.json', {})
|
|
53
53
|
end
|
|
54
|
-
it
|
|
54
|
+
it 'returns true' do
|
|
55
55
|
expect(@cursor.last?).to be true
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
|
-
context
|
|
58
|
+
context 'when next cursor does not equal zero' do
|
|
59
59
|
before do
|
|
60
|
-
@cursor = Twitter::Cursor.new({:next_cursor => 1}, :ids, nil, Twitter::REST::Client.new, :get,
|
|
60
|
+
@cursor = Twitter::Cursor.new({:next_cursor => 1}, :ids, nil, Twitter::REST::Client.new, :get, '/1.1/followers/ids.json', {})
|
|
61
61
|
end
|
|
62
|
-
it
|
|
62
|
+
it 'returns false' do
|
|
63
63
|
expect(@cursor.last?).to be false
|
|
64
64
|
end
|
|
65
65
|
end
|
|
@@ -2,86 +2,86 @@ require 'helper'
|
|
|
2
2
|
|
|
3
3
|
describe Twitter::DirectMessage do
|
|
4
4
|
|
|
5
|
-
describe
|
|
6
|
-
it
|
|
7
|
-
direct_message = Twitter::DirectMessage.new(:id => 1, :text =>
|
|
8
|
-
other = Twitter::DirectMessage.new(:id => 1, :text =>
|
|
5
|
+
describe '#==' do
|
|
6
|
+
it 'returns true when objects IDs are the same' do
|
|
7
|
+
direct_message = Twitter::DirectMessage.new(:id => 1, :text => 'foo')
|
|
8
|
+
other = Twitter::DirectMessage.new(:id => 1, :text => 'bar')
|
|
9
9
|
expect(direct_message == other).to be true
|
|
10
10
|
end
|
|
11
|
-
it
|
|
11
|
+
it 'returns false when objects IDs are different' do
|
|
12
12
|
direct_message = Twitter::DirectMessage.new(:id => 1)
|
|
13
13
|
other = Twitter::DirectMessage.new(:id => 2)
|
|
14
14
|
expect(direct_message == other).to be false
|
|
15
15
|
end
|
|
16
|
-
it
|
|
16
|
+
it 'returns false when classes are different' do
|
|
17
17
|
direct_message = Twitter::DirectMessage.new(:id => 1)
|
|
18
18
|
other = Twitter::Identity.new(:id => 1)
|
|
19
19
|
expect(direct_message == other).to be false
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
describe
|
|
24
|
-
it
|
|
25
|
-
direct_message = Twitter::DirectMessage.new(:id =>
|
|
23
|
+
describe '#created_at' do
|
|
24
|
+
it 'returns a Time when created_at is set' do
|
|
25
|
+
direct_message = Twitter::DirectMessage.new(:id => 1_825_786_345, :created_at => 'Mon Jul 16 12:59:01 +0000 2007')
|
|
26
26
|
expect(direct_message.created_at).to be_a Time
|
|
27
27
|
end
|
|
28
|
-
it
|
|
29
|
-
direct_message = Twitter::DirectMessage.new(:id =>
|
|
28
|
+
it 'returns nil when created_at is not set' do
|
|
29
|
+
direct_message = Twitter::DirectMessage.new(:id => 1_825_786_345)
|
|
30
30
|
expect(direct_message.created_at).to be_nil
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
describe
|
|
35
|
-
it
|
|
36
|
-
direct_message = Twitter::DirectMessage.new(:id =>
|
|
34
|
+
describe '#created?' do
|
|
35
|
+
it 'returns true when created_at is set' do
|
|
36
|
+
direct_message = Twitter::DirectMessage.new(:id => 1_825_786_345, :created_at => 'Mon Jul 16 12:59:01 +0000 2007')
|
|
37
37
|
expect(direct_message.created?).to be true
|
|
38
38
|
end
|
|
39
|
-
it
|
|
40
|
-
direct_message = Twitter::DirectMessage.new(:id =>
|
|
39
|
+
it 'returns false when created_at is not set' do
|
|
40
|
+
direct_message = Twitter::DirectMessage.new(:id => 1_825_786_345)
|
|
41
41
|
expect(direct_message.created?).to be false
|
|
42
42
|
end
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
describe
|
|
46
|
-
it
|
|
47
|
-
direct_message = Twitter::DirectMessage.new(:id =>
|
|
45
|
+
describe '#recipient' do
|
|
46
|
+
it 'returns a User when recipient is set' do
|
|
47
|
+
direct_message = Twitter::DirectMessage.new(:id => 1_825_786_345, :recipient => {:id => 7_505_382})
|
|
48
48
|
expect(direct_message.recipient).to be_a Twitter::User
|
|
49
49
|
end
|
|
50
|
-
it
|
|
51
|
-
direct_message = Twitter::DirectMessage.new(:id =>
|
|
50
|
+
it 'returns nil when recipient is not set' do
|
|
51
|
+
direct_message = Twitter::DirectMessage.new(:id => 1_825_786_345)
|
|
52
52
|
expect(direct_message.recipient).to be_nil
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
describe
|
|
57
|
-
it
|
|
58
|
-
direct_message = Twitter::DirectMessage.new(:id =>
|
|
56
|
+
describe '#recipient?' do
|
|
57
|
+
it 'returns true when recipient is set' do
|
|
58
|
+
direct_message = Twitter::DirectMessage.new(:id => 1_825_786_345, :recipient => {:id => 7_505_382})
|
|
59
59
|
expect(direct_message.recipient?).to be true
|
|
60
60
|
end
|
|
61
|
-
it
|
|
62
|
-
direct_message = Twitter::DirectMessage.new(:id =>
|
|
61
|
+
it 'returns false when recipient is not set' do
|
|
62
|
+
direct_message = Twitter::DirectMessage.new(:id => 1_825_786_345)
|
|
63
63
|
expect(direct_message.recipient?).to be false
|
|
64
64
|
end
|
|
65
65
|
end
|
|
66
66
|
|
|
67
|
-
describe
|
|
68
|
-
it
|
|
69
|
-
direct_message = Twitter::DirectMessage.new(:id =>
|
|
67
|
+
describe '#sender' do
|
|
68
|
+
it 'returns a User when sender is set' do
|
|
69
|
+
direct_message = Twitter::DirectMessage.new(:id => 1_825_786_345, :sender => {:id => 7_505_382})
|
|
70
70
|
expect(direct_message.sender).to be_a Twitter::User
|
|
71
71
|
end
|
|
72
|
-
it
|
|
73
|
-
direct_message = Twitter::DirectMessage.new(:id =>
|
|
72
|
+
it 'returns nil when sender is not set' do
|
|
73
|
+
direct_message = Twitter::DirectMessage.new(:id => 1_825_786_345)
|
|
74
74
|
expect(direct_message.sender).to be_nil
|
|
75
75
|
end
|
|
76
76
|
end
|
|
77
77
|
|
|
78
|
-
describe
|
|
79
|
-
it
|
|
80
|
-
direct_message = Twitter::DirectMessage.new(:id =>
|
|
78
|
+
describe '#sender?' do
|
|
79
|
+
it 'returns true when sender is set' do
|
|
80
|
+
direct_message = Twitter::DirectMessage.new(:id => 1_825_786_345, :sender => {:id => 7_505_382})
|
|
81
81
|
expect(direct_message.sender?).to be true
|
|
82
82
|
end
|
|
83
|
-
it
|
|
84
|
-
direct_message = Twitter::DirectMessage.new(:id =>
|
|
83
|
+
it 'returns false when sender is not set' do
|
|
84
|
+
direct_message = Twitter::DirectMessage.new(:id => 1_825_786_345)
|
|
85
85
|
expect(direct_message.sender?).to be false
|
|
86
86
|
end
|
|
87
87
|
end
|
|
@@ -3,70 +3,70 @@ require 'helper'
|
|
|
3
3
|
|
|
4
4
|
describe Twitter::Entity::URI do
|
|
5
5
|
|
|
6
|
-
describe
|
|
7
|
-
it
|
|
8
|
-
uri = Twitter::Entity::URI.new(:display_url =>
|
|
6
|
+
describe '#display_uri' do
|
|
7
|
+
it 'returns a String when the display_url is set' do
|
|
8
|
+
uri = Twitter::Entity::URI.new(:display_url => 'example.com/expanded…')
|
|
9
9
|
expect(uri.display_uri).to be_a String
|
|
10
|
-
expect(uri.display_uri).to eq(
|
|
10
|
+
expect(uri.display_uri).to eq('example.com/expanded…')
|
|
11
11
|
end
|
|
12
|
-
it
|
|
12
|
+
it 'returns nil when the display_url is not set' do
|
|
13
13
|
uri = Twitter::Entity::URI.new
|
|
14
14
|
expect(uri.display_uri).to be_nil
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
describe
|
|
19
|
-
it
|
|
20
|
-
uri = Twitter::Entity::URI.new(:display_url =>
|
|
18
|
+
describe '#display_uri?' do
|
|
19
|
+
it 'returns true when the display_url is set' do
|
|
20
|
+
uri = Twitter::Entity::URI.new(:display_url => 'example.com/expanded…')
|
|
21
21
|
expect(uri.display_uri?).to be true
|
|
22
22
|
end
|
|
23
|
-
it
|
|
23
|
+
it 'returns false when the display_url is not set' do
|
|
24
24
|
uri = Twitter::Entity::URI.new
|
|
25
25
|
expect(uri.display_uri?).to be false
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
describe
|
|
30
|
-
it
|
|
31
|
-
uri = Twitter::Entity::URI.new(:expanded_url =>
|
|
29
|
+
describe '#expanded_uri' do
|
|
30
|
+
it 'returns a URI when the expanded_url is set' do
|
|
31
|
+
uri = Twitter::Entity::URI.new(:expanded_url => 'https://github.com/sferik')
|
|
32
32
|
expect(uri.expanded_uri).to be_a Addressable::URI
|
|
33
|
-
expect(uri.expanded_uri.to_s).to eq(
|
|
33
|
+
expect(uri.expanded_uri.to_s).to eq('https://github.com/sferik')
|
|
34
34
|
end
|
|
35
|
-
it
|
|
35
|
+
it 'returns nil when the expanded_url is not set' do
|
|
36
36
|
uri = Twitter::Entity::URI.new
|
|
37
37
|
expect(uri.expanded_uri).to be_nil
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
describe
|
|
42
|
-
it
|
|
43
|
-
uri = Twitter::Entity::URI.new(:expanded_url =>
|
|
41
|
+
describe '#expanded_uri?' do
|
|
42
|
+
it 'returns true when the expanded_url is set' do
|
|
43
|
+
uri = Twitter::Entity::URI.new(:expanded_url => 'https://github.com/sferik')
|
|
44
44
|
expect(uri.expanded_uri?).to be true
|
|
45
45
|
end
|
|
46
|
-
it
|
|
46
|
+
it 'returns false when the expanded_url is not set' do
|
|
47
47
|
uri = Twitter::Entity::URI.new
|
|
48
48
|
expect(uri.expanded_uri?).to be false
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
describe
|
|
53
|
-
it
|
|
54
|
-
uri = Twitter::Entity::URI.new(:url =>
|
|
52
|
+
describe '#uri' do
|
|
53
|
+
it 'returns a URI when the url is set' do
|
|
54
|
+
uri = Twitter::Entity::URI.new(:url => 'https://github.com/sferik')
|
|
55
55
|
expect(uri.uri).to be_a Addressable::URI
|
|
56
|
-
expect(uri.uri.to_s).to eq(
|
|
56
|
+
expect(uri.uri.to_s).to eq('https://github.com/sferik')
|
|
57
57
|
end
|
|
58
|
-
it
|
|
58
|
+
it 'returns nil when the url is not set' do
|
|
59
59
|
uri = Twitter::Entity::URI.new
|
|
60
60
|
expect(uri.uri).to be_nil
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
|
|
64
|
-
describe
|
|
65
|
-
it
|
|
66
|
-
uri = Twitter::Entity::URI.new(:url =>
|
|
64
|
+
describe '#uri?' do
|
|
65
|
+
it 'returns true when the url is set' do
|
|
66
|
+
uri = Twitter::Entity::URI.new(:url => 'https://github.com/sferik')
|
|
67
67
|
expect(uri.uri?).to be true
|
|
68
68
|
end
|
|
69
|
-
it
|
|
69
|
+
it 'returns false when the url is not set' do
|
|
70
70
|
uri = Twitter::Entity::URI.new
|
|
71
71
|
expect(uri.uri?).to be false
|
|
72
72
|
end
|
data/spec/twitter/error_spec.rb
CHANGED
|
@@ -3,61 +3,61 @@ require 'helper'
|
|
|
3
3
|
describe Twitter::Error do
|
|
4
4
|
|
|
5
5
|
before do
|
|
6
|
-
@client = Twitter::REST::Client.new(:consumer_key =>
|
|
6
|
+
@client = Twitter::REST::Client.new(:consumer_key => 'CK', :consumer_secret => 'CS', :access_token => 'AT', :access_token_secret => 'AS')
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
describe
|
|
10
|
-
it
|
|
11
|
-
error = Twitter::Error.new(Faraday::Error::ClientError.new(
|
|
12
|
-
expect(error.message).to eq(
|
|
9
|
+
describe '#message' do
|
|
10
|
+
it 'returns the message of the wrapped exception' do
|
|
11
|
+
error = Twitter::Error.new(Faraday::Error::ClientError.new('Oops'))
|
|
12
|
+
expect(error.message).to eq('Oops')
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
describe
|
|
17
|
-
it
|
|
18
|
-
error = Twitter::Error.new(Faraday::Error::ClientError.new(
|
|
16
|
+
describe '#rate_limit' do
|
|
17
|
+
it 'returns the wrapped exception' do
|
|
18
|
+
error = Twitter::Error.new(Faraday::Error::ClientError.new('Oops'))
|
|
19
19
|
expect(error.rate_limit).to be_a Twitter::RateLimit
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
describe
|
|
24
|
-
it
|
|
25
|
-
error = Twitter::Error.new(Faraday::Error::ClientError.new(
|
|
23
|
+
describe '#wrapped_exception' do
|
|
24
|
+
it 'returns the wrapped exception' do
|
|
25
|
+
error = Twitter::Error.new(Faraday::Error::ClientError.new('Oops'))
|
|
26
26
|
expect(error.wrapped_exception.class).to eq(Faraday::Error::ClientError)
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
Twitter::Error.errors.each do |status, exception|
|
|
31
31
|
|
|
32
|
-
[nil,
|
|
32
|
+
[nil, 'error', 'errors'].each do |body|
|
|
33
33
|
context "when HTTP status is #{status} and body is #{body.inspect}" do
|
|
34
34
|
before do
|
|
35
35
|
body_message = '{"' + body + '":"Client Error"}' unless body.nil?
|
|
36
|
-
stub_get(
|
|
36
|
+
stub_get('/1.1/statuses/user_timeline.json').with(:query => {:screen_name => 'sferik'}).to_return(:status => status, :body => body_message)
|
|
37
37
|
end
|
|
38
38
|
it "raises #{exception.name}" do
|
|
39
|
-
expect{@client.user_timeline(
|
|
39
|
+
expect { @client.user_timeline('sferik') }.to raise_error exception
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
context "when HTTP status is #{status} and body is errors" do
|
|
45
|
-
context
|
|
46
|
-
context
|
|
45
|
+
context 'when errors is an array of hashes' do
|
|
46
|
+
context 'when error code is nil' do
|
|
47
47
|
before do
|
|
48
48
|
body_message = '{"errors":[{"message":"Client Error"}]}'
|
|
49
|
-
stub_get(
|
|
49
|
+
stub_get('/1.1/statuses/user_timeline.json').with(:query => {:screen_name => 'sferik'}).to_return(:status => status, :body => body_message)
|
|
50
50
|
end
|
|
51
51
|
it "raises #{exception.name}" do
|
|
52
|
-
expect{@client.user_timeline(
|
|
52
|
+
expect { @client.user_timeline('sferik') }.to raise_error { |error| expect(error.code).to be_nil }
|
|
53
53
|
end
|
|
54
|
-
context
|
|
54
|
+
context 'when error code is 187' do
|
|
55
55
|
before do
|
|
56
56
|
body_message = '{"errors":[{"message":"Client Error","code":187}]}'
|
|
57
|
-
stub_get(
|
|
57
|
+
stub_get('/1.1/statuses/user_timeline.json').with(:query => {:screen_name => 'sferik'}).to_return(:status => status, :body => body_message)
|
|
58
58
|
end
|
|
59
59
|
it "raises #{exception.name}" do
|
|
60
|
-
expect{@client.user_timeline(
|
|
60
|
+
expect { @client.user_timeline('sferik') }.to raise_error { |error| expect(error.code).to eq(187) }
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
end
|
|
@@ -6,34 +6,34 @@ describe Twitter::Geo::Point do
|
|
|
6
6
|
@point = Twitter::Geo::Point.new(:coordinates => [-122.399983, 37.788299])
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
describe
|
|
10
|
-
it
|
|
9
|
+
describe '#==' do
|
|
10
|
+
it 'returns true for empty objects' do
|
|
11
11
|
point = Twitter::Geo::Point.new
|
|
12
12
|
other = Twitter::Geo::Point.new
|
|
13
13
|
expect(point == other).to be true
|
|
14
14
|
end
|
|
15
|
-
it
|
|
15
|
+
it 'returns true when objects coordinates are the same' do
|
|
16
16
|
other = Twitter::Geo::Point.new(:coordinates => [-122.399983, 37.788299])
|
|
17
17
|
expect(@point == other).to be true
|
|
18
18
|
end
|
|
19
|
-
it
|
|
19
|
+
it 'returns false when objects coordinates are different' do
|
|
20
20
|
other = Twitter::Geo::Point.new(:coordinates => [37.788299, -122.399983])
|
|
21
21
|
expect(@point == other).to be false
|
|
22
22
|
end
|
|
23
|
-
it
|
|
23
|
+
it 'returns false when classes are different' do
|
|
24
24
|
other = Twitter::Geo.new(:coordinates => [-122.399983, 37.788299])
|
|
25
25
|
expect(@point == other).to be false
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
describe
|
|
30
|
-
it
|
|
29
|
+
describe '#latitude' do
|
|
30
|
+
it 'returns the latitude' do
|
|
31
31
|
expect(@point.latitude).to eq(-122.399983)
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
describe
|
|
36
|
-
it
|
|
35
|
+
describe '#longitude' do
|
|
36
|
+
it 'returns the longitude' do
|
|
37
37
|
expect(@point.longitude).to eq(37.788299)
|
|
38
38
|
end
|
|
39
39
|
end
|
|
@@ -6,21 +6,21 @@ describe Twitter::Geo::Polygon do
|
|
|
6
6
|
@polygon = Twitter::Geo::Polygon.new(:coordinates => [[[-122.40348192, 37.77752898], [-122.387436, 37.77752898], [-122.387436, 37.79448597], [-122.40348192, 37.79448597]]])
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
describe
|
|
10
|
-
it
|
|
9
|
+
describe '#==' do
|
|
10
|
+
it 'returns true for empty objects' do
|
|
11
11
|
polygon = Twitter::Geo::Polygon.new
|
|
12
12
|
other = Twitter::Geo::Polygon.new
|
|
13
13
|
expect(polygon == other).to be true
|
|
14
14
|
end
|
|
15
|
-
it
|
|
15
|
+
it 'returns true when objects coordinates are the same' do
|
|
16
16
|
other = Twitter::Geo::Polygon.new(:coordinates => [[[-122.40348192, 37.77752898], [-122.387436, 37.77752898], [-122.387436, 37.79448597], [-122.40348192, 37.79448597]]])
|
|
17
17
|
expect(@polygon == other).to be true
|
|
18
18
|
end
|
|
19
|
-
it
|
|
19
|
+
it 'returns false when objects coordinates are different' do
|
|
20
20
|
other = Twitter::Geo::Polygon.new(:coordinates => [[[37.77752898, -122.40348192], [37.77752898, -122.387436], [37.79448597, -122.387436], [37.79448597, -122.40348192]]])
|
|
21
21
|
expect(@polygon == other).to be false
|
|
22
22
|
end
|
|
23
|
-
it
|
|
23
|
+
it 'returns false when classes are different' do
|
|
24
24
|
other = Twitter::Geo.new(:coordinates => [[[-122.40348192, 37.77752898], [-122.387436, 37.77752898], [-122.387436, 37.79448597], [-122.40348192, 37.79448597]]])
|
|
25
25
|
expect(@polygon == other).to be false
|
|
26
26
|
end
|