nutils 0.10.0 → 0.11.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.
data/README.md CHANGED
@@ -6,7 +6,7 @@ A set of utilities for nanoc 3.
6
6
 
7
7
  * **beautify** Retabs HTML code. Tested in Mac OS X 10.6, Ruby 1.8.7 and Nanoc 3.1.6, 3.2.1.
8
8
  * **crop** Extracts the specified rectangle from the image.. Tested in Mac OS X 10.6, Ruby 1.8.7 and Nanoc 3.1.6, 3.2.1.
9
- * **sprockets** Runs the content through [Sprockets](http://getsprockets.org). Tested in Mac OS X 10.6, Ruby 1.8.7, Nanoc 3.1.6, 3.2.1 and Sprockets 1.
9
+ * **sprockets** Runs the content through [Sprockets](http://getsprockets.org). Tested in Mac OS X 10.6, Ruby 1.8.7, 1.9.2, Nanoc 3.2.2 and Sprockets.
10
10
  * **svg_to_png** Converts an SVG to PNG. Tested in Mac OS X 10.6, Ruby 1.8.7, Nanoc 3.1.6, 3.2.1 and Batik 1.7.
11
11
  * **yuicompressor** Compress the content with [YUI Compressor](http://developer.yahoo.com/yui/compressor/). Tested in Mac OS X 10.6, Ruby 1.8.7, Nanoc 3.1.6, 3.2.1 and yui-compressor 0.9.1.
12
12
  * **zass** Deprecated. You **should** use the **sass** filter from nanoc 3.1.9+
@@ -17,5 +17,9 @@ A set of utilities for nanoc 3.
17
17
  ## Helpers
18
18
  * **load_rules** Allows to use multiple files with Nanoc rules. It works with nanoc 3.1 and 3.2.
19
19
 
20
+ ## Collaborators
21
+
22
+ * [Ximus](https://github.com/ximus)
23
+
20
24
  ## Contact
21
25
  You can reach me at <arnau.siches@gmail.com>.
@@ -1,43 +1,88 @@
1
1
  module Nutils
2
2
  module Filters
3
-
4
3
  # @author Arnau Siches
5
4
  #
6
- # @version 1.0.0
5
+ # @version 2.0.0
7
6
  #
8
7
  # @note Requires «sprockets»
9
8
  class SprocketWheel < Nanoc3::Filter
10
-
11
9
  identifier :sprockets
12
10
  type :text
13
-
14
- # Concatenate the Javascript content through [Sprockets](http://getsprockets.org).
11
+ # Concatenate the Javascript, CoffeeScript or Sass content through [Sprockets](http://getsprockets.org).
15
12
  # This method takes no options.
16
13
  #
17
14
  # @param [String] content The content to filter.
18
15
  #
16
+ # @todo Use the content to build a Sprocket Asset instead of just get the
17
+ # `@item[:content_filename]`.
18
+ #
19
19
  # @return [String] The filtered content.
20
20
  def run(content, params={})
21
- require "sprockets"
22
- require "tempfile"
23
-
24
- tmp_file = Tempfile.new("sprockets.tmp", File.dirname(@item[:filename]))
25
-
26
- tmp_file.puts content
27
- tmp_file.open
28
-
29
- source_files = tmp_file.path
30
- load_path = params[:load_path] || File.dirname(@item[:filename])
31
-
21
+ require 'sprockets'
22
+ Gem.loaded_specs['sprockets'].version < Gem::Version.create('2.0') ? backwards(content, params) : default(content, params)
23
+ end
24
+
25
+ private
26
+
27
+ def default(content, params)
28
+ filename = Pathname.new(@item[:content_filename])
29
+
30
+ # Create a temp file with the content received to give the desired
31
+ # content to Sprockets on the same context.
32
+ tmp_filename = filename.dirname + ('tmp_' + filename.basename.to_s)
33
+ tmp_filename.open('w') { |io| io.puts content }
34
+
35
+ load_path = params[:load_path] || []
36
+ load_path << tmp_filename.dirname.realpath
37
+
38
+ env = ::Sprockets::Environment.new(tmp_filename.dirname.realpath)
39
+
40
+ # Assign load paths to Sprockets
41
+ load_path.each do |path|
42
+ env.append_path(File.expand_path(path))
43
+ end
44
+
45
+ # Get the Sprockets BundledAsset object for the content
46
+ main_asset = env.find_asset(tmp_filename.realpath)
47
+
48
+ # Get Nanoc::Item equivalent for each dependence managed by Sprockets
49
+ dependencies = main_asset.dependencies.inject([]) do |dep, asset|
50
+ item = @items.find { |i| asset.pathname == Pathname.new(i[:content_filename]).realpath }
51
+ dep << item unless item.nil?
52
+ dep
53
+ end
54
+ # Register Nanoc dependencies
55
+ depend_on(dependencies) unless dependencies.nil?
56
+
57
+ # Output compiled asset
58
+ main_asset.to_s
59
+ ensure
60
+ tmp_filename.delete if tmp_filename.exist?
61
+ end
62
+
63
+ def backwards(content, params)
64
+ puts "You are using Sprockets 1.0.0. It's strongly recommended you upgrade to Sprockets >= 2.0.0"
65
+ puts "Nutils 1.0.0 will *not* support Sprockets 1.0.0"
66
+
67
+ filename = Pathname.new(@item[:content_filename])
68
+
69
+ # Create a temp file with the content received to give the desired
70
+ # content to Sprockets on the same context.
71
+ tmp_filename = filename.dirname + ('tmp_' + filename.basename.to_s)
72
+ tmp_filename.open('w') { |io| io.puts content }
73
+
74
+ load_path = params[:load_path] || []
75
+ load_path << tmp_filename.dirname.realpath.to_s
32
76
  params.merge!({
33
77
  :load_path => load_path,
34
- :source_files => [source_files]
78
+ :source_files => [tmp_filename.realpath.to_s]
35
79
  })
36
-
80
+
37
81
  secretary = ::Sprockets::Secretary.new(params)
38
82
  secretary.install_assets if params[:asset_root]
39
- secretary.concatenation
40
-
83
+ secretary.concatenation.to_s
84
+ ensure
85
+ tmp_filename.delete if tmp_filename.exist?
41
86
  end
42
87
  end
43
88
  end
data/lib/nutils.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  module Nutils
4
4
 
5
5
  # The current nutils version.
6
- VERSION = '0.10.0'
6
+ VERSION = '0.11.0'
7
7
 
8
8
  end
9
9
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nutils
3
3
  version: !ruby/object:Gem::Version
4
- hash: 55
4
+ hash: 51
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 10
8
+ - 11
9
9
  - 0
10
- version: 0.10.0
10
+ version: 0.11.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Arnau Siches
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-17 00:00:00 -04:00
18
+ date: 2011-09-30 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency