torba 0.4.2 → 0.5.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
  SHA1:
3
- metadata.gz: 0878e9a6c25f1fceb393accb9e2a96aaec4bcf55
4
- data.tar.gz: 3b2b74f577118a0c8c029d3b2164571138914e48
3
+ metadata.gz: 243b26b521d8876f13cb0fc7fcda5caf65250340
4
+ data.tar.gz: 7f0d92ece3a5cc9a0bc4cd7659c1d719bf8ceaa2
5
5
  SHA512:
6
- metadata.gz: 5fa8a769f0755c370e4f21ff6bd9872e5d407ed74def48264bb835eba144227bdac4d1c7c5b68effd5b5b22613274e0b9f7a59cd63455aa51aa49d862407a931
7
- data.tar.gz: 595971c2856af882d28734f64555e6845420859c23c0118722f52b72049812a8432080f3837a084bdfaa9696f56a0f76a30fc6d2bef835f52d286f9d30ab5c5e
6
+ metadata.gz: 10938f10db53cb9e5161afda6cc47c7a935039522bb2c8085b6f2a6459af4988b7127b01edc540c8330df6f856348b1d644d8e3426698ad92f38655ab491a63f
7
+ data.tar.gz: 1acaab48fc64102ee7f550dce7e5fa4d7fbf46dfa9196e9b4b069087c4f45cde780376b7dd313ddfb68cb046b781b6f55cf3675fab05fae1e85129d5904ab67f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  ## Unreleased
2
2
 
3
+ ## Version 0.5.0
4
+
5
+ ### Upgrading notes
6
+
7
+ Rails users are advised to remove manual execution of `torba pack` from
8
+ their deployment scripts, since the command now is a part of
9
+ `rake assets:precompile`.
10
+
11
+ ### Enhancements
12
+
13
+ * Support deployment to Heroku
14
+ * `torba pack` is automatically injected into `rake assets:precompile`
15
+ in Rails applications
16
+ * `torba install` command is a mapping for `torba pack`
17
+
18
+ ### Bug fixes
19
+
20
+ * Retry 5 times if fetching a remote file fails
21
+
3
22
  ## Version 0.4.2
4
23
 
5
24
  ### Bug fixes
data/README.md CHANGED
@@ -17,7 +17,7 @@ Production ready.
17
17
 
18
18
  ## Documentation
19
19
 
20
- [Released version](http://rubydoc.info/gems/torba/0.4.2)
20
+ [Released version](http://rubydoc.info/gems/torba/0.5.0)
21
21
 
22
22
  ## Why
23
23
 
@@ -251,10 +251,53 @@ default), except that Torba does have a way to specify exact list of files to im
251
251
 
252
252
  ## Deployment
253
253
 
254
- 1. Specify `TORBA_HOME_PATH` env variable pointing to a persistent directory writable by your
255
- deploy user. For Capistrano it should be `shared/`.
256
- 2. Add `bundle exec torba pack` to your deployment script right after `bundle install`. It's safe
257
- and fairly cheap to run it unconditionally on each deployment.
254
+ In Rails apps, Torba automatically hooks into the existing `assets:precompile`
255
+ Rake task to ensure that `torba pack` is executed. This means that Rails
256
+ deployments will "just work", although there are some optimizations you can make
257
+ as explained below.
258
+
259
+ ### Heroku
260
+
261
+ You will need to specify some config vars to ensure Torba's files are placed in
262
+ locations suitable for the Heroku platform.
263
+
264
+ `TORBA_HOME_PATH` should be within your app so that Torba's assets are included
265
+ in the slug.
266
+
267
+ `TORBA_CACHE_PATH` should make use of the `tmp/cache/assets` directory. This is
268
+ where the Ruby buildpack expects cached files to be stored related to the
269
+ `assets:precompile` step. This way Torba doesn't have to download packages fresh
270
+ every time.
271
+
272
+ ```bash
273
+ heroku config:set TORBA_HOME_PATH=vendor/torba TORBA_CACHE_PATH=tmp/cache/assets/torba
274
+ ```
275
+
276
+ Now your Heroku app is good to go.
277
+
278
+ ### Capistrano
279
+
280
+ Specify the `TORBA_HOME_PATH` env variable pointing to a persistent directory
281
+ writable by your deploy user and shared across releases. Capistrano's `shared`
282
+ directory is good for this.
283
+
284
+ For example:
285
+
286
+ ```bash
287
+ export TORBA_HOME_PATH=/var/www/my_app/shared/torba
288
+ ```
289
+
290
+ There is no need to add a symlink.
291
+
292
+ ### Troubleshooting
293
+
294
+ If you are getting an error like `Your Torba is not packed yet` when trying to
295
+ run `rake assets:precompile` (or `bin/rails assets:precompile` in Rails 5),
296
+ set the `TORBA_DONT_VERIFY` environment variable, like this:
297
+
298
+ ```bash
299
+ TORBA_DONT_VERIFY=1 bin/rake assets:precompile
300
+ ```
258
301
 
259
302
  [bower]: http://bower.io/
260
303
  [sprockets]: https://github.com/rails/sprockets/
data/lib/torba/cli.rb CHANGED
@@ -8,6 +8,7 @@ module Torba
8
8
  Torba.pretty_errors { Torba.pack }
9
9
  Torba.ui.confirm "Torba has been packed!"
10
10
  end
11
+ map install: :pack
11
12
 
12
13
  desc "verify", "check if all packages are prepared"
13
14
  def verify
data/lib/torba/rails.rb CHANGED
@@ -4,5 +4,10 @@ module Torba
4
4
  Rails.application.config.assets.paths.concat(Torba.load_path)
5
5
  Rails.application.config.assets.precompile.concat(Torba.non_js_css_logical_paths)
6
6
  end
7
+
8
+ rake_tasks do
9
+ require "torba/rake_task"
10
+ Torba::RakeTask.new("torba:pack", :before => "assets:precompile")
11
+ end
7
12
  end
8
13
  end
@@ -0,0 +1,53 @@
1
+ require "torba"
2
+ require "rake/tasklib"
3
+
4
+ module Torba
5
+ # Calling Torba::RakeTask.new defines a "torba:pack" Rake task that does the
6
+ # same thing as `bundle exec torba pack`. Furthermore, if the :before option
7
+ # is specified, the "torba:pack" task will be installed as a prerequisite to
8
+ # the specified task.
9
+ #
10
+ # This is useful for deployment because it allows for packing as part of the
11
+ # "assets:precompile" flow, which platforms like Heroku already know to
12
+ # invoke. By hooking into "assets:precompile" as a prerequisite, Torba can
13
+ # participate automatically, with no change to the deployment process.
14
+ #
15
+ # Typical use is as follows:
16
+ #
17
+ # # In Rakefile
18
+ # require "torba/rake_task"
19
+ # Torba::RakeTask.new("torba:pack", :before => "assets:precompile")
20
+ #
21
+ # Note that when you require "torba/rails" in a Rails app, this Rake task is
22
+ # installed for you automatically. You only need to install the task yourself
23
+ # if you are using something different, like Sinatra.
24
+ #
25
+ class RakeTask < Rake::TaskLib
26
+ attr_reader :torba_pack_task_name
27
+
28
+ def initialize(name="torba:pack", options={})
29
+ @torba_pack_task_name = name
30
+ define_task
31
+ install_as_prerequisite(options[:before]) if options[:before]
32
+ end
33
+
34
+ private
35
+
36
+ def define_task
37
+ desc "Download and prepare all packages defined in Torbafile"
38
+ task torba_pack_task_name do
39
+ Torba.pretty_errors { Torba.pack }
40
+ end
41
+ end
42
+
43
+ def install_as_prerequisite(other_task)
44
+ ensure_task_defined(other_task)
45
+ Rake::Task[other_task].enhance([torba_pack_task_name])
46
+ end
47
+
48
+ def ensure_task_defined(other_task)
49
+ return if Rake::Task.task_defined?(other_task)
50
+ Rake::Task.define_task(other_task)
51
+ end
52
+ end
53
+ end
@@ -14,7 +14,7 @@ module Torba
14
14
 
15
15
  Torba.ui.info "downloading '#{url}'"
16
16
 
17
- command = "curl -Lf -o #{tempfile.path} #{url}"
17
+ command = "curl --retry 5 --retry-max-time 60 -Lf -o #{tempfile.path} #{url}"
18
18
  system(command) || raise(Errors::ShellCommandFailed.new(command))
19
19
 
20
20
  tempfile
data/lib/torba/verify.rb CHANGED
@@ -1,7 +1,14 @@
1
1
  require "torba"
2
2
 
3
- if STDOUT.tty?
4
- Torba.pretty_errors { Torba.verify }
5
- else
6
- Torba.verify
3
+ # We purposely skip verification during Rake execution, because Rake is used to
4
+ # run the Torba:RakeTask during the "assets:precompile" stage of deployment. In
5
+ # this case it is OK that the Torbafile hasn't been packed yet, because we are
6
+ # about to do so.
7
+ #
8
+ unless ENV["TORBA_DONT_VERIFY"] || defined?(Rake::Task)
9
+ if STDOUT.tty?
10
+ Torba.pretty_errors { Torba.verify }
11
+ else
12
+ Torba.verify
13
+ end
7
14
  end
@@ -0,0 +1,56 @@
1
+ require "test_helper"
2
+ require "torba/rake_task"
3
+
4
+ module Torba
5
+ class RakeTaskTest < Minitest::Test
6
+ include Rake::DSL
7
+
8
+ def setup
9
+ task "environment"
10
+ task "assets:precompile" => "environment"
11
+ Torba::RakeTask.new("torba:pack", :before => "assets:precompile")
12
+ end
13
+
14
+ def teardown
15
+ Rake::Task.clear
16
+ end
17
+
18
+ def test_torba_pack_task_is_defined
19
+ assert(Rake::Task.task_defined?("torba:pack"))
20
+ end
21
+
22
+ def test_torba_pack_task_has_description
23
+ torba_task = Rake::Task["torba:pack"]
24
+ torba_task.comment =~ /Torbafile/
25
+ end
26
+
27
+ def test_torba_pack_is_installed_as_prerequisite
28
+ precompile_task = Rake::Task["assets:precompile"]
29
+ assert_equal(%w(environment torba:pack), precompile_task.prerequisites)
30
+ end
31
+
32
+ def test_invoking_torba_pack
33
+ Torba.expects(:pack).once
34
+ Rake::Task["torba:pack"].invoke
35
+ end
36
+
37
+ def test_defines_task_if_doesnt_exist
38
+ Rake::Task.clear
39
+ Torba::RakeTask.new("torba:pack", :before => "something:else")
40
+
41
+ assert(Rake::Task.task_defined?("something:else"))
42
+ other_task = Rake::Task["something:else"]
43
+ assert_equal(%w(torba:pack), other_task.prerequisites)
44
+ end
45
+
46
+ def test_alternative_task_name_can_be_specified
47
+ Rake::Task.clear
48
+ Torba::RakeTask.new("package")
49
+
50
+ assert(Rake::Task.task_defined?("package"))
51
+
52
+ Torba.expects(:pack).once
53
+ Rake::Task["package"].invoke
54
+ end
55
+ end
56
+ end
data/test/test_helper.rb CHANGED
@@ -3,6 +3,7 @@ require "torba"
3
3
  require "torba/remote_sources/common"
4
4
 
5
5
  require "minitest/autorun"
6
+ require "mocha/mini_test"
6
7
  require "tmpdir"
7
8
  require "fileutils"
8
9
 
data/torba.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "torba"
3
- spec.version = "0.4.2"
3
+ spec.version = "0.5.0"
4
4
  spec.authors = ["Andrii Malyshko"]
5
5
  spec.email = ["mail@nashbridges.me"]
6
6
  spec.description = "Bundler for Sprockets"
@@ -19,4 +19,5 @@ Gem::Specification.new do |spec|
19
19
  spec.add_development_dependency "bundler", "~> 1.6"
20
20
  spec.add_development_dependency "rake", "~> 10.0"
21
21
  spec.add_development_dependency "minitest", "~> 5.4"
22
+ spec.add_development_dependency "mocha"
22
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: torba
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrii Malyshko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-19 00:00:00.000000000 Z
11
+ date: 2016-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '5.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: mocha
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: Bundler for Sprockets
70
84
  email:
71
85
  - mail@nashbridges.me
@@ -91,6 +105,7 @@ files:
91
105
  - lib/torba/manifest.rb
92
106
  - lib/torba/package.rb
93
107
  - lib/torba/rails.rb
108
+ - lib/torba/rake_task.rb
94
109
  - lib/torba/remote_sources/common.rb
95
110
  - lib/torba/remote_sources/get_file.rb
96
111
  - lib/torba/remote_sources/github_release.rb
@@ -106,6 +121,7 @@ files:
106
121
  - test/package/import_list_test.rb
107
122
  - test/package/logical_paths_test.rb
108
123
  - test/package_test.rb
124
+ - test/rake_task_test.rb
109
125
  - test/remote_sources/common_test.rb
110
126
  - test/remote_sources/get_file_test.rb
111
127
  - test/remote_sources/github_release_test.rb
@@ -146,6 +162,7 @@ test_files:
146
162
  - test/package/import_list_test.rb
147
163
  - test/package/logical_paths_test.rb
148
164
  - test/package_test.rb
165
+ - test/rake_task_test.rb
149
166
  - test/remote_sources/common_test.rb
150
167
  - test/remote_sources/get_file_test.rb
151
168
  - test/remote_sources/github_release_test.rb