uploadcare-ruby 2.1.2 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/gem-push.yml +20 -0
  3. data/.github/workflows/ruby.yml +52 -0
  4. data/.gitignore +13 -6
  5. data/.rspec +2 -0
  6. data/.rubocop.yml +33 -0
  7. data/.yardopts +4 -0
  8. data/CHANGELOG.md +29 -47
  9. data/DEVELOPMENT.md +18 -0
  10. data/Gemfile +2 -0
  11. data/LICENSE +1 -1
  12. data/README.md +433 -527
  13. data/Rakefile +5 -5
  14. data/bin/console +15 -0
  15. data/bin/setup +8 -0
  16. data/lib/uploadcare/api/api.rb +25 -0
  17. data/lib/uploadcare/client/conversion/base_conversion_client.rb +59 -0
  18. data/lib/uploadcare/client/conversion/document_conversion_client.rb +41 -0
  19. data/lib/uploadcare/client/conversion/video_conversion_client.rb +46 -0
  20. data/lib/uploadcare/client/file_client.rb +44 -0
  21. data/lib/uploadcare/client/file_list_client.rb +46 -0
  22. data/lib/uploadcare/client/group_client.rb +45 -0
  23. data/lib/uploadcare/client/multipart_upload/chunks_client.rb +57 -0
  24. data/lib/uploadcare/client/multipart_upload_client.rb +64 -0
  25. data/lib/uploadcare/client/project_client.rb +18 -0
  26. data/lib/uploadcare/client/rest_client.rb +74 -0
  27. data/lib/uploadcare/client/rest_group_client.rb +23 -0
  28. data/lib/uploadcare/client/upload_client.rb +43 -0
  29. data/lib/uploadcare/client/uploader_client.rb +101 -0
  30. data/lib/uploadcare/client/webhook_client.rb +47 -0
  31. data/lib/uploadcare/concern/error_handler.rb +54 -0
  32. data/lib/uploadcare/concern/throttle_handler.rb +25 -0
  33. data/lib/uploadcare/concern/upload_error_handler.rb +32 -0
  34. data/lib/uploadcare/entity/conversion/base_converter.rb +36 -0
  35. data/lib/uploadcare/entity/conversion/document_converter.rb +15 -0
  36. data/lib/uploadcare/entity/conversion/video_converter.rb +15 -0
  37. data/lib/uploadcare/entity/decorator/paginator.rb +79 -0
  38. data/lib/uploadcare/entity/entity.rb +18 -0
  39. data/lib/uploadcare/entity/file.rb +106 -0
  40. data/lib/uploadcare/entity/file_list.rb +31 -0
  41. data/lib/uploadcare/entity/group.rb +40 -0
  42. data/lib/uploadcare/entity/group_list.rb +24 -0
  43. data/lib/uploadcare/entity/project.rb +13 -0
  44. data/lib/uploadcare/entity/uploader.rb +81 -0
  45. data/lib/uploadcare/entity/webhook.rb +14 -0
  46. data/lib/uploadcare/exception/conversion_error.rb +8 -0
  47. data/lib/uploadcare/exception/request_error.rb +9 -0
  48. data/lib/uploadcare/exception/throttle_error.rb +16 -0
  49. data/lib/uploadcare/param/authentication_header.rb +25 -0
  50. data/lib/uploadcare/param/conversion/document/processing_job_url_builder.rb +39 -0
  51. data/lib/uploadcare/param/conversion/video/processing_job_url_builder.rb +64 -0
  52. data/lib/uploadcare/param/param.rb +10 -0
  53. data/lib/uploadcare/param/secure_auth_header.rb +37 -0
  54. data/lib/uploadcare/param/simple_auth_header.rb +14 -0
  55. data/lib/uploadcare/param/upload/signature_generator.rb +24 -0
  56. data/lib/uploadcare/param/upload/upload_params_generator.rb +23 -0
  57. data/lib/uploadcare/param/user_agent.rb +21 -0
  58. data/lib/uploadcare/ruby/version.rb +5 -0
  59. data/lib/uploadcare.rb +36 -32
  60. data/uploadcare-ruby.gemspec +50 -37
  61. metadata +107 -113
  62. data/.travis.yml +0 -26
  63. data/UPGRADE_NOTES.md +0 -36
  64. data/lib/uploadcare/api/file_api.rb +0 -7
  65. data/lib/uploadcare/api/file_list_api.rb +0 -19
  66. data/lib/uploadcare/api/file_storage_api.rb +0 -34
  67. data/lib/uploadcare/api/group_api.rb +0 -38
  68. data/lib/uploadcare/api/group_list_api.rb +0 -17
  69. data/lib/uploadcare/api/project_api.rb +0 -9
  70. data/lib/uploadcare/api/raw_api.rb +0 -38
  71. data/lib/uploadcare/api/uploading_api/upload_params.rb +0 -72
  72. data/lib/uploadcare/api/uploading_api.rb +0 -71
  73. data/lib/uploadcare/api/validators/file_list_options_validator.rb +0 -73
  74. data/lib/uploadcare/api/validators/group_list_options_validator.rb +0 -49
  75. data/lib/uploadcare/api.rb +0 -26
  76. data/lib/uploadcare/errors/errors.rb +0 -64
  77. data/lib/uploadcare/resources/file.rb +0 -164
  78. data/lib/uploadcare/resources/file_list.rb +0 -14
  79. data/lib/uploadcare/resources/group.rb +0 -115
  80. data/lib/uploadcare/resources/group_list.rb +0 -14
  81. data/lib/uploadcare/resources/project.rb +0 -13
  82. data/lib/uploadcare/resources/resource_list.rb +0 -83
  83. data/lib/uploadcare/rest/auth/auth.rb +0 -31
  84. data/lib/uploadcare/rest/auth/secure.rb +0 -43
  85. data/lib/uploadcare/rest/auth/simple.rb +0 -16
  86. data/lib/uploadcare/rest/connections/api_connection.rb +0 -53
  87. data/lib/uploadcare/rest/connections/upload_connection.rb +0 -22
  88. data/lib/uploadcare/rest/middlewares/auth_middleware.rb +0 -24
  89. data/lib/uploadcare/rest/middlewares/parse_json_middleware.rb +0 -33
  90. data/lib/uploadcare/rest/middlewares/raise_error_middleware.rb +0 -21
  91. data/lib/uploadcare/utils/parser.rb +0 -71
  92. data/lib/uploadcare/utils/user_agent.rb +0 -44
  93. data/lib/uploadcare/version.rb +0 -3
  94. data/spec/api/file_list_api_spec.rb +0 -95
  95. data/spec/api/file_storage_api_spec.rb +0 -88
  96. data/spec/api/group_list_api_spec.rb +0 -59
  97. data/spec/api/raw_api_spec.rb +0 -25
  98. data/spec/api/uploading_api/upload_params_spec.rb +0 -99
  99. data/spec/api/uploading_api_spec.rb +0 -59
  100. data/spec/resources/file_list_spec.rb +0 -25
  101. data/spec/resources/file_spec.rb +0 -223
  102. data/spec/resources/group_list_spec.rb +0 -25
  103. data/spec/resources/group_spec.rb +0 -101
  104. data/spec/resources/operations_spec.rb +0 -59
  105. data/spec/resources/project_spec.rb +0 -21
  106. data/spec/rest/api_connection_spec.rb +0 -68
  107. data/spec/rest/auth/secure_spec.rb +0 -66
  108. data/spec/rest/auth/simple_spec.rb +0 -31
  109. data/spec/rest/errors_spec.rb +0 -75
  110. data/spec/rest/upload_connection_spec.rb +0 -19
  111. data/spec/shared/resource_list.rb +0 -188
  112. data/spec/spec_helper.rb +0 -54
  113. data/spec/uploadcare_spec.rb +0 -43
  114. data/spec/utils/parser_spec.rb +0 -85
  115. data/spec/utils/user_agent_spec.rb +0 -46
  116. data/spec/view.png +0 -0
  117. data/spec/view2.jpg +0 -0
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Uploadcare
4
+ module Entity
5
+ # This serializer lets user upload files by various means, and usually returns an array of files
6
+ # @see https://uploadcare.com/api-refs/upload-api/#tag/Upload
7
+ class Uploader < Entity
8
+ client_service UploaderClient
9
+ client_service MultipartUploaderClient, only: :upload, prefix: :multipart
10
+
11
+ attr_entity :files
12
+ has_entities :files, as: Uploadcare::Entity::File
13
+
14
+ # Upload file or group of files from array, File, or url
15
+ #
16
+ # @param object [Array], [String] or [File]
17
+ # @param [Hash] options options for upload
18
+ # @option options [Boolean] :store (false) whether to store file on servers.
19
+ def self.upload(object, **options)
20
+ if big_file?(object)
21
+ multipart_upload(object, **options)
22
+ elsif file?(object)
23
+ upload_file(object, **options)
24
+ elsif object.is_a?(Array)
25
+ upload_files(object, **options)
26
+ elsif object.is_a?(String)
27
+ upload_from_url(object, **options)
28
+ else
29
+ raise ArgumentError, "Expected input to be a file/Array/URL, given: `#{object}`"
30
+ end
31
+ end
32
+
33
+ # upload single file
34
+ def self.upload_file(file, **options)
35
+ response = UploaderClient.new.upload_many([file], **options)
36
+ Uploadcare::Entity::File.info(response.success.to_a.flatten[-1])
37
+ end
38
+
39
+ # upload multiple files
40
+ def self.upload_files(arr, **options)
41
+ response = UploaderClient.new.upload_many(arr, **options)
42
+ response.success.map { |pair| Uploadcare::Entity::File.new(uuid: pair[1], original_filename: pair[0]) }
43
+ end
44
+
45
+ # upload file of size above 10mb (involves multipart upload)
46
+ def self.multipart_upload(file, **options, &block)
47
+ response = MultipartUploaderClient.new.upload(file, **options, &block)
48
+ Uploadcare::Entity::File.new(response.success)
49
+ end
50
+
51
+ # upload files from url
52
+ # @param url [String]
53
+ def self.upload_from_url(url, **options)
54
+ response = UploaderClient.new.upload_from_url(url, **options)
55
+ return response.success[:token] unless response.success[:files]
56
+
57
+ response.success[:files].map { |file_data| Uploadcare::Entity::File.new(file_data) }
58
+ end
59
+
60
+ # gets a status of upload from url
61
+ # @param url [String]
62
+ def self.get_upload_from_url_status(token)
63
+ UploaderClient.new.get_upload_from_url_status(token)
64
+ end
65
+
66
+ class << self
67
+ private
68
+
69
+ # check if object is a file
70
+ def file?(object)
71
+ object.respond_to?(:path) && ::File.exist?(object.path)
72
+ end
73
+
74
+ # check if object needs to be uploaded using multipart upload
75
+ def big_file?(object)
76
+ file?(object) && object.size >= Uploadcare.config.multipart_size_threshold
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Uploadcare
4
+ module Entity
5
+ # This serializer is responsible for webhook handling
6
+ #
7
+ # @see https://uploadcare.com/docs/api_reference/rest/webhooks/
8
+ class Webhook < Entity
9
+ client_service WebhookClient
10
+
11
+ attr_entity :id, :created, :updated, :event, :target_url, :project, :is_active
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Uploadcare
4
+ module Exception
5
+ # Standard error for invalid API conversion responses
6
+ class ConversionError < StandardError; end
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Uploadcare
4
+ module Exception
5
+ # Standard error for invalid API responses
6
+ class RequestError < StandardError
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Uploadcare
4
+ module Exception
5
+ # Exception for throttled requests
6
+ class ThrottleError < StandardError
7
+ attr_reader :timeout
8
+
9
+ # @param timeout [Float] Amount of seconds the request have been throttled for
10
+ def initialize(timeout = 10.0)
11
+ super
12
+ @timeout = timeout
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'digest/md5'
4
+ require 'param/secure_auth_header'
5
+ require 'param/simple_auth_header'
6
+
7
+ module Uploadcare
8
+ module Param
9
+ # This object returns headers needed for authentication
10
+ # This authentication method is more secure, but more tedious
11
+ class AuthenticationHeader
12
+ # @see https://uploadcare.com/docs/api_reference/rest/requests_auth/#auth-uploadcare
13
+ def self.call(**options)
14
+ case Uploadcare.config.auth_type
15
+ when 'Uploadcare'
16
+ SecureAuthHeader.call(**options)
17
+ when 'Uploadcare.Simple'
18
+ SimpleAuthHeader.call
19
+ else
20
+ raise ArgumentError, "Unknown auth_scheme: '#{Uploadcare.config.auth_type}'"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Uploadcare
4
+ module Param
5
+ module Conversion
6
+ module Document
7
+ class ProcessingJobUrlBuilder
8
+ class << self
9
+ def call(uuid:, format: nil, page: nil)
10
+ [
11
+ uuid_part(uuid),
12
+ format_part(format),
13
+ page_part(page)
14
+ ].compact.join('-')
15
+ end
16
+
17
+ private
18
+
19
+ def uuid_part(uuid)
20
+ "#{uuid}/document/"
21
+ end
22
+
23
+ def format_part(format)
24
+ return if format.nil?
25
+
26
+ "/format/#{format}/"
27
+ end
28
+
29
+ def page_part(page)
30
+ return if page.nil?
31
+
32
+ "/page/#{page}/"
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Uploadcare
4
+ module Param
5
+ module Conversion
6
+ module Video
7
+ class ProcessingJobUrlBuilder
8
+ class << self
9
+ # rubocop:disable Metrics/ParameterLists
10
+ def call(uuid:, size: {}, quality: nil, format: nil, cut: {}, thumbs: {})
11
+ [
12
+ uuid_part(uuid),
13
+ size_part(size),
14
+ quality_part(quality),
15
+ format_part(format),
16
+ cut_part(cut),
17
+ thumbs_part(thumbs)
18
+ ].compact.join('-')
19
+ end
20
+ # rubocop:enable Metrics/ParameterLists
21
+
22
+ private
23
+
24
+ def uuid_part(uuid)
25
+ "#{uuid}/video/"
26
+ end
27
+
28
+ def size_part(size)
29
+ return if size.empty?
30
+
31
+ dimensions = "#{size[:width]}x#{size[:height]}" if size[:width] || size[:height]
32
+ resize_mode = (size[:resize_mode]).to_s
33
+ "/size/#{dimensions}/#{resize_mode}/".squeeze('/')
34
+ end
35
+
36
+ def quality_part(quality)
37
+ return if quality.nil?
38
+
39
+ "/quality/#{quality}/"
40
+ end
41
+
42
+ def format_part(format)
43
+ return if format.nil?
44
+
45
+ "/format/#{format}/"
46
+ end
47
+
48
+ def cut_part(cut)
49
+ return if cut.empty?
50
+
51
+ "/cut/#{cut[:start_time]}/#{cut[:length]}/"
52
+ end
53
+
54
+ def thumbs_part(thumbs)
55
+ return if thumbs.empty?
56
+
57
+ "/thumbs~#{thumbs[:N]}/#{thumbs[:number]}/".squeeze('/')
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Uploadcare
4
+ # @abstract
5
+ # This module is responsible for everything related to generation of request params -
6
+ # such as authentication headers, signatures and serialized uploads
7
+ module Param
8
+ end
9
+ include Param
10
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'digest/md5'
4
+
5
+ module Uploadcare
6
+ module Param
7
+ # This object returns headers needed for authentication
8
+ # This authentication method is more secure, but more tedious
9
+ class SecureAuthHeader
10
+ # @see https://uploadcare.com/docs/api_reference/rest/requests_auth/#auth-uploadcare
11
+ def self.call(**options)
12
+ @method = options[:method]
13
+ @body = options[:content] || ''
14
+ @content_type = options[:content_type]
15
+ @uri = options[:uri]
16
+ @date_for_header = timestamp
17
+ {
18
+ 'Date': @date_for_header,
19
+ 'Authorization': "Uploadcare #{Uploadcare.config.public_key}:#{signature}"
20
+ }
21
+ end
22
+
23
+ class << self
24
+ def signature
25
+ content_md5 = Digest::MD5.hexdigest(@body)
26
+ sign_string = [@method, content_md5, @content_type, @date_for_header, @uri].join("\n")
27
+ digest = OpenSSL::Digest.new('sha1')
28
+ OpenSSL::HMAC.hexdigest(digest, Uploadcare.config.secret_key, sign_string)
29
+ end
30
+
31
+ def timestamp
32
+ Time.now.gmtime.strftime('%a, %d %b %Y %H:%M:%S GMT')
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Uploadcare
4
+ module Param
5
+ # This object returns simple header for authentication
6
+ # Simple header is relatively unsafe, but can be useful for debug and development
7
+ class SimpleAuthHeader
8
+ # @see https://uploadcare.com/docs/api_reference/rest/requests_auth/#auth-simple
9
+ def self.call
10
+ { 'Authorization': "Uploadcare.Simple #{Uploadcare.config.public_key}:#{Uploadcare.config.secret_key}" }
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'digest'
4
+
5
+ module Uploadcare
6
+ module Param
7
+ module Upload
8
+ # This class generates signatures for protected uploads
9
+ class SignatureGenerator
10
+ # @see https://uploadcare.com/docs/api_reference/upload/signed_uploads/
11
+ # @return [Hash] signature and its expiration time
12
+ def self.call
13
+ expires_at = Time.now.to_i + Uploadcare.config.upload_signature_lifetime
14
+ to_sign = Uploadcare.config.secret_key + expires_at.to_s
15
+ signature = Digest::MD5.hexdigest(to_sign)
16
+ {
17
+ 'signature': signature,
18
+ 'expire': expires_at
19
+ }
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'digest'
4
+
5
+ module Uploadcare
6
+ module Param
7
+ module Upload
8
+ # This class generates body params for uploads
9
+ class UploadParamsGenerator
10
+ # @see https://uploadcare.com/docs/api_reference/upload/request_based/
11
+ def self.call(store = 'auto')
12
+ store = '1' if store == true
13
+ store = '0' if store == false
14
+ {
15
+ 'UPLOADCARE_PUB_KEY' => Uploadcare.config.public_key,
16
+ 'UPLOADCARE_STORE' => store,
17
+ 'signature' => (Upload::SignatureGenerator.call if Uploadcare.config.sign_uploads)
18
+ }.reject { |_k, v| v.nil? }
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'uploadcare'
4
+
5
+ module Uploadcare
6
+ module Param
7
+ # This header is added to track libraries using Uploadcare API
8
+ class UserAgent
9
+ # Generate header from Gem's config
10
+ #
11
+ # @example Uploadcare::Param::UserAgent.call
12
+ # UploadcareRuby/3.0.0-dev/Pubkey_(Ruby/2.6.3;UploadcareRuby)
13
+ def self.call
14
+ framework_data = Uploadcare.config.framework_data || ''
15
+ framework_data_string = "; #{Uploadcare.config.framework_data}" unless framework_data.empty?
16
+ public_key = Uploadcare.config.public_key
17
+ "UploadcareRuby/#{VERSION}/#{public_key} (Ruby/#{RUBY_VERSION}#{framework_data_string})"
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Uploadcare
4
+ VERSION = '3.1.0'
5
+ end
data/lib/uploadcare.rb CHANGED
@@ -1,38 +1,42 @@
1
- require 'faraday'
2
- require 'json'
3
- require 'ostruct'
1
+ # frozen_string_literal: true
4
2
 
5
- require_relative 'uploadcare/api'
6
- require_relative 'uploadcare/version'
3
+ # Gem version
4
+ require 'ruby/version'
7
5
 
8
- module Uploadcare
9
- DEFAULT_SETTINGS = {
10
- public_key: 'demopublickey',
11
- private_key: 'demoprivatekey',
12
- upload_url_base: 'https://upload.uploadcare.com',
13
- api_url_base: 'https://api.uploadcare.com',
14
- static_url_base: 'https://ucarecdn.com',
15
- api_version: '0.5',
16
- cache_files: true,
17
- autostore: :auto,
18
- auth_scheme: :secure,
19
- }
6
+ # Exceptions
7
+ require 'exception/throttle_error'
8
+ require 'exception/request_error'
20
9
 
21
- def self.default_settings
22
- DEFAULT_SETTINGS
23
- end
10
+ # Entities
11
+ require 'entity/entity'
12
+ require 'entity/file'
13
+ require 'entity/file_list'
14
+ require 'entity/group'
15
+ require 'entity/group_list'
16
+ require 'entity/project'
17
+ require 'entity/uploader'
18
+ require 'entity/webhook'
24
19
 
25
- def self.user_agent(options={})
26
- warn '[DEPRECATION] `Uploadcare::user_agent` method is deprecated and will be removed in version 3.0'
27
- UserAgent.new.call(options)
28
- end
20
+ # General api
21
+ require 'api/api'
29
22
 
30
- def self.const_missing(name)
31
- if name == :USER_AGENT
32
- warn '[DEPRECATION] `Uploadcare::USER_AGENT` constant is deprecated and will be removed in version 3.0'
33
- "uploadcare-ruby/#{Gem.ruby_version}/#{Uploadcare::VERSION}"
34
- else
35
- super
36
- end
37
- end
23
+ # Ruby wrapper for Uploadcare API
24
+ #
25
+ # @see https://uploadcare.com/docs/api_reference
26
+ module Uploadcare
27
+ extend Dry::Configurable
28
+ setting :public_key, ENV.fetch('UPLOADCARE_PUBLIC_KEY')
29
+ setting :secret_key, ENV.fetch('UPLOADCARE_SECRET_KEY')
30
+ setting :auth_type, 'Uploadcare'
31
+ setting :multipart_size_threshold, 100 * 1024 * 1024
32
+ setting :rest_api_root, 'https://api.uploadcare.com'
33
+ setting :upload_api_root, 'https://upload.uploadcare.com'
34
+ setting :max_request_tries, 100
35
+ setting :base_request_sleep, 1 # seconds
36
+ setting :max_request_sleep, 60.0 # seconds
37
+ setting :sign_uploads, false
38
+ setting :upload_signature_lifetime, 30 * 60 # seconds
39
+ setting :max_throttle_attempts, 5
40
+ setting :upload_threads, 2 # used for multiupload only ATM
41
+ setting :framework_data, ''
38
42
  end
@@ -1,38 +1,51 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/uploadcare/version', __FILE__)
3
-
4
- Gem::Specification.new do |gem|
5
- gem.name = 'uploadcare-ruby'
6
- gem.authors = ['@rastyagaev (Vadim Rastyagaev)',
7
- '@dimituri (Dimitry Solovyov)',
8
- '@romanonthego (Roman Dubinin)',
9
- '@vizvamitra (Dmitrii Krasnov)']
10
- gem.email = ['hello@uploadcare.com']
11
- gem.summary = 'Ruby gem for Uploadcare'
12
- gem.description = <<-EOF
13
- Ruby wrapper for Uploadcare service API.
14
- Full documentations on APIs can be found
15
- at https://uploadcare.com/documentation/rest/
16
- and https://uploadcare.com/documentation/upload/
17
- EOF
18
- gem.metadata = { 'github' => 'https://github.com/uploadcare/uploadcare-ruby',
19
- 'issue_tracker' => 'https://github.com/uploadcare/uploadcare-ruby/issues',
20
- }
21
- gem.homepage = 'https://uploadcare.com/documentation/libs/'
22
- gem.license = 'MIT'
23
-
24
- gem.files = `git ls-files`.split($\)
25
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
26
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
27
- gem.require_paths = ['lib']
28
- gem.version = Uploadcare::VERSION
29
- gem.add_runtime_dependency 'faraday', '~> 0.8'
30
- gem.add_runtime_dependency 'faraday_middleware', '~> 0.9'
31
- gem.add_runtime_dependency 'multipart-post'
32
- gem.add_runtime_dependency 'mime-types'
33
-
34
- gem.add_development_dependency 'rspec', '~> 3.6'
35
- gem.add_development_dependency 'rake'
36
- gem.add_development_dependency 'pry'
37
- gem.add_development_dependency 'coveralls'
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'uploadcare/ruby/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'uploadcare-ruby'
9
+ spec.version = Uploadcare::VERSION
10
+ spec.authors = ['Stepan Redka']
11
+ spec.email = ['stepan.redka@railsmuffin.com']
12
+
13
+ spec.summary = 'Ruby wrapper for uploadcare API'
14
+ spec.description = spec.summary
15
+ spec.homepage = 'https://github.com/uploadcare/uploadcare-ruby'
16
+ spec.license = 'MIT'
17
+
18
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
19
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
20
+ if spec.respond_to?(:metadata)
21
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
22
+
23
+ spec.metadata['homepage_uri'] = spec.homepage
24
+ spec.metadata['source_code_uri'] = 'https://github.com/uploadcare/uploadcare-ruby'
25
+ spec.metadata['changelog_uri'] = 'https://github.com/uploadcare/uploadcare-ruby/CHANGELOG.md'
26
+ else
27
+ raise 'RubyGems 2.0 or newer is required to protect against ' \
28
+ 'public gem pushes.'
29
+ end
30
+
31
+ # Specify which files should be added to the gem when it is released.
32
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
33
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
34
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
35
+ end
36
+ spec.bindir = 'exe'
37
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
38
+ spec.require_paths = ['lib', 'lib/uploadcare', 'lib/uploadcare/rest']
39
+
40
+ spec.add_dependency 'api_struct', '~> 1.0.1'
41
+ spec.add_dependency 'dry-configurable', '~> 0.9.0'
42
+ spec.add_dependency 'parallel'
43
+ spec.add_dependency 'retries'
44
+
45
+ spec.add_development_dependency 'byebug'
46
+ spec.add_development_dependency 'rake', '~> 13.0'
47
+ spec.add_development_dependency 'rspec', '~> 3.0'
48
+ spec.add_development_dependency 'rubocop'
49
+ spec.add_development_dependency 'vcr'
50
+ spec.add_development_dependency 'webmock'
38
51
  end