twurl 0.9.5 → 0.9.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 833ceb46ed18d449d282d4ef9ae820c31887ffe617a9d717f0319ba72071dc47
4
- data.tar.gz: 59e6d7960c134eb4815108da8da7f7118c14e61cef3e6b322bb78ba2fff2b313
3
+ metadata.gz: 9120a8daa09529e8e484e2bc15da6042ea1ced1100b1a23c8ea2a2481e194f2b
4
+ data.tar.gz: 549c25417c3e00e35bab15fb9299a6103b3a01717a3a56b9c78cc388cd1c20fb
5
5
  SHA512:
6
- metadata.gz: d8bf943ed2cc90fb627edf90d4c0c991df8076e0c055c7b1be2ae8fd7b36f7f04f0ad2a273fb8d09489ae7beb08a60995119646ea366641b321e2e16dfb8f6e5
7
- data.tar.gz: 6f22c2a87d1a6c0b1db8b696d0a3a79984b532497de618a2d17dc6f1677d91242818a9933e5e6255adb37cf19f049c8e4e72758b59011920b10ff6ab6941a3b1
6
+ metadata.gz: 3df6c245df33cccfaec2ed2a28d370b5ed3de81a1f96bfb17b5852b4cce209bae975bdbfe9d9fdf7bd117f8bbd8826b4265a3acb5cc509103032ebcf2dc405ac
7
+ data.tar.gz: 300977ca1182b02d1f1673754b49e015a9e38b5c064967044f5243252097e6caf29a4d37ec0c385e35460a1db34265e2d7947449427abf83bc868d75cfb5833f
data/CONTRIBUTING.md CHANGED
@@ -9,7 +9,21 @@ We follow the [GitHub Flow Workflow](https://guides.github.com/introduction/flow
9
9
  1. Fork the project
10
10
  2. Check out the `master` branch
11
11
  3. Create a feature branch
12
- 4. Write code and tests for your change
12
+ 4. Write code and tests for your change
13
+
14
+ ```sh
15
+ $ cd ./twurl
16
+
17
+ # install twurl from source
18
+ $ bundle install
19
+
20
+ # run twurl from source
21
+ $ bundle exec twurl -v
22
+
23
+ # run tests
24
+ $ bundle exec rake
25
+ ```
26
+
13
27
  5. From your branch, make a pull request against `twitter/twurl/master`
14
28
  6. Work with repo maintainers to get your change reviewed
15
29
  7. Wait for your change to be pulled into `twitter/twurl/master`
data/INSTALL.md CHANGED
@@ -10,7 +10,7 @@ $ gem install twurl
10
10
  ```sh
11
11
  # verify installation
12
12
  $ twurl -v
13
- 0.9.4
13
+ 0.9.7
14
14
  ```
15
15
 
16
16
  ## Install from source
@@ -32,5 +32,5 @@ If you don't want to install Twurl globally on your system, use `--path` [option
32
32
  ```
33
33
  $ bundle install --path path/to/directory
34
34
  $ bundle exec twurl -v
35
- 0.9.4
35
+ 0.9.7
36
36
  ```
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # Twurl
2
2
 
3
3
  [![MIT License](https://img.shields.io/apm/l/atomic-design-ui.svg?)](https://github.com/twitter/twurl/blob/master/LICENSE)
4
- [![Gem Version](https://badge.fury.io/rb/twurl.svg)](https://badge.fury.io/rb/twurl)
4
+ [![Gem Version](https://badge.fury.io/rb/twurl.svg)](https://badge.fury.io/rb/twurl)
5
+ [![CI](https://github.com/twitter/twurl/actions/workflows/ci.yml/badge.svg)](https://github.com/twitter/twurl/actions/workflows/ci.yml)
5
6
 
6
7
  Twurl is like curl, but tailored specifically for the Twitter API.
7
8
  It knows how to grant an access token to a client application for
@@ -97,7 +98,7 @@ This will print a pair of consumer_key and its associated bearer token. Note, to
97
98
  You can access different hosts for other Twitter APIs using the -H flag.
98
99
 
99
100
  ```sh
100
- twurl -H "ads-api.twitter.com" "/5/accounts"
101
+ twurl -H "ads-api.twitter.com" "/7/accounts"
101
102
  ```
102
103
 
103
104
  ## Uploading Media
@@ -164,7 +165,7 @@ twurl accounts
164
165
 
165
166
  ### Profiles and Bearer Tokens
166
167
 
167
- While changing the default profile allows you to select which access token (OAuth1.0a) to use, bearer tokens don't link to any user profiles as the Application-only authentication doesn't require user context. That is, you can make an application-only request regardless of your default profile if you specify the `-c` (--consumer-key) option once you generate a bearer token with this consumer key. By default, twurl reads the current profile's consumer key and its associated bearer token from `~/.twurlrc` file.
168
+ While changing the default profile allows you to select which access token (OAuth1.0a) to use, bearer tokens don't link to any user profiles as the Application-only authentication doesn't require user context. That is, you can make an application-only request regardless of your default profile if you specify the `-c` (`--consumer-key`) option once you generate a bearer token with this consumer key. By default, twurl reads the current profile's consumer key and its associated bearer token from `~/.twurlrc` file.
168
169
 
169
170
  ## Contributors
170
171
 
@@ -15,9 +15,13 @@ module Twurl
15
15
  end
16
16
  when 1
17
17
  if options.path
18
- OAuthClient.rcfile.alias(options.subcommands.first, options.path)
18
+ if Twurl::CLI::SUPPORTED_COMMANDS.include?(options.subcommands.first)
19
+ raise Exception, "ERROR: '#{options.subcommands.first}' is reserved for commands. Please use different alias name."
20
+ else
21
+ OAuthClient.rcfile.alias(options.subcommands.first, options.path)
22
+ end
19
23
  else
20
- CLI.puts NO_PATH_PROVIDED_MESSAGE
24
+ raise Exception, NO_PATH_PROVIDED_MESSAGE
21
25
  end
22
26
  end
23
27
  end
@@ -57,12 +57,9 @@ module Twurl
57
57
  http.set_debug_output(Twurl.options.debug_output_io) if Twurl.options.trace
58
58
  http.read_timeout = http.open_timeout = Twurl.options.timeout || 60
59
59
  http.open_timeout = Twurl.options.connection_timeout if Twurl.options.connection_timeout
60
- # Only override if Net::HTTP support max_retries (since Ruby >= 2.5)
61
- http.max_retries = 0 if http.respond_to?(:max_retries=)
62
- if Twurl.options.ssl?
63
- http.use_ssl = true
64
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
65
- end
60
+ http.max_retries = 0
61
+ http.use_ssl = true
62
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
66
63
  http
67
64
  end
68
65
 
data/lib/twurl/cli.rb CHANGED
@@ -6,8 +6,6 @@ module Twurl
6
6
  PROTOCOL_PATTERN = /^\w+:\/\//
7
7
  README = File.dirname(__FILE__) + '/../../README.md'
8
8
  @output ||= STDOUT
9
- class NoPathFound < Exception
10
- end
11
9
 
12
10
  class << self
13
11
  attr_accessor :output
@@ -15,8 +13,8 @@ module Twurl
15
13
  def run(args)
16
14
  begin
17
15
  options = parse_options(args)
18
- rescue NoPathFound => e
19
- exit
16
+ rescue Twurl::Exception => exception
17
+ abort(exception.message)
20
18
  end
21
19
  dispatch(options)
22
20
  end
@@ -67,7 +65,6 @@ Supported Commands: #{SUPPORTED_COMMANDS.sort.join(', ')}
67
65
 
68
66
  o.section "Authorization options:" do
69
67
  username
70
- password
71
68
  consumer_key
72
69
  consumer_secret
73
70
  access_token
@@ -81,7 +78,6 @@ Supported Commands: #{SUPPORTED_COMMANDS.sort.join(', ')}
81
78
  headers
82
79
  host
83
80
  quiet
84
- disable_ssl
85
81
  request_method
86
82
  help
87
83
  version
@@ -96,14 +92,22 @@ Supported Commands: #{SUPPORTED_COMMANDS.sort.join(', ')}
96
92
  end
97
93
  end
98
94
 
99
- arguments = option_parser.parse!(args)
95
+ begin
96
+ arguments = option_parser.parse!(args)
97
+ rescue OptionParser::InvalidOption
98
+ raise Exception "ERROR: undefined option"
99
+ rescue Twurl::Exception
100
+ raise
101
+ rescue
102
+ raise Exception "ERROR: invalid argument"
103
+ end
100
104
  Twurl.options.command = extract_command!(arguments)
101
105
  Twurl.options.path = extract_path!(arguments)
102
106
  Twurl.options.subcommands = arguments
103
107
 
104
108
  if Twurl.options.command == DEFAULT_COMMAND and Twurl.options.path.nil? and Twurl.options.args.empty?
105
109
  CLI.puts option_parser
106
- raise NoPathFound, "No path found"
110
+ raise Exception, "No path found"
107
111
  end
108
112
 
109
113
  Twurl.options
@@ -165,7 +169,7 @@ Supported Commands: #{SUPPORTED_COMMANDS.sort.join(', ')}
165
169
 
166
170
  def escape_params(params)
167
171
  CGI::parse(params).map do |key, value|
168
- "#{CGI.escape key}=#{CGI.escape value.first}"
172
+ "#{CGI.escape(key)}=#{CGI.escape(value.first)}"
169
173
  end.join("&")
170
174
  end
171
175
  end
@@ -219,12 +223,6 @@ Supported Commands: #{SUPPORTED_COMMANDS.sort.join(', ')}
219
223
  end
220
224
  end
221
225
 
222
- def password
223
- on('-p', '--password [password]', 'Password of account to authorize (required)') do |password|
224
- options.password = password ? password : CLI.prompt_for('Password')
225
- end
226
- end
227
-
228
226
  def trace
229
227
  on('-t', '--[no-]trace', 'Trace request/response traffic (default: --no-trace)') do |trace|
230
228
  options.trace = trace
@@ -233,12 +231,12 @@ Supported Commands: #{SUPPORTED_COMMANDS.sort.join(', ')}
233
231
 
234
232
  def data
235
233
  on('-d', '--data [data]', 'Sends the specified data in a POST request to the HTTP server.') do |data|
236
- if options.args.count { |item| /content-type: (.*)/i.match(item) } > 0
237
- options.data[data] = nil
234
+ if options.args.count { |item| /^content-type:\s+application\/json/i.match(item) } > 0
235
+ options.json_data = true
236
+ options.data = data
238
237
  else
239
- data.split('&').each do |pair|
240
- key, value = pair.split('=', 2)
241
- options.data[key] = value
238
+ CGI.parse(data).each_pair do |key, value|
239
+ options.data[key] = value.first
242
240
  end
243
241
  end
244
242
  end
@@ -246,9 +244,13 @@ Supported Commands: #{SUPPORTED_COMMANDS.sort.join(', ')}
246
244
 
247
245
  def raw_data
248
246
  on('-r', '--raw-data [data]', 'Sends the specified data as it is in a POST request to the HTTP server.') do |data|
249
- CGI::parse(data).each_pair do |key, value|
250
- options.data[key] = value.first
247
+ if options.raw_data
248
+ raise Exception, "ERROR: can't specify '-r' option more than once"
249
+ elsif options.args.include?('-d') || options.args.include?('--data')
250
+ raise Exception, "ERROR: can't use '-r' and '-d' options together"
251
251
  end
252
+ options.raw_data = true
253
+ options.data = data
252
254
  end
253
255
  end
254
256
 
@@ -276,12 +278,6 @@ Supported Commands: #{SUPPORTED_COMMANDS.sort.join(', ')}
276
278
  end
277
279
  end
278
280
 
279
- def disable_ssl
280
- on('-U', '--no-ssl', 'Disable SSL (default: SSL is enabled)') do |use_ssl|
281
- options.protocol = 'http'
282
- end
283
- end
284
-
285
281
  def request_method
286
282
  on('-X', '--request-method [method]', 'Request method (default: GET)') do |request_method|
287
283
  options.request_method = request_method.downcase
@@ -297,7 +293,7 @@ Supported Commands: #{SUPPORTED_COMMANDS.sort.join(', ')}
297
293
 
298
294
  def version
299
295
  on_tail("-v", "--version", "Show version") do
300
- CLI.puts Version
296
+ CLI.puts "twurl version: #{Version}\nplatform: #{RUBY_ENGINE} #{RUBY_VERSION} (#{RUBY_PLATFORM})"
301
297
  exit
302
298
  end
303
299
  end
@@ -373,10 +369,6 @@ Supported Commands: #{SUPPORTED_COMMANDS.sort.join(', ')}
373
369
  "#{protocol}://#{host}"
374
370
  end
375
371
 
376
- def ssl?
377
- protocol == 'https'
378
- end
379
-
380
372
  def debug_output_io
381
373
  super || STDERR
382
374
  end
@@ -9,7 +9,11 @@ module Twurl
9
9
  end
10
10
 
11
11
  def load_from_options(options)
12
- if rcfile.has_oauth_profile_for_username_with_consumer_key?(options.username, options.consumer_key)
12
+ if options.command == 'request' && has_oauth_options?(options)
13
+ load_new_client_from_oauth_options(options)
14
+ elsif options.command == 'request' && options.app_only && options.consumer_key
15
+ load_client_for_non_profile_app_only_auth(options)
16
+ elsif rcfile.has_oauth_profile_for_username_with_consumer_key?(options.username, options.consumer_key)
13
17
  load_client_for_username_and_consumer_key(options.username, options.consumer_key)
14
18
  elsif options.username
15
19
  load_client_for_username(options.username)
@@ -17,10 +21,6 @@ module Twurl
17
21
  load_client_for_app_only_auth(options, options.consumer_key)
18
22
  elsif options.command == 'authorize'
19
23
  load_new_client_from_options(options)
20
- elsif options.command == 'request' && has_oauth_options?(options)
21
- load_new_client_from_oauth_options(options)
22
- elsif options.command == 'request' && options.app_only && options.consumer_key
23
- load_client_for_non_profile_app_only_auth(options)
24
24
  else
25
25
  load_default_client(options)
26
26
  end
@@ -52,7 +52,7 @@ module Twurl
52
52
  end
53
53
 
54
54
  def load_new_client_from_options(options)
55
- new(options.oauth_client_options.merge('password' => options.password))
55
+ new(options.oauth_client_options)
56
56
  end
57
57
 
58
58
  def load_new_client_from_oauth_options(options)
@@ -106,10 +106,9 @@ module Twurl
106
106
 
107
107
  OAUTH_CLIENT_OPTIONS = %w[username consumer_key consumer_secret token secret]
108
108
  attr_reader *OAUTH_CLIENT_OPTIONS
109
- attr_reader :username, :password
109
+ attr_reader :username
110
110
  def initialize(options = {})
111
111
  @username = options['username']
112
- @password = options['password']
113
112
  @consumer_key = options['consumer_key']
114
113
  @consumer_secret = options['consumer_secret']
115
114
  @token = options['token']
@@ -163,16 +162,20 @@ module Twurl
163
162
 
164
163
  request.body = multipart_body.join
165
164
  request.content_type = "multipart/form-data, boundary=\"#{boundary}\""
166
- elsif request.content_type && options.data
167
- request.body = options.data.keys.first
165
+ elsif options.json_data
166
+ request.body = options.data
168
167
  elsif options.data
169
- request.content_type = "application/x-www-form-urlencoded"
170
- if options.data.length == 1 && options.data.values.first == nil
171
- request.body = options.data.keys.first
168
+ request.content_type = "application/x-www-form-urlencoded" unless request.content_type
169
+ if options.raw_data
170
+ request.body = options.data
172
171
  else
173
- request.body = options.data.map do |key, value|
174
- "#{key}=#{CGI.escape value}"
175
- end.join("&")
172
+ begin
173
+ request.body = options.data.map do |key, value|
174
+ "#{key}" + (value.nil? ? "" : "=#{CGI.escape(value)}")
175
+ end.join("&")
176
+ rescue
177
+ raise Exception, "ERROR: failed to parse POST request body"
178
+ end
176
179
  end
177
180
  end
178
181
  request
@@ -192,7 +195,7 @@ module Twurl
192
195
 
193
196
  def exchange_credentials_for_access_token
194
197
  response = begin
195
- consumer.token_request(:post, consumer.access_token_path, nil, {}, client_auth_parameters)
198
+ consumer.token_request(:post, consumer.access_token_path, nil, {})
196
199
  rescue OAuth::Unauthorized
197
200
  perform_pin_authorize_workflow
198
201
  end
@@ -200,14 +203,14 @@ module Twurl
200
203
  @secret = response[:oauth_token_secret]
201
204
  end
202
205
 
203
- def client_auth_parameters
204
- {'x_auth_username' => username, 'x_auth_password' => password, 'x_auth_mode' => 'client_auth'}
205
- end
206
-
207
206
  def perform_pin_authorize_workflow
208
207
  @request_token = consumer.get_request_token
209
208
  CLI.puts("Go to #{generate_authorize_url} and paste in the supplied PIN")
210
- pin = STDIN.gets
209
+ begin
210
+ pin = STDIN.gets.chomp
211
+ rescue SystemExit, Interrupt
212
+ raise Exception, "Operation cancelled"
213
+ end
211
214
  access_token = @request_token.get_access_token(:oauth_verifier => pin.chomp)
212
215
  {:oauth_token => access_token.token, :oauth_token_secret => access_token.secret}
213
216
  end
@@ -217,7 +220,7 @@ module Twurl
217
220
  params = request['Authorization'].sub(/^OAuth\s+/, '').split(/,\s+/).map { |p|
218
221
  k, v = p.split('=')
219
222
  v =~ /"(.*?)"/
220
- "#{k}=#{CGI::escape($1)}"
223
+ "#{k}=#{CGI.escape($1)}"
221
224
  }.join('&')
222
225
  "#{Twurl.options.base_url}#{request.path}?#{params}"
223
226
  end
@@ -265,12 +268,9 @@ module Twurl
265
268
  consumer.http.set_debug_output(Twurl.options.debug_output_io) if Twurl.options.trace
266
269
  consumer.http.read_timeout = consumer.http.open_timeout = Twurl.options.timeout || 60
267
270
  consumer.http.open_timeout = Twurl.options.connection_timeout if Twurl.options.connection_timeout
268
- # Only override if Net::HTTP support max_retries (since Ruby >= 2.5)
269
- consumer.http.max_retries = 0 if consumer.http.respond_to?(:max_retries=)
270
- if Twurl.options.ssl?
271
- consumer.http.use_ssl = true
272
- consumer.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
273
- end
271
+ consumer.http.max_retries = 0
272
+ consumer.http.use_ssl = true
273
+ consumer.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
274
274
  end
275
275
 
276
276
  def consumer
data/lib/twurl/rcfile.rb CHANGED
@@ -72,7 +72,7 @@ module Twurl
72
72
  end
73
73
 
74
74
  def aliases
75
- data['aliases']
75
+ data['aliases'] ||= {}
76
76
  end
77
77
 
78
78
  def bearer_token(consumer_key, bearer_token)
@@ -22,11 +22,11 @@ module Twurl
22
22
  }
23
23
  }
24
24
  rescue URI::InvalidURIError
25
- CLI.puts INVALID_URI_MESSAGE
25
+ raise Exception, INVALID_URI_MESSAGE
26
26
  rescue Net::ReadTimeout
27
- CLI.puts READ_TIMEOUT_MESSAGE
27
+ raise Exception, READ_TIMEOUT_MESSAGE
28
28
  rescue Net::OpenTimeout
29
- CLI.puts OPEN_TIMEOUT_MESSAGE
29
+ raise Exception, OPEN_TIMEOUT_MESSAGE
30
30
  end
31
31
  end
32
32
 
data/lib/twurl/version.rb CHANGED
@@ -2,7 +2,7 @@ module Twurl
2
2
  class Version
3
3
  MAJOR = 0 unless defined? Twurl::Version::MAJOR
4
4
  MINOR = 9 unless defined? Twurl::Version::MINOR
5
- PATCH = 5 unless defined? Twurl::Version::PATCH
5
+ PATCH = 7 unless defined? Twurl::Version::PATCH
6
6
  PRE = nil unless defined? Twurl::Version::PRE # Time.now.to_i.to_s
7
7
 
8
8
  class << self
data/twurl.gemspec CHANGED
@@ -1,22 +1,22 @@
1
- # coding: utf-8
2
1
  lib = File.expand_path('../lib', __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'twurl/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
6
  spec.add_dependency 'oauth', '~> 0.4'
7
+ spec.add_dependency 'ostruct', '>= 0.3.3'
8
8
  spec.authors = ["Marcel Molina", "Erik Michaels-Ober", "@TwitterDev team"]
9
9
  spec.description = %q{Curl for the Twitter API}
10
- spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
11
- spec.extra_rdoc_files = %w(CODE_OF_CONDUCT.md CONTRIBUTING.md INSTALL.md LICENSE README.md)
12
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.start_with?('test/') }
13
- spec.homepage = 'http://github.com/twitter/twurl'
10
+ spec.bindir = 'bin'
11
+ spec.executables << 'twurl'
12
+ spec.extra_rdoc_files = Dir["*.md", "LICENSE"]
13
+ spec.files = Dir["*.md", "LICENSE", "twurl.gemspec", "bin/*", "lib/**/*"]
14
+ spec.homepage = 'https://github.com/twitter/twurl'
14
15
  spec.licenses = ['MIT']
15
16
  spec.name = 'twurl'
16
17
  spec.rdoc_options = ['--title', 'twurl -- OAuth-enabled curl for the Twitter API', '--main', 'README.md', '--line-numbers', '--inline-source']
17
18
  spec.require_paths = ['lib']
18
- spec.required_ruby_version = '>= 2.4.0'
19
- spec.rubyforge_project = 'twurl'
19
+ spec.required_ruby_version = '>= 2.5.0'
20
20
  spec.summary = spec.description
21
21
  spec.version = Twurl::Version
22
22
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twurl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.5
4
+ version: 0.9.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcel Molina
8
8
  - Erik Michaels-Ober
9
9
  - "@TwitterDev team"
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-12-26 00:00:00.000000000 Z
13
+ date: 2023-04-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: oauth
@@ -26,8 +26,22 @@ dependencies:
26
26
  - - "~>"
27
27
  - !ruby/object:Gem::Version
28
28
  version: '0.4'
29
+ - !ruby/object:Gem::Dependency
30
+ name: ostruct
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 0.3.3
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.3.3
29
43
  description: Curl for the Twitter API
30
- email:
44
+ email:
31
45
  executables:
32
46
  - twurl
33
47
  extensions: []
@@ -35,20 +49,14 @@ extra_rdoc_files:
35
49
  - CODE_OF_CONDUCT.md
36
50
  - CONTRIBUTING.md
37
51
  - INSTALL.md
38
- - LICENSE
39
52
  - README.md
53
+ - LICENSE
40
54
  files:
41
- - ".github/ISSUE_TEMPLATE.md"
42
- - ".github/PULL_REQUEST_TEMPLATE.md"
43
- - ".gitignore"
44
- - ".travis.yml"
45
55
  - CODE_OF_CONDUCT.md
46
56
  - CONTRIBUTING.md
47
- - Gemfile
48
57
  - INSTALL.md
49
58
  - LICENSE
50
59
  - README.md
51
- - Rakefile
52
60
  - bin/twurl
53
61
  - lib/twurl.rb
54
62
  - lib/twurl/abstract_command_controller.rb
@@ -64,11 +72,11 @@ files:
64
72
  - lib/twurl/request_controller.rb
65
73
  - lib/twurl/version.rb
66
74
  - twurl.gemspec
67
- homepage: http://github.com/twitter/twurl
75
+ homepage: https://github.com/twitter/twurl
68
76
  licenses:
69
77
  - MIT
70
78
  metadata: {}
71
- post_install_message:
79
+ post_install_message:
72
80
  rdoc_options:
73
81
  - "--title"
74
82
  - twurl -- OAuth-enabled curl for the Twitter API
@@ -82,15 +90,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
82
90
  requirements:
83
91
  - - ">="
84
92
  - !ruby/object:Gem::Version
85
- version: 2.4.0
93
+ version: 2.5.0
86
94
  required_rubygems_version: !ruby/object:Gem::Requirement
87
95
  requirements:
88
96
  - - ">="
89
97
  - !ruby/object:Gem::Version
90
98
  version: '0'
91
99
  requirements: []
92
- rubygems_version: 3.0.3
93
- signing_key:
100
+ rubygems_version: 3.3.26
101
+ signing_key:
94
102
  specification_version: 4
95
103
  summary: Curl for the Twitter API
96
104
  test_files: []
@@ -1,13 +0,0 @@
1
- One line summary of the issue here.
2
-
3
- ### Expected behavior
4
-
5
- As concisely as possible, describe the expected behavior.
6
-
7
- ### Actual behavior
8
-
9
- As concisely as possible, describe the observed behavior.
10
-
11
- ### Steps to reproduce the behavior
12
-
13
- Please list all relevant steps to reproduce the observed behavior.
@@ -1,15 +0,0 @@
1
- Problem
2
-
3
- Explain the context and why you're making that change. What is the
4
- problem you're trying to solve? In some cases there is not a problem
5
- and this can be thought of being the motivation for your change.
6
-
7
- Solution
8
-
9
- Describe the modifications you've done.
10
-
11
- Result
12
-
13
- What will change as a result of your pull request? Note that sometimes
14
- this section is unnecessary because it is self-explanatory based on
15
- the solution.
data/.gitignore DELETED
@@ -1,40 +0,0 @@
1
- *.gem
2
- *.rbc
3
- *.sw[a-p]
4
- *.tmproj
5
- *.tmproject
6
- *.un~
7
- *~
8
- .Spotlight-V100
9
- .Trashes
10
- ._*
11
- .bundle
12
- .config
13
- .directory
14
- .elc
15
- .emacs.desktop
16
- .emacs.desktop.lock
17
- .redcar
18
- .yardoc
19
- Desktop.ini
20
- Gemfile.lock
21
- Icon?
22
- InstalledFiles
23
- Session.vim
24
- \#*\#
25
- _yardoc
26
- auto-save-list
27
- coverage
28
- doc
29
- lib/bundler/man
30
- pkg
31
- pkg/*
32
- rdoc
33
- spec/reports
34
- test/tmp
35
- test/version_tmp
36
- tmp
37
- tmtags
38
- tramp
39
- .vscode
40
- vendor
data/.travis.yml DELETED
@@ -1,23 +0,0 @@
1
- dist: xenial
2
- language: ruby
3
-
4
- before_install:
5
- - bundle config without 'development'
6
-
7
- branches:
8
- only:
9
- - master
10
-
11
- matrix:
12
- fast_finish: true
13
- allow_failures:
14
- - rvm: jruby-head
15
- - rvm: ruby-head
16
- - rvm: rbx-2
17
- include:
18
- - rvm: 2.6.5
19
- - rvm: 2.5.7
20
- - rvm: 2.4.9
21
- - rvm: jruby-head
22
- - rvm: ruby-head
23
- - rvm: rbx-2
data/Gemfile DELETED
@@ -1,13 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'jruby-openssl', :platforms => :jruby
4
- gem 'rake'
5
-
6
- group :test do
7
- gem 'coveralls'
8
- gem 'minitest', '>= 5'
9
- gem 'rr', '>= 1.1'
10
- gem 'simplecov', '>= 0.9'
11
- end
12
-
13
- gemspec
data/Rakefile DELETED
@@ -1,12 +0,0 @@
1
- require 'rake/testtask'
2
- require 'rubygems/package_task'
3
- require 'bundler'
4
-
5
- task :default => :test
6
-
7
- Rake::TestTask.new do |test|
8
- test.pattern = 'test/*_test.rb'
9
- test.verbose = true
10
- end
11
-
12
- Bundler::GemHelper.install_tasks