torba 0.5.1 → 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.
Files changed (45) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +0 -1
  3. data/.travis.yml +6 -2
  4. data/.yardopts +2 -0
  5. data/CHANGELOG.md +59 -0
  6. data/README.md +16 -78
  7. data/lib/torba.rb +15 -1
  8. data/lib/torba/cli.rb +45 -0
  9. data/lib/torba/css_url_to_erb_asset_path.rb +5 -1
  10. data/lib/torba/manifest.rb +11 -1
  11. data/lib/torba/package.rb +12 -8
  12. data/lib/torba/rake_task.rb +10 -3
  13. data/lib/torba/remote_sources/common.rb +1 -1
  14. data/lib/torba/remote_sources/targz.rb +1 -1
  15. data/lib/torba/ui.rb +13 -0
  16. data/lib/torba/verify.rb +4 -11
  17. data/test/acceptance-cli/open_test.rb +101 -0
  18. data/test/acceptance-cli/pack_test.rb +49 -0
  19. data/test/acceptance-cli/show_test.rb +61 -0
  20. data/test/acceptance-cli/verify_test.rb +25 -0
  21. data/test/css_url_to_erb_asset_path_test.rb +5 -0
  22. data/test/fixtures/home_path/01/trumbowyg/icons-2x.png +0 -0
  23. data/test/fixtures/home_path/01/trumbowyg/icons.png +0 -0
  24. data/test/fixtures/home_path/01/trumbowyg/trumbowyg.css.erb +471 -0
  25. data/test/fixtures/home_path/01/trumbowyg/trumbowyg.js +1124 -0
  26. data/test/fixtures/home_path/02/lo_dash/lodash.js +2793 -0
  27. data/test/fixtures/home_path/03/bourbon/_border-image.scss +59 -0
  28. data/test/fixtures/home_path/03/bourbon/_font-source-declaration.scss +43 -0
  29. data/test/fixtures/home_path/03/bourbon/_retina-image.scss +25 -0
  30. data/test/fixtures/torbafiles/01_gh_release.rb +8 -0
  31. data/test/fixtures/torbafiles/01_image_asset_not_specified.rb +7 -0
  32. data/test/fixtures/torbafiles/01_targz.rb +7 -0
  33. data/test/fixtures/torbafiles/01_zip.rb +7 -0
  34. data/test/fixtures/torbafiles/02_npm.rb +1 -0
  35. data/test/fixtures/torbafiles/03_not_existed_assets.rb +5 -0
  36. data/test/fixtures/torbafiles/04_similar_names.rb +2 -0
  37. data/test/manifest_test.rb +27 -0
  38. data/test/package_test.rb +10 -0
  39. data/test/rake_task_test.rb +13 -0
  40. data/test/test_helper.rb +55 -8
  41. data/test/torba_test.rb +13 -0
  42. data/torba.gemspec +5 -4
  43. metadata +73 -18
  44. data/lib/torba/rails.rb +0 -13
  45. data/test/acceptance_test.rb +0 -87
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 23e2abb7390731963e44e6ebdcb5bedd5d27e57f
4
- data.tar.gz: 9a9489f4884a201b605276a00020608dd3a64818
2
+ SHA256:
3
+ metadata.gz: 69ed394ec8286280a4b97265fb95dd36abb8bc5a57439ae1941963105186a433
4
+ data.tar.gz: f46c8d171e7b3c5e2771cf58358db711b3fe3b1c05b1a55b5bff79da76485bab
5
5
  SHA512:
6
- metadata.gz: 72a08348248dd5590983fc017f4c6852fd47d566a17f15e23602f1cb86548ad518392bf62fe860e3229d388ec52a55c3bff3f0139ce4c81f92492361b659057b
7
- data.tar.gz: 3349f620649fad89b2767ad4ff1be60e443459b212d2cf7b236122897f85de603db9b0e5d73a5a7366a50443cb04e936cd511e2ff8a1aae5cb9f940d38a139a2
6
+ metadata.gz: 7e44c0cf8d1026f64f4dc75b8c5e6bda0f684c5ea8a5359f3238a057b5427562f819f5762a563f85989d450b3a1593a2d730797f25202276685667b6ccebb7a4
7
+ data.tar.gz: cfa4245b61895fad5fd22449e56933cfa001adeb140412ac298807aeb3fc4f12335737f748959c50c18140f68b494148745ae072821e8057d7062898607bf2ee
data/.gitignore CHANGED
@@ -1,4 +1,3 @@
1
- test/Torbafile
2
1
  /.bundle/
3
2
  /.yardoc
4
3
  /Gemfile.lock
data/.travis.yml CHANGED
@@ -4,6 +4,10 @@ rvm:
4
4
  - 2.0.0
5
5
  - 2.1
6
6
  - 2.2
7
- - jruby-19mode
8
- - rbx-2
7
+ - 2.3
8
+ - 2.4
9
+ - 2.5
10
+ - 2.6
11
+ - 2.7
12
+ - jruby
9
13
  bundler_args: --without doc debug
data/.yardopts CHANGED
@@ -1 +1,3 @@
1
1
  --no-private
2
+ -
3
+ CHANGELOG.md
data/CHANGELOG.md CHANGED
@@ -1,5 +1,64 @@
1
1
  ## Unreleased
2
2
 
3
+ ## Version 1.1.0
4
+
5
+ ### Enhancements
6
+
7
+ * Thor dependency has been relaxed to support Rails 6.x.
8
+
9
+ ## Version 1.0.1
10
+
11
+ ### Bug fixes
12
+
13
+ * Fix unpacking tar.gz when running on unpriveleged containers
14
+
15
+ ## Version 1.0.0
16
+
17
+ ### Breaking changes
18
+
19
+ * Rails support has been removed. Use [torba-rails][torba-rails] instead.
20
+ * `torba/verify` no longer checks, whether it is executed within Rake task
21
+ or not. This was a workaround for Rails support, which is no longer a goal
22
+ of this gem.
23
+ * `torba/verify` no longer checks `TORBA_DONT_VERIFY` env variable. Same as
24
+ above.
25
+
26
+ ### Upgrading notes
27
+
28
+ If you are a non-Rails user, this should be a non-breaking update. In rare cases,
29
+ when you depend on old behaviour of `torba/verify`, please, add the conditionals
30
+ to your application code.
31
+
32
+ Rails users should:
33
+
34
+ 1. Replace `gem "torba"` with `gem "torba-rails"` in the Gemfile.
35
+ 2. Remove `require "torba/verify"` from `boot.rb`.
36
+ 3. Remove `require "torba/rails"` from `application.rb`.
37
+ 4. Unset obsolete `TORBA_DONT_VERIFY` env variable if present.
38
+
39
+ ### Enhancements
40
+
41
+ * Rake task accepts a block to be executed before packing process
42
+
43
+ [torba-rails]: https://github.com/torba-rb/torba-rails
44
+
45
+ ## Version 0.7.0
46
+
47
+ ### Enhancements
48
+
49
+ * `torba show` command
50
+ * `torba open` command
51
+
52
+ ## Version 0.6.0
53
+
54
+ ### Enhancements
55
+
56
+ * Torba.cache_path= setter
57
+
58
+ ### Bug fixes
59
+
60
+ * Handle stylesheets that mention nonexisting assets (e.g. with SCSS variables)
61
+
3
62
  ## Version 0.5.1
4
63
 
5
64
  ### 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.5.1)
