twitter 5.0.1 → 5.1.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.tar.gz.sig CHANGED
Binary file
data/.yardopts CHANGED
@@ -8,3 +8,5 @@ CHANGELOG.md
8
8
  CONTRIBUTING.md
9
9
  LICENSE.md
10
10
  README.md
11
+ examples/Configuration.md
12
+ examples/Update.md
@@ -1,3 +1,9 @@
1
+ 5.1.0
2
+ -----
3
+ * [Use `Addressable::URI` everywhere](https://github.com/sferik/twitter/commit/97d7c68900c9974a1f6841f6eed2706df9030d64) ([@matthewrudy](https://twitter.com/matthewrudy))
4
+ * [Allow use of `Twitter::Place` instead of `place_id`](https://github.com/sferik/twitter/commit/c2b31dd2385fefa30a9ddccf15415a713cf5953a)
5
+ * [Allow use of `Twitter::Tweet` instead of `in_reply_to_status_id`](https://github.com/sferik/twitter/commit/6b7d6c2b637a074c348a56a51fb1e02252482fb2)
6
+
1
7
  5.0.1
2
8
  -----
3
9
  * [Fix `buftok` delimiter handling](https://github.com/sferik/twitter/pull/484)
data/README.md CHANGED
@@ -161,14 +161,14 @@ simplicity and performance.
161
161
  <th>Notes</th>
162
162
  <th colspan="2">Version 4</th>
163
163
  <th colspan="2">Version 5</th>
164
- </th>
164
+ </tr>
165
165
  <tr>
166
166
  <th></th>
167
167
  <th>Code</th>
168
168
  <th>HTTP GETs</th>
169
169
  <th>Code</th>
170
170
  <th>HTTP GETs</th>
171
- </th>
171
+ </tr>
172
172
  </thead>
173
173
  <tbody>
174
174
  <tr>
@@ -176,13 +176,13 @@ simplicity and performance.
176
176
  Are you at the start of the cursor?
177
177
  </td>
178
178
  <td>
179
- <pre><code lang="ruby">client.friends.first</code></pre>
179
+ <pre><code>client.friends.first</code></pre>
180
180
  </td>
181
181
  <td>
182
182
  <em>Θ(1)</em>
183
183
  </td>
184
184
  <td>
185
- <pre><code lang="ruby">client.friends.first?</code></pre>
185
+ <pre><code>client.friends.first?</code></pre>
186
186
  </td>
187
187
  <td>
188
188
  <em>Θ(1)</em>
@@ -193,13 +193,13 @@ simplicity and performance.
193
193
  Return your most recent follower.
194
194
  </td>
195
195
  <td>
196
- <pre><code lang="ruby">client.friends.users.first</code></pre>
196
+ <pre><code>client.friends.users.first</code></pre>
197
197
  </td>
198
198
  <td>
199
199
  <em>Θ(1)</em>
200
200
  </td>
201
201
  <td>
202
- <pre><code lang="ruby">client.friends.first</code></pre>
202
+ <pre><code>client.friends.first</code></pre>
203
203
  </td>
204
204
  <td>
205
205
  <em>Θ(1)</em>
@@ -210,13 +210,13 @@ simplicity and performance.
210
210
  Return an array of all your friends.
211
211
  </td>
212
212
  <td>
213
- <pre><code lang="ruby">client.friends.all</code></pre>
213
+ <pre><code>client.friends.all</code></pre>
214
214
  </td>
215
215
  <td>
216
216
  <em>Θ(n+1)</em>
217
217
  </td>
218
218
  <td>
219
- <pre><code lang="ruby">client.friends.to_a</code></pre>
219
+ <pre><code>client.friends.to_a</code></pre>
220
220
  </td>
221
221
  <td>
222
222
  <em>Θ(n)</em>
@@ -227,13 +227,13 @@ simplicity and performance.
227
227
  Collect your 20 most recent friends.
228
228
  </td>
229
229
  <td>
230
- <pre><code lang="ruby">client.friends.take(20)</code></pre>
230
+ <pre><code>client.friends.take(20)</code></pre>
231
231
  </td>
232
232
  <td>
233
233
  <em>Θ(n+1)</em>
234
234
  </td>
235
235
  <td>
236
- <pre><code lang="ruby">client.friends.take(20)</code></pre>
236
+ <pre><code>client.friends.take(20)</code></pre>
237
237
  </td>
238
238
  <td>
239
239
  <em>Θ(1)</em>
@@ -244,7 +244,7 @@ simplicity and performance.
244
244
  Collect your 20 most recent friends twice.
245
245
  </td>
246
246
  <td>
247
- <pre><code lang="ruby">friends = client.friends
247
+ <pre><code>friends = client.friends
248
248
  2.times.collect do
249
249
  friends.take(20)
250
250
  end</code></pre>
@@ -253,7 +253,7 @@ end</code></pre>
253
253
  <em>Θ(2n+2)</em>
254
254
  </td>
255
255
  <td>
256
- <pre><code lang="ruby">friends = client.friends
256
+ <pre><code>friends = client.friends
257
257
  2.times.collect do
258
258
  friends.take(20)
259
259
  end</code></pre>
@@ -423,8 +423,8 @@ These methods are aliased to `#url` for users who prefer that nomenclature.
423
423
  `Twitter::User` previously had a `#url` method, which returned the user's
424
424
  website. This URI is now available via the `#website` method.
425
425
 
426
- All `#uri` methods now return `URI` objects instead of strings. To convert a
427
- `URI` object to a string, call `#to_s` on it.
426
+ All `#uri` methods now return `Addressable::URI` objects instead of strings. To convert an
427
+ `Addressable::URI` object to a string, call `#to_s` on it.
428
428
 
429
429
  ## Configuration
430
430
  Twitter API v1.1 requires you to authenticate via OAuth, so you'll need to
@@ -74,7 +74,7 @@ module Twitter
74
74
  # @param key2 [Symbol]
75
75
  def define_uri_method(key1, key2)
76
76
  define_method(key1) do ||
77
- URI.parse(@attrs[key2]) if @attrs[key2]
77
+ Addressable::URI.parse(@attrs[key2]) if @attrs[key2]
78
78
  end
79
79
  memoize(key1)
80
80
  end
@@ -62,7 +62,7 @@ module Twitter
62
62
  end
63
63
 
64
64
  def oauth_auth_header(method, uri, params={})
65
- uri = URI.parse(uri)
65
+ uri = Addressable::URI.parse(uri)
66
66
  SimpleOAuth::Header.new(method, uri, params, credentials)
67
67
  end
68
68
 
@@ -8,23 +8,23 @@ module Twitter
8
8
  :mode, :name, :slug, :subscriber_count
9
9
  object_attr_reader :User, :user
10
10
 
11
- # @return [URI] The URI to the list members.
11
+ # @return [Addressable::URI] The URI to the list members.
12
12
  def members_uri
13
- URI.parse("https://twitter.com/#{user.screen_name}/#{slug}/members")
13
+ Addressable::URI.parse("https://twitter.com/#{user.screen_name}/#{slug}/members")
14
14
  end
15
15
  memoize :members_uri
16
16
  alias members_url members_uri
17
17
 
18
- # @return [URI] The URI to the list subscribers.
18
+ # @return [Addressable::URI] The URI to the list subscribers.
19
19
  def subscribers_uri
20
- URI.parse("https://twitter.com/#{user.screen_name}/#{slug}/subscribers")
20
+ Addressable::URI.parse("https://twitter.com/#{user.screen_name}/#{slug}/subscribers")
21
21
  end
22
22
  memoize :subscribers_uri
23
23
  alias subscribers_url subscribers_uri
24
24
 
25
- # @return [URI] The URI to the list.
25
+ # @return [Addressable::URI] The URI to the list.
26
26
  def uri
27
- URI.parse("https://twitter.com/#{user.screen_name}/#{slug}")
27
+ Addressable::URI.parse("https://twitter.com/#{user.screen_name}/#{slug}")
28
28
  end
29
29
  memoize :uri
30
30
  alias url uri
@@ -110,14 +110,19 @@ module Twitter
110
110
  # @return [Twitter::Tweet] The created Tweet.
111
111
  # @param status [String] The text of your status update, up to 140 characters.
112
112
  # @param options [Hash] A customizable set of options.
113
+ # @option options [Twitter::Tweet] :in_reply_to_status An existing status that the update is in reply to.
113
114
  # @option options [Integer] :in_reply_to_status_id The ID of an existing status that the update is in reply to.
114
115
  # @option options [Float] :lat The latitude of the location this tweet refers to. This option will be ignored unless it is inside the range -90.0 to +90.0 (North is positive) inclusive. It will also be ignored if there isn't a corresponding :long option.
115
116
  # @option options [Float] :long The longitude of the location this tweet refers to. The valid ranges for longitude is -180.0 to +180.0 (East is positive) inclusive. This option will be ignored if outside that range, if it is not a number, if geo_enabled is disabled, or if there not a corresponding :lat option.
117
+ # @option options [Twitter::Place] :place A place in the world. These can be retrieved from {Twitter::REST::API::PlacesAndGeo#reverse_geocode}.
116
118
  # @option options [String] :place_id A place in the world. These IDs can be retrieved from {Twitter::REST::API::PlacesAndGeo#reverse_geocode}.
117
119
  # @option options [String] :display_coordinates Whether or not to put a pin on the exact coordinates a tweet has been sent from.
118
120
  # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1.
119
121
  def update(status, options={})
120
- object_from_response(Twitter::Tweet, :post, "/1.1/statuses/update.json", options.merge(:status => status))
122
+ hash = options.dup
123
+ hash[:in_reply_to_status_id] = hash.delete(:in_reply_to_status).id unless hash[:in_reply_to_status].nil?
124
+ hash[:place_id] = hash.delete(:place).woeid unless hash[:place].nil?
125
+ object_from_response(Twitter::Tweet, :post, "/1.1/statuses/update.json", hash.merge(:status => status))
121
126
  rescue Twitter::Error::Forbidden => error
122
127
  handle_forbidden_error(Twitter::Error::AlreadyPosted, error)
123
128
  end
@@ -184,14 +189,20 @@ module Twitter
184
189
  # @param status [String] The text of your status update, up to 140 characters.
185
190
  # @param media [File, Hash] A File object with your picture (PNG, JPEG or GIF)
186
191
  # @param options [Hash] A customizable set of options.
192
+ # @option options [Boolean, String, Integer] :possibly_sensitive Set to true for content which may not be suitable for every audience.
193
+ # @option options [Twitter::Tweet] :in_reply_to_status An existing status that the update is in reply to.
187
194
  # @option options [Integer] :in_reply_to_status_id The ID of an existing Tweet that the update is in reply to.
188
195
  # @option options [Float] :lat The latitude of the location this tweet refers to. This option will be ignored unless it is inside the range -90.0 to +90.0 (North is positive) inclusive. It will also be ignored if there isn't a corresponding :long option.
189
196
  # @option options [Float] :long The longitude of the location this tweet refers to. The valid ranges for longitude is -180.0 to +180.0 (East is positive) inclusive. This option will be ignored if outside that range, if it is not a number, if geo_enabled is disabled, or if there not a corresponding :lat option.
197
+ # @option options [Twitter::Place] :place A place in the world. These can be retrieved from {Twitter::REST::API::PlacesAndGeo#reverse_geocode}.
190
198
  # @option options [String] :place_id A place in the world. These IDs can be retrieved from {Twitter::REST::API::PlacesAndGeo#reverse_geocode}.
191
199
  # @option options [String] :display_coordinates Whether or not to put a pin on the exact coordinates a tweet has been sent from.
192
200
  # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1.
193
201
  def update_with_media(status, media, options={})
194
- object_from_response(Twitter::Tweet, :post, "/1.1/statuses/update_with_media.json", options.merge('media[]' => media, 'status' => status))
202
+ hash = options.dup
203
+ hash[:in_reply_to_status_id] = hash.delete(:in_reply_to_status).id unless hash[:in_reply_to_status].nil?
204
+ hash[:place_id] = hash.delete(:place).woeid unless hash[:place].nil?
205
+ object_from_response(Twitter::Tweet, :post, "/1.1/statuses/update_with_media.json", hash.merge('media[]' => media, 'status' => status))
195
206
  rescue Twitter::Error::Forbidden => error
196
207
  handle_forbidden_error(Twitter::Error::AlreadyPosted, error)
197
208
  end
@@ -169,7 +169,7 @@ module Twitter
169
169
  user_id = case user
170
170
  when Integer
171
171
  user
172
- when String, URI
172
+ when String, URI, Addressable::URI
173
173
  user(user).id
174
174
  when Twitter::User
175
175
  user.id
@@ -185,7 +185,7 @@ module Twitter
185
185
  else
186
186
  set_compound_key("screen_name", user, hash, prefix)
187
187
  end
188
- when URI
188
+ when URI, Addressable::URI
189
189
  set_compound_key("screen_name", user.path.split("/").last, hash, prefix)
190
190
  when Twitter::User
191
191
  set_compound_key("user_id", user.id, hash, prefix)
@@ -79,7 +79,7 @@ module Twitter
79
79
 
80
80
  # @return [String] The URL to the tweet.
81
81
  def uri
82
- URI.parse("https://twitter.com/#{user.screen_name}/status/#{id}")
82
+ Addressable::URI.parse("https://twitter.com/#{user.screen_name}/status/#{id}")
83
83
  end
84
84
  memoize :uri
85
85
  alias url uri
@@ -109,14 +109,14 @@ module Twitter
109
109
 
110
110
  # @return [String] The URL to the user.
111
111
  def uri
112
- URI.parse("https://twitter.com/#{screen_name}")
112
+ Addressable::URI.parse("https://twitter.com/#{screen_name}")
113
113
  end
114
114
  memoize :uri
115
115
  alias url uri
116
116
 
117
117
  # @return [String] The URL to the user's website.
118
118
  def website
119
- URI.parse(@attrs[:url]) if @attrs[:url]
119
+ Addressable::URI.parse(@attrs[:url]) if @attrs[:url]
120
120
  end
121
121
  memoize :website
122
122
 
@@ -128,7 +128,7 @@ module Twitter
128
128
  private
129
129
 
130
130
  def parse_encoded_uri(uri)
131
- URI.parse(URI.encode(uri))
131
+ Addressable::URI.parse(URI.encode(uri))
132
132
  end
133
133
 
134
134
  def insecure_uri(uri)
@@ -1,8 +1,8 @@
1
1
  module Twitter
2
2
  class Version
3
3
  MAJOR = 5
4
- MINOR = 0
5
- PATCH = 1
4
+ MINOR = 1
5
+ PATCH = 0
6
6
  PRE = nil
7
7
 
8
8
  class << self
@@ -29,7 +29,7 @@ describe Twitter::Entity::URI do
29
29
  describe "#expanded_uri" do
30
30
  it "returns a URI when the expanded_url is set" do
31
31
  uri = Twitter::Entity::URI.new(:expanded_url => "https://github.com/sferik")
32
- expect(uri.expanded_uri).to be_a URI
32
+ expect(uri.expanded_uri).to be_a Addressable::URI
33
33
  expect(uri.expanded_uri.to_s).to eq("https://github.com/sferik")
34
34
  end
35
35
  it "returns nil when the expanded_url is not set" do
@@ -52,7 +52,7 @@ describe Twitter::Entity::URI do
52
52
  describe "#uri" do
53
53
  it "returns a URI when the url is set" do
54
54
  uri = Twitter::Entity::URI.new(:url => "https://github.com/sferik")
55
- expect(uri.uri).to be_a URI
55
+ expect(uri.uri).to be_a Addressable::URI
56
56
  expect(uri.uri.to_s).to eq("https://github.com/sferik")
57
57
  end
58
58
  it "returns nil when the url is not set" do
@@ -59,7 +59,7 @@ describe Twitter::Media::Photo do
59
59
  describe "#expanded_uri" do
60
60
  it "returns a URI when the expanded_url is set" do
61
61
  photo = Twitter::Media::Photo.new(:id => 1, :expanded_url => "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
62
- expect(photo.expanded_uri).to be_a URI
62
+ expect(photo.expanded_uri).to be_a Addressable::URI
63
63
  expect(photo.expanded_uri.to_s).to eq("http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
64
64
  end
65
65
  it "returns nil when the expanded_url is not set" do
@@ -82,7 +82,7 @@ describe Twitter::Media::Photo do
82
82
  describe "#media_uri" do
83
83
  it "returns a URI when the media_url is set" do
84
84
  photo = Twitter::Media::Photo.new(:id => 1, :media_url => "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
85
- expect(photo.media_uri).to be_a URI
85
+ expect(photo.media_uri).to be_a Addressable::URI
86
86
  expect(photo.media_uri.to_s).to eq("http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
87
87
  end
88
88
  it "returns nil when the media_url is not set" do
@@ -105,7 +105,7 @@ describe Twitter::Media::Photo do
105
105
  describe "#media_uri_https" do
106
106
  it "returns a URI when the media_url_https is set" do
107
107
  photo = Twitter::Media::Photo.new(:id => 1, :media_url_https => "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
108
- expect(photo.media_uri_https).to be_a URI
108
+ expect(photo.media_uri_https).to be_a Addressable::URI
109
109
  expect(photo.media_uri_https.to_s).to eq("http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
110
110
  end
111
111
  it "returns nil when the media_url_https is not set" do
@@ -128,7 +128,7 @@ describe Twitter::Media::Photo do
128
128
  describe "#uri" do
129
129
  it "returns a URI when the url is set" do
130
130
  photo = Twitter::Media::Photo.new(:id => 1, :url => "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
131
- expect(photo.uri).to be_a URI
131
+ expect(photo.uri).to be_a Addressable::URI
132
132
  expect(photo.uri.to_s).to eq("http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
133
133
  end
134
134
  it "returns nil when the url is not set" do
@@ -5,7 +5,7 @@ describe Twitter::OEmbed do
5
5
  describe "#author_uri" do
6
6
  it "returns a URI when the author_url is set" do
7
7
  oembed = Twitter::OEmbed.new(:author_url => "https://twitter.com/sferik")
8
- expect(oembed.author_uri).to be_a URI
8
+ expect(oembed.author_uri).to be_a Addressable::URI
9
9
  expect(oembed.author_uri.to_s).to eq("https://twitter.com/sferik")
10
10
  end
11
11
  it "returns nil when the author_uri is not set" do
@@ -87,7 +87,7 @@ describe Twitter::OEmbed do
87
87
  describe "#provider_uri" do
88
88
  it "returns a URI when the provider_url is set" do
89
89
  oembed = Twitter::OEmbed.new(:provider_url => "http://twitter.com")
90
- expect(oembed.provider_uri).to be_a URI
90
+ expect(oembed.provider_uri).to be_a Addressable::URI
91
91
  expect(oembed.provider_uri.to_s).to eq("http://twitter.com")
92
92
  end
93
93
  it "returns nil when the provider_uri is not set" do
@@ -136,7 +136,7 @@ describe Twitter::OEmbed do
136
136
  describe "#uri" do
137
137
  it "returns a URI when the url is set" do
138
138
  oembed = Twitter::OEmbed.new(:url => "https://twitter.com/twitterapi/status/133640144317198338")
139
- expect(oembed.uri).to be_a URI
139
+ expect(oembed.uri).to be_a Addressable::URI
140
140
  expect(oembed.uri.to_s).to eq("https://twitter.com/twitterapi/status/133640144317198338")
141
141
  end
142
142
  it "returns nil when the url is not set" do
@@ -108,7 +108,7 @@ describe Twitter::Place do
108
108
  describe "#uri" do
109
109
  it "returns a URI when the url is set" do
110
110
  place = Twitter::Place.new(:woeid => "247f43d441defc03", :url => "https://api.twitter.com/1.1/geo/id/247f43d441defc03.json")
111
- expect(place.uri).to be_a URI
111
+ expect(place.uri).to be_a Addressable::URI
112
112
  expect(place.uri.to_s).to eq("https://api.twitter.com/1.1/geo/id/247f43d441defc03.json")
113
113
  end
114
114
  it "returns nil when the url is not set" do
@@ -226,6 +226,44 @@ describe Twitter::REST::API::Tweets do
226
226
  expect{@client.update("The problem with your code is that it's doing exactly what you told it to do.")}.to raise_error Twitter::Error::AlreadyPosted
227
227
  end
228
228
  end
229
+ context "with an in-reply-to status" do
230
+ before do
231
+ @tweet = Twitter::Tweet.new(:id => 1)
232
+ stub_post("/1.1/statuses/update.json").with(:body => {:status => "The problem with your code is that it's doing exactly what you told it to do.", :in_reply_to_status_id => "1"}).to_return(:body => fixture("status.json"), :headers => {:content_type => "application/json; charset=utf-8"})
233
+ end
234
+ it "requests the correct resource" do
235
+ @client.update("The problem with your code is that it's doing exactly what you told it to do.", :in_reply_to_status => @tweet)
236
+ expect(a_post("/1.1/statuses/update.json").with(:body => {:status => "The problem with your code is that it's doing exactly what you told it to do.", :in_reply_to_status_id => "1"})).to have_been_made
237
+ end
238
+ end
239
+ context "with an in-reply-to status ID" do
240
+ before do
241
+ stub_post("/1.1/statuses/update.json").with(:body => {:status => "The problem with your code is that it's doing exactly what you told it to do.", :in_reply_to_status_id => "1"}).to_return(:body => fixture("status.json"), :headers => {:content_type => "application/json; charset=utf-8"})
242
+ end
243
+ it "requests the correct resource" do
244
+ @client.update("The problem with your code is that it's doing exactly what you told it to do.", :in_reply_to_status_id => 1)
245
+ expect(a_post("/1.1/statuses/update.json").with(:body => {:status => "The problem with your code is that it's doing exactly what you told it to do.", :in_reply_to_status_id => "1"})).to have_been_made
246
+ end
247
+ end
248
+ context "with a place" do
249
+ before do
250
+ @place = Twitter::Place.new(:woeid => "df51dec6f4ee2b2c")
251
+ stub_post("/1.1/statuses/update.json").with(:body => {:status => "The problem with your code is that it's doing exactly what you told it to do.", :place_id => "df51dec6f4ee2b2c"}).to_return(:body => fixture("status.json"), :headers => {:content_type => "application/json; charset=utf-8"})
252
+ end
253
+ it "requests the correct resource" do
254
+ @client.update("The problem with your code is that it's doing exactly what you told it to do.", :place => @place)
255
+ expect(a_post("/1.1/statuses/update.json").with(:body => {:status => "The problem with your code is that it's doing exactly what you told it to do.", :place_id => "df51dec6f4ee2b2c"})).to have_been_made
256
+ end
257
+ end
258
+ context "with a place ID" do
259
+ before do
260
+ stub_post("/1.1/statuses/update.json").with(:body => {:status => "The problem with your code is that it's doing exactly what you told it to do.", :place_id => "df51dec6f4ee2b2c"}).to_return(:body => fixture("status.json"), :headers => {:content_type => "application/json; charset=utf-8"})
261
+ end
262
+ it "requests the correct resource" do
263
+ @client.update("The problem with your code is that it's doing exactly what you told it to do.", :place_id => "df51dec6f4ee2b2c")
264
+ expect(a_post("/1.1/statuses/update.json").with(:body => {:status => "The problem with your code is that it's doing exactly what you told it to do.", :place_id => "df51dec6f4ee2b2c"})).to have_been_made
265
+ end
266
+ end
229
267
  end
230
268
 
231
269
  describe "#retweet" do
@@ -28,7 +28,7 @@ describe Twitter::Trend do
28
28
  describe "#uri" do
29
29
  it "returns a URI when the url is set" do
30
30
  trend = Twitter::Trend.new(:url => "http://twitter.com/search/?q=%23sevenwordsaftersex")
31
- expect(trend.uri).to be_a URI
31
+ expect(trend.uri).to be_a Addressable::URI
32
32
  expect(trend.uri.to_s).to eq("http://twitter.com/search/?q=%23sevenwordsaftersex")
33
33
  end
34
34
  it "returns nil when the url is not set" do
@@ -310,12 +310,29 @@ describe Twitter::Tweet do
310
310
  Twitter::Tweet.new(:id => 28669546014).urls
311
311
  expect($stderr.string).to match(/To get urls, you must pass `:include_entities => true` when requesting the Twitter::Tweet\./)
312
312
  end
313
+
314
+ it "can handle strange urls" do
315
+ urls_array = [
316
+ {
317
+ :url => "http://with_underscore.example.com/t.co",
318
+ :expanded_url => "http://with_underscore.example.com/expanded",
319
+ :display_url => "with_underscore.example.com/expanded…",
320
+ :indices => [10, 33],
321
+ }
322
+ ]
323
+ tweet = Twitter::Tweet.new(:id => 28669546014, :entities => {:urls => urls_array})
324
+ uri = tweet.uris.first
325
+ expect{ uri.url }.to_not raise_error
326
+ expect{ uri.expanded_url }.to_not raise_error
327
+ expect{ uri.display_url }.to_not raise_error
328
+ end
329
+
313
330
  end
314
331
 
315
332
  describe "#uri" do
316
333
  it "returns the URI to the tweet" do
317
334
  tweet = Twitter::Tweet.new(:id => 28669546014, :user => {:id => 7505382, :screen_name => "sferik"})
318
- expect(tweet.uri).to be_a URI
335
+ expect(tweet.uri).to be_a Addressable::URI
319
336
  expect(tweet.uri.to_s).to eq("https://twitter.com/sferik/status/28669546014")
320
337
  end
321
338
  end
@@ -68,11 +68,11 @@ describe Twitter::User do
68
68
  describe "#profile_banner_uri" do
69
69
  it "accepts utf8 urls" do
70
70
  user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581©_normal.png")
71
- expect(user.profile_banner_uri).to be_a URI
71
+ expect(user.profile_banner_uri).to be_a Addressable::URI
72
72
  end
73
73
  it "returns a URI when profile_banner_url is set" do
74
74
  user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
75
- expect(user.profile_banner_uri).to be_a URI
75
+ expect(user.profile_banner_uri).to be_a Addressable::URI
76
76
  end
77
77
  it "returns nil when profile_banner_uri is not set" do
78
78
  user = Twitter::User.new(:id => 7505382)
@@ -117,11 +117,11 @@ describe Twitter::User do
117
117
  describe "#profile_banner_uri_https" do
118
118
  it "accepts utf8 urls" do
119
119
  user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581©_normal.png")
120
- expect(user.profile_banner_uri_https).to be_a URI
120
+ expect(user.profile_banner_uri_https).to be_a Addressable::URI
121
121
  end
122
122
  it "returns a URI when profile_banner_url is set" do
123
123
  user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
124
- expect(user.profile_banner_uri_https).to be_a URI
124
+ expect(user.profile_banner_uri_https).to be_a Addressable::URI
125
125
  end
126
126
  it "returns nil when created_at is not set" do
127
127
  user = Twitter::User.new(:id => 7505382)
@@ -177,11 +177,11 @@ describe Twitter::User do
177
177
  describe "#profile_image_uri" do
178
178
  it "accepts utf8 urls" do
179
179
  user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://si0.twimg.com/profile_images/7505382/1348266581©_normal.png")
180
- expect(user.profile_image_uri).to be_a URI
180
+ expect(user.profile_image_uri).to be_a Addressable::URI
181
181
  end
182
182
  it "returns a URI when profile_image_url_https is set" do
183
183
  user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png")
184
- expect(user.profile_image_uri).to be_a URI
184
+ expect(user.profile_image_uri).to be_a Addressable::URI
185
185
  end
186
186
  it "returns nil when created_at is not set" do
187
187
  user = Twitter::User.new(:id => 7505382)
@@ -222,11 +222,11 @@ describe Twitter::User do
222
222
  describe "#profile_image_uri_https" do
223
223
  it "accepts utf8 urls" do
224
224
  user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://si0.twimg.com/profile_images/7505382/1348266581©_normal.png")
225
- expect(user.profile_image_uri_https).to be_a URI
225
+ expect(user.profile_image_uri_https).to be_a Addressable::URI
226
226
  end
227
227
  it "returns a URI when profile_image_url_https is set" do
228
228
  user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png")
229
- expect(user.profile_image_uri_https).to be_a URI
229
+ expect(user.profile_image_uri_https).to be_a Addressable::URI
230
230
  end
231
231
  it "returns nil when created_at is not set" do
232
232
  user = Twitter::User.new(:id => 7505382)
@@ -305,7 +305,7 @@ describe Twitter::User do
305
305
  describe "#uri" do
306
306
  it "returns the URI to the user" do
307
307
  user = Twitter::User.new(:id => 7505382, :screen_name => "sferik")
308
- expect(user.uri).to be_a URI
308
+ expect(user.uri).to be_a Addressable::URI
309
309
  expect(user.uri.to_s).to eq("https://twitter.com/sferik")
310
310
  end
311
311
  end
@@ -313,7 +313,7 @@ describe Twitter::User do
313
313
  describe "#website" do
314
314
  it "returns a URI when the url is set" do
315
315
  user = Twitter::User.new(:id => 7505382, :url => "https://github.com/sferik")
316
- expect(user.website).to be_a URI
316
+ expect(user.website).to be_a Addressable::URI
317
317
  expect(user.website.to_s).to eq("https://github.com/sferik")
318
318
  end
319
319
  it "returns nil when the url is not set" do
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitter
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.1
4
+ version: 5.1.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Erik Michaels-Ober
@@ -12,187 +13,215 @@ authors:
12
13
  autorequire:
13
14
  bindir: bin
14
15
  cert_chain:
15
- - |
16
- -----BEGIN CERTIFICATE-----
17
- MIIDLjCCAhagAwIBAgIBADANBgkqhkiG9w0BAQUFADA9MQ8wDQYDVQQDDAZzZmVy
18
- aWsxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2NvbTAe
19
- Fw0xMzAyMDMxMDAyMjdaFw0xNDAyMDMxMDAyMjdaMD0xDzANBgNVBAMMBnNmZXJp
20
- azEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29tMIIB
21
- IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl0x5dx8uKxi7TkrIuyBUTJVB
22
- v1o93nUB9j/y4M96gV2rYwAci1JPBseNd6Fybzjo3YGuHl7EQHuSHNaf1p2lxew/
23
- y60JXIJBBgPcDK/KCP4NUHofm0jfoYD+H5uNJfHCNq7/ZsTxOtE3Ra92s0BCMTpm
24
- wBMMlWR5MtdEhIYuBO4XhnejYgH0L/7BL2lymntVnsr/agdQoojQCN1IQmsRJvrR
25
- duZRO3tZvoIo1pBc4JEehDuqCeyBgPLOqMoKtQlold1TQs1kWUBK7KWMFEhKC/Kg
26
- zyzKRHQo9yDYwOvYngoBLY+T/lwCT4dyssdhzRbfnxAhaKu4SAssIwaC01yVowID
27
- AQABozkwNzAJBgNVHRMEAjAAMB0GA1UdDgQWBBS0ruDfRak5ci1OpDNX/ZdDEkIs
28
- iTALBgNVHQ8EBAMCBLAwDQYJKoZIhvcNAQEFBQADggEBAHHSMs/MP0sOaLkEv4Jo
29
- zvkm3qn5A6t0vaHx774cmejyMU+5wySxRezspL7ULh9NeuK2OhU+Oe3TpqrAg5TK
30
- R8GQILnVu2FemGA6sAkPDlcPtgA6ieI19PZOF6HVLmc/ID/dP/NgZWWzEeqQKmcK
31
- 2+HM+SEEDhZkScYekw4ZOe164ZtZG816oAv5x0pGitSIkumUp7V8iEZ/6ehr7Y9e
32
- XOg4eeun5L/JjmjARoW2kNdvkRD3c2EeSLqWvQRsBlypHfhs6JJuLlyZPGhU3R/v
33
- Sf3lVKpBCWgRpGTvy45XVpB+59y33PJmEuQ1PTEOYvQyao9UKMAAaAN/7qWQtjl0
34
- hlw=
35
- -----END CERTIFICATE-----
16
+ - !binary |-
17
+ LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURMakNDQWhhZ0F3SUJB
18
+ Z0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREE5TVE4d0RRWURWUVFEREFaelpt
19
+ VnkKYVdzeEZUQVRCZ29Ka2lhSmsvSXNaQUVaRmdWbmJXRnBiREVUTUJFR0Nn
20
+ bVNKb21UOGl4a0FSa1dBMk52YlRBZQpGdzB4TXpBeU1ETXhNREF5TWpkYUZ3
21
+ MHhOREF5TURNeE1EQXlNamRhTUQweER6QU5CZ05WQkFNTUJuTm1aWEpwCmF6
22
+ RVZNQk1HQ2dtU0pvbVQ4aXhrQVJrV0JXZHRZV2xzTVJNd0VRWUtDWkltaVpQ
23
+ eUxHUUJHUllEWTI5dE1JSUIKSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4
24
+ QU1JSUJDZ0tDQVFFQWwweDVkeDh1S3hpN1Rrckl1eUJVVEpWQgp2MW85M25V
25
+ QjlqL3k0TTk2Z1Yycll3QWNpMUpQQnNlTmQ2RnliempvM1lHdUhsN0VRSHVT
26
+ SE5hZjFwMmx4ZXcvCnk2MEpYSUpCQmdQY0RLL0tDUDROVUhvZm0wamZvWUQr
27
+ SDV1TkpmSENOcTcvWnNUeE90RTNSYTkyczBCQ01UcG0Kd0JNTWxXUjVNdGRF
28
+ aElZdUJPNFhobmVqWWdIMEwvN0JMMmx5bW50Vm5zci9hZ2RRb29qUUNOMUlR
29
+ bXNSSnZyUgpkdVpSTzN0WnZvSW8xcEJjNEpFZWhEdXFDZXlCZ1BMT3FNb0t0
30
+ UWxvbGQxVFFzMWtXVUJLN0tXTUZFaEtDL0tnCnp5ektSSFFvOXlEWXdPdllu
31
+ Z29CTFkrVC9sd0NUNGR5c3NkaHpSYmZueEFoYUt1NFNBc3NJd2FDMDF5Vm93
32
+ SUQKQVFBQm96a3dOekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJTMHJ1
33
+ RGZSYWs1Y2kxT3BETlgvWmRERWtJcwppVEFMQmdOVkhROEVCQU1DQkxBd0RR
34
+ WUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFISFNNcy9NUDBzT2FMa0V2NEpvCnp2
35
+ a20zcW41QTZ0MHZhSHg3NzRjbWVqeU1VKzV3eVN4UmV6c3BMN1VMaDlOZXVL
36
+ Mk9oVStPZTNUcHFyQWc1VEsKUjhHUUlMblZ1MkZlbUdBNnNBa1BEbGNQdGdB
37
+ NmllSTE5UFpPRjZIVkxtYy9JRC9kUC9OZ1pXV3pFZXFRS21jSwoyK0hNK1NF
38
+ RURoWmtTY1lla3c0Wk9lMTY0WnRaRzgxNm9BdjV4MHBHaXRTSWt1bVVwN1Y4
39
+ aUVaLzZlaHI3WTllClhPZzRlZXVuNUwvSmptakFSb1cya05kdmtSRDNjMkVl
40
+ U0xxV3ZRUnNCbHlwSGZoczZKSnVMbHlaUEdoVTNSL3YKU2YzbFZLcEJDV2dS
41
+ cEdUdnk0NVhWcEIrNTl5MzNQSm1FdVExUFRFT1l2UXlhbzlVS01BQWFBTi83
42
+ cVdRdGpsMApobHc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
36
43
  date: 2013-11-28 00:00:00.000000000 Z
37
44
  dependencies:
38
45
  - !ruby/object:Gem::Dependency
39
46
  name: addressable
40
47
  requirement: !ruby/object:Gem::Requirement
48
+ none: false
41
49
  requirements:
42
- - - "~>"
50
+ - - ~>
43
51
  - !ruby/object:Gem::Version
44
52
  version: '2.3'
45
53
  type: :runtime
46
54
  prerelease: false
47
55
  version_requirements: !ruby/object:Gem::Requirement
56
+ none: false
48
57
  requirements:
49
- - - "~>"
58
+ - - ~>
50
59
  - !ruby/object:Gem::Version
51
60
  version: '2.3'
52
61
  - !ruby/object:Gem::Dependency
53
62
  name: buftok
54
63
  requirement: !ruby/object:Gem::Requirement
64
+ none: false
55
65
  requirements:
56
- - - "~>"
66
+ - - ~>
57
67
  - !ruby/object:Gem::Version
58
68
  version: 0.2.0
59
69
  type: :runtime
60
70
  prerelease: false
61
71
  version_requirements: !ruby/object:Gem::Requirement
72
+ none: false
62
73
  requirements:
63
- - - "~>"
74
+ - - ~>
64
75
  - !ruby/object:Gem::Version
65
76
  version: 0.2.0
66
77
  - !ruby/object:Gem::Dependency
67
78
  name: descendants_tracker
68
79
  requirement: !ruby/object:Gem::Requirement
80
+ none: false
69
81
  requirements:
70
- - - "~>"
82
+ - - ~>
71
83
  - !ruby/object:Gem::Version
72
84
  version: 0.0.1
73
85
  type: :runtime
74
86
  prerelease: false
75
87
  version_requirements: !ruby/object:Gem::Requirement
88
+ none: false
76
89
  requirements:
77
- - - "~>"
90
+ - - ~>
78
91
  - !ruby/object:Gem::Version
79
92
  version: 0.0.1
80
93
  - !ruby/object:Gem::Dependency
81
94
  name: equalizer
82
95
  requirement: !ruby/object:Gem::Requirement
96
+ none: false
83
97
  requirements:
84
- - - "~>"
98
+ - - ~>
85
99
  - !ruby/object:Gem::Version
86
100
  version: 0.0.7
87
101
  type: :runtime
88
102
  prerelease: false
89
103
  version_requirements: !ruby/object:Gem::Requirement
104
+ none: false
90
105
  requirements:
91
- - - "~>"
106
+ - - ~>
92
107
  - !ruby/object:Gem::Version
93
108
  version: 0.0.7
94
109
  - !ruby/object:Gem::Dependency
95
110
  name: faraday
96
111
  requirement: !ruby/object:Gem::Requirement
112
+ none: false
97
113
  requirements:
98
- - - ">="
114
+ - - ! '>='
99
115
  - !ruby/object:Gem::Version
100
116
  version: '0.8'
101
- - - "<"
117
+ - - <
102
118
  - !ruby/object:Gem::Version
103
119
  version: '0.10'
104
120
  type: :runtime
105
121
  prerelease: false
106
122
  version_requirements: !ruby/object:Gem::Requirement
123
+ none: false
107
124
  requirements:
108
- - - ">="
125
+ - - ! '>='
109
126
  - !ruby/object:Gem::Version
110
127
  version: '0.8'
111
- - - "<"
128
+ - - <
112
129
  - !ruby/object:Gem::Version
113
130
  version: '0.10'
114
131
  - !ruby/object:Gem::Dependency
115
132
  name: http
116
133
  requirement: !ruby/object:Gem::Requirement
134
+ none: false
117
135
  requirements:
118
- - - "~>"
136
+ - - ~>
119
137
  - !ruby/object:Gem::Version
120
138
  version: 0.5.0
121
139
  type: :runtime
122
140
  prerelease: false
123
141
  version_requirements: !ruby/object:Gem::Requirement
142
+ none: false
124
143
  requirements:
125
- - - "~>"
144
+ - - ~>
126
145
  - !ruby/object:Gem::Version
127
146
  version: 0.5.0
128
147
  - !ruby/object:Gem::Dependency
129
148
  name: http_parser.rb
130
149
  requirement: !ruby/object:Gem::Requirement
150
+ none: false
131
151
  requirements:
132
- - - "~>"
152
+ - - ~>
133
153
  - !ruby/object:Gem::Version
134
154
  version: 0.5.0
135
155
  type: :runtime
136
156
  prerelease: false
137
157
  version_requirements: !ruby/object:Gem::Requirement
158
+ none: false
138
159
  requirements:
139
- - - "~>"
160
+ - - ~>
140
161
  - !ruby/object:Gem::Version
141
162
  version: 0.5.0
142
163
  - !ruby/object:Gem::Dependency
143
164
  name: json
144
165
  requirement: !ruby/object:Gem::Requirement
166
+ none: false
145
167
  requirements:
146
- - - "~>"
168
+ - - ~>
147
169
  - !ruby/object:Gem::Version
148
170
  version: '1.8'
149
171
  type: :runtime
150
172
  prerelease: false
151
173
  version_requirements: !ruby/object:Gem::Requirement
174
+ none: false
152
175
  requirements:
153
- - - "~>"
176
+ - - ~>
154
177
  - !ruby/object:Gem::Version
155
178
  version: '1.8'
156
179
  - !ruby/object:Gem::Dependency
157
180
  name: memoizable
158
181
  requirement: !ruby/object:Gem::Requirement
182
+ none: false
159
183
  requirements:
160
- - - "~>"
184
+ - - ~>
161
185
  - !ruby/object:Gem::Version
162
186
  version: 0.2.0
163
187
  type: :runtime
164
188
  prerelease: false
165
189
  version_requirements: !ruby/object:Gem::Requirement
190
+ none: false
166
191
  requirements:
167
- - - "~>"
192
+ - - ~>
168
193
  - !ruby/object:Gem::Version
169
194
  version: 0.2.0
170
195
  - !ruby/object:Gem::Dependency
171
196
  name: simple_oauth
172
197
  requirement: !ruby/object:Gem::Requirement
198
+ none: false
173
199
  requirements:
174
- - - "~>"
200
+ - - ~>
175
201
  - !ruby/object:Gem::Version
176
202
  version: 0.2.0
177
203
  type: :runtime
178
204
  prerelease: false
179
205
  version_requirements: !ruby/object:Gem::Requirement
206
+ none: false
180
207
  requirements:
181
- - - "~>"
208
+ - - ~>
182
209
  - !ruby/object:Gem::Version
183
210
  version: 0.2.0
184
211
  - !ruby/object:Gem::Dependency
185
212
  name: bundler
186
213
  requirement: !ruby/object:Gem::Requirement
214
+ none: false
187
215
  requirements:
188
- - - "~>"
216
+ - - ~>
189
217
  - !ruby/object:Gem::Version
190
218
  version: '1.0'
191
219
  type: :development
192
220
  prerelease: false
193
221
  version_requirements: !ruby/object:Gem::Requirement
222
+ none: false
194
223
  requirements:
195
- - - "~>"
224
+ - - ~>
196
225
  - !ruby/object:Gem::Version
197
226
  version: '1.0'
198
227
  description: A Ruby interface to the Twitter API.
@@ -202,13 +231,13 @@ executables: []
202
231
  extensions: []
203
232
  extra_rdoc_files: []
204
233
  files:
205
- - ".yardopts"
234
+ - .yardopts
206
235
  - CHANGELOG.md
207
236
  - CONTRIBUTING.md
208
237
  - LICENSE.md
209
238
  - README.md
210
239
  - Rakefile
211
- - lib/twitter.rb
240
+ - twitter.gemspec
212
241
  - lib/twitter/arguments.rb
213
242
  - lib/twitter/base.rb
214
243
  - lib/twitter/basic_user.rb
@@ -219,13 +248,12 @@ files:
219
248
  - lib/twitter/creatable.rb
220
249
  - lib/twitter/cursor.rb
221
250
  - lib/twitter/direct_message.rb
222
- - lib/twitter/entity.rb
223
251
  - lib/twitter/entity/hashtag.rb
224
252
  - lib/twitter/entity/symbol.rb
225
253
  - lib/twitter/entity/uri.rb
226
254
  - lib/twitter/entity/user_mention.rb
255
+ - lib/twitter/entity.rb
227
256
  - lib/twitter/enumerable.rb
228
- - lib/twitter/error.rb
229
257
  - lib/twitter/error/already_favorited.rb
230
258
  - lib/twitter/error/already_posted.rb
231
259
  - lib/twitter/error/already_retweeted.rb
@@ -241,10 +269,11 @@ files:
241
269
  - lib/twitter/error/too_many_requests.rb
242
270
  - lib/twitter/error/unauthorized.rb
243
271
  - lib/twitter/error/unprocessable_entity.rb
272
+ - lib/twitter/error.rb
244
273
  - lib/twitter/factory.rb
245
- - lib/twitter/geo.rb
246
274
  - lib/twitter/geo/point.rb
247
275
  - lib/twitter/geo/polygon.rb
276
+ - lib/twitter/geo.rb
248
277
  - lib/twitter/geo_factory.rb
249
278
  - lib/twitter/geo_results.rb
250
279
  - lib/twitter/identity.rb
@@ -300,6 +329,7 @@ files:
300
329
  - lib/twitter/tweet.rb
301
330
  - lib/twitter/user.rb
302
331
  - lib/twitter/version.rb
332
+ - lib/twitter.rb
303
333
  - spec/fixtures/already_favorited.json
304
334
  - spec/fixtures/already_posted.json
305
335
  - spec/fixtures/already_retweeted.json
@@ -418,30 +448,30 @@ files:
418
448
  - spec/twitter/tweet_spec.rb
419
449
  - spec/twitter/user_spec.rb
420
450
  - spec/twitter_spec.rb
421
- - twitter.gemspec
422
451
  homepage: http://sferik.github.com/twitter/
423
452
  licenses:
424
453
  - MIT
425
- metadata: {}
426
454
  post_install_message:
427
455
  rdoc_options: []
428
456
  require_paths:
429
457
  - lib
430
458
  required_ruby_version: !ruby/object:Gem::Requirement
459
+ none: false
431
460
  requirements:
432
- - - ">="
461
+ - - ! '>='
433
462
  - !ruby/object:Gem::Version
434
463
  version: '0'
435
464
  required_rubygems_version: !ruby/object:Gem::Requirement
465
+ none: false
436
466
  requirements:
437
- - - ">="
467
+ - - ! '>='
438
468
  - !ruby/object:Gem::Version
439
469
  version: 1.3.5
440
470
  requirements: []
441
471
  rubyforge_project:
442
- rubygems_version: 2.2.0
472
+ rubygems_version: 1.8.23
443
473
  signing_key:
444
- specification_version: 4
474
+ specification_version: 3
445
475
  summary: A Ruby interface to the Twitter API.
446
476
  test_files:
447
477
  - spec/fixtures/already_favorited.json
metadata.gz.sig CHANGED
Binary file
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: cd3b043b736ba3c54df5a11613f965fe07d5cdd1
4
- data.tar.gz: 6877cd5f7ce89f0426c782f3422f43121bde323d
5
- SHA512:
6
- metadata.gz: 3bf02c9354b02c672eb6f2aa5be96c2c31c56b14062eb9b5d6e88289191e47d70e25afe261e9d4cb4dbc778fee756fa5f4743fe10254af65f1dd9677d9987b09
7
- data.tar.gz: 497a677015108a2867a605bf27df26e2e8cb4d1b5998464171e58d06fcbcb929ade0d1523e0b905c27d98582c22f943d3419e2f08d13aa79766ba3adf4bbdb1a
Binary file