bundler-download 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 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: []