bundler-download 1.0.0 → 1.1.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
2
  SHA256:
3
- metadata.gz: cb61a0b520412978a018678b63cc25c70eb15ac38f3846b3696df2053a6dd7c1
4
- data.tar.gz: 97dd4d3d79ba2ca66cf0ba5f7336da9e64d98b496fdd11ca18f30407dd94fb49
3
+ metadata.gz: c510e683dd2ec94c94ac33ae12c2e5776ac48cb2bba048eaa996a26910e35c94
4
+ data.tar.gz: 22c912fc084b77506db7170abdbc6292742f294b7ade309ce4c17a770b0fcff2
5
5
  SHA512:
6
- metadata.gz: cd213672c9915b6988aee281e19dd25c0a28bad85067d3aa84dcd4e4d2a4cdd2df8d5a67a3606db0ef090ec384f55277fd9296937fba731a562ecb1c90f7951a
7
- data.tar.gz: 8492025f9a3b7c2a7779a77e09783c35eb46f05cf0f89e9dfae036574813ad6aecb0adbc369a91ee63cb59037a4a855c2b28e0eb0f0adac1838d56dcb75bdfd5
6
+ metadata.gz: f9b624db4e06692595b0a9b5e430d0e7ceb299ad7de6a27d18b6611c28484bcae7bad9e1771c4beffd45e1a586f667920e46ba9d2a3fe86e2bfe1fc8bc8cc229
7
+ data.tar.gz: c0503acbebf26d166709d97051cfea861f9256799fadd08d5226d5ad84be1ef47617bcd65990d1b57b74ae55a2913e9b179ffdf85ff6263cb01e516f52b5dcb5
@@ -1,5 +1,15 @@
1
1
  # Change Log
2
2
 
3
+ ## 1.1.0
4
+
5
+ - Add a post install message
6
+ - `bundle download clear` command to remove downloads (alias as `clean` too)
7
+ - Support `os` option for `download` DSL keyword in `Downloadfile`
8
+ - `bundle download --all-operating-systems` to download files for all OS'es
9
+ - `bundle download help` to show instructions (with `usage` as an alias)
10
+ - `bundle download list` lists downloads for every gem with a Downloadfile
11
+ - `bundle download show` shows downloaded files for every gem with size stats
12
+
3
13
  ## 1.0.0
4
14
 
5
15
  - Initial bundler-download with gem-after-install-all hook and `download` command for gem `Downloadfile`
data/README.md CHANGED
@@ -1,25 +1,25 @@
1
1
  # bundler-download - Bundler Plugin
