brick_ftp 0.6.1 → 0.7.0

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
- SHA1:
3
- metadata.gz: d1c8f9d8a8b8938d7081b50d6f5f319799c1a7b8
4
- data.tar.gz: 304b3b10bf2f7c50aafe09cbd158784a45d94940
2
+ SHA256:
3
+ metadata.gz: bff0644f7601a0b205787a383d7e404ea52575f6e10d2e4ec92f2494b0b2e207
4
+ data.tar.gz: 89b62baafda83fc5a354a3b869bdb9779ec0ff82def20627f40412ef02f2818e
5
5
  SHA512:
6
- metadata.gz: a0a11120dc634a2b93166bb753291a2b2094fee6701140d6a9be4511dacb318e1b6e0f0d6b6d7a973cb558801047be0ec541db700ca8972f4f709d842ae8bebc
7
- data.tar.gz: baeb7298119d8458664ce3c2006ca6481a379fd4992df2baebb8da63d2cb5cf80401433f1289c4b45a6e9f4c606973d7f43a004749880c8f635a14f93db7ed74
6
+ metadata.gz: '08e939656344e02093ac1df11a0fd9f93194706eac4de105880f90177c7d67876af69cfd42694fe9260e38b4599f89a61ceb6b4ed106ef1d903c68848b20f961'
7
+ data.tar.gz: f441cbcf2c4e2bb5c64fecb88c2e44ec5bd3293ee6d9fc2bd77b3715635fcb707bd61e3e601e38d048c32d2c6706bcff711d418eab1610c0dbebe7264464c562
@@ -0,0 +1,48 @@
1
+ version: 2
2
+ jobs:
3
+ build: &build
4
+ docker:
5
+ - image: circleci/ruby:latest
6
+ working_directory: /home/circleci/app
7
+ steps:
8
+ - checkout
9
+ - run:
10
+ name: Install gems
11
+ command: bundle install
12
+ - run:
13
+ name: Rubocop
14
+ command: rubocop
15
+ - run:
16
+ name: YARDoc
17
+ command: yardoc --fail-on-warning lib
18
+ - run:
19
+ name: RSpec
20
+ command: rspec
21
+ - store_artifacts:
22
+ path: coverage
23
+ destination: coverage
24
+ ruby-2.2:
25
+ <<: *build
26
+ docker:
27
+ - image: circleci/ruby:2.2
28
+ ruby-2.3:
29
+ <<: *build
30
+ docker:
31
+ - image: circleci/ruby:2.3
32
+ ruby-2.4:
33
+ <<: *build
34
+ docker:
35
+ - image: circleci/ruby:2.4
36
+ ruby-2.5:
37
+ <<: *build
38
+ docker:
39
+ - image: circleci/ruby:2.5
40
+
41
+ workflows:
42
+ version: 2
43
+ build-using-multi-rubies:
44
+ jobs:
45
+ - ruby-2.2
46
+ - ruby-2.3
47
+ - ruby-2.4
48
+ - ruby-2.5
@@ -0,0 +1,31 @@
1
+ <!--
2
+ 1. Please check if an issue already exists so there are no duplicates
3
+ 2. Check out and follow our Guidelines: https://github.com/serverless/serverless/blob/master/CONTRIBUTING.md
4
+ 3. Fill out the whole template so we have a good overview on the issue
5
+ 4. Do not remove any section of the template. If something is not applicable leave it empty but leave it in the Issue
6
+ 5. Please follow the template, otherwise we'll have to ask you to update it
7
+ -->
8
+
9
+ # This is a (Bug Report / Feature Proposal)
10
+
11
+ ## Description
12
+
13
+ For bug reports:
14
+ * What went wrong?
15
+ * What did you expect should have happened?
16
+ * What was the config you used?
17
+ * What stacktrace or error message from your provider did you see?
18
+
19
+ For feature proposals:
20
+ * What is the use case that should be solved. The more detail you describe this in the easier it is to understand for us.
21
+ * If there is additional config how would it look
22
+
23
+ Similar or dependent issues:
24
+ * #12345
25
+
26
+ ## Additional Data
27
+
28
+ * ***Serverless Framework Version you're using***:
29
+ * ***Operating System***:
30
+ * ***Stack Trace***:
31
+ * ***Provider Error messages***:
@@ -0,0 +1,46 @@
1
+ <!--
2
+ 1. Please check out and follow our Contributing Guidelines: https://github.com/koshigoe/brick_ftp#contributing
3
+ 2. Do not remove any section of the template. If something is not applicable leave it empty but leave it in the PR
4
+ 3. Please follow the template, otherwise we'll have to ask you to update it and it will take longer until your PR is merged
5
+ -->
6
+
7
+ ## What did you implement:
8
+
9
+ Closes #XXXXX
10
+
11
+ <!--
12
+ Briefly describe the feature if no issue exists for this PR
13
+ -->
14
+
15
+ ## How did you implement it:
16
+
17
+ <!--
18
+ If this is a nontrivial change please briefly describe your implementation so its easy for us to understand and review your code.
19
+ -->
20
+
21
+ ## How can we verify it:
22
+
23
+ <!--
24
+ Add any applicable config, commands, screenshots or other resources
25
+ to make it easy for us to verify this works. The easier you make it for us
26
+ to review a PR, the faster we can review and merge it.
27
+
28
+ Examples:
29
+ * serverless.yml - Fully functioning to easily deploy changes
30
+ * Screenshots - Showing the difference between your output and the master
31
+ * Cloud Configuration - List cloud resources and show that the correct configuration is in place (e.g. AWS CLI commands)
32
+ * Other - Anything else that comes to mind to help us evaluate
33
+ -->
34
+
35
+ ## Todos:
36
+
37
+ - [ ] Write tests
38
+ - [ ] Write documentation
39
+ - [ ] Fix linting errors
40
+ - [ ] Make sure code coverage hasn't dropped
41
+ - [ ] Provide verification config / commands / resources
42
+ - [ ] Enable "Allow edits from maintainers" for this PR
43
+ - [ ] Update the messages below
44
+
45
+ ***Is this ready for review?:*** NO
46
+ ***Is it a breaking change?:*** NO
data/.rubocop.yml ADDED
@@ -0,0 +1,24 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ AllCops:
4
+ TargetRubyVersion: 2.2
5
+
6
+ Style/EmptyCaseCondition:
7
+ Enabled: false
8
+
9
+ Style/FormatStringToken:
10
+ EnforcedStyle: template
11
+
12
+ Style/TrailingCommaInLiteral:
13
+ EnforcedStyleForMultiline: consistent_comma
14
+
15
+ Metrics/LineLength:
16
+ Max: 124
17
+ AllowURI: true
18
+ URISchemes:
19
+ - http
20
+ - https
21
+
22
+ Metrics/BlockLength:
23
+ Exclude:
24
+ - 'spec/**/*'
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,42 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2018-01-16 23:25:20 +0900 using RuboCop version 0.52.1.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 5
10
+ Metrics/AbcSize:
11
+ Max: 26
12
+
13
+ # Offense count: 107
14
+ # Configuration parameters: CountComments, ExcludedMethods.
15
+ Metrics/BlockLength:
16
+ Max: 446
17
+
18
+ # Offense count: 1
19
+ # Configuration parameters: CountComments.
20
+ Metrics/ClassLength:
21
+ Max: 170
22
+
23
+ # Offense count: 1
24
+ Metrics/CyclomaticComplexity:
25
+ Max: 7
26
+
27
+ # Offense count: 3
28
+ # Configuration parameters: CountComments.
29
+ Metrics/MethodLength:
30
+ Max: 15
31
+
32
+ # Offense count: 2
33
+ # Configuration parameters: CountKeywordArgs.
34
+ Metrics/ParameterLists:
35
+ Max: 7
36
+
37
+ # Offense count: 41
38
+ Style/Documentation:
39
+ Enabled: false
40
+
41
+ Style/Lambda:
42
+ EnforcedStyle: literal
data/CHANGELOG.md CHANGED
@@ -2,10 +2,10 @@ Changelog
2
2
  ====
3
3
 
4
4
 
5
- [unreleased](https://github.com/koshigoe/brick_ftp/compare/v0.6.1...master)
5
+ [unreleased](https://github.com/koshigoe/brick_ftp/compare/v0.7.0...master)
6
6
  ----
7
7
 
8
- [Full Changelog](https://github.com/koshigoe/brick_ftp/compare/v0.6.1...master)
8
+ [Full Changelog](https://github.com/koshigoe/brick_ftp/compare/v0.7.0...master)
9
9
 
10
10
  ### Enhancements:
11
11
 
@@ -14,6 +14,23 @@ Changelog
14
14
  ### Breaking Changes:
15
15
 
16
16
 
17
+ [v0.7.0](https://github.com/koshigoe/brick_ftp/compare/v0.6.1...v0.7.0)
18
+ ----
19
+
20
+ [Full Changelog](https://github.com/koshigoe/brick_ftp/compare/v0.6.1....v0.7.0)
21
+
22
+ ### Enhancements:
23
+
24
+ - [#80](https://github.com/koshigoe/brick_ftp/pull/80) Use Rubocop.
25
+ - [#85](https://github.com/koshigoe/brick_ftp/pull/85) Allow `BrickFTP::Client#upload_file` to multi part uploading.
26
+
27
+ ### Fixed Bugs:
28
+
29
+ ### Breaking Changes:
30
+
31
+ - [#87](https://github.com/koshigoe/brick_ftp/pull/87) Support Ruby >= 2.2.0
32
+
33
+
17
34
  [v0.6.1](https://github.com/koshigoe/brick_ftp/compare/v0.6.0...v0.6.1)
18
35
  ----
19
36
 
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+ require 'rubocop/rake_task'
3
4
 
4
5
  RSpec::Core::RakeTask.new(:spec)
6
+ RuboCop::RakeTask.new
5
7
 
6
- task :default => :spec
8
+ task default: %i[rubocop spec]
data/bin/console CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "brick_ftp"
3
+ require 'bundler/setup'
4
+ require 'brick_ftp'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
- require "pry"
9
+ require 'pry'
10
10
  Pry.start
data/brick_ftp.gemspec CHANGED
@@ -1,32 +1,35 @@
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 'brick_ftp/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "brick_ftp"
6
+ spec.name = 'brick_ftp'
8
7
  spec.version = BrickFTP::VERSION
9
- spec.license = "MIT"
10
- spec.authors = ["koshigoe"]
11
- spec.email = ["koshigoeb@gmail.com"]
8
+ spec.license = 'MIT'
9
+ spec.authors = ['koshigoe']
10
+ spec.email = ['koshigoeb@gmail.com']
12
11
 
13
- spec.summary = %q{BrickFTP's REST API client.}
14
- spec.description = %q{BrickFTP's REST API client.}
15
- spec.homepage = "https://github.com/koshigoe/brick_ftp"
12
+ spec.summary = "BrickFTP's REST API client."
13
+ spec.description = "BrickFTP's REST API client."
14
+ spec.homepage = 'https://github.com/koshigoe/brick_ftp'
16
15
 
17
16
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
17
+ spec.bindir = 'exe'
19
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
19
+ spec.require_paths = ['lib']
21
20
 
22
- spec.add_development_dependency "bundler", "~> 1.12"
23
- spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "rspec", "~> 3.0"
25
- spec.add_development_dependency "webmock", "~> 2.1"
26
- spec.add_development_dependency "yard", "~> 0.9"
27
- spec.add_development_dependency "pry", "~> 0.10"
21
+ spec.required_ruby_version = '>= 2.2.0'
22
+
23
+ spec.add_development_dependency 'bundler', '~> 1.12'
24
+ spec.add_development_dependency 'pry', '~> 0.10'
25
+ spec.add_development_dependency 'rake', '~> 10.0'
26
+ spec.add_development_dependency 'rspec', '~> 3.0'
27
+ spec.add_development_dependency 'rubocop', '~> 0.52'
28
+ spec.add_development_dependency 'simplecov', '~> 0.15'
29
+ spec.add_development_dependency 'webmock', '~> 2.1'
30
+ spec.add_development_dependency 'yard', '~> 0.9'
28
31
 
29
32
  spec.add_dependency 'deep_hash_transform', '~> 1.0'
30
- spec.add_dependency 'thor', '~> 0.19.1'
31
33
  spec.add_dependency 'inifile', '~> 3.0.0'
34
+ spec.add_dependency 'thor', '~> 0.19.1'
32
35
  end
data/exe/brick_ftp CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  root = File.dirname(File.dirname(__FILE__))
4
- $:.unshift(File.join(root, 'lib'))
4
+ $LOAD_PATH.unshift(File.join(root, 'lib'))
5
5
 
6
6
  require 'brick_ftp'
7
7
 
data/lib/brick_ftp.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'deep_hash_transform'
2
2
  require 'thor'
3
- require "brick_ftp/version"
3
+ require 'brick_ftp/version'
4
4
  require 'brick_ftp/configuration'
5
5
  require 'brick_ftp/log_formatter'
6
6
  require 'brick_ftp/http_client'
@@ -40,10 +40,12 @@ require 'brick_ftp/cli'
40
40
  require 'brick_ftp/cli/config'
41
41
  require 'brick_ftp/cli/site'
42
42
  require 'brick_ftp/cli/main'
43
+ require 'brick_ftp/utils'
44
+ require 'brick_ftp/utils/chunk_io'
43
45
 
44
46
  module BrickFTP
45
47
  # https://brickftp.com/redundancy/
46
- IP_ADDRESSES = %w(
48
+ IP_ADDRESSES = %w[
47
49
  54.193.69.72
48
50
  54.193.69.200
49
51
  54.193.65.189
@@ -72,7 +74,7 @@ module BrickFTP
72
74
  52.29.176.178
73
75
  54.207.27.239
74
76
  52.68.4.44
75
- ).freeze
77
+ ].freeze
76
78
 
77
79
  # Return configuration.
78
80
  # If it has not been configured yet, initialize configuration.
@@ -67,7 +67,7 @@ module BrickFTP
67
67
  BrickFTP::HTTPClient.new.send(
68
68
  self.class.endpoints[:delete][:http_method],
69
69
  self.class.api_path_for(:delete, self),
70
- headers: headers,
70
+ headers: headers
71
71
  )
72
72
  true
73
73
  end
@@ -1,9 +1,9 @@
1
1
  module BrickFTP
2
2
  module API
3
3
  class BundleContent < Base
4
- endpoint :post, :index, ->(params) {
4
+ endpoint :post, :index, ->(params) do
5
5
  params.key?(:path) ? '/api/rest/v1/bundles/folders/%{path}' : '/api/rest/v1/bundles/folders'
6
- }
6
+ end
7
7
 
8
8
  attribute :id
9
9
  attribute :path
@@ -31,17 +31,34 @@ module BrickFTP
31
31
  attribute :part, writable: true
32
32
  attribute :restart, writable: true
33
33
 
34
- def self.create(path:, source:)
34
+ # Upload file.
35
+ #
36
+ # @see https://brickftp.com/docs/rest-api/file-uploading/
37
+ # @param [String] path Remote file path.
38
+ # @param [IO] source Source `data` (not `path`) to upload.
39
+ # @param [Integer] chunk_size Size of chunk to multi-part upload.
40
+ # @return [BrickFTP::API::FileOperation::Upload] An instance of BrickFTP::API::FileOperation::Upload.
41
+ #
42
+ def self.create(path:, source:, chunk_size: nil)
35
43
  api_client = BrickFTP::HTTPClient.new
36
- step1 = api_client.post(api_path_for(:create, path: path), params: { action: 'put' })
44
+ chunk_io = BrickFTP::Utils::ChunkIO.new(source, chunk_size: chunk_size)
37
45
 
38
- upload_uri = URI.parse(step1['upload_uri'])
39
- upload_client = BrickFTP::HTTPClient.new(upload_uri.host)
40
- upload_client.put(step1['upload_uri'], params: source)
46
+ ref = nil
47
+ params_for_request_upload_url = { action: 'put' }
48
+ upload_info = {}
49
+ chunk_io.each.with_index(1) do |chunk, part|
50
+ params_for_request_upload_url.update(part: part, ref: ref) if part > 1
51
+ upload_info = api_client.post(api_path_for(:create, path: path), params: params_for_request_upload_url)
52
+ ref = upload_info['ref']
41
53
 
42
- step3 = api_client.post(api_path_for(:create, path: path), params: { action: 'end', ref: step1['ref'] })
54
+ upload_uri = URI.parse(upload_info['upload_uri'])
55
+ upload_client = BrickFTP::HTTPClient.new(upload_uri.host)
56
+ upload_client.put(upload_info['upload_uri'], params: chunk)
57
+ end
43
58
 
44
- new(step1.merge(step3).symbolize_keys)
59
+ uploaded_info = api_client.post(api_path_for(:create, path: path), params: { action: 'end', ref: ref })
60
+
61
+ new(upload_info.merge(uploaded_info).symbolize_keys)
45
62
  end
46
63
  end
47
64
  end
@@ -1,7 +1,9 @@
1
1
  module BrickFTP
2
2
  module API
3
3
  class Folder < Base
4
+ # rubocop:disable Metrics/LineLength
4
5
  endpoint :get, :index, '/api/rest/v1/folders/%{path}', :page, :per_page, :search, :'sort_by[path]', :'sort_by[size]', :'sort_by[modified_at_datetime]'
6
+ # rubocop:enable Metrics/LineLength
5
7
  endpoint :post, :create, '/api/rest/v1/folders/%{path}'
6
8
 
7
9
  attribute :id
@@ -136,7 +136,8 @@ module BrickFTP
136
136
  # Show the entire history for the current site.
137
137
  # @see https://brickftp.com/ja/docs/rest-api/history/
138
138
  # @param page [Integer] Page number of items to return in this request.
139
- # @param per_page [Integer] Requested number of items returned per request. Default: 1000, maximum: 10000. Leave blank for default (strongly recommended).
139
+ # @param per_page [Integer] Requested number of items returned per request. Default: 1000, maximum: 10000.
140
+ # Leave blank for default (strongly recommended).
140
141
  # @param start_at [String] Date and time in the history to start from.
141
142
  # @return [Array] array of `BrickFTP::API::History::Site`
142
143
  def list_site_history(page: nil, per_page: nil, start_at: nil)
@@ -147,7 +148,8 @@ module BrickFTP
147
148
  # Show login history only.
148
149
  # @see https://brickftp.com/ja/docs/rest-api/history/
149
150
  # @param page [Integer] Page number of items to return in this request.
150
- # @param per_page [Integer] Requested number of items returned per request. Default: 1000, maximum: 10000. Leave blank for default (strongly recommended).
151
+ # @param per_page [Integer] Requested number of items returned per request. Default: 1000, maximum: 10000.
152
+ # Leave blank for default (strongly recommended).
151
153
  # @param start_at [String] Date and time in the history to start from.
152
154
  # @return [Array] array of `BrickFTP::API::History::Login`
153
155
  def list_login_history(page: nil, per_page: nil, start_at: nil)
@@ -159,7 +161,8 @@ module BrickFTP
159
161
  # @see https://brickftp.com/ja/docs/rest-api/history/
160
162
  # @param user_id [Integer] User ID.
161
163
  # @param page [Integer] Page number of items to return in this request.
162
- # @param per_page [Integer] Requested number of items returned per request. Default: 1000, maximum: 10000. Leave blank for default (strongly recommended).
164
+ # @param per_page [Integer] Requested number of items returned per request.
165
+ # Default: 1000, maximum: 10000. Leave blank for default (strongly recommended).
163
166
  # @param start_at [String] Date and time in the history to start from.
164
167
  # @return [Array] array of `BrickFTP::API::History::User`
165
168
  def list_user_history(user_id:, page: nil, per_page: nil, start_at: nil)
@@ -171,7 +174,8 @@ module BrickFTP
171
174
  # @see https://brickftp.com/ja/docs/rest-api/history/
172
175
  # @param path [String] path of folder.
173
176
  # @param page [Integer] Page number of items to return in this request.
174
- # @param per_page [Integer] Requested number of items returned per request. Default: 1000, maximum: 10000. Leave blank for default (strongly recommended).
177
+ # @param per_page [Integer] Requested number of items returned per request.
178
+ # Default: 1000, maximum: 10000. Leave blank for default (strongly recommended).
175
179
  # @param start_at [String] Date and time in the history to start from.
176
180
  # @return [Array] array of `BrickFTP::API::History::Folder`
177
181
  def list_folder_history(path:, page: nil, per_page: nil, start_at: nil)
@@ -183,7 +187,8 @@ module BrickFTP
183
187
  # @see https://brickftp.com/ja/docs/rest-api/history/
184
188
  # @param path [String] path of file.
185
189
  # @param page [Integer] Page number of items to return in this request.
186
- # @param per_page [Integer] Requested number of items returned per request. Default: 1000, maximum: 10000. Leave blank for default (strongly recommended).
190
+ # @param per_page [Integer] Requested number of items returned per request.
191
+ # Default: 1000, maximum: 10000. Leave blank for default (strongly recommended).
187
192
  # @param start_at [String] Date and time in the history to start from.
188
193
  # @return [Array] array of `BrickFTP::API::History::File`
189
194
  def list_file_history(path:, page: nil, per_page: nil, start_at: nil)
@@ -291,13 +296,17 @@ module BrickFTP
291
296
  # @see https://brickftp.com/ja/docs/rest-api/file-operations/
292
297
  # @param path [String]
293
298
  # @param page [Integer] Page number of items to return in this request.
294
- # @param per_page [Integer] Requested number of items returned per request. Maximum: 5000, leave blank for default (strongly recommended).
299
+ # @param per_page [Integer] Requested number of items returned per request.
300
+ # Maximum: 5000, leave blank for default (strongly recommended).
295
301
  # @param search [String] Only return items matching the given search text.
296
- # @param sort_by_path [String] Sort by file name, and value is either asc or desc to indicate normal or reverse sort. (Note that sort_by[path] = asc is the default.)
297
- # @param sort_by_size [String] Sort by file size, and value is either asc or desc to indicate smaller files first or larger files first, respectively.
298
- # @param sort_by_modified_at_datetime [String] Sort by modification time, and value is either asc or desc to indicate older files first or newer files first, respectively.
302
+ # @param sort_by_path [String] Sort by file name, and value is either asc or desc to indicate normal or reverse sort.
303
+ # (Note that sort_by[path] = asc is the default.)
304
+ # @param sort_by_size [String] Sort by file size, and value is either asc or desc to indicate smaller files
305
+ # first or larger files first, respectively.
306
+ # @param sort_by_modified_at_datetime [String] Sort by modification time, and value is either asc or desc to
307
+ # indicate older files first or newer files first, respectively.
299
308
  # @return [Array] array of BrickFTP::API::Folder.
300
- def list_folders(path:, page: nil, per_page: nil, search: nil, sort_by_path: nil, sort_by_size: nil, sort_by_modified_at_datetime: nil)
309
+ def list_folders(path:, page: nil, per_page: nil, search: nil, sort_by_path: nil, sort_by_size: nil, sort_by_modified_at_datetime: nil) # rubocop:disable Metrics/LineLength
301
310
  query = { path: path, page: page, per_page: per_page, search: search }.reject { |_, v| v.nil? }
302
311
  query[:'sort_by[path]'] = sort_by_path if sort_by_path
303
312
  query[:'sort_by[size]'] = sort_by_size if sort_by_size
@@ -330,7 +339,7 @@ module BrickFTP
330
339
  # @param move_destination [String]
331
340
  # @return [BrickFTP::API::FileMove]
332
341
  def move_file(path:, move_destination:)
333
- BrickFTP::API::FileOperation::Move.create(path: path, :'move-destination' => move_destination)
342
+ BrickFTP::API::FileOperation::Move.create(path: path, 'move-destination': move_destination)
334
343
  end
335
344
 
336
345
  # Copy a file or folder to the destination provided in the copy_destination parameter.
@@ -339,13 +348,13 @@ module BrickFTP
339
348
  # @param copy_destination [String]
340
349
  # @return [BrickFTP::API::FileCopy]
341
350
  def copy_file(path:, copy_destination:)
342
- BrickFTP::API::FileOperation::Copy.create(path: path, :'copy-destination' => copy_destination)
351
+ BrickFTP::API::FileOperation::Copy.create(path: path, 'copy-destination': copy_destination)
343
352
  end
344
353
 
345
354
  # Delete a file.
346
355
  # @see https://brickftp.com/ja/docs/rest-api/file-operations/
347
356
  # @param file_or_path [BrickFTP::API::File, String] file object or file(folder) path.
348
- # @param recursive: [Boolean]
357
+ # @param recursive [Boolean]
349
358
  # @return [Boolean] return true.
350
359
  def delete_file(file_or_path, recursive: false)
351
360
  instantize_file(file_or_path).destroy(recursive: recursive)
@@ -355,9 +364,10 @@ module BrickFTP
355
364
  # @see https://brickftp.com/ja/docs/rest-api/file-uploading/
356
365
  # @param path [String]
357
366
  # @param source [IO] source `data` (not `path`) to upload
367
+ # @param chunk_size [Integer] Size of chunk to multi-part upload.
358
368
  # @return [BrickFTP::API::FileUpload]
359
- def upload_file(path:, source:)
360
- BrickFTP::API::FileOperation::Upload.create(path: path, source: source)
369
+ def upload_file(path:, source:, chunk_size: nil)
370
+ BrickFTP::API::FileOperation::Upload.create(path: path, source: source, chunk_size: chunk_size)
361
371
  end
362
372
 
363
373
  # Get usage of site.
@@ -23,10 +23,10 @@ module BrickFTP
23
23
  attr_accessor :logger
24
24
  # Log level
25
25
  # @return [Integer]
26
- attr_accessor :log_level
26
+ attr_reader :log_level
27
27
  # Log formatter
28
28
  # @return [Logger::Formatter]
29
- attr_accessor :log_formatter
29
+ attr_reader :log_formatter
30
30
  # Open timeout
31
31
  # @return [Integer]
32
32
  attr_accessor :open_timeout
@@ -39,7 +39,7 @@ module BrickFTP
39
39
 
40
40
  DEFAULT_PROFILE = 'global'.freeze
41
41
  # Name of storable configurations. (TODO: log_path, log_level, log_formatter)
42
- STORABLE_CONFIGURATION_KEYS = %w(subdomain api_key open_timeout read_timeout).freeze
42
+ STORABLE_CONFIGURATION_KEYS = %w[subdomain api_key open_timeout read_timeout].freeze
43
43
 
44
44
  STORABLE_CONFIGURATION_KEYS.each do |name|
45
45
  define_method("#{name}=") do |value|
@@ -104,7 +104,7 @@ module BrickFTP
104
104
 
105
105
  private
106
106
 
107
- attr_reader :inifile, :dirty_attributes
107
+ attr_reader :inifile
108
108
 
109
109
  def load_config_file(config_file_path)
110
110
  @inifile = if config_file_path && File.exist?(config_file_path)
@@ -8,7 +8,7 @@ module BrickFTP
8
8
  def initialize(response)
9
9
  begin
10
10
  error = JSON.parse(response.body)
11
- rescue
11
+ rescue StandardError
12
12
  error = { 'http-code' => response.code, 'error' => "#{response.message}, #{response.body}" }
13
13
  end
14
14
 
@@ -80,6 +80,8 @@ module BrickFTP
80
80
 
81
81
  private
82
82
 
83
+ # FIXME: Metrics/AbcSize, Metrics/MethodLength
84
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
83
85
  def request(method, path, params: {}, headers: {})
84
86
  req = Net::HTTP.const_get(method.to_s.capitalize).new(path, headers)
85
87
  req['User-Agent'] = USER_AGENT
@@ -99,21 +101,28 @@ module BrickFTP
99
101
  req.body = params.to_json unless params.empty?
100
102
  when params.is_a?(IO)
101
103
  req.body_stream = params
102
- req["Content-Length"] = params.size
104
+ req['Content-Length'] = params.size
103
105
  end
104
106
 
105
107
  start = Time.now
106
108
  begin
107
- logger.debug 'Request headers: %{headers}' % { headers: req.each_capitalized.map { |k, v| "#{k}: #{v}" } }
108
- logger.debug 'Request body: %{body}' % { body: req.body }
109
+ logger.debug format('Request headers: %{headers}', headers: req.each_capitalized.map { |k, v| "#{k}: #{v}" })
110
+ logger.debug format('Request body: %{body}', body: req.body)
109
111
  @conn.request(req).tap do |res|
110
- logger.debug 'Response headers: %{headers}' % { headers: res.each_capitalized.map { |k, v| "#{k}: #{v}" } }
111
- logger.debug 'Response body: %{body}' % { body: res.body }
112
+ logger.debug format('Response headers: %{headers}', headers: res.each_capitalized.map { |k, v| "#{k}: #{v}" })
113
+ logger.debug format('Response body: %{body}', body: res.body)
112
114
  end
113
115
  ensure
114
- logger.info 'Complete %{method} %{path} (%{time} ms)' % { method: method.upcase, path: path, time: (Time.now - start) * 1000 }
116
+ message = format(
117
+ 'Complete %{method} %{path} (%{time} ms)',
118
+ method: method.upcase,
119
+ path: path,
120
+ time: (Time.now - start) * 1000
121
+ )
122
+ logger.info message
115
123
  end
116
124
  end
125
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
117
126
 
118
127
  def logger
119
128
  BrickFTP.logger
@@ -2,7 +2,7 @@ module BrickFTP
2
2
  class LogFormatter < Logger::Formatter
3
3
  FORMAT = "severity:%{severity}\tpid:%{pid}\ttime:%{time}\tmessage:%{message}\n".freeze
4
4
 
5
- def call(severity, time, program_name, message)
5
+ def call(severity, time, _program_name, message)
6
6
  params = {
7
7
  severity: severity,
8
8
  pid: Process.pid,
@@ -0,0 +1,4 @@
1
+ module BrickFTP
2
+ module Utils
3
+ end
4
+ end
@@ -0,0 +1,59 @@
1
+ require 'tempfile'
2
+
3
+ module BrickFTP
4
+ module Utils
5
+ class ChunkIO
6
+ include Enumerable
7
+
8
+ attr_reader :io, :chunk_size
9
+
10
+ # Wrap IO object.
11
+ #
12
+ # @param [IO] io an IO object.
13
+ # @param [Integer] chunk_size Size of chunk.
14
+ #
15
+ def initialize(io, chunk_size: nil)
16
+ @io = io
17
+ @chunk_size = chunk_size
18
+ end
19
+
20
+ # Iterate with chunked IO object.
21
+ #
22
+ # @yield [chunk] Give a chunk IO object to block.
23
+ # @yieldparam [StringIO] chunk a chunked IO object.
24
+ #
25
+ def each(&block)
26
+ return enum_for(__method__) unless block
27
+
28
+ if chunk_size
29
+ each_chunk(&block)
30
+ else
31
+ whole(&block)
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def whole
38
+ yield io
39
+ end
40
+
41
+ def each_chunk
42
+ eof = false
43
+ offset = 0
44
+ until eof
45
+ Tempfile.create('chunk-io') do |chunk|
46
+ copied = IO.copy_stream(io, chunk, chunk_size, offset)
47
+ eof = copied.zero?
48
+ next if eof
49
+
50
+ offset += copied
51
+ chunk.rewind
52
+
53
+ yield chunk
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -1,3 +1,3 @@
1
1
  module BrickFTP
2
- VERSION = '0.6.1'.freeze
2
+ VERSION = '0.7.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brick_ftp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - koshigoe
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-10 00:00:00.000000000 Z
11
+ date: 2018-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.10'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.10'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -53,47 +67,61 @@ dependencies:
53
67
  - !ruby/object:Gem::Version
54
68
  version: '3.0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: webmock
70
+ name: rubocop
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '2.1'
75
+ version: '0.52'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '2.1'
82
+ version: '0.52'
69
83
  - !ruby/object:Gem::Dependency
70
- name: yard
84
+ name: simplecov
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '0.9'
89
+ version: '0.15'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '0.9'
96
+ version: '0.15'
83
97
  - !ruby/object:Gem::Dependency
84
- name: pry
98
+ name: webmock
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '0.10'
103
+ version: '2.1'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '0.10'
110
+ version: '2.1'
111
+ - !ruby/object:Gem::Dependency
112
+ name: yard
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.9'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.9'
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: deep_hash_transform
99
127
  requirement: !ruby/object:Gem::Requirement
@@ -109,33 +137,33 @@ dependencies:
109
137
  - !ruby/object:Gem::Version
110
138
  version: '1.0'
111
139
  - !ruby/object:Gem::Dependency
112
- name: thor
140
+ name: inifile
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
143
  - - "~>"
116
144
  - !ruby/object:Gem::Version
117
- version: 0.19.1
145
+ version: 3.0.0
118
146
  type: :runtime
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
150
  - - "~>"
123
151
  - !ruby/object:Gem::Version
124
- version: 0.19.1
152
+ version: 3.0.0
125
153
  - !ruby/object:Gem::Dependency
126
- name: inifile
154
+ name: thor
127
155
  requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
157
  - - "~>"
130
158
  - !ruby/object:Gem::Version
131
- version: 3.0.0
159
+ version: 0.19.1
132
160
  type: :runtime
133
161
  prerelease: false
134
162
  version_requirements: !ruby/object:Gem::Requirement
135
163
  requirements:
136
164
  - - "~>"
137
165
  - !ruby/object:Gem::Version
138
- version: 3.0.0
166
+ version: 0.19.1
139
167
  description: BrickFTP's REST API client.
140
168
  email:
141
169
  - koshigoeb@gmail.com
@@ -144,9 +172,13 @@ executables:
144
172
  extensions: []
145
173
  extra_rdoc_files: []
146
174
  files:
175
+ - ".circleci/config.yml"
176
+ - ".github/ISSUE_TEMPLATE.md"
177
+ - ".github/PULL_REQUEST_TEMPLATE.md"
147
178
  - ".gitignore"
148
179
  - ".rspec"
149
- - ".travis.yml"
180
+ - ".rubocop.yml"
181
+ - ".rubocop_todo.yml"
150
182
  - CHANGELOG.md
151
183
  - Gemfile
152
184
  - LICENSE.txt
@@ -194,6 +226,8 @@ files:
194
226
  - lib/brick_ftp/configuration.rb
195
227
  - lib/brick_ftp/http_client.rb
196
228
  - lib/brick_ftp/log_formatter.rb
229
+ - lib/brick_ftp/utils.rb
230
+ - lib/brick_ftp/utils/chunk_io.rb
197
231
  - lib/brick_ftp/version.rb
198
232
  - lib/brick_ftp/webhook.rb
199
233
  - lib/brick_ftp/webhook/request.rb
@@ -209,7 +243,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
209
243
  requirements:
210
244
  - - ">="
211
245
  - !ruby/object:Gem::Version
212
- version: '0'
246
+ version: 2.2.0
213
247
  required_rubygems_version: !ruby/object:Gem::Requirement
214
248
  requirements:
215
249
  - - ">="
@@ -217,7 +251,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
217
251
  version: '0'
218
252
  requirements: []
219
253
  rubyforge_project:
220
- rubygems_version: 2.6.14
254
+ rubygems_version: 2.7.3
221
255
  signing_key:
222
256
  specification_version: 4
223
257
  summary: BrickFTP's REST API client.
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.3.1
5
- before_install: gem install bundler -v 1.12.5