pannier 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b499e4d8880444acab12e7c82236e70102645d60
4
- data.tar.gz: 9fc7791e4d6f6d2de4a7aad64bae4b2249932241
3
+ metadata.gz: 8446bb452a6e9dac934bda3bea546d78a4522be0
4
+ data.tar.gz: 33ffee121ef5394d3f21b5b83cda927ff71f9b56
5
5
  SHA512:
6
- metadata.gz: 46f440d5c44c3dfb30489c42532840afd4b397e0a6bdad58f35f8614a3dd3e39204b34b5b2007ce899465fe268b9e20e08db404116aeac197f89a44787f8a585
7
- data.tar.gz: 9e208521ae8caa253f9a52899a7c4b0ead6d9618b7e166848a42e8d1bb87b965af0ad26483dbaf38fa583859b9cc2cb0a10c436e6d613d072d3f582d1f4b8ef9
6
+ metadata.gz: 07a9fbfb6d7146d26ac14993f78813f978e768af192e0fd73b5fc938459407c4296803aa837af7b301cd817a3e43abd80bc38b86e49976bd5a53104b5f8cdd0c
7
+ data.tar.gz: a3213222ce4ca0dfedf894e7b96e158355187a32d1cb1893d432a57665aade8b4988d7556a344ddea6c20aa1759d8e32532733ced8eb603618ec3139811c4aa8
data/README.md CHANGED
@@ -6,12 +6,28 @@ Pannier is a general-purpose Ruby asset processing tool. Its goal is to
6
6
  work the same way in any Rack environment. No Rails glue, no mandatory
7
7
  JavaScript or CSS libraries, preprocessors or gems.
8
8
 
9
+ The configuration DSL was inspired by — but is ultimately quite
10
+ different from — [rake-pipeline][rp]. The config describes a Rack
11
+ application that handles asset processing (modification of file contents
12
+ and file names, file concatenation). No decisions about
13
+ uglifiers/optimisers/preprocessors have been made; that part is up to you.
14
+
15
+ The interface for plugging any asset processing library into Pannier is very
16
+ basic and inspired by Rack. The lack of a plugin ecosystem that binds you to any
17
+ particular preprocessor is considered a feature.
18
+
19
+ Pannier can also act as a Rack application that
20
+ can be mounted (mapped to a path) within another Rack application, so
21
+ it can serve your assets too. In that case, there are helper methods for
22
+ including your assets in the view layer. Adding your own view helpers is
23
+ easy too.
24
+
9
25
  ## Why?
10
26
 
11
27
  The Rails asset pipeline essentially consists of [Sprockets][sprockets]
12
28
  and a bunch of inscrutable Rails coupling. You generate a new Rails app
13
29
  and everything is setup for you. We call this "convention over configuration".
14
- It's a fine idea, but as soon as you need to ditch one of more of those
30
+ It's a fine idea, but as soon as you need to ditch one or more of those
15
31
  conventions you'll be frustrated.
16
32
 
17
33
  I have found the
@@ -21,23 +37,6 @@ true where asset processing in Rails is concerned. I want explicit control
21
37
  over my assets and I don't mind spending a small amount of time on
22
38
  configuration.
23
39
 
24
- ## What does it do?
25
-
26
- The configuration DSL was inspired by — but is ultimately quite
27
- different from — [rake-pipeline][rp]. The config describes a Rack
28
- application that handles asset processing (modification of file contents
29
- and file names, file concatenation). No decisions about
30
- uglifiers/optimisers/preprocessors have been made; that part is up to you.
31
- The interface to plug any of these libraries into Pannier is very simple
32
- and inspired by Rack. The lack of a plugin ecosystem that binds you to any
33
- particular preprocessor is considered a feature.
34
-
35
- In some cases the above is all you'll need, but the application
36
- can also be mounted (mapped to a path) within another Rack application, so
37
- it can serve your assets too. In that case, there are helper methods for
38
- including your assets in the view layer. Adding your own view helpers is
39
- easy too.
40
-
41
40
  ## Getting started
42
41
 
43
42
  Create a config file in the root of your project named `.assets.rb`. The
@@ -61,6 +60,33 @@ package :styles do
61
60
  end
62
61
  ```
63
62
 
63
+ ```bash
64
+ $ pannier process
65
+ ```
66
+
67
+ Your stylesheets have now been quuxified and concatenated into
68
+ `public/main.min.css`.
69
+
70
+ Modifiers are just Ruby *callables*; blocks, procs, lambdas, objects that
71
+ respond to `call`. They are executed in order of specification. Here's a
72
+ typical use case.
73
+
74
+ ```ruby
75
+ require 'digest'
76
+ # ...
77
+
78
+ package :styles do
79
+ # ...
80
+
81
+ modify { |content, _| [foo(content), _] }
82
+ modify { |content, _| [bar(content), _] }
83
+ concat 'main'
84
+ modify do |content, basename|
85
+ [content, "#{basename}-#{Digest::MD5.hexdigest(content)}.min.css"]
86
+ end
87
+ end
88
+ ```
89
+
64
90
  To understand further, you can [browse the current features on relish][relish].
65
91
 
66
92
  ## Contributing
@@ -13,32 +13,4 @@ module Pannier
13
13
  block = eval("proc { #{config} }", TOPLEVEL_BINDING, path, 0)
14
14
  App.build(env_name, &block)
15
15
  end
16
-
17
- def self.prime(path, env_name = 'development')
18
- app = load(path, env_name)
19
- if manifest_exists?(app, env_name)
20
- manifest = load_manifest(app, env_name)
21
- app.prime!(manifest)
22
- end
23
- app
24
- end
25
-
26
- def self.rackup!(ru, path = './.assets.rb')
27
- app = prime(path, ENV['RACK_ENV'])
28
- ru.map(app.root) { run(app) }
29
- app
30
- end
31
-
32
- private
33
-
34
- def self.load_manifest(app, env_name)
35
- path = File.join(app.input_path, ".assets.#{env_name}.json")
36
- json = File.read(path)
37
- MultiJson.load(json, :symbolize_keys => true)
38
- end
39
-
40
- def self.manifest_exists?(app, env_name)
41
- path = File.join(app.input_path, ".assets.#{env_name}.json")
42
- File.exists?(path)
43
- end
44
16
  end
@@ -9,7 +9,7 @@ module Pannier
9
9
  class App
10
10
  extend DSL
11
11
 
12
- attr_reader :env, :root, :input_path, :output_path,
12
+ attr_reader :env, :input_path, :output_path,
13
13
  :behaviors, :packages
14
14
 
15
15
  def initialize(env_name = 'development')
@@ -17,10 +17,6 @@ module Pannier
17
17
  @behaviors, @packages, @root = {}, [], '/'
18
18
  end
19
19
 
20
- def set_root(path)
21
- @root = path
22
- end
23
-
24
20
  def set_input(path)
25
21
  @input_path = File.expand_path(path)
26
22
  end
@@ -57,10 +53,6 @@ module Pannier
57
53
  @locals ||= OpenStruct.new(:env => env.name)
58
54
  end
59
55
 
60
- def root(path)
61
- set_root(path)
62
- end
63
-
64
56
  def input(path)
65
57
  set_input(path)
66
58
  end
@@ -5,3 +5,33 @@ require 'pannier/mounted/app'
5
5
  require 'pannier/mounted/asset'
6
6
  require 'pannier/mounted/package'
7
7
  require 'pannier/mounted/tags'
8
+
9
+ module Pannier
10
+ def self.prime(path, env_name = 'development')
11
+ app = load(path, env_name)
12
+ if manifest_exists?(app, env_name)
13
+ manifest = load_manifest(app, env_name)
14
+ app.prime!(manifest)
15
+ end
16
+ app
17
+ end
18
+
19
+ def self.rackup(ru, path = './.assets.rb')
20
+ app = prime(path, ENV['RACK_ENV'])
21
+ ru.map(app.mount_path) { run(app) }
22
+ app
23
+ end
24
+
25
+ private
26
+
27
+ def self.load_manifest(app, env_name)
28
+ path = File.join(app.input_path, ".assets.#{env_name}.json")
29
+ json = File.read(path)
30
+ MultiJson.load(json, :symbolize_keys => true)
31
+ end
32
+
33
+ def self.manifest_exists?(app, env_name)
34
+ path = File.join(app.input_path, ".assets.#{env_name}.json")
35
+ File.exists?(path)
36
+ end
37
+ end
@@ -3,6 +3,12 @@ require 'pannier/app'
3
3
  module Pannier
4
4
  class App
5
5
 
6
+ attr_reader :mount_path
7
+
8
+ def set_mount_path(path)
9
+ @mount_path = path
10
+ end
11
+
6
12
  def prime!(manifest)
7
13
  manifest.each do |name, paths|
8
14
  if (pkg = self[name])
@@ -28,5 +34,13 @@ module Pannier
28
34
  handler.call(env)
29
35
  end
30
36
 
37
+ dsl do
38
+
39
+ def mount(path)
40
+ set_mount_path(path)
41
+ end
42
+
43
+ end
44
+
31
45
  end
32
46
  end
@@ -4,9 +4,10 @@ module Pannier
4
4
  class Asset
5
5
 
6
6
  def serve_from(app)
7
- asset_path, app_output_path = Pathname.new(path), Pathname.new(app.output_path)
8
- relative_path = asset_path.relative_path_from(app_output_path)
9
- File.join(app.root, relative_path.to_s)
7
+ asset_path = Pathname.new(path)
8
+ app_output_path = Pathname.new(app.output_path)
9
+ relative_path = asset_path.relative_path_from(app_output_path)
10
+ File.join(*['/', app.mount_path, relative_path.to_s].compact)
10
11
  end
11
12
 
12
13
  end
@@ -1,4 +1,3 @@
1
- require 'delegate'
2
1
  require 'ostruct'
3
2
  require 'pathname'
4
3
  require 'set'
@@ -1,3 +1,3 @@
1
1
  module Pannier
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pannier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Corcoran
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-02 00:00:00.000000000 Z
11
+ date: 2014-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -192,9 +192,8 @@ dependencies:
192
192
  version: 0.6.2
193
193
  description: |
194
194
  Pannier is a Ruby tool for the processing of web assets like CSS
195
- and JavaScript files, both programatically and from the command line. It can
196
- be used as a standalone asset organizer or mounted within any Rack-compatible
197
- application.
195
+ and JavaScript files. It can be used as a standalone asset organizer or mounted
196
+ within any Rack-compatible application.
198
197
  email:
199
198
  - joecorcoran@gmail.com
200
199
  executables:
@@ -243,7 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
243
242
  version: '0'
244
243
  requirements: []
245
244
  rubyforge_project:
246
- rubygems_version: 2.2.1
245
+ rubygems_version: 2.2.0
247
246
  signing_key:
248
247
  specification_version: 4
249
248
  summary: A simple, portable asset processing tool for Ruby web apps