2
2
  [![Gem Version](https://badge.fury.io/rb/bundler-download.svg)](http://badge.fury.io/rb/bundler-download)
3
3
 
4
- Bundler plugin for auto-downloading specified extra files via [`Downloadfile`](#downloadfile) after `bundle install`.
4
+ Bundler plugin for auto-downloading extra gem files (e.g. large file downloads) specified in [`Downloadfile`](#downloadfile) after `bundle install`.
5
5
 
6
6
  ## How It Works
7
7
 
8
- Gems declare the need for extra downloads upon install by Bundler via [`Downloadfile`](#downloadfile).
8
+ Gems can add a [`Downloadfile`](#downloadfile) at the root to declare the need for extra downloads upon install by Bundler.
9
9
 
10
- Apps can simply add those gems to Bundler `Gemfile` the standard way with no change. Afterwards, when running `bundle install`, bundle-download will automatically download extra files at the end.
10
+ Apps can add those gems to Bundler `Gemfile` the standard way in addition to installing the [bundler-download](https://rubygems.org/gems/bundler-download) Bundler plugin. Afterwards, when running `bundle install`, bundle-download will automatically download extra files at the end.
11
11
 
12
12
  If a Ruby Gem needs to depend on one of those gems, it can declare as a standard dependency in .gemspec
13
13
 
14
14
  ## Gem Instructions
15
15
 
16
- Add `bundler-download` as a standard .gemspec dependency:
16
+ Add [bundler-download](https://rubygems.org/gems/bundler-download) as a standard .gemspec dependency (and mention in its [instructions](#app-instructions) that apps must add `plugin bundler-download` in "Gemfile" to get the extra downloads):
17
17
 
18
18
  ```ruby
19
- s.add_dependency('bundler', [">= 2.1.4"])
19
+ s.add_dependency('bundler-download', [">= 1.1.0"])
20
20
  ```
21
21
 
22
- Afterwards, ensure there is a [`Downloadfile`](#downloadfile) at the root directory of the gem that needs extra downloads, mentioning under .gemspec `files`:
22
+ Afterwards, ensure there is a [`Downloadfile`](#downloadfile) at the root directory of the gem, including in .gemspec `files`:
23
23
 
24
24
  ```ruby
25
25
  s.files = [
@@ -31,34 +31,40 @@ Afterwards, ensure there is a [`Downloadfile`](#downloadfile) at the root direct
31
31
 
32
32
  ### Downloadfile
33
33
 
34
- A gem `Downloadfile` contains download links for files that need to be downloaded relative to the gem directory after install.
34
+ A gem `Downloadfile` contains `download` links for files that need to be downloaded relative to the gem directory after `bundle install`.
35
35
 
36
- Example of `Downloadfile`:
36
+ Example `Downloadfile`:
37
37
 
38
38
  ```
39
39
  download 'http://dl.maketechnology.io/chromium-cef/rls/repository/plugins/com.make.chromium.cef.gtk.linux.x86_64_0.4.0.202005172227.jar' # downloads into gem root directory
40
40
  download 'http://dl.maketechnology.io/chromium-cef/rls/repository/plugins/com.make.chromium.cef.cocoa.macosx.x86_64_0.4.0.202005172227.jar',
41
41
  to: 'cef' # downloads into 'cef' directory under the gem installation directory
42
42
  download 'http://dl.maketechnology.io/chromium-cef/rls/repository/plugins/com.make.chromium.cef.win32.win32.x86_64_0.4.0.202005172227.jar',
43
- to: 'cef/windows' # downloads into 'cef/windows' directory under the gem installation directory
43
+ to: 'cef/windows', os: 'windows' # downloads into 'cef/windows' directory under the gem installation directory in Windows OS only
44
44
  ```
45
45
 
46
+ The keyword `download` declares a file to download and takes the following arguments:
47
+ 1. Download URL string
48
+ 2. `to:` keyword arg: mentions a local download path relative to the gem installation directory (e.g. 'vendor' or 'lib/ai/data'). It automatically creates the path with all its subdirectories if it does not already exist. If left empty, then the file is downloaded to the gem directory root path.
49
+ 3. `os:` keyword arg (value: `mac` / `windows` / `linux`): limits the operating system under which the download is made. It is `nil` by default, allowing the download to occur in all operating systems.
50
+
46
51
  ## App Instructions
47
52
 
48
- Apps can depend on a gem with `Downloadfile` by adding `bundler-download` plugin and including the gem in `Gemfile` like it normally would:
53
+ An app can depend on a gem that has a `Downloadfile` by adding the `bundler-download` plugin first (or manually installing via `bundle plugin install bundler-download`) and then including the gem in `Gemfile` like it normally would:
49
54
 
50
55
  ```
51
56
  plugin 'bundler-download'
52
57
  gem 'some_gem_with_downloadfile'
53
58
  ```
54
59
 
55
- Afterwards, run `bundle install` twice (the first time it installs the plugin and the second time it activates it):
60
+ Afterwards, run:
56
61
 
57
62
  ```
58
63
  bundle install
59
- bundle install
60
64
  ```
61
65
 
66
+ (run one extra time if you don't have the `bundler-download` plugin installed yet since the first run would just install the plugin and subsequent runs would activate it)
67
+
62
68
  You should see something like this:
63
69
 
64
70
  ```
@@ -75,7 +81,7 @@ Using tty-cursor 0.7.1
75
81
  Using tty-screen 0.8.1
76
82
  Using unicode-display_width 1.7.0
77
83
  Using tty-progressbar 0.17.0
78
- Using bundler-download 1.0.0
84
+ Using bundler-download 1.1.0
79
85
  Using facets 3.1.0
80
86
  Using glimmer 1.0.0
81
87
  bundle-download plugin gem-after-install-all hook:
@@ -90,17 +96,114 @@ Download path: /Users/User/.rvm/gems/ruby-2.7.1@tmp/gems/glimmer-1.0.0/cef/com.m
90
96
  Downloading 26% ( 59s ) [============== ]
91
97
  ```
92
98
 
93
- Subsequent runs of `bundle install` will keep existing downloads without overwriting them unless you use the [`bundle-download`](#bundler-download-command) command to manually redownload files again.
99
+ After the initial download of files, running `bundle install` again will keep existing downloads without overwriting them unless you use the [`bundle-download`](#bundler-download-command) command to manually redownload files again.
94
100
 
95
101
  ### Bundler Download Command
96
102
 
97
- If you would like to redownload file from gem [`Downloadfile's`](#downloadfile) again, overwriting existing downloads, simply run:
103
+ If you would like to redownload files for all gems again, overwriting existing downloads, simply run:
104
+
105
+ ```
106
+ bundle download
107
+ ```
108
+
109
+ #### Options
98
110
 
99
- `bundle download`
111
+ ##### --keep-existing
100
112
 
101
- If you only want to download files if they didn't exist already, you could alternatively run:
113
+ If you only want to download files if they did not exist already, you could run:
114
+
115
+ ```
116
+ bundle download --keep-existing
117
+ ```
118
+
119
+ Example printout:
120
+
121
+ ```
122
+ Downloading /Users/User/.rvm/gems/ruby-2.7.1@bundler-download/gems/glimmer-cw-browser-chromium-1.0.0/Downloadfile
123
+ Download '/Users/User/.rvm/gems/ruby-2.7.1@bundler-download/gems/glimmer-cw-browser-chromium-1.0.0/vendor/jars/mac/com.make.chromium.cef.cocoa.macosx.x86_64_0.4.0.202005172227.jar' already exists! (run `bundle download` to redownload)
124
+ ```
102
125
 
103
- `bundle download --keep-existing`
126
+ ##### --all-operating-systems
127
+
128
+ If you want to download files for all operating systems (including ones other than the current platform), you could run:
129
+
130
+ ```
131
+ bundle download --all-operating-systems
132
+ ```
133
+
134
+ #### Subcommands
135
+
136
+ ##### help (alias: usage)
137
+
138
+ Run the `help` subcommand (or usage) to bring up usage instructions:
139
+
140
+ ```
141
+ bundle download help
142
+ ```
143
+
144
+ Prints:
145
+
146
+ ```
147
+ == bundler-download - Bundler Plugin - v1.1.0 ==
148
+ Commands/Subcommands:
149
+ bundle download help # Provide help by printing usage instructions
150
+ bundle download usage # (alias for help)
151
+ bundle download start # Start download
152
+ bundle download # (alias for start)
153
+ bundle download clear # Clear downloads by deleting them under all gems
154
+ bundle download clean # (alias for clear)
155
+ bundle download list # List downloads by printing Downloadfile content for all gems
156
+ bundle download show # Show downloaded files for all gems
157
+ ```
158
+
159
+ ##### clear (alias: clean)
160
+
161
+ Run the `clear` subcommand to clear downloads by deleting them under all gems:
162
+
163
+ ```
164
+ bundle download clear
165
+ ```
166
+
167
+ Example printout:
168
+
169
+ ```
170
+ Clearing /Users/User/.rvm/gems/ruby-2.7.1@bundler-download/gems/glimmer-cw-browser-chromium-1.0.0/Downloadfile
171
+ ```
172
+
173
+ ##### list
174
+
175
+ Run the `list` subcommand to list downloads by printing Downloadfile content for all gems:
176
+
177
+ ```
178
+ bundle download list
179
+ ```
180
+
181
+ Example printout:
182
+
183
+ ```
184
+ Listing /Users/User/.rvm/gems/ruby-2.7.1@bundler-download/gems/glimmer-cw-browser-chromium-1.0.0/Downloadfile
185
+ download 'http://dl.maketechnology.io/chromium-cef/rls/repository/plugins/com.make.chromium.cef.gtk.linux.x86_64_0.4.0.202005172227.jar',
186
+ to: 'vendor/jars/linux', os: 'linux'
187
+ download 'http://dl.maketechnology.io/chromium-cef/rls/repository/plugins/com.make.chromium.cef.cocoa.macosx.x86_64_0.4.0.202005172227.jar',
188
+ to: 'vendor/jars/mac', os: 'mac'
189
+ download 'http://dl.maketechnology.io/chromium-cef/rls/repository/plugins/com.make.chromium.cef.win32.win32.x86_64_0.4.0.202005172227.jar',
190
+ to: 'vendor/jars/windows', os: 'windows'
191
+ ```
192
+
193
+ ##### show
194
+
195
+ Run the `show` subcommand to show downloaded files for all gems:
196
+
197
+ ```
198
+ bundle download show
199
+ ```
200
+
201
+ Example printout:
202
+
203
+ ```
204
+ Showing downloaded files for /Users/User/.rvm/gems/ruby-2.7.1@bundler-download/gems/glimmer-cw-browser-chromium-1.0.0/Downloadfile
205
+ 54070695 /Users/User/.rvm/gems/ruby-2.7.1@bundler-download/gems/glimmer-cw-browser-chromium-1.0.0/vendor/jars/mac/com.make.chromium.cef.cocoa.macosx.x86_64_0.4.0.202005172227.jar
206
+ ```
104
207
 
105
208
  ## Contributing to bundler-download
106
209
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.1.0
File without changes
@@ -2,17 +2,17 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: bundler-download 1.0.0 ruby lib
5
+ # stub: bundler-download 1.1.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "bundler-download".freeze
9
- s.version = "1.0.0"
9
+ s.version = "1.1.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["AndyMaleh".freeze]
14
- s.date = "2020-09-22"
15
- s.description = "Bundler plugin for auto-downloading specified extra files after gem install".freeze
14
+ s.date = "2020-09-23"
15
+ s.description = "bundler-download is a Bundler plugin for auto-downloading gem-specified extra files (e.g. large file downloads) on `bundle install` from a `Downloadfile`".freeze
16
16
  s.email = "andy.am@gmail.com".freeze
17
17
  s.executables = ["bundler-download".freeze]
18
18
  s.extra_rdoc_files = [
@@ -35,32 +35,33 @@ Gem::Specification.new do |s|
35
35
  ]
36
36
  s.homepage = "http://github.com/AndyObtiva/bundler-download".freeze
37
37
  s.licenses = ["MIT".freeze]
38
- s.rubygems_version = "3.1.2".freeze
39
- s.summary = "Bundler plugin for auto-downloading specified extra files after gem install".freeze
38
+ s.post_install_message = "*** bundler-download post install message ***\nSome gems have a Downloadfile! Follow the instructions below to download their files. \nAdd `plugin 'bundler-download'` to Gemfile and run `bundle install` \nor alternatively just run `bundle plugin install bundler-download`. \nAfterwards, run `bundle install` and extra gem files will be downloaded automatically.".freeze
39
+ s.rubygems_version = "3.1.4".freeze
40
+ s.summary = "bundler-download is a Bundler plugin for auto-downloading specified extra files on `bundle install`".freeze
40
41
 
41
42
  if s.respond_to? :specification_version then
42
43
  s.specification_version = 4
43
44
  end
44
45
 
45
46
  if s.respond_to? :add_runtime_dependency then
46
- s.add_runtime_dependency(%q<bundler>.freeze, [">= 2.0.0"])
47
- s.add_runtime_dependency(%q<httparty>.freeze, ["~> 0.18.1"])
48
- s.add_runtime_dependency(%q<download>.freeze, ["~> 1.1.0"])
49
- s.add_runtime_dependency(%q<tty-progressbar>.freeze, ["~> 0.17.0"])
47
+ s.add_runtime_dependency(%q<bundler>.freeze, [">= 2.0.0", "< 3.0.0"])
48
+ s.add_runtime_dependency(%q<download>.freeze, [">= 1.1.0", "< 2.0.0"])
49
+ s.add_runtime_dependency(%q<httparty>.freeze, [">= 0.18.1", "< 2.0.0"])
50
+ s.add_runtime_dependency(%q<os>.freeze, [">= 1.1.1", "< 2.0.0"])
51
+ s.add_runtime_dependency(%q<tty-progressbar>.freeze, [">= 0.17.0", "< 2.0.0"])
50
52
  s.add_development_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
51
- s.add_development_dependency(%q<rdoc>.freeze, ["~> 3.12"])
52
53
  s.add_development_dependency(%q<jeweler>.freeze, [">= 2.3.5"])
53
54
  s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
54
55
  s.add_development_dependency(%q<puts_debuggerer>.freeze, [">= 0"])
55
56
  s.add_development_dependency(%q<pessimize>.freeze, [">= 0"])
56
57
  s.add_development_dependency(%q<rake-tui>.freeze, [">= 0"])
57
58
  else
58
- s.add_dependency(%q<bundler>.freeze, [">= 2.0.0"])
59
- s.add_dependency(%q<httparty>.freeze, ["~> 0.18.1"])
60
- s.add_dependency(%q<download>.freeze, ["~> 1.1.0"])
61
- s.add_dependency(%q<tty-progressbar>.freeze, ["~> 0.17.0"])
59
+ s.add_dependency(%q<bundler>.freeze, [">= 2.0.0", "< 3.0.0"])
60
+ s.add_dependency(%q<download>.freeze, [">= 1.1.0", "< 2.0.0"])
61
+ s.add_dependency(%q<httparty>.freeze, [">= 0.18.1", "< 2.0.0"])
62
+ s.add_dependency(%q<os>.freeze, [">= 1.1.1", "< 2.0.0"])
63
+ s.add_dependency(%q<tty-progressbar>.freeze, [">= 0.17.0", "< 2.0.0"])
62
64
  s.add_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
63
- s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
64
65
  s.add_dependency(%q<jeweler>.freeze, [">= 2.3.5"])
65
66
  s.add_dependency(%q<simplecov>.freeze, [">= 0"])
66
67
  s.add_dependency(%q<puts_debuggerer>.freeze, [">= 0"])
@@ -23,6 +23,7 @@ require 'bundler'
23
23
  require 'download'
24
24
  require 'fileutils'
25
25
  require 'httparty'
26
+ require 'os'
26
27
  require 'tty-progressbar'
27
28
 
28
29
  $LOAD_PATH.unshift(File.expand_path('..', __FILE__))
@@ -25,6 +25,16 @@ module Download
25
25
  class Object
26
26
  DOWNLOAD_CHUNK_SIZE = 1_048_576
27
27
 
28
+ def os
29
+ options.to_h[:os]
30
+ end
31
+
32
+ def delete(hash={})
33
+ set_multi(hash)
34
+
35
+ File.delete(file_path) if File.exist?(file_path)
36
+ end
37
+
28
38
  def start(hash={})
29
39
  set_multi(hash)
30
40
  return puts("Download '#{file_path}' already exists! (run `bundle download` to redownload)") if options.keys.include?('--keep_existing') && File.exist?(file_path)
@@ -1,14 +1,42 @@
1
+ # Copyright (c) 2020 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
1
22
  module Bundler
2
23
  class Download < Bundler::Plugin::API
3
24
  command "download"
4
25
 
5
26
  def exec(command, args)
6
27
  begin
28
+ subcommand = extract_subcommand(args) || 'start'
29
+ return puts("Invalid subcommand: #{subcommand} \nValid `bundle download` subcommands are: #{Bundler::Downloadfile::SUBCOMMANDS.join(' / ')}") unless Bundler::Downloadfile::SUBCOMMANDS.include?(subcommand)
7
30
  downloadfiles = Dir.glob(File.join(Gem.dir, 'gems', '**', 'Downloadfile')).to_a
8
31
  puts 'No gems were found with Downloadfile.' if downloadfiles.empty?
9
32
  downloadfiles.each do |downloadfile|
10
- puts "Processing #{downloadfile}"
11
- Bundler::Downloadfile.new(File.read(downloadfile), gem_path: File.dirname(downloadfile), keep_existing: args.include?('--keep-existing')).call
33
+ bundler_downloadfile = Bundler::Downloadfile.new(
34
+ downloadfile,
35
+ gem_path: File.dirname(downloadfile),
36
+ keep_existing: args.include?('--keep-existing'),
37
+ all_operating_systems: args.include?('--all-operating-systems'),
38
+ )
39
+ bundler_downloadfile.send(subcommand)
12
40
  end
13
41
  true
14
42
  rescue => e
@@ -16,5 +44,11 @@ module Bundler
16
44
  false
17
45
  end
18
46
  end
47
+
48
+ private
49
+
50
+ def extract_subcommand(args)
51
+ args.detect {|arg| !arg.start_with?('-')}
52
+ end
19
53
  end
20
54
  end
@@ -1,22 +1,99 @@
1
+ # Copyright (c) 2020 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
1
22
  module Bundler
2
- class Downloadfile
23
+ class Downloadfile
24
+ attr_reader :file, :file_content, :gem_path, :keep_existing
3
25
 
4
- def initialize(file_content, gem_path:, keep_existing:)
26
+ HELP = <<~MULTI_LINE_STRING
27
+ == bundler-download - Bundler Plugin - v#{File.read(File.expand_path('../../../VERSION', __FILE__)).strip} ==
28
+ Commands/Subcommands:
29
+ bundle download help # Provide help by printing usage instructions
30
+ bundle download usage # (alias for help)
31
+ bundle download start # Start download
32
+ bundle download # (alias for start)
33
+ bundle download clear # Clear downloads by deleting them under all gems
34
+ bundle download clean # (alias for clear)
35
+ bundle download list # List downloads by printing Downloadfile content for all gems
36
+ bundle download show # Show downloaded files for all gems
37
+ MULTI_LINE_STRING
38
+
39
+ SUPPORTED_OPERATING_SYSTEMS = %w[mac windows linux]
40
+ PLATFORM_OS = SUPPORTED_OPERATING_SYSTEMS.detect {|os| OS.send("#{os}?")}
41
+ SUBCOMMANDS = %w[start clear clean help usage list show]
42
+
43
+ def initialize(file, gem_path:, keep_existing: nil, all_operating_systems: nil)
44
+ @file = file
45
+ @file_content = File.read(@file)
5
46
  @gem_path = gem_path
6
- @file_content = file_content
7
47
  @keep_existing = keep_existing
48
+ @all_operating_systems = all_operating_systems
49
+ @downloads = []
50
+ interpret
8
51
  end
9
52
 
10
- def download(uri, to:'')
53
+ def download(uri, to:'', os: nil)
11
54
  directory = File.join(@gem_path, to)
12
55
  FileUtils.mkdir_p(directory)
13
- options = {}
56
+ os = SUPPORTED_OPERATING_SYSTEMS.detect {|system| os.to_s.downcase == system}
57
+ options = {os: os}
14
58
  options['--keep_existing'] = nil if @keep_existing
15
- ::Download.file(uri, directory, options)
59
+ @downloads << ::Download::Object.new(
60
+ url: uri,
61
+ path: directory,
62
+ options: options
63
+ )
16
64
  end
17
65
 
18
- def call
66
+ def interpret
19
67
  instance_eval(@file_content)
20
68
  end
69
+
70
+ def start
71
+ puts "Downloading #{file}"
72
+ @downloads.select {|download| @all_operating_systems || download.os.nil? || download.os == PLATFORM_OS }.each(&:start)
73
+ end
74
+
75
+ def clear
76
+ puts "Clearing #{file}"
77
+ @downloads.each(&:delete)
78
+ end
79
+ alias clean clear
80
+
81
+ def help
82
+ puts HELP
83
+ end
84
+ alias usage help
85
+
86
+ def list
87
+ puts "Listing #{file}"
88
+ puts @file_content
89
+ end
90
+
91
+ def show
92
+ puts "Showing downloaded files for #{file}"
93
+ @downloads.each do |download|
94
+ file = download.file_path
95
+ puts "#{File.size(file)} #{file}" if File.exist?(file)
96
+ end
97
+ end
21
98
  end
22
99
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bundler-download
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - AndyMaleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-22 00:00:00.000000000 Z
11
+ date: 2020-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -17,6 +17,9 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 2.0.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 3.0.0
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -24,48 +27,89 @@ dependencies:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: 2.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 3.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: download
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 1.1.0
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: 2.0.0
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 1.1.0
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: 2.0.0
27
53
  - !ruby/object:Gem::Dependency
28
54
  name: httparty
29
55
  requirement: !ruby/object:Gem::Requirement
30
56
  requirements:
31
- - - "~>"
57
+ - - ">="
32
58
  - !ruby/object:Gem::Version
33
59
  version: 0.18.1
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: 2.0.0
34
63
  type: :runtime
35
64
  prerelease: false
36
65
  version_requirements: !ruby/object:Gem::Requirement
37
66
  requirements:
38
- - - "~>"
67
+ - - ">="
39
68
  - !ruby/object:Gem::Version
40
69
  version: 0.18.1
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: 2.0.0
41
73
  - !ruby/object:Gem::Dependency
42
- name: download
74
+ name: os
43
75
  requirement: !ruby/object:Gem::Requirement
44
76
  requirements:
45
- - - "~>"
77
+ - - ">="
46
78
  - !ruby/object:Gem::Version
47
- version: 1.1.0
79
+ version: 1.1.1
80
+ - - "<"
81
+ - !ruby/object:Gem::Version
82
+ version: 2.0.0
48
83
  type: :runtime
49
84
  prerelease: false
50
85
  version_requirements: !ruby/object:Gem::Requirement
51
86
  requirements:
52
- - - "~>"
87
+ - - ">="
53
88
  - !ruby/object:Gem::Version
54
- version: 1.1.0
89
+ version: 1.1.1
90
+ - - "<"
91
+ - !ruby/object:Gem::Version
92
+ version: 2.0.0
55
93
  - !ruby/object:Gem::Dependency
56
94
  name: tty-progressbar
57
95
  requirement: !ruby/object:Gem::Requirement
58
96
  requirements:
59
- - - "~>"
97
+ - - ">="
60
98
  - !ruby/object:Gem::Version
61
99
  version: 0.17.0
100
+ - - "<"
101
+ - !ruby/object:Gem::Version
102
+ version: 2.0.0
62
103
  type: :runtime
63
104
  prerelease: false
64
105
  version_requirements: !ruby/object:Gem::Requirement
65
106
  requirements:
66
- - - "~>"
107
+ - - ">="
67
108
  - !ruby/object:Gem::Version
68
109
  version: 0.17.0
110
+ - - "<"
111
+ - !ruby/object:Gem::Version
112
+ version: 2.0.0
69
113
  - !ruby/object:Gem::Dependency
70
114
  name: rspec
71
115
  requirement: !ruby/object:Gem::Requirement
@@ -80,20 +124,6 @@ dependencies:
80
124
  - - "~>"
81
125
  - !ruby/object:Gem::Version
82
126
  version: 3.5.0
83
- - !ruby/object:Gem::Dependency
84
- name: rdoc
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '3.12'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '3.12'
97
127
  - !ruby/object:Gem::Dependency
98
128
  name: jeweler
99
129
  requirement: !ruby/object:Gem::Requirement
@@ -164,7 +194,8 @@ dependencies:
164
194
  - - ">="
165
195
  - !ruby/object:Gem::Version
166
196
  version: '0'
167
- description: Bundler plugin for auto-downloading specified extra files after gem install
197
+ description: bundler-download is a Bundler plugin for auto-downloading gem-specified
198
+ extra files (e.g. large file downloads) on `bundle install` from a `Downloadfile`
168
199
  email: andy.am@gmail.com
169
200
  executables:
170
201
  - bundler-download
@@ -189,7 +220,11 @@ homepage: http://github.com/AndyObtiva/bundler-download
189
220
  licenses:
190
221
  - MIT
191
222
  metadata: {}
192
- post_install_message:
223
+ post_install_message: "*** bundler-download post install message ***\nSome gems have
224
+ a Downloadfile! Follow the instructions below to download their files. \nAdd `plugin
225
+ 'bundler-download'` to Gemfile and run `bundle install` \nor alternatively just
226
+ run `bundle plugin install bundler-download`. \nAfterwards, run `bundle install`
227
+ and extra gem files will be downloaded automatically."
193
228
  rdoc_options: []
194
229
  require_paths:
195
230
  - lib
@@ -204,8 +239,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
204
239
  - !ruby/object:Gem::Version
205
240
  version: '0'
206
241
  requirements: []
207
- rubygems_version: 3.1.2
242
+ rubygems_version: 3.1.4
208
243
  signing_key:
209
244
  specification_version: 4
210
- summary: Bundler plugin for auto-downloading specified extra files after gem install
245
+ summary: bundler-download is a Bundler plugin for auto-downloading specified extra
246
+ files on `bundle install`
211
247
  test_files: []