20
+ [Released version](http://rubydoc.info/gems/torba/1.1.0)
21
21
 
22
22
  ## Why
23
23
 
@@ -53,29 +53,20 @@ Problems with the Bower:
53
53
 
54
54
  ## Installation
55
55
 
56
- Add this line to your application's Gemfile and run `bundle`:
56
+ ### Rails
57
57
 
58
- ```ruby
59
- gem 'torba'
60
- ```
58
+ Use [torba-rails][torba-rails-github].
61
59
 
62
- ### Rails
60
+ ### Sinatra
63
61
 
64
- in boot.rb
62
+ See this [example project][sinatra-example].
65
63
 
66
- ```diff
67
- require 'bundler/setup' # Set up gems listed in the Gemfile.
68
- +require 'torba/verify'
69
- ```
64
+ ### Other Ruby application
70
65
 
71
- in config/application.rb
66
+ Add this line to your application's Gemfile and run bundle:
72
67
 
73
- ```diff
74
- # Require the gems listed in Gemfile, including any gems
75
- # you've limited to :test, :development, or :production.
76
- Bundler.require(*Rails.groups)
77
- +
78
- +require 'torba/rails'
68
+ ```ruby
69
+ gem 'torba'
79
70
  ```
80
71
 
81
72
  ## Usage
@@ -87,14 +78,8 @@ in config/application.rb
87
78
  3. Add "require" [Sprockets directives][sprockets-directives] to your "application.js"
88
79
  and/or "@import" [Sass directives][sass-import] to "application.css".
89
80
 
90
- 4. Non JS/CSS assets are automatically added to precompile list, nothing to do here.
91
-
92
81
  If any changes made to the Torbafile, run `bundle exec torba pack` again.
93
82
 
94
- ### Examples
95
-
96
- See fully configured [Rails application][rails-example].
97
-
98
83
  ### Torbafile
99
84
 
100
85
  Torbafile is an assets specification. It is a plain text file that contains one or more
@@ -179,6 +164,10 @@ You can omit the name, it will be equal to the package name:
179
164
  npm package: "coffee-script", version: "1.9.2"
180
165
  ```
181
166
 
167
+ ### Examples
168
+
169
+ See [Torbafiles][torbafile-examples] used for testing.
170
+
182
171
  ### "Packing the torba" process
183
172
 
184
173
  When you run `torba pack` the following happens:
@@ -248,58 +237,6 @@ gh_release "lightslider", source: "sachinchoolur/lightslider", tag: "1.1.2", imp
248
237
 
249
238
  In addition to this "path/" is treated as a shortcut for "path/**/*" glob pattern.
250
239
 
251
- Be careful to **import only that you really need**. Everything that is non JS or CSS asset is
252
- going to be precompiled by Sprockets and accessible publicly. See [Rails ticket][rails-ticket-vendoring]
253
- that explains this problem (and why Rails >= 4 precompiles only application.js/css in vendor by
254
- default), except that Torba does have a way to specify exact list of files to import.
255
-
256
- ## Deployment
257
-
258
- In Rails apps, Torba automatically hooks into the existing `assets:precompile`
259
- Rake task to ensure that `torba pack` is executed. This means that Rails
260
- deployments will "just work", although there are some optimizations you can make
261
- as explained below.
262
-
263
- ### Heroku
264
-
265
- You will need to specify some config vars to ensure Torba's files are placed in
266
- locations suitable for the Heroku platform.
267
-
268
- `TORBA_HOME_PATH` should be within your app so that Torba's assets are included
269
- in the slug.
270
-
271
- `TORBA_CACHE_PATH` should make use of the `tmp/cache/assets` directory. This is
272
- where the Ruby buildpack expects cached files to be stored related to the
273
- `assets:precompile` step. This way Torba doesn't have to download packages fresh
274
- every time.
275
-
276
- ```bash
277
- heroku config:set TORBA_HOME_PATH=vendor/torba TORBA_CACHE_PATH=tmp/cache/assets/torba
278
- ```
279
-
280
- Now your Heroku app is good to go.
281
-
282
- ### Capistrano
283
-
284
- Specify the `TORBA_HOME_PATH` env variable pointing to a persistent directory
285
- writable by your deploy user and shared across releases. Capistrano's `shared`
286
- directory is good for this.
287
-
288
- For Capistrano 3, you can set this up in `config/deploy.rb`:
289
- ```
290
- set :default_env, { torba_home_path: shared_path.join('vendor/torba') }
291
- ```
292
-
293
- ### Troubleshooting
294
-
295
- If you are getting an error like `Your Torba is not packed yet` when trying to
296
- run `rake assets:precompile` (or `bin/rails assets:precompile` in Rails 5),
297
- set the `TORBA_DONT_VERIFY` environment variable, like this:
298
-
299
- ```bash
300
- TORBA_DONT_VERIFY=1 bin/rake assets:precompile
301
- ```
302
-
303
240
  [bower]: http://bower.io/
304
241
  [sprockets]: https://github.com/rails/sprockets/
305
242
  [sprockets-load-path]: https://github.com/rails/sprockets#the-load-path
@@ -310,6 +247,7 @@ TORBA_DONT_VERIFY=1 bin/rake assets:precompile
310
247
  [rails-assets]: https://rails-assets.org/
311
248
  [bower-rails]: https://github.com/rharriso/bower-rails
312
249
  [semver]: http://semver.org/
313
- [rails-ticket-vendoring]: https://github.com/rails/rails/pull/7968
314
250
  [npm]: https://npmjs.com
315
- [rails-example]: https://github.com/torba-rb/rails-example
251
+ [torba-rails-github]: https://github.com/torba-rb/torba-rails
252
+ [sinatra-example]: https://github.com/xfalcox/sinatra-assets-seed
253
+ [torbafile-examples]: https://github.com/torba-rb/torba/tree/master/test/fixtures/torbafiles
data/lib/torba.rb CHANGED
@@ -30,6 +30,14 @@ module Torba
30
30
  @cache_path ||= ENV["TORBA_CACHE_PATH"] || File.join(home_path, "cache")
31
31
  end
32
32
 
33
+ # Override cache path with a new value
34
+ # @param val [String] new cache path
35
+ # @return [void]
36
+ # @since 0.6.0
37
+ def self.cache_path=(val)
38
+ @cache_path = val
39
+ end
40
+
33
41
  # @return [Ui]
34
42
  def self.ui
35
43
  @ui ||= Ui.new
@@ -70,6 +78,12 @@ module Torba
70
78
  Digest::SHA1.hexdigest(string)[0..7]
71
79
  end
72
80
 
81
+ # @see Manifest#find_packages_by_name
82
+ # @since 0.7.0
83
+ def self.find_packages_by_name(name)
84
+ manifest.find_packages_by_name(name)
85
+ end
86
+
73
87
  # @yield a block, converts common exceptions into useful messages
74
88
  def self.pretty_errors
75
89
  yield
@@ -90,7 +104,7 @@ module Torba
90
104
  ui.suggest "Make sure that the path has trailing '/' if its a directory."
91
105
  exit(false)
92
106
  rescue Errors::AssetNotFound => e
93
- ui.error "Couldn't find an asset with path '#{e.message}'."
107
+ ui.error "Unknown asset to process with path '#{e.message}'."
94
108
  ui.suggest "Make sure that you've imported all image/font assets mentioned in a stylesheet(-s)."
95
109
  exit(false)
96
110
  end
data/lib/torba/cli.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "thor"
2
+ require "shellwords"
2
3
  require "torba"
3
4
 
4
5
  module Torba
@@ -15,5 +16,49 @@ module Torba
15
16
  Torba.pretty_errors { Torba.verify }
16
17
  Torba.ui.confirm "Torba is prepared!"
17
18
  end
19
+
20
+ desc "show PACKAGE", "show the source location of a particular package"
21
+ def show(name)
22
+ Torba.pretty_errors do
23
+ Torba.pack
24
+ Torba.ui.info(find_package(name).load_path)
25
+ end
26
+ end
27
+
28
+ desc "open PACKAGE", "open a particular package in editor"
29
+ def open(name)
30
+ editor = [ENV["TORBA_EDITOR"], ENV["VISUAL"], ENV["EDITOR"]].find { |e| !e.nil? && !e.empty? }
31
+ unless editor
32
+ Torba.ui.error("To open a package, set $EDITOR or $TORBA_EDITOR")
33
+ exit(false)
34
+ end
35
+
36
+ Torba.pretty_errors do
37
+ Torba.pack
38
+
39
+ command = Shellwords.split(editor) << find_package(name).load_path
40
+ system(*command) || Torba.ui.error("Could not run '#{command.join(" ")}'")
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def find_package(name)
47
+ packages = Torba.find_packages_by_name(name)
48
+ case packages.size
49
+ when 0
50
+ Torba.ui.error "Could not find package '#{name}'."
51
+ exit(false)
52
+ when 1
53
+ packages.first
54
+ else
55
+ index = Torba.ui.choose_one(packages.map(&:name))
56
+ if index
57
+ packages[index]
58
+ else
59
+ exit(false)
60
+ end
61
+ end
62
+ end
18
63
  end
19
64
  end
@@ -52,7 +52,11 @@ module Torba
52
52
  content.gsub(URL_RE) do
53
53
  absolute_image_file_path = File.expand_path($2, File.dirname(file_path))
54
54
  sprockets_file_path = yield absolute_image_file_path
55
- "#{$1}<%= asset_path('#{sprockets_file_path}') %>#{$3}"
55
+ if sprockets_file_path
56
+ "#{$1}<%= asset_path('#{sprockets_file_path}') %>#{$3}"
57
+ else
58
+ $&
59
+ end
56
60
  end
57
61
  end
58
62
  end
@@ -15,6 +15,7 @@ module Torba
15
15
  end
16
16
  end
17
17
  end
18
+
18
19
  # Represents Torbafile.
19
20
  class Manifest
20
21
  # all packages defined in Torbafile
@@ -28,7 +29,7 @@ module Torba
28
29
  #
29
30
  # @overload self.build
30
31
  # Reads Torbafile from current directory
31
- def self.build(file_path = nil)
32
+ def self.build(file_path = ENV["TORBA_FILE"])
32
33
  file_path ||= File.join(Dir.pwd, "Torbafile")
33
34
 
34
35
  manifest = new
@@ -120,5 +121,14 @@ module Torba
120
121
  raise Errors::MissingPackages.new(missing)
121
122
  end
122
123
  end
124
+
125
+ # @return [Array<Package>] where each package name at least partially matches given name.
126
+ # @since 0.7.0
127
+ def find_packages_by_name(name)
128
+ re = Regexp.new(name, Regexp::IGNORECASE)
129
+ packages.find_all do |package|
130
+ package.name =~ re
131
+ end
132
+ end
123
133
  end
124
134
  end
data/lib/torba/package.rb CHANGED
@@ -155,18 +155,22 @@ module Torba
155
155
  end
156
156
 
157
157
  def process_stylesheets
158
- import_list.css_assets.each do |asset|
159
- content = File.read(asset.absolute_path)
160
-
161
- new_content = CssUrlToErbAssetPath.call(content, asset.absolute_path) do |image_file_path|
162
- image_asset = import_list.find_by_absolute_path(image_file_path)
163
- image_asset.logical_path
158
+ import_list.css_assets.each do |css_asset|
159
+ content = File.read(css_asset.absolute_path)
160
+
161
+ new_content = CssUrlToErbAssetPath.call(content, css_asset.absolute_path) do |asset_file_path|
162
+ if File.exist?(asset_file_path)
163
+ asset = import_list.find_by_absolute_path(asset_file_path)
164
+ asset.logical_path
165
+ else
166
+ nil
167
+ end
164
168
  end
165
169
 
166
170
  if content == new_content
167
- new_absolute_path = File.join(load_path, asset.logical_path)
171
+ new_absolute_path = File.join(load_path, css_asset.logical_path)
168
172
  else
169
- new_absolute_path = File.join(load_path, asset.logical_path + ".erb")
173
+ new_absolute_path = File.join(load_path, css_asset.logical_path + ".erb")
170
174
  end
171
175
 
172
176
  ensure_directory(new_absolute_path)
@@ -18,6 +18,12 @@ module Torba
18
18
  # require "torba/rake_task"
19
19
  # Torba::RakeTask.new("torba:pack", :before => "assets:precompile")
20
20
  #
21
+ # You can also provide a block, which will be executed before packing process:
22
+ #
23
+ # Torba::RakeTask.new do
24
+ # # some preconfiguration to be run when the "torba:pack" task is executed
25
+ # end
26
+ #
21
27
  # Note that when you require "torba/rails" in a Rails app, this Rake task is
22
28
  # installed for you automatically. You only need to install the task yourself
23
29
  # if you are using something different, like Sinatra.
@@ -25,17 +31,18 @@ module Torba
25
31
  class RakeTask < Rake::TaskLib
26
32
  attr_reader :torba_pack_task_name
27
33
 
28
- def initialize(name="torba:pack", options={})
34
+ def initialize(name="torba:pack", options={}, &before_pack)
29
35
  @torba_pack_task_name = name
30
- define_task
36
+ define_task(before_pack)
31
37
  install_as_prerequisite(options[:before]) if options[:before]
32
38
  end
33
39
 
34
40
  private
35
41
 
36
- def define_task
42
+ def define_task(before_pack_proc)
37
43
  desc "Download and prepare all packages defined in Torbafile"
38
44
  task torba_pack_task_name do
45
+ before_pack_proc.call if before_pack_proc
39
46
  Torba.pretty_errors { Torba.pack }
40
47
  end
41
48
  end