uploadcare-ruby 2.0.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2951151a5b47adb4e4dab2c8b3dcd225aacd9f1c
4
- data.tar.gz: 0c24efc39d8da2550ae26a3f129faf31326f1c6f
3
+ metadata.gz: a91d6bc58cb4485cc93ff080fa5f66040b6ab0f0
4
+ data.tar.gz: ae95eb7e6d60828a91883c1c481e7a469d49702a
5
5
  SHA512:
6
- metadata.gz: b26a5b79dec7109fdb14c80fe9335d29aff594fa98942ce99e361936fba03a535a3b055667ac91cd49e7eb6068440634472f24ef5a9cc53608ba0195c2bae906
7
- data.tar.gz: 65ee759c45a3122b551ff6fcdc237751a8b1252663d3cd360d54041e68fcc5a6a95d873c956ce351a4d24cd20634dcc9056e72da97f2e2831b4ade6a9abd6984
6
+ metadata.gz: e3b503ac19459939ec38af251f322c3804dec77546deeeba3d192757927a2cf4eef04d4f2b2ac2265efc42e42233f54d0f2fe66d2dcd29ced6ab18c65f6432c8
7
+ data.tar.gz: c08f3fb47d507b520c0859ee268ce8926b014fa7895b3a288f881586e857724a825f075899827f07a02c33228c790a26848728294cd5b8add0e323c14c49502f
data/.gitignore CHANGED
@@ -3,4 +3,5 @@ Gemfile.lock
3
3
  .ruby-version
4
4
 
5
5
  *.DS_Store
6
- *.gem
6
+ *.gem
7
+ coverage
data/.travis.yml CHANGED
@@ -1,9 +1,9 @@
1
+ # currently supported rubies: https://www.ruby-lang.org/en/downloads/branches/
2
+
1
3
  language: ruby
2
4
 
3
5
  rvm:
4
6
  - 1.9.3
5
- - 2.0
6
- - 2.1
7
7
  - 2.2
8
8
  - 2.3
9
9
  - 2.4
data/CHANGELOG.md CHANGED
@@ -1,23 +1,54 @@
1
1
  # Changelog
2
+ All notable changes to this project will be documented in this file.
2
3
 
3
- ### 2.0.0, 26.09.2017
4
+ The format is based now on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
+ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
4
6
 
5
- - There are **breaking** changes in this release, please read [upgrade notes](UPGRADE_NOTES.md#v1---v2)
6
- - Added support for `store` flag in [Upload API](https://uploadcare.com/documentation/upload/) methods
7
+ ## [Unreleased] - FIXME
8
+
9
+
10
+ ## [2.1.1] - 2018-05-24
11
+
12
+ ### Changed
13
+ - Allow user to override User-Agent header
14
+ - User-Agent format reports gem name, version and environment
15
+
16
+ ## 2.1.0 - 2018-04-23 [YANKED]
17
+
18
+ ## 2.0.0 - 2017-09-26
19
+
20
+ There are **breaking** changes in this release, please read [upgrade notes](UPGRADE_NOTES.md#v1---v2)
21
+
22
+ ### Added
23
+ - Support for `store` flag in [Upload API](https://uploadcare.com/documentation/upload/) methods
24
+ - Methods to store/delete multiple files at once: `Uploadcare::Api#store_files` & `Uploadcare::Api#delete_files`
25
+
26
+ ### Changed
7
27
  - Upgraded to REST API v0.5
8
28
  - All POST/PUT/DELETE params are now being sent as JSON instead of being form-encoded
9
- - Added methods to store/delete multiple files at once: `Uploadcare::Api#store_files` & `Uploadcare::Api#delete_files`
10
- - Changed pagination implementation for files and groups
29
+ - Pagination implementation for files and groups
11
30
 
12
- ### 1.1.0, 21.03.2017
31
+ ## 1.1.0 - 2017-03-21
13
32
 
14
- - Deprecated `Uploadcare::Api::File#copy` in favor of `#internal_copy` and `#external_copy`.
33
+ ### Added
15
34
  - Added to new methods to `Uploadcare::Api::File`, `#internal_copy` and `#external_copy`.
16
35
  - Added support of [secure authorization](https://uploadcare.com/documentation/rest/#request) for REST API. It is now used by default (can be overriden in config)
36
+
37
+ ### Fixed
17
38
  - Fixed middleware names that could break other gems ([#13](https://github.com/uploadcare/uploadcare-ruby/issues/13)).
18
39
 
40
+ ### Deprecated
41
+ - `Uploadcare::Api::File#copy` in favor of `#internal_copy` and `#external_copy`.
42
+
43
+
44
+ ## 1.0.6, 2017-01-30
45
+
46
+ ### Added
47
+ - Ruby version and public API key sent via User-Agent header (can be overriden in config)
48
+
49
+ ### Fixed
50
+ - Incorrect dependencies
19
51
 
20
- ### 1.0.6, 30.01.2017
21
52
 
22
- - Fixed incorrect dependencies
23
- - Added ruby version and public API key to User-Agent header (can be overriden in config)
53
+ [Unreleased]: https://github.com/uploadcare/uploadcare-ruby/compare/v2.1.1...HEAD
54
+ [2.1.1]: https://github.com/uploadcare/uploadcare-ruby/compare/v2.0.0...v2.1.1
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2017 Uploadcare, LLC
3
+ Copyright (c) 2018 Uploadcare, LLC
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,4 +1,13 @@
1
- [![Build Status](https://secure.travis-ci.org/uploadcare/uploadcare-ruby.png?branch=master)](http://travis-ci.org/uploadcare/uploadcare-ruby)
1
+ [![Build Status][travis-img]][travis]
2
+ [![Coverage Status][coverals-img]][coverals]
3
+ [![Uploadcare stack on StackShare][stack-img]][stack]
4
+
5
+ [travis-img]: https://secure.travis-ci.org/uploadcare/uploadcare-ruby.png?branch=master
6
+ [travis]: http://travis-ci.org/uploadcare/uploadcare-ruby
7
+ [coverals-img]: https://coveralls.io/repos/github/uploadcare/uploadcare-ruby/badge.svg?branch=master
8
+ [coverals]: https://coveralls.io/github/uploadcare/uploadcare-ruby?branch=master
9
+ [stack-img]: https://img.shields.io/badge/tech-stack-0690fa.svg?style=flat
10
+ [stack]: https://stackshare.io/uploadcare/stacks/
2
11
 
3
12
  A [Ruby](https://www.ruby-lang.org/en/) wrapper for [Uploadcare](https://uploadcare.com).
4
13
 
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env rake
2
2
  require 'bundler/gem_tasks'
3
3
  require 'rspec/core/rake_task'
4
+ require 'coveralls/rake/task'
4
5
 
5
6
  task :default => :spec
6
7
  RSpec::Core::RakeTask.new
8
+ Coveralls::RakeTask.new
data/lib/uploadcare.rb CHANGED
@@ -18,6 +18,7 @@ module Uploadcare
18
18
  auth_scheme: :secure,
19
19
  }
20
20
 
21
+ warn '[DEPRECATION] `Uploadcare::USER_AGENT` constant is deprecated and will be removed in version 3.0'
21
22
  USER_AGENT = "uploadcare-ruby/#{Gem.ruby_version}/#{Uploadcare::VERSION}"
22
23
 
23
24
  def self.default_settings
@@ -25,7 +26,7 @@ module Uploadcare
25
26
  end
26
27
 
27
28
  def self.user_agent(options={})
28
- return options[:user_agent].to_s if options[:user_agent]
29
- [USER_AGENT, options[:public_key]].join('/')
29
+ warn '[DEPRECATION] `Uploadcare::user_agent` method is deprecated and will be removed in version 3.0'
30
+ UserAgent.new.call(options)
30
31
  end
31
32
  end
@@ -10,7 +10,7 @@ module Uploadcare
10
10
  auth_strategy = Auth.strategy(options)
11
11
 
12
12
  frd.headers['Accept'] = "application/vnd.uploadcare-v#{options[:api_version]}+json"
13
- frd.headers['User-Agent'] = Uploadcare::user_agent(options)
13
+ frd.headers['User-Agent'] = UserAgent.new.call(options)
14
14
 
15
15
  # order of middleware matters!
16
16
 
@@ -48,7 +48,6 @@ module Uploadcare
48
48
  yield(request) if block_given?
49
49
  }
50
50
  end
51
-
52
51
  end
53
52
  end
54
53
  end
@@ -9,7 +9,7 @@ module Uploadcare
9
9
  super ssl: { ca_path: ca_path }, url: options[:upload_url_base] do |frd|
10
10
  frd.request :multipart
11
11
  frd.request :url_encoded
12
- frd.headers['User-Agent'] = Uploadcare::user_agent(options)
12
+ frd.headers['User-Agent'] = UserAgent.new.call(options)
13
13
 
14
14
  frd.response :uploadcare_raise_error
15
15
  frd.response :uploadcare_parse_json
@@ -0,0 +1,44 @@
1
+ module Uploadcare
2
+ # Determines User-Agent string either taking it from settings or building
3
+ # in accordance with common Uploadcare format
4
+ #
5
+ class UserAgent
6
+ # @param options [Hash]
7
+ # @option options [String] :user_agent (nil)
8
+ # @option options [String] :public_key (nil)
9
+ # @option options [String] :user_agent_environment (nil)
10
+ # @return [String]
11
+ #
12
+ def call(options)
13
+ return options[:user_agent].to_s if options[:user_agent]
14
+
15
+ user_agent_string(
16
+ options.fetch(:public_key, nil),
17
+ options.fetch(:user_agent_environment, {})
18
+ )
19
+ end
20
+
21
+ private
22
+
23
+ def user_agent_string(public_key, extensions)
24
+ format(
25
+ '%<library>s/%<pubkey>s (%<environment>s)',
26
+ library: versioned('UploadcareRuby', Uploadcare::VERSION),
27
+ pubkey: public_key,
28
+ environment: environment_string(extensions)
29
+ )
30
+ end
31
+
32
+ def environment_string(extensions)
33
+ [
34
+ versioned('Ruby', Gem.ruby_version),
35
+ versioned(extensions[:framework_name], extensions[:framework_version]),
36
+ versioned(extensions[:extension_name], extensions[:extension_version])
37
+ ].compact.join('; ')
38
+ end
39
+
40
+ def versioned(name, version = nil)
41
+ name ? [name, version].compact.join('/') : nil
42
+ end
43
+ end
44
+ end
@@ -1,3 +1,3 @@
1
1
  module Uploadcare
2
- VERSION = '2.0.0'.freeze
2
+ VERSION = '2.1.1'.freeze
3
3
  end
@@ -4,135 +4,133 @@ require 'socket'
4
4
  require 'securerandom'
5
5
 
6
6
  describe Uploadcare::Api::File do
7
- before :each do
8
- @api = API
9
- @file = @api.upload IMAGE_URL
10
- end
7
+ let(:api) { API }
8
+ let(:file) { api.upload IMAGE_URL }
11
9
 
12
- it 'file should be an instance of File' do
13
- @file.should be_an_instance_of Uploadcare::Api::File
10
+ it 'is an instance of File' do
11
+ expect(file).to be_an_instance_of Uploadcare::Api::File
14
12
  end
15
13
 
16
- it 'should not be initialized without correct UUID given' do
17
- expect {Uploadcare::Api::File.new(@api, "not-uuid")}.to raise_error
14
+ it 'is not initialized without correct UUID given' do
15
+ expect {Uploadcare::Api::File.new(api, "not-uuid")}.to raise_error NoMethodError
18
16
  end
19
17
 
20
- it 'should have valid url' do
21
- @file.uuid.should match UUID_REGEX
18
+ it 'has a valid url' do
19
+ expect(file.uuid).to match UUID_REGEX
22
20
  end
23
21
 
24
- it 'should return public url' do
25
- @file.should respond_to :cdn_url
26
- @file.should respond_to :public_url
22
+ it 'returns a public url' do
23
+ expect(file).to respond_to :cdn_url
24
+ expect(file).to respond_to :public_url
27
25
  end
28
26
 
29
- it 'public url should be valid url' do
30
- url = @file.cdn_url
27
+ it 'has a public url that is valid' do
28
+ url = file.cdn_url
31
29
  uri = URI.parse(url)
32
- uri.should be_kind_of(URI::HTTP)
30
+ expect(uri).to be_kind_of(URI::HTTP)
33
31
  end
34
32
 
35
- it 'should be able to load image data' do
36
- expect {@file.load_data}.to_not raise_error
33
+ it 'is able to load image data' do
34
+ expect {file.load_data}.to_not raise_error
37
35
  end
38
36
 
39
- it 'should store itself' do
40
- expect { @file.store }.to_not raise_error
37
+ it 'stores itself' do
38
+ expect { file.store }.to_not raise_error
41
39
  end
42
40
 
43
- it 'file should respond with nil for :stored? and :deleted? methods unless loaded' do
44
- @file.is_loaded?.should == false
45
- @file.is_stored?.should == nil
46
- @file.is_deleted?.should == nil
41
+ it 'responds with nil for :stored? and :deleted? methods unless loaded' do
42
+ expect(file.is_loaded?).to be false
43
+ expect(file.is_stored?).to be_nil
44
+ expect(file.is_deleted?).to be_nil
47
45
  end
48
46
 
49
- it 'should be able to tell thenever file was stored' do
50
- @file.load
51
- expect(@file.stored?).to be(true)
52
- wait_until_ready(@file)
53
- @file.delete
54
- expect(@file.stored?).to be(false)
47
+ it 'is able to tell thenever file was stored' do
48
+ file.load
49
+ expect(file.stored?).to be(true)
50
+ wait_until_ready(file)
51
+ file.delete
52
+ expect(file.stored?).to be(false)
55
53
  end
56
54
 
57
- it 'should delete itself' do
58
- expect { @file.delete }.to_not raise_error
55
+ it 'deletes itself' do
56
+ expect { file.delete }.to_not raise_error
59
57
  end
60
58
 
61
- it 'should be able to tell thenever file was deleted' do
62
- @file.load
63
- @file.is_deleted?.should == false
64
- wait_until_ready(@file)
65
- @file.delete
66
- @file.is_deleted?.should == true
59
+ it 'is able to tell thenever file was deleted' do
60
+ file.load
61
+ file.is_deleted?.should == false
62
+ wait_until_ready(file)
63
+ file.delete
64
+ expect(file.is_deleted?).to be true
67
65
  end
68
66
 
69
- it 'should construct file from uuid' do
70
- file = @api.file @file.uuid
71
- file.should be_kind_of(Uploadcare::Api::File)
67
+ it 'constructs file from uuid' do
68
+ uuid_file = api.file file.uuid
69
+ expect(uuid_file).to be_kind_of(Uploadcare::Api::File)
72
70
  end
73
71
 
74
- it 'should construct file from cdn url' do
75
- url = @file.cdn_url + "-/crop/150x150/center/-/format/png/"
76
- file = @api.file url
77
- file.should be_kind_of(Uploadcare::Api::File)
72
+ it 'constructs file from cdn url' do
73
+ url = file.cdn_url + "-/crop/150x150/center/-/format/png/"
74
+ file = api.file url
75
+ expect(file).to be_kind_of(Uploadcare::Api::File)
78
76
  end
79
77
 
80
- it 'shoul respond to datetime_ methods' do
81
- @file.load
82
- @file.should respond_to(:datetime_original)
83
- @file.should respond_to(:datetime_uploaded)
84
- @file.should respond_to(:datetime_stored)
85
- @file.should respond_to(:datetime_removed)
78
+ it 'responds to datetime_ methods' do
79
+ file.load
80
+ expect(file).to respond_to(:datetime_original)
81
+ expect(file).to respond_to(:datetime_uploaded)
82
+ expect(file).to respond_to(:datetime_stored)
83
+ expect(file).to respond_to(:datetime_removed)
86
84
  end
87
85
 
88
- it 'should respond to datetime_uploaded' do
89
- @file.load
90
- @file.datetime_uploaded.should be_kind_of(DateTime)
86
+ it 'responds to datetime_uploaded' do
87
+ file.load
88
+ expect(file.datetime_uploaded).to be_kind_of(DateTime)
91
89
  end
92
90
 
93
- it 'should respond to datetime_stored' do
94
- @file.load
95
- @file.store
96
- @file.datetime_stored.should be_kind_of(DateTime)
91
+ it 'responds to datetime_stored' do
92
+ file.load
93
+ file.store
94
+ expect(file.datetime_stored).to be_kind_of(DateTime)
97
95
  end
98
96
 
99
- it 'should respond to datetime_removed' do
100
- @file.load
101
- wait_until_ready(@file)
102
- @file.delete
103
- @file.datetime_removed.should be_kind_of(DateTime)
104
- @file.datetime_deleted.should be_kind_of(DateTime)
105
- @file.datetime_removed.should == @file.datetime_deleted
97
+ it 'responds to datetime_removed' do
98
+ file.load
99
+ wait_until_ready(file)
100
+ file.delete
101
+ expect(file.datetime_removed).to be_kind_of(DateTime)
102
+ expect(file.datetime_deleted).to be_kind_of(DateTime)
103
+ expect(file.datetime_removed).to eq file.datetime_deleted
106
104
  end
107
105
 
108
106
 
109
- it 'should copy itself' do
107
+ it 'copies itself' do
110
108
  # This can cause "File is not ready yet" error if ran too early
111
109
  # In this case we retry it 3 times before giving up
112
- result = retry_if(Uploadcare::Error::RequestError::BadRequest){@file.copy}
113
- result.should be_kind_of(Hash)
114
- result["type"].should == "file"
110
+ result = retry_if(Uploadcare::Error::RequestError::BadRequest){file.copy}
111
+ expect(result).to be_kind_of(Hash)
112
+ expect(result["type"]).to eq "file"
115
113
  end
116
114
 
117
115
 
118
116
  describe '#internal_copy' do
119
117
  describe 'integration' do
120
118
  it 'creates an internal copy of the file' do
121
- response = retry_if(Uploadcare::Error::RequestError::BadRequest){@file.internal_copy}
119
+ response = retry_if(Uploadcare::Error::RequestError::BadRequest){file.internal_copy}
122
120
 
123
121
  expect( response['type'] ).to eq 'file'
124
- expect( response['result']['uuid'] ).not_to eq @file.uuid
122
+ expect( response['result']['uuid'] ).not_to eq file.uuid
125
123
  end
126
124
  end
127
125
 
128
126
  describe 'params' do
129
- let(:url_without_ops){ @api.file(SecureRandom.uuid).cdn_url }
127
+ let(:url_without_ops){ api.file(SecureRandom.uuid).cdn_url }
130
128
  let(:url_with_ops){ url_without_ops + "-/crop/5x5/center/" }
131
- let(:file){ @api.file(url_with_ops) }
129
+ let(:file){ api.file(url_with_ops) }
132
130
 
133
131
  context 'if no params given' do
134
132
  it 'requests server to create an unstored copy with operataions applied' do
135
- expect(@api).to receive(:post)
133
+ expect(api).to receive(:post)
136
134
  .with('/files/', source: url_with_ops)
137
135
 
138
136
  file.internal_copy
@@ -141,7 +139,7 @@ describe Uploadcare::Api::File do
141
139
 
142
140
  context 'if strip_operations: true given' do
143
141
  it 'passes url without operations as a source for a copy' do
144
- expect(@api).to receive(:post)
142
+ expect(api).to receive(:post)
145
143
  .with('/files/', source: url_without_ops)
146
144
 
147
145
  file.internal_copy(strip_operations: true)
@@ -150,7 +148,7 @@ describe Uploadcare::Api::File do
150
148
 
151
149
  context 'if store: true given' do
152
150
  it 'requests server to create a stored copy' do
153
- expect(@api).to receive(:post)
151
+ expect(api).to receive(:post)
154
152
  .with('/files/', source: url_with_ops, store: true)
155
153
 
156
154
  file.internal_copy(store: true)
@@ -166,7 +164,7 @@ describe Uploadcare::Api::File do
166
164
  describe 'integration', :payed_feature do
167
165
  it 'creates an external copy of the file' do
168
166
  response = retry_if(Uploadcare::Error::RequestError::BadRequest) do
169
- @file.external_copy(target)
167
+ file.external_copy(target)
170
168
  end
171
169
 
172
170
  expect( response['type'] ).to eq 'url'
@@ -175,13 +173,13 @@ describe Uploadcare::Api::File do
175
173
  end
176
174
 
177
175
  describe 'params' do
178
- let(:url_without_ops){ @api.file(SecureRandom.uuid).cdn_url }
176
+ let(:url_without_ops){ api.file(SecureRandom.uuid).cdn_url }
179
177
  let(:url_with_ops){ url_without_ops + "-/resize/50x50/" }
180
- let(:file){ @api.file(url_with_ops) }
178
+ let(:file){ api.file(url_with_ops) }
181
179
 
182
180
  context 'if only target is given' do
183
181
  it 'requests server to create a private copy with default name and with operataions applied' do
184
- expect(@api).to receive(:post)
182
+ expect(api).to receive(:post)
185
183
  .with('/files/', source: url_with_ops, target: target)
186
184
 
187
185
  file.external_copy(target)
@@ -196,7 +194,7 @@ describe Uploadcare::Api::File do
196
194
 
197
195
  context 'if strip_operations: true given' do
198
196
  it 'passes url without operations as a source for a copy' do
199
- expect(@api).to receive(:post)
197
+ expect(api).to receive(:post)
200
198
  .with('/files/', source: url_without_ops, target: target)
201
199
 
202
200
  file.external_copy(target, strip_operations: true)
@@ -205,7 +203,7 @@ describe Uploadcare::Api::File do
205
203
 
206
204
  context 'if :make_public given' do
207
205
  it 'requests server to create a copy with correspondent permissions' do
208
- expect(@api).to receive(:post)
206
+ expect(api).to receive(:post)
209
207
  .with('/files/', source: url_with_ops, target: target, make_public: false)
210
208
 
211
209
  file.external_copy(target, make_public: false)
@@ -214,7 +212,7 @@ describe Uploadcare::Api::File do
214
212
 
215
213
  context 'if :pattern given' do
216
214
  it 'requests server to apply given pattern to name of a copy' do
217
- expect(@api).to receive(:post)
215
+ expect(api).to receive(:post)
218
216
  .with('/files/', source: url_with_ops, target: target, pattern: 'test')
219
217
 
220
218
  file.external_copy(target, pattern: 'test')
@@ -96,6 +96,6 @@ describe Uploadcare::Api::Group do
96
96
 
97
97
  it 'should raise an error if index is greater than files count in group' do
98
98
  group = @api.create_group @files
99
- expect {group.file_cdn_url(5)}.to raise_error
99
+ expect {group.file_cdn_url(5)}.to raise_error ArgumentError
100
100
  end
101
- end
101
+ end
@@ -19,7 +19,7 @@ describe Uploadcare::Connections::ApiConnection do
19
19
  end
20
20
 
21
21
  it 'includes correct User-Agent header' do
22
- expected = Uploadcare::user_agent(settings)
22
+ expected = Uploadcare::UserAgent.new.call(settings)
23
23
  expect(subject['User-Agent']).to eq expected
24
24
  end
25
25
  end
data/spec/spec_helper.rb CHANGED
@@ -7,6 +7,9 @@ require 'rspec'
7
7
  require 'uploadcare'
8
8
  require 'yaml'
9
9
 
10
+ require 'coveralls'
11
+ Coveralls.wear!
12
+
10
13
  CONFIG = Uploadcare.default_settings.merge!(
11
14
  public_key: ENV['UPLOADCARE_PUBLIC_KEY'] || 'demopublickey',
12
15
  private_key: ENV['UPLOADCARE_SECRET_KEY'] || 'demoprivatekey',
@@ -1,20 +1,16 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Uploadcare do
4
-
5
4
  describe '::user_agent' do
6
- context "if :user_agent is specified in method's options" do
7
- it "returns it's stringified version" do
8
- expect( Uploadcare.user_agent(user_agent: 123) ).to eq '123'
9
- end
10
- end
5
+ subject(:user_agent) { described_class.user_agent(options) }
6
+ let(:options) { {user_agent: 'user/agent'} }
7
+ let(:user_agent_builder) { instance_double('Uploadcare::UserAgent') }
11
8
 
12
- context "if user_agent is not specified in method's options" do
13
- it 'builds user-agent from ruby version, gem version and public key' do
14
- expected = /#{Gem.ruby_version}\/#{described_class::VERSION}\/test/
15
- expect( Uploadcare.user_agent(public_key: 'test') ).to match(expected)
16
- end
9
+ it 'returns user agent string' do
10
+ allow(Uploadcare::UserAgent).to receive(:new) { user_agent_builder }
11
+ expect(user_agent_builder).to receive(:call).with(options) { 'user/agent' }
12
+
13
+ expect(user_agent).to eq('user/agent')
17
14
  end
18
15
  end
19
-
20
16
  end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ describe Uploadcare::UserAgent do
4
+ subject(:user_agent) { described_class.new.call(options) }
5
+
6
+ before do
7
+ stub_const('Uploadcare::VERSION', '123')
8
+ allow(Gem).to receive(:ruby_version) { '456' }
9
+ end
10
+
11
+ context 'when user_agent option is set' do
12
+ let(:options) do
13
+ { user_agent: 'predefined user agent' }
14
+ end
15
+
16
+ it { is_expected.to eq('predefined user agent') }
17
+ end
18
+
19
+ context 'when user_agent_environment option is set' do
20
+ let(:options) do
21
+ {
22
+ public_key: 'pubkey',
23
+ user_agent_environment: {
24
+ framework_name: 'rails',
25
+ framework_version: '5.1.0',
26
+ extension_name: 'UploadcareRails',
27
+ extension_version: '1.1.0'
28
+ }
29
+ }
30
+ end
31
+
32
+ it do
33
+ is_expected.to eq(
34
+ 'UploadcareRuby/123/pubkey (Ruby/456; rails/5.1.0; UploadcareRails/1.1.0)'
35
+ )
36
+ end
37
+ end
38
+
39
+ context 'when user_agent_environment option is not set' do
40
+ let(:options) do
41
+ { public_key: 'pubkey' }
42
+ end
43
+
44
+ it { is_expected.to eq('UploadcareRuby/123/pubkey (Ruby/456)') }
45
+ end
46
+ end
@@ -2,37 +2,37 @@
2
2
  require File.expand_path('../lib/uploadcare/version', __FILE__)
3
3
 
4
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"
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
12
  gem.description = <<-EOF
13
13
  Ruby wrapper for Uploadcare service API.
14
14
  Full documentations on APIs can be found
15
15
  at https://uploadcare.com/documentation/rest/
16
16
  and https://uploadcare.com/documentation/upload/
17
17
  EOF
18
- gem.metadata = {
19
- "github" => "https://github.com/uploadcare/uploadcare-ruby",
20
- "issue_tracker" => "https://github.com/uploadcare/uploadcare-ruby/issues"
21
- }
22
- gem.homepage = "https://uploadcare.com/documentation/libs/"
23
- gem.license = "MIT"
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'
24
23
 
25
24
  gem.files = `git ls-files`.split($\)
26
25
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
27
26
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
28
- gem.require_paths = ["lib"]
27
+ gem.require_paths = ['lib']
29
28
  gem.version = Uploadcare::VERSION
30
29
  gem.add_runtime_dependency 'faraday', '~> 0.8'
31
30
  gem.add_runtime_dependency 'faraday_middleware', '~> 0.9'
32
31
  gem.add_runtime_dependency 'multipart-post'
33
32
  gem.add_runtime_dependency 'mime-types'
34
33
 
35
- gem.add_development_dependency 'rspec', "~> 3.6"
34
+ gem.add_development_dependency 'rspec', '~> 3.6'
36
35
  gem.add_development_dependency 'rake'
37
36
  gem.add_development_dependency 'pry'
37
+ gem.add_development_dependency 'coveralls'
38
38
  end
metadata CHANGED
@@ -1,114 +1,128 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uploadcare-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
- - '@rastyagaev (Vadim Rastyagaev)'
8
- - '@dimituri (Dimitry Solovyov)'
9
- - '@romanonthego (Roman Dubinin)'
10
- - '@vizvamitra (Dmitrii Krasnov)'
7
+ - "@rastyagaev (Vadim Rastyagaev)"
8
+ - "@dimituri (Dimitry Solovyov)"
9
+ - "@romanonthego (Roman Dubinin)"
10
+ - "@vizvamitra (Dmitrii Krasnov)"
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2017-09-26 00:00:00.000000000 Z
14
+ date: 2018-05-24 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: faraday
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
- - - ~>
20
+ - - "~>"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '0.8'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ~>
27
+ - - "~>"
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0.8'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: faraday_middleware
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
- - - ~>
34
+ - - "~>"
35
35
  - !ruby/object:Gem::Version
36
36
  version: '0.9'
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - ~>
41
+ - - "~>"
42
42
  - !ruby/object:Gem::Version
43
43
  version: '0.9'
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: multipart-post
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
- - - '>='
48
+ - - ">="
49
49
  - !ruby/object:Gem::Version
50
50
  version: '0'
51
51
  type: :runtime
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - '>='
55
+ - - ">="
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0'
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: mime-types
60
60
  requirement: !ruby/object:Gem::Requirement
61
61
  requirements:
62
- - - '>='
62
+ - - ">="
63
63
  - !ruby/object:Gem::Version
64
64
  version: '0'
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
- - - '>='
69
+ - - ">="
70
70
  - !ruby/object:Gem::Version
71
71
  version: '0'
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: rspec
74
74
  requirement: !ruby/object:Gem::Requirement
75
75
  requirements:
76
- - - ~>
76
+ - - "~>"
77
77
  - !ruby/object:Gem::Version
78
78
  version: '3.6'
79
79
  type: :development
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
- - - ~>
83
+ - - "~>"
84
84
  - !ruby/object:Gem::Version
85
85
  version: '3.6'
86
86
  - !ruby/object:Gem::Dependency
87
87
  name: rake
88
88
  requirement: !ruby/object:Gem::Requirement
89
89
  requirements:
90
- - - '>='
90
+ - - ">="
91
91
  - !ruby/object:Gem::Version
92
92
  version: '0'
93
93
  type: :development
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
- - - '>='
97
+ - - ">="
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
100
  - !ruby/object:Gem::Dependency
101
101
  name: pry
102
102
  requirement: !ruby/object:Gem::Requirement
103
103
  requirements:
104
- - - '>='
104
+ - - ">="
105
105
  - !ruby/object:Gem::Version
106
106
  version: '0'
107
107
  type: :development
108
108
  prerelease: false
109
109
  version_requirements: !ruby/object:Gem::Requirement
110
110
  requirements:
111
- - - '>='
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ - !ruby/object:Gem::Dependency
115
+ name: coveralls
116
+ requirement: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
112
126
  - !ruby/object:Gem::Version
113
127
  version: '0'
114
128
  description: |2
@@ -122,10 +136,9 @@ executables: []
122
136
  extensions: []
123
137
  extra_rdoc_files: []
124
138
  files:
125
- - .DS_Store
126
- - .gitignore
127
- - .rspec
128
- - .travis.yml
139
+ - ".gitignore"
140
+ - ".rspec"
141
+ - ".travis.yml"
129
142
  - CHANGELOG.md
130
143
  - Gemfile
131
144
  - LICENSE
@@ -161,6 +174,7 @@ files:
161
174
  - lib/uploadcare/rest/middlewares/parse_json_middleware.rb
162
175
  - lib/uploadcare/rest/middlewares/raise_error_middleware.rb
163
176
  - lib/uploadcare/utils/parser.rb
177
+ - lib/uploadcare/utils/user_agent.rb
164
178
  - lib/uploadcare/version.rb
165
179
  - spec/api/file_list_api_spec.rb
166
180
  - spec/api/file_storage_api_spec.rb
@@ -183,6 +197,7 @@ files:
183
197
  - spec/spec_helper.rb
184
198
  - spec/uploadcare_spec.rb
185
199
  - spec/utils/parser_spec.rb
200
+ - spec/utils/user_agent_spec.rb
186
201
  - spec/view.png
187
202
  - spec/view2.jpg
188
203
  - uploadcare-ruby.gemspec
@@ -198,17 +213,17 @@ require_paths:
198
213
  - lib
199
214
  required_ruby_version: !ruby/object:Gem::Requirement
200
215
  requirements:
201
- - - '>='
216
+ - - ">="
202
217
  - !ruby/object:Gem::Version
203
218
  version: '0'
204
219
  required_rubygems_version: !ruby/object:Gem::Requirement
205
220
  requirements:
206
- - - '>='
221
+ - - ">="
207
222
  - !ruby/object:Gem::Version
208
223
  version: '0'
209
224
  requirements: []
210
225
  rubyforge_project:
211
- rubygems_version: 2.0.14.1
226
+ rubygems_version: 2.5.2
212
227
  signing_key:
213
228
  specification_version: 4
214
229
  summary: Ruby gem for Uploadcare
@@ -234,5 +249,6 @@ test_files:
234
249
  - spec/spec_helper.rb
235
250
  - spec/uploadcare_spec.rb
236
251
  - spec/utils/parser_spec.rb
252
+ - spec/utils/user_agent_spec.rb
237
253
  - spec/view.png
238
254
  - spec/view2.jpg