twitter 6.2.0 → 8.0.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +32 -10
  3. data/LICENSE.md +1 -1
  4. data/README.md +9 -14
  5. data/lib/twitter/base.rb +11 -11
  6. data/lib/twitter/basic_user.rb +3 -2
  7. data/lib/twitter/client.rb +8 -8
  8. data/lib/twitter/creatable.rb +7 -3
  9. data/lib/twitter/cursor.rb +15 -5
  10. data/lib/twitter/direct_message.rb +4 -3
  11. data/lib/twitter/direct_message_event.rb +44 -0
  12. data/lib/twitter/direct_messages/welcome_message.rb +17 -0
  13. data/lib/twitter/direct_messages/welcome_message_rule.rb +12 -0
  14. data/lib/twitter/direct_messages/welcome_message_rule_wrapper.rb +36 -0
  15. data/lib/twitter/direct_messages/welcome_message_wrapper.rb +42 -0
  16. data/lib/twitter/entities.rb +6 -6
  17. data/lib/twitter/entity/hashtag.rb +1 -1
  18. data/lib/twitter/entity/symbol.rb +1 -1
  19. data/lib/twitter/entity/uri.rb +1 -1
  20. data/lib/twitter/entity/user_mention.rb +1 -1
  21. data/lib/twitter/entity.rb +1 -1
  22. data/lib/twitter/enumerable.rb +15 -6
  23. data/lib/twitter/error.rb +52 -9
  24. data/lib/twitter/factory.rb +1 -1
  25. data/lib/twitter/geo/point.rb +1 -1
  26. data/lib/twitter/geo/polygon.rb +1 -1
  27. data/lib/twitter/geo.rb +2 -2
  28. data/lib/twitter/geo_factory.rb +3 -3
  29. data/lib/twitter/geo_results.rb +2 -2
  30. data/lib/twitter/headers.rb +4 -4
  31. data/lib/twitter/identity.rb +2 -2
  32. data/lib/twitter/language.rb +1 -1
  33. data/lib/twitter/list.rb +3 -2
  34. data/lib/twitter/media/animated_gif.rb +1 -1
  35. data/lib/twitter/media/photo.rb +2 -2
  36. data/lib/twitter/media/video.rb +3 -3
  37. data/lib/twitter/media/video_info.rb +2 -2
  38. data/lib/twitter/media_factory.rb +4 -4
  39. data/lib/twitter/metadata.rb +1 -1
  40. data/lib/twitter/null_object.rb +19 -5
  41. data/lib/twitter/oembed.rb +2 -1
  42. data/lib/twitter/place.rb +3 -3
  43. data/lib/twitter/premium_search_results.rb +67 -0
  44. data/lib/twitter/profile.rb +6 -6
  45. data/lib/twitter/profile_banner.rb +2 -2
  46. data/lib/twitter/rate_limit.rb +6 -6
  47. data/lib/twitter/relationship.rb +2 -1
  48. data/lib/twitter/rest/account_activity.rb +99 -0
  49. data/lib/twitter/rest/api.rb +22 -16
  50. data/lib/twitter/rest/client.rb +4 -4
  51. data/lib/twitter/rest/direct_messages/welcome_messages.rb +90 -0
  52. data/lib/twitter/rest/direct_messages.rb +136 -47
  53. data/lib/twitter/rest/favorites.rb +17 -21
  54. data/lib/twitter/rest/form_encoder.rb +27 -0
  55. data/lib/twitter/rest/friends_and_followers.rb +21 -21
  56. data/lib/twitter/rest/help.rb +6 -18
  57. data/lib/twitter/rest/lists.rb +33 -32
  58. data/lib/twitter/rest/oauth.rb +8 -8
  59. data/lib/twitter/rest/places_and_geo.rb +6 -6
  60. data/lib/twitter/rest/premium_search.rb +34 -0
  61. data/lib/twitter/rest/request.rb +64 -31
  62. data/lib/twitter/rest/saved_searches.rb +6 -6
  63. data/lib/twitter/rest/search.rb +6 -5
  64. data/lib/twitter/rest/spam_reporting.rb +3 -3
  65. data/lib/twitter/rest/suggested_users.rb +5 -5
  66. data/lib/twitter/rest/timelines.rb +8 -7
  67. data/lib/twitter/rest/trends.rb +7 -7
  68. data/lib/twitter/rest/tweets.rb +20 -53
  69. data/lib/twitter/rest/undocumented.rb +7 -7
  70. data/lib/twitter/rest/upload_utils.rb +68 -0
  71. data/lib/twitter/rest/users.rb +32 -32
  72. data/lib/twitter/rest/utils.rb +41 -24
  73. data/lib/twitter/saved_search.rb +2 -2
  74. data/lib/twitter/search_results.rb +10 -9
  75. data/lib/twitter/settings.rb +2 -1
  76. data/lib/twitter/size.rb +2 -2
  77. data/lib/twitter/source_user.rb +1 -1
  78. data/lib/twitter/streaming/client.rb +19 -15
  79. data/lib/twitter/streaming/connection.rb +19 -7
  80. data/lib/twitter/streaming/message_parser.rb +7 -7
  81. data/lib/twitter/streaming/response.rb +12 -10
  82. data/lib/twitter/suggestion.rb +3 -3
  83. data/lib/twitter/target_user.rb +1 -1
  84. data/lib/twitter/trend.rb +3 -2
  85. data/lib/twitter/trend_results.rb +5 -5
  86. data/lib/twitter/tweet.rb +13 -4
  87. data/lib/twitter/user.rb +9 -9
  88. data/lib/twitter/utils.rb +6 -4
  89. data/lib/twitter/variant.rb +2 -1
  90. data/lib/twitter/version.rb +4 -4
  91. data/lib/twitter.rb +36 -31
  92. data/twitter.gemspec +19 -19
  93. metadata +33 -37
  94. data/lib/twitter/configuration.rb +0 -27
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c1797367fcb91dca015c7a77acd6273beb4c49e929c98d2d3a913ea37009496
4
- data.tar.gz: 3c4a9f1fca5d3e99b9be0cb8993c4f274cb309b8fc19b2f3cf45838622484bce
3
+ metadata.gz: b80e3506c8a84c489163c646cc9dee9796125556ac219c29f324f533436e2699
4
+ data.tar.gz: 25c98a022fefc26d3c38de160a4afa6edcf619e79b9f72487e61643891eb65fb
5
5
  SHA512:
6
- metadata.gz: 887f6a6acfb58cd602fe1507c66e12fcb53c5b7479054a91e0ca68ee0c2a227c620b8bab614d256e4dfb31015cdc5c85fe8bdf9f05e9f48b8c38c8d945fbbf1e
7
- data.tar.gz: 631417a20ae3bca7970e05f6a63c6049af3c613b0f078a6d178d81f13750ff4a885514aa882be050a94f3909dc24df8df084fbc816bec280a9e7963fb7ab3750
6
+ metadata.gz: bd410ed4a557fb3e2890e9fc6cd81672f73b1d8dfa4d0c5cb3f793943074f5ef8aba43332e833bc411ac39c1648a0835145a4c722f6c94bd790fcd7d390610c3
7
+ data.tar.gz: 726be9e6536df1c63fdbf528011ddffeeee5c88bf65031f88555009718626c40a7e8661356abd4c58be6709b289565a4e56fb36127a9512b4c7009d27b4bf26b
data/CHANGELOG.md CHANGED
@@ -1,25 +1,47 @@
1
- 6.2.0
2
- ------
1
+ 8.0.0
2
+ -----
3
+ * [Fix filter limit issue](https://github.com/sferik/twitter/commit/be91024f7af7e94dd6578e08937975443dc09487)
4
+ * [Pass custom `HTTP::FormData` with encoder for post requests](https://github.com/sferik/twitter/commit/62d15daf1f7009b532bced2423d2e3878c4a6628)
5
+ * [Removed the `Twitter::Configuration` class](https://github.com/sferik/twitter/commit/d9b49dbb60427e447b25afad5a4824a068b577c5)
6
+ * [Replace `http_parser.rb` with `llhttp`](https://github.com/sferik/twitter/commit/b30a831477910fa6b311c6de98fafabc5dccf827)
7
+ * [Update `buftok` dependency to ~> 0.3.0](https://github.com/sferik/twitter/commit/69237190197cae174cee09b4765230aadf231e3a)
8
+ * [Update `http` dependency to ~> 5.0](https://github.com/sferik/twitter/commit/d218358b9fdba501d0f4e59a10bd1e86f18e044f)
9
+ * [Set minimum required ruby version to 2.7.7](https://github.com/sferik/twitter/commit/3b50a1fe31233fbe85e5cf9d722aba13fa61aed8)
10
+
11
+ 7.0.0
12
+ -----
13
+ * [Add `Twitter::DirectMessageEvent`](https://github.com/sferik/twitter/commit/38f6aaa482dcd5f4982abd811dbe6e21e36c2ae8) ([@FabienChaynes](https://twitter.com/FabienChaynes))
14
+ * [Create `Twitter::DirectMessageEvent` with media](https://github.com/sferik/twitter/commit/21478530ec6f8a798717a5ab8b197b895db3bc28) ([@FabienChaynes](https://twitter.com/FabienChaynes))
15
+ * [Support for DM welcome messages](https://github.com/sferik/twitter/pull/950) ([@FabienChaynes](https://twitter.com/FabienChaynes))
16
+ * [Support for closing `Twitter::Streaming::Connection`](https://github.com/sferik/twitter/commit/89e3543aa06e00eeab7eaf5bdd3a33a6112356b1) ([@okkez](https://twitter.com/okkez))
17
+ * [Add `Twitter::REST::Client#create_direct_message_event`](https://github.com/sferik/twitter/commit/b45d545c7ebfd28e4d908037dd3fde04e3c307cf) ([@cyu](https://twitter.com/cyu))
18
+ * [Add `Twitter::REST::Client#premium_search`](https://github.com/sferik/twitter/pull/953)
19
+ * [Add `Twitter::REST::AccountActivity`](https://github.com/sferik/twitter/pull/939)
20
+ * [Update all direct message methods to return `Twitter::DirectMessageEvent`](https://github.com/sferik/twitter/commit/0833471366a33657cd2920850e3928db010eecab) ([@flikglick](https://twitter.com/flikglick))
21
+ * [Correctly handle different `Twitter::Error::AlreadyRetweeted` error messages](https://github.com/sferik/twitter/commit/c9bf100eedc89aee43689c17f160025e0f40cfb4) ([@knu](https://twitter.com/knu))
22
+ * [Fix proxy setting sample](https://github.com/sferik/twitter/commit/91c037cfb26ac0c9d3099cdeec42d65fe8716b78) ([@nicklegr](https://twitter.com/nicklegr))
23
+ * [Add Active Support `presence` methods on `Twitter::NullObject`](https://github.com/sferik/twitter/commit/07a5d7b60f335aefd583dae85ba959235bc9f55f) ([@davebrace](https://twitter.com/davebrace))
24
+ * [Upload GIFs over 5MB in chunks](https://github.com/sferik/twitter/commit/ba6a3062782b37cf83b9813c5128c87d4971ab9c) ([@wild_dmitry](https://twitter.com/wild_dmitry))
25
+ * [Track rate limit when searching tweets](https://github.com/sferik/twitter/commit/067e751d58b7bb0bfbe8a5531a4288f4c966b301) ([@dsalahutdinov1](https://twitter.com/dsalahutdinov1))
26
+ * [Add `quote_count` and `reply_count` attributes to `Twitter::Tweet`](https://github.com/sferik/twitter/commit/844818cad07ce490ccb9d8542ebb6b4fc7a61cb4)
27
+ * [Drop support for Ruby 2.0, 2.1, and 2.2](https://github.com/sferik/twitter/commit/95861ec83e582c2a88499b97d9d5388a96d0abf0)
3
28
 
29
+ 6.2.0
30
+ -----
4
31
  Not yet documented, sorry. For now, please use git to compare tags:
5
32
  https://github.com/sferik/twitter/compare/v6.1.0...v6.2.0
6
33
 
7
34
  6.1.0
8
- ------
9
-
35
+ -----
10
36
  Not yet documented, sorry. For now, please use git to compare tags:
11
37
  https://github.com/sferik/twitter/compare/v6.0.0...v6.1.0
12
38
 
13
-
14
39
  6.0.0
15
- ------
16
-
17
- Not yet documented, sorry. For now, please use git to compare tags:
18
- https://github.com/sferik/twitter/compare/v5.16.0...v6.0.0
40
+ -----
41
+ * [Drop support for Ruby 1.8.7 and Ruby 1.9.3](https://github.com/sferik/twitter/commit/27980f45fb357e34b86e46cb9134d86ed29b3ce3)
19
42
 
20
43
  5.16.0
21
44
  ------
22
-
23
45
  * [Add Twitter::Trend#tweet_volume](https://github.com/sferik/twitter/commit/e797b62e5e6a768e8aeafde6186e1f5310e6bfc6)
24
46
  * [Add new settings to Twitter::Settings](https://github.com/sferik/twitter/commit/d047ce00034d26a99927076c28679ce08fd69308)
25
47
  * [Fix `Version.to_a`](https://github.com/sferik/twitter/commit/0cd119abf64e6c2b7fd861b0df65b7cb41d892b4)
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2006-2016 Erik Michaels-Ober, John Nunemaker, Wynn Netherland, Steve Richert, Steve Agalloco
1
+ Copyright (c) 2006-2020 Erik Berlin, John Nunemaker, Wynn Netherland, Steve Richert, Steve Agalloco
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,17 +1,13 @@
1
1
  # The Twitter Ruby Gem
2
2
 
3
- [![Gem Version](http://img.shields.io/gem/v/twitter.svg)][gem]
4
- [![Build Status](http://img.shields.io/travis/sferik/twitter.svg)][travis]
5
- [![Dependency Status](http://img.shields.io/gemnasium/sferik/twitter.svg)][gemnasium]
6
- [![Code Climate](http://img.shields.io/codeclimate/github/sferik/twitter.svg)][codeclimate]
7
- [![Coverage Status](http://img.shields.io/coveralls/sferik/twitter.svg)][coveralls]
3
+ [![Gem Version](https://badge.fury.io/rb/twitter.svg)][gem]
4
+ [![Build Status](https://travis-ci.org/sferik/twitter.svg?branch=master)][travis]
5
+ [![Maintainability](https://api.codeclimate.com/v1/badges/09362621ad91e8f599b3/maintainability)][maintainability]
8
6
  [![Inline docs](http://inch-ci.org/github/sferik/twitter.svg?style=shields)][inchpages]
9
7
 
10
8
  [gem]: https://rubygems.org/gems/twitter
11
9
  [travis]: https://travis-ci.org/sferik/twitter
12
- [gemnasium]: https://gemnasium.com/sferik/twitter
13
- [codeclimate]: https://codeclimate.com/github/sferik/twitter
14
- [coveralls]: https://coveralls.io/r/sferik/twitter
10
+ [maintainability]: https://codeclimate.com/github/sferik/twitter/maintainability
15
11
  [inchpages]: http://inch-ci.org/github/sferik/twitter
16
12
 
17
13
  A Ruby interface to the Twitter API.
@@ -231,11 +227,10 @@ command:
231
227
  This library aims to support and is [tested against][travis] the following Ruby
232
228
  versions:
233
229
 
234
- * Ruby 2.0.0
235
- * Ruby 2.1
236
- * Ruby 2.2
237
- * Ruby 2.3
238
- * JRuby 9.1.6.0
230
+ * Ruby 2.7
231
+ * Ruby 3.0
232
+ * Ruby 3.1
233
+ * Ruby 3.2
239
234
 
240
235
  If something doesn't work on one of these versions, it's a bug.
241
236
 
@@ -266,7 +261,7 @@ Constraint][pvc] with two digits of precision. For example:
266
261
  [pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
267
262
 
268
263
  ## Copyright
269
- Copyright (c) 2006-2016 Erik Michaels-Ober, John Nunemaker, Wynn Netherland, Steve Richert, Steve Agalloco.
264
+ Copyright (c) 2006-2016 Erik Berlin, John Nunemaker, Wynn Netherland, Steve Richert, Steve Agalloco.
270
265
  See [LICENSE][] for details.
271
266
 
272
267
  [license]: LICENSE.md
data/lib/twitter/base.rb CHANGED
@@ -1,8 +1,8 @@
1
- require 'addressable/uri'
2
- require 'forwardable'
3
- require 'memoizable'
4
- require 'twitter/null_object'
5
- require 'twitter/utils'
1
+ require "addressable/uri"
2
+ require "forwardable"
3
+ require "memoizable"
4
+ require "twitter/null_object"
5
+ require "twitter/utils"
6
6
 
7
7
  module Twitter
8
8
  class Base
@@ -46,10 +46,10 @@ module Twitter
46
46
  # @param attrs [Array, Symbol]
47
47
  def uri_attr_reader(*attrs)
48
48
  attrs.each do |uri_key|
49
- array = uri_key.to_s.split('_')
50
- index = array.index('uri')
51
- array[index] = 'url'
52
- url_key = array.join('_').to_sym
49
+ array = uri_key.to_s.split("_")
50
+ index = array.index("uri")
51
+ array[index] = "url"
52
+ url_key = array.join("_").to_sym
53
53
  define_uri_method(uri_key, url_key)
54
54
  alias_method(url_key, uri_key)
55
55
  define_predicate_method(uri_key, url_key)
@@ -71,7 +71,7 @@ module Twitter
71
71
  # @param key2 [Symbol]
72
72
  def define_uri_method(key1, key2)
73
73
  define_method(key1) do
74
- Addressable::URI.parse(@attrs[key2].chomp('#')) unless @attrs[key2].nil?
74
+ Addressable::URI.parse(@attrs[key2].chomp("#")) unless @attrs[key2].nil?
75
75
  end
76
76
  memoize(key1)
77
77
  end
@@ -125,7 +125,7 @@ module Twitter
125
125
  private
126
126
 
127
127
  def attr_falsey_or_empty?(key)
128
- !@attrs[key] || @attrs[key].respond_to?(:empty?) && @attrs[key].empty?
128
+ !@attrs[key] || (@attrs[key].respond_to?(:empty?) && @attrs[key].empty?)
129
129
  end
130
130
 
131
131
  def attrs_for_object(key1, key2 = nil)
@@ -1,10 +1,11 @@
1
- require 'twitter/identity'
2
- require 'twitter/utils'
1
+ require "twitter/identity"
2
+ require "twitter/utils"
3
3
 
4
4
  module Twitter
5
5
  class BasicUser < Twitter::Identity
6
6
  # @return [String]
7
7
  attr_reader :screen_name
8
+
8
9
  predicate_attr_reader :following
9
10
  end
10
11
  end
@@ -1,11 +1,11 @@
1
- require 'twitter/error'
2
- require 'twitter/utils'
3
- require 'twitter/version'
1
+ require "twitter/error"
2
+ require "twitter/utils"
3
+ require "twitter/version"
4
4
 
5
5
  module Twitter
6
6
  class Client
7
7
  include Twitter::Utils
8
- attr_accessor :access_token, :access_token_secret, :consumer_key, :consumer_secret, :proxy, :timeouts
8
+ attr_accessor :access_token, :access_token_secret, :consumer_key, :consumer_secret, :proxy, :timeouts, :dev_environment
9
9
  attr_writer :user_agent
10
10
 
11
11
  # Initializes a new Client object
@@ -21,7 +21,7 @@ module Twitter
21
21
 
22
22
  # @return [Boolean]
23
23
  def user_token?
24
- !(blank?(access_token) || blank?(access_token_secret))
24
+ !(blank_string?(access_token) || blank_string?(access_token_secret))
25
25
  end
26
26
 
27
27
  # @return [String]
@@ -41,13 +41,13 @@ module Twitter
41
41
 
42
42
  # @return [Boolean]
43
43
  def credentials?
44
- credentials.values.none? { |v| blank?(v) }
44
+ credentials.values.none? { |v| blank_string?(v) }
45
45
  end
46
46
 
47
47
  private
48
48
 
49
- def blank?(s)
50
- s.respond_to?(:empty?) ? s.empty? : !s
49
+ def blank_string?(string)
50
+ string.respond_to?(:empty?) ? string.empty? : !string
51
51
  end
52
52
  end
53
53
  end
@@ -1,5 +1,5 @@
1
- require 'time'
2
- require 'memoizable'
1
+ require "time"
2
+ require "memoizable"
3
3
 
4
4
  module Twitter
5
5
  module Creatable
@@ -9,7 +9,11 @@ module Twitter
9
9
  #
10
10
  # @return [Time]
11
11
  def created_at
12
- Time.parse(@attrs[:created_at]).utc unless @attrs[:created_at].nil?
12
+ time = @attrs[:created_at]
13
+ return if time.nil?
14
+
15
+ time = Time.parse(time) unless time.is_a?(Time)
16
+ time.utc
13
17
  end
14
18
  memoize :created_at
15
19
 
@@ -1,6 +1,6 @@
1
- require 'twitter/enumerable'
2
- require 'twitter/rest/request'
3
- require 'twitter/utils'
1
+ require "twitter/enumerable"
2
+ require "twitter/rest/request"
3
+ require "twitter/utils"
4
4
 
5
5
  module Twitter
6
6
  class Cursor
@@ -16,8 +16,9 @@ module Twitter
16
16
  # @param key [String, Symbol] The key to fetch the data from the response
17
17
  # @param klass [Class] The class to instantiate objects in the response
18
18
  # @param request [Twitter::REST::Request]
19
+ # @param limit [Integer] After reaching the limit, we stop fetching next page
19
20
  # @return [Twitter::Cursor]
20
- def initialize(key, klass, request)
21
+ def initialize(key, klass, request, limit = nil)
21
22
  @key = key.to_sym
22
23
  @klass = klass
23
24
  @client = request.client
@@ -25,6 +26,7 @@ module Twitter
25
26
  @path = request.path
26
27
  @options = request.options
27
28
  @collection = []
29
+ @limit = limit
28
30
  self.attrs = request.perform
29
31
  end
30
32
 
@@ -32,15 +34,23 @@ module Twitter
32
34
 
33
35
  # @return [Integer]
34
36
  def next_cursor
35
- @attrs[:next_cursor] || -1
37
+ @attrs[:next_cursor]
36
38
  end
37
39
  alias next next_cursor
38
40
 
39
41
  # @return [Boolean]
40
42
  def last?
43
+ return false if next_cursor.is_a?(String)
44
+ return true if next_cursor.nil?
45
+
41
46
  next_cursor.zero?
42
47
  end
43
48
 
49
+ # @return [Boolean]
50
+ def reached_limit?
51
+ @limit && @limit <= attrs[@key].count
52
+ end
53
+
44
54
  # @return [Hash]
45
55
  def fetch_next_page
46
56
  response = Twitter::REST::Request.new(@client, @request_method, @path, @options.merge(cursor: next_cursor)).perform
@@ -1,6 +1,6 @@
1
- require 'twitter/creatable'
2
- require 'twitter/entities'
3
- require 'twitter/identity'
1
+ require "twitter/creatable"
2
+ require "twitter/entities"
3
+ require "twitter/identity"
4
4
 
5
5
  module Twitter
6
6
  class DirectMessage < Twitter::Identity
@@ -8,6 +8,7 @@ module Twitter
8
8
  include Twitter::Entities
9
9
  # @return [String]
10
10
  attr_reader :text
11
+ attr_reader :sender_id, :recipient_id
11
12
  alias full_text text
12
13
  object_attr_reader :User, :recipient
13
14
  object_attr_reader :User, :sender
@@ -0,0 +1,44 @@
1
+ require "twitter/creatable"
2
+ require "twitter/entities"
3
+ require "twitter/identity"
4
+
5
+ module Twitter
6
+ class DirectMessageEvent < Twitter::Identity
7
+ include Twitter::Creatable
8
+ include Twitter::Entities
9
+
10
+ attr_reader :created_timestamp
11
+
12
+ object_attr_reader :DirectMessage, :direct_message
13
+
14
+ def initialize(attrs)
15
+ attrs = read_from_response(attrs)
16
+ text = attrs.dig(:message_create, :message_data, :text)
17
+ urls = attrs.dig(:message_create, :message_data, :entities, :urls)
18
+
19
+ text.gsub!(urls[0][:url], urls[0][:expanded_url]) if urls.any?
20
+
21
+ attrs[:direct_message] = build_direct_message(attrs, text)
22
+ super
23
+ end
24
+
25
+ private
26
+
27
+ # @return [Hash] Normalized hash of attrs
28
+ def read_from_response(attrs)
29
+ attrs[:event].nil? ? attrs : attrs[:event]
30
+ end
31
+
32
+ def build_direct_message(attrs, text)
33
+ recipient_id = attrs[:message_create][:target][:recipient_id].to_i
34
+ sender_id = attrs[:message_create][:sender_id].to_i
35
+ {id: attrs[:id].to_i,
36
+ created_at: Time.at(attrs[:created_timestamp].to_i / 1000.0),
37
+ sender: {id: sender_id},
38
+ sender_id: sender_id,
39
+ recipient: {id: recipient_id},
40
+ recipient_id: recipient_id,
41
+ text: text}
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,17 @@
1
+ require "twitter/creatable"
2
+ require "twitter/entities"
3
+ require "twitter/identity"
4
+
5
+ module Twitter
6
+ module DirectMessages
7
+ class WelcomeMessage < Twitter::Identity
8
+ include Twitter::Creatable
9
+ include Twitter::Entities
10
+ # @return [String]
11
+ attr_reader :text
12
+ # @return [String]
13
+ attr_reader :name
14
+ alias full_text text
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ require "twitter/creatable"
2
+ require "twitter/identity"
3
+
4
+ module Twitter
5
+ module DirectMessages
6
+ class WelcomeMessageRule < Twitter::Identity
7
+ include Twitter::Creatable
8
+ # @return [Integer]
9
+ attr_reader :welcome_message_id
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,36 @@
1
+ require "twitter/creatable"
2
+ require "twitter/identity"
3
+
4
+ module Twitter
5
+ module DirectMessages
6
+ class WelcomeMessageRuleWrapper < Twitter::Identity
7
+ attr_reader :created_timestamp
8
+
9
+ object_attr_reader "DirectMessages::WelcomeMessageRule", :welcome_message_rule
10
+
11
+ def initialize(attrs)
12
+ attrs = read_from_response(attrs)
13
+
14
+ attrs[:welcome_message_rule] = build_welcome_message_rule(attrs)
15
+ super
16
+ end
17
+
18
+ private
19
+
20
+ # @return [Hash] Normalized hash of attrs
21
+ def read_from_response(attrs)
22
+ return attrs[:welcome_message_rule] unless attrs[:welcome_message_rule].nil?
23
+
24
+ attrs
25
+ end
26
+
27
+ def build_welcome_message_rule(attrs)
28
+ {
29
+ id: attrs[:id].to_i,
30
+ created_at: Time.at(attrs[:created_timestamp].to_i / 1000.0),
31
+ welcome_message_id: attrs[:welcome_message_id].to_i,
32
+ }
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,42 @@
1
+ require "twitter/creatable"
2
+ require "twitter/identity"
3
+
4
+ module Twitter
5
+ module DirectMessages
6
+ class WelcomeMessageWrapper < Twitter::Identity
7
+ attr_reader :created_timestamp
8
+
9
+ object_attr_reader "DirectMessages::WelcomeMessage", :welcome_message
10
+
11
+ def initialize(attrs)
12
+ attrs = read_from_response(attrs)
13
+ text = attrs.dig(:message_data, :text)
14
+ urls = attrs.dig(:message_data, :entities, :urls)
15
+
16
+ text.gsub!(urls[0][:url], urls[0][:expanded_url]) if urls.any?
17
+
18
+ attrs[:welcome_message] = build_welcome_message(attrs, text)
19
+ super
20
+ end
21
+
22
+ private
23
+
24
+ # @return [Hash] Normalized hash of attrs
25
+ def read_from_response(attrs)
26
+ return attrs[:welcome_message] unless attrs[:welcome_message].nil?
27
+
28
+ attrs
29
+ end
30
+
31
+ def build_welcome_message(attrs, text)
32
+ {
33
+ id: attrs[:id].to_i,
34
+ created_at: Time.at(attrs[:created_timestamp].to_i / 1000.0),
35
+ text: text,
36
+ name: attrs[:name],
37
+ entities: attrs.dig(:message_data, :entities),
38
+ }
39
+ end
40
+ end
41
+ end
42
+ end
@@ -1,9 +1,9 @@
1
- require 'memoizable'
2
- require 'twitter/entity/hashtag'
3
- require 'twitter/entity/symbol'
4
- require 'twitter/entity/uri'
5
- require 'twitter/entity/user_mention'
6
- require 'twitter/media_factory'
1
+ require "memoizable"
2
+ require "twitter/entity/hashtag"
3
+ require "twitter/entity/symbol"
4
+ require "twitter/entity/uri"
5
+ require "twitter/entity/user_mention"
6
+ require "twitter/media_factory"
7
7
 
8
8
  module Twitter
9
9
  module Entities
@@ -1,4 +1,4 @@
1
- require 'twitter/entity'
1
+ require "twitter/entity"
2
2
 
3
3
  module Twitter
4
4
  class Entity
@@ -1,4 +1,4 @@
1
- require 'twitter/entity'
1
+ require "twitter/entity"
2
2
 
3
3
  module Twitter
4
4
  class Entity
@@ -1,4 +1,4 @@
1
- require 'twitter/entity'
1
+ require "twitter/entity"
2
2
 
3
3
  module Twitter
4
4
  class Entity
@@ -1,4 +1,4 @@
1
- require 'twitter/entity'
1
+ require "twitter/entity"
2
2
 
3
3
  module Twitter
4
4
  class Entity
@@ -1,4 +1,4 @@
1
- require 'twitter/base'
1
+ require "twitter/base"
2
2
 
3
3
  module Twitter
4
4
  class Entity < Twitter::Base
@@ -3,15 +3,14 @@ module Twitter
3
3
  include ::Enumerable
4
4
 
5
5
  # @return [Enumerator]
6
- def each(start = 0)
6
+ def each(start = 0, &block)
7
7
  return to_enum(:each, start) unless block_given?
8
- Array(@collection[start..-1]).each do |element|
9
- yield(element)
10
- end
11
- unless last?
8
+
9
+ Array(@collection[start..]).each(&block)
10
+ unless finished?
12
11
  start = [@collection.size, start].max
13
12
  fetch_next_page
14
- each(start, &Proc.new)
13
+ each(start, &block)
15
14
  end
16
15
  self
17
16
  end
@@ -22,5 +21,15 @@ module Twitter
22
21
  def last?
23
22
  true
24
23
  end
24
+
25
+ # @return [Boolean]
26
+ def reached_limit?
27
+ false
28
+ end
29
+
30
+ # @return [Boolean]
31
+ def finished?
32
+ last? || reached_limit?
33
+ end
25
34
  end
26
35
  end