nanoc-sprockets3 1.0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 52611d2cfa03fe313781712dca2de841e01ec055
4
+ data.tar.gz: cd41d0f48ce71ca8f7efd4dcbe4b175a1780843f
5
+ SHA512:
6
+ metadata.gz: 77775cc7d0fc9129c2d353febd6dbbc3c764db8bcfecaeb1d926869d5a913f759eab8830757932bf917fa9a3669072f4cb51f0a17c522d41352a5be6819a0940
7
+ data.tar.gz: 15b1e2e5f8fe870792731e199a5f2e2287ad348db9aa18c17c788ae1aead1074771415e7bbaffe097e73c0a56e86025ae0d1bf3a43f1fef7ad4d5a14cbf2391c
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .idea
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem 'rake'
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Remi Barraquand
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,142 @@
1
+ # Nanoc::Sprockets3
2
+
3
+ A nanoc extension to use [Sprockets 3.x][sprockets], a Ruby library for compiling and serving web assets.
4
+
5
+ You are using [nanoc-sprockets-filter][nanoc-sprockets-filter] or [nanoc-sprockets-datasource][nanoc-sprockets] and
6
+ you would like to use Sprockets 3.x to take advantages of the news features then [nanoc-sprockets3] is
7
+ what you are looking for !
8
+
9
+ **Note:** *Unlike [nanoc-sprockets-filter] or [nanoc-sprockets] that lack a support
10
+ for dependency tracking, which is annoying when working with partials and/or livereload, [nanoc-sprockets3] is built
11
+ on top of [Sprockets 3.x][sprockets] and integrates seamlessly with Nanoc3/nanoc4 and livereload.
12
+ With [nanoc-sprockets3] no need to clear the cache or purge the output to regenerate your assets whenever partials
13
+ or dependencies change !*
14
+
15
+ ## Installation
16
+
17
+ Add this line to your application's Gemfile:
18
+
19
+ gem 'nanoc-sprockets3'
20
+
21
+ And then execute:
22
+
23
+ $ bundle
24
+
25
+ Or install it yourself as:
26
+
27
+ $ gem install nanoc-sprockets3
28
+
29
+ ## Configuration
30
+
31
+ [nanoc-sprockets3][nanoc-sprockets3] does not require any mandatory configuration, however you may want to configure it
32
+ for your needs. Currently you can configure [nanoc-sprockets3][nanoc-sprockets3] with two parameters:
33
+ - *prefix* which is the prefix to give to all assets
34
+ - *environment* which is the Sprockets environment to use
35
+
36
+ The default environment is configured with the following paths
37
+ - content/assets/
38
+ - vendor/assets/
39
+ - static/assets/
40
+
41
+ concatenated with the following sub-paths
42
+ - stylesheets
43
+ - stylesheets/pages
44
+ - stylesheets/vendor
45
+ - javascripts
46
+ - javascripts/pages
47
+ - javascripts/vendor
48
+ - fonts
49
+
50
+ To load the default [nanoc-sprockets] configuration do as follow:
51
+
52
+ ```ruby
53
+ include Nanoc::Sprockets::Helper
54
+
55
+ ```
56
+
57
+ To fully customize the [nanoc-sprockets] configuration do as follow:
58
+
59
+ ```ruby
60
+ include Nanoc::Sprockets::Helper
61
+
62
+ Nanoc::Sprockets::Helper.configure do |config|
63
+ config.environment = ::Sprockets::Environment.new(File.expand_path('.')) do |env|
64
+ env.append_path 'app/assets/javascripts'
65
+ env.append_path 'lib/assets/javascripts'
66
+ env.append_path 'vendor/assets/jquery'
67
+ end
68
+ config.prefix = '/assets'
69
+ end
70
+ ```
71
+
72
+ **Note:** you can find more advanced configuration on the [sprockets website][sprockets].
73
+
74
+ ## Usage
75
+
76
+ We recommend the use of [uglifier][uglifier] gem to minify javascripts.
77
+ You may use any other compressor supported by Sprockets.
78
+
79
+ Add compile rule for stylesheets and javascripts, `css_compressor`and `js_compressor` is optional
80
+ and value can be replaced by any compressor supported by Sprockets.
81
+ Add route rule for all assets and use `Nanoc::Sprockets::Helper.asset_path(item)` to generate file path.
82
+
83
+ ```ruby
84
+ compile %r{/assets/(stylesheets|javascripts)/.+/} do
85
+ filter :sprockets, {
86
+ :css_compressor => :scss,
87
+ :js_compressor => :uglifier
88
+ }
89
+ end
90
+
91
+ route '/assets/*/' do
92
+ Nanoc::Sprockets::Helper.asset_path(item)
93
+ end
94
+ ```
95
+
96
+ You can use [nanoc-gzip-filter][nanoc-gzip-filter] to create a
97
+ gzipped version of stylesheets and javascripts files.
98
+
99
+ ```ruby
100
+ compile %r{/assets/(stylesheets|javascripts)/.+/} do
101
+ filter :sprockets, {
102
+ :css_compressor => :scss,
103
+ :js_compressor => :uglifier
104
+ }
105
+ snapshot :text
106
+ filter :gzip
107
+ end
108
+
109
+ route '/assets/*/', :snapshot => :text do
110
+ Nanoc::Sprockets::Helper.asset_path(item)
111
+ end
112
+
113
+ route '/assets/*/' do
114
+ Nanoc::Sprockets::Helper.asset_path(item) + '.gz'
115
+ end
116
+ ```
117
+
118
+ **Note:** Don't forget to require 'nanoc-sprockets' (e.g in `lib/default.rb`)
119
+
120
+
121
+ ## Contributing
122
+
123
+ 1. Fork it ( http://github.com/<my-github-username>/nanoc-sprockets/fork )
124
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
125
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
126
+ 4. Push to the branch (`git push origin my-new-feature`)
127
+ 5. Create new Pull Request
128
+
129
+ ## Acknowledgement
130
+
131
+ I wrote this plugin to bring the support of Sprockets 3.x to nanoc and take benefit of the dependencies tracking system
132
+ introduced in Sprockets 3.x.
133
+
134
+ This plugin is inspired by [nanoc-sprockets-filter][nanoc-sprockets-filter] which support Sprockets 2.x but lacks a support
135
+ for dependency tracking which makes it annoying to use with livereload and partials.
136
+
137
+ [nanoc-sprockets3]: https://github.com/barraq/nanoc-sprockets "Sprockets 3.x support for nanoc"
138
+ [sprockets]: https://github.com/sstephenson/sprockets "Rack-based asset packaging"
139
+ [nanoc-sprockets-filter]: https://github.com/yannlugrin/nanoc-sprockets-filter "A nanoc filter to use Sprocket 2.x"
140
+ [nanoc-sprockets]: https://github.com/stormz/nanoc-sprockets "Use sprockets 2.x as a datasource for nanoc"
141
+ [nanoc-gzip-filter]: https://github.com/yannlugrin/nanoc-gzip-filter "A Nanoc filter to gzip content"
142
+ [uglifier]: https://github.com/lautis/uglifier "Ruby wrapper for UglifyJS JavaScript compressor"
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+
3
+ module Nanoc::Sprockets
4
+
5
+ class Filter < Nanoc::Filter
6
+
7
+ identifier :sprockets
8
+ type :text
9
+
10
+ def environment
11
+ @environment ||= Nanoc::Sprockets::Helper.environment
12
+ end
13
+
14
+ def run(content, params = {})
15
+ filename = File.basename(@item[:filename])
16
+
17
+ environment.css_compressor = params[:css_compressor]
18
+ environment.js_compressor = params[:js_compressor]
19
+
20
+ if asset = environment[filename]
21
+ update_dependencies_for_current_item(asset.metadata[:dependency_paths])
22
+ asset.to_s
23
+ else
24
+ raise "error locating #{filename} / #{@item[:filename]}"
25
+ end
26
+ end
27
+
28
+ def update_dependencies_for_current_item(dependencies)
29
+ dependencies.each do |dep|
30
+ item = imported_filename_to_item(dep)
31
+ depend_on([item]) unless item.nil? or item.identifier == @item.identifier
32
+ end
33
+ end
34
+
35
+ def imported_filename_to_item(filename)
36
+ @items.find do |i|
37
+ i.raw_filename &&
38
+ Pathname.new(i.raw_filename).realpath == Pathname.new(filename).realpath
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,61 @@
1
+ # encoding: utf-8
2
+
3
+ require 'sprockets'
4
+
5
+ module Nanoc::Sprockets
6
+
7
+ module Helper
8
+
9
+ DEFAULT_ASSETS_DIRS = [
10
+ 'stylesheets', 'stylesheets/pages', 'stylesheets/vendor',
11
+ 'javascripts', 'javascripts/pages', 'javascripts/vendor',
12
+ 'fonts'
13
+ ]
14
+
15
+ DEFAULT_ASSETS_PATHS = [
16
+ 'content/assets/', 'vendor/assets/', 'static/assets/'
17
+ ]
18
+
19
+ class << self
20
+ # Set the Sprockets environment to search for assets.
21
+ # This defaults to the context's #environment method.
22
+ def environment
23
+ @environment ||= ::Sprockets::Environment.new(File.expand_path('.')) do |env|
24
+ paths = DEFAULT_ASSETS_DIRS + DEFAULT_ASSETS_PATHS.map{|p| DEFAULT_ASSETS_DIRS.map{|f| "#{p}#{f}"}}.flatten
25
+ paths.each{ |path| env.append_path path }
26
+ end
27
+ end
28
+ attr_writer :environment
29
+
30
+ # The base URL the Sprocket environment is mapped to.
31
+ # This defaults to '/assets'.
32
+ def prefix
33
+ @prefix ||= '/assets'
34
+ end
35
+ attr_writer :prefix
36
+
37
+ end
38
+
39
+ # Convience method for configuring Nanoc::Sprockets::Helpers.
40
+ def configure
41
+ yield self
42
+ end
43
+
44
+ # Returns the path to an item or a filename either in the Sprockets environment.
45
+ def asset_path(item_or_filename, options = {})
46
+ if item_or_filename.is_a?(::Nanoc::Item)
47
+ filename = item_or_filename[:filename]
48
+ else
49
+ filename = item_or_filename
50
+ end
51
+ filename = File.basename(filename).gsub(/^(\w+\.\w+).*/, '\1')
52
+
53
+ if asset = Helper.environment[filename]
54
+ File.join(Helper.prefix, asset.logical_path)
55
+ else
56
+ raise "error locating #{filename}."
57
+ end
58
+ end
59
+ end
60
+
61
+ end
@@ -0,0 +1,5 @@
1
+ module Nanoc
2
+ module Sprockets
3
+ VERSION = "1.0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,10 @@
1
+ # encoding: utf-8
2
+
3
+ module Nanoc
4
+ module Sprockets
5
+ end
6
+ end
7
+
8
+ require "nanoc/sprockets/version"
9
+ require "nanoc/sprockets/helper"
10
+ require "nanoc/sprockets/filter"
@@ -0,0 +1,3 @@
1
+ # encoding: utf-8
2
+
3
+ require 'nanoc/sprockets'
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'nanoc/sprockets/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'nanoc-sprockets3'
8
+ spec.version = Nanoc::Sprockets::VERSION
9
+ spec.homepage = 'https://github.com/barraq/nanoc-sprockets'
10
+ spec.summary = %q{Sprockets 3.x support for nanoc.}
11
+ spec.description = %q{Provides Sprockets 3.x helper and filter for nanoc.}
12
+
13
+ spec.authors = ["Remi Barraquand"]
14
+ spec.email = ["dev@remibarraquand.com"]
15
+ spec.license = "MIT"
16
+
17
+ spec.required_ruby_version = '>= 1.9.3'
18
+
19
+ spec.files = `git ls-files -z`.split("\x0")
20
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
22
+ spec.require_paths = ["lib"]
23
+
24
+ spec.rdoc_options = [ '--main', 'README.md' ]
25
+ spec.extra_rdoc_files = [ 'LICENSE', 'README.md' ]
26
+
27
+ spec.add_runtime_dependency 'sprockets', '~> 3.0.0.beta'
28
+
29
+ spec.add_development_dependency 'bundler', '~> 1.5'
30
+ end
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nanoc-sprockets3
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Remi Barraquand
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sprockets
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 3.0.0.beta
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 3.0.0.beta
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.5'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.5'
41
+ description: Provides Sprockets 3.x helper and filter for nanoc.
42
+ email:
43
+ - dev@remibarraquand.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files:
47
+ - LICENSE
48
+ - README.md
49
+ files:
50
+ - ".gitignore"
51
+ - Gemfile
52
+ - LICENSE
53
+ - README.md
54
+ - Rakefile
55
+ - lib/nanoc-sprockets.rb
56
+ - lib/nanoc/sprockets.rb
57
+ - lib/nanoc/sprockets/filter.rb
58
+ - lib/nanoc/sprockets/helper.rb
59
+ - lib/nanoc/sprockets/version.rb
60
+ - nanoc-sprockets.gemspec
61
+ homepage: https://github.com/barraq/nanoc-sprockets
62
+ licenses:
63
+ - MIT
64
+ metadata: {}
65
+ post_install_message:
66
+ rdoc_options:
67
+ - "--main"
68
+ - README.md
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 1.9.3
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 2.4.5
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: Sprockets 3.x support for nanoc.
87
+ test_files: []