rack-pipeline 0.0.9 → 0.0.10

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: a7655da8b8d058c860f8952d72eb270802ea248f
4
- data.tar.gz: b65170c885f0feff182cbbd60797a84a265511c5
3
+ metadata.gz: fbe84807caa12bb5e61db1e0265cf6738773dfe8
4
+ data.tar.gz: 2b32c7ca07cc0a78ca28d2dc26ee64513ee13cc6
5
5
  SHA512:
6
- metadata.gz: 9bfae2e463038c6953805f4fd5b4ae86e9bda65b7c4bef3dba33fbe4ec66aac19051b85945bd60ce3c13dfec2ca1fb3e21678433cb47a538c37c821417ed1f5d
7
- data.tar.gz: 9f4b2f11106557b550fa51c6d39acf2bfcb039a5f04a14569d888b4062352f610762d8275b26dbffe5e85a7c831c7fed247021dbcfb931209e6fe88417e25ec6
6
+ metadata.gz: 85882ed222c507c7b341cdb7d4d35cf98f738761356f217d3772bd43b308d6b853c9862ee574a4f530f963168978dfc974895659e19b23cd046fcc070e4e1547
7
+ data.tar.gz: bd1791e0b871da0f89779b36336cb5c2a1f70c176d563de0bbdd54676d1f8c20815cccedaaaec4d25363951cefda73706d2c437b02471fb0bde838bab25f800e
@@ -17,7 +17,7 @@ module RackPipeline
17
17
 
18
18
  def assets_for(pipes, type, opts = {})
19
19
  Array(pipes).inject([]) do |all,pipe|
20
- all += Array(combine? ? "#{pipe}.#{type}" : assets[type][pipe].keys)
20
+ all += Array(settings[:combine] ? "#{pipe}.#{type}" : assets[type][pipe].keys)
21
21
  end.compact.uniq
22
22
  end
23
23
 
@@ -87,9 +87,9 @@ module RackPipeline
87
87
  end
88
88
 
89
89
  def prepare_pipe(path_info)
90
- file = path_info.sub(/^\/(.*)\??.*$/, '\1')
90
+ file = path_info.start_with?('/') ? path_info[1..-1] : path_info
91
91
  type = static_type(file) or return nil
92
- unless ready_file = get_or_compile(file, type)
92
+ unless ready_file = prepare_file(file, type)
93
93
  pipename = File.basename(file, '.*').to_sym
94
94
  if assets[type] && assets[type][pipename]
95
95
  ready_file = combine(assets[type][pipename], File.basename(file))
@@ -100,30 +100,25 @@ module RackPipeline
100
100
  raise MustRepopulate
101
101
  end
102
102
 
103
- def get_or_compile(source, type)
104
- result = nil
103
+ def prepare_file(source, type)
105
104
  assets[type].each do |pipe,files|
106
- result =
107
- case files[source]
108
- when :raw
109
- source
110
- when :source
111
- compile(source, File.basename(source, '.*') + ".#{type}")
112
- end
113
- break if result
105
+ case files[source]
106
+ when :raw
107
+ return source
108
+ when :source
109
+ return compile(source, File.basename(source, '.*') + ".#{type}")
110
+ end
114
111
  end
115
- result
112
+ nil
116
113
  end
117
114
 
118
115
  def file_kind(file)
119
116
  static_type(file) ? :raw : :source
120
117
  end
121
118
 
122
- def extract_files(globs)
123
- Array(globs).each_with_object({}) do |glob,all|
124
- Dir.glob(glob).sort.each do |file|
125
- all[file] = file_kind(file)
126
- end
119
+ def glob_files(dirs)
120
+ Dir.glob(dirs).sort.each_with_object({}) do |file,all|
121
+ all[file] = file_kind(file)
127
122
  end
128
123
  end
129
124
 
@@ -133,8 +128,8 @@ module RackPipeline
133
128
  STATIC_TYPES.each do |extname,type|
134
129
  pipes = settings[type]
135
130
  assets[type] = {}
136
- pipes.each do |pipe, globs|
137
- assets[type][pipe] = extract_files(globs)
131
+ pipes.each do |pipe, dirs|
132
+ assets[type][pipe] = glob_files(dirs)
138
133
  end
139
134
  end
140
135
  end
@@ -1,7 +1,23 @@
1
1
  module RackPipeline
2
2
  module Compiling
3
3
  def self.process(source, target)
4
- nil
4
+ ext = File.extname source
5
+ if compiler = compilers[ext]
6
+ require compiler[1]
7
+ Compiling.const_get(compiler[0]).process(source, target)
8
+ else
9
+ fail LoadError, "no compiler for #{source} => #{target}"
10
+ end
11
+ end
12
+
13
+ def self.register(ext, klass, feature)
14
+ compilers[ext] = [klass, feature]
15
+ end
16
+
17
+ def self.compilers
18
+ @compilers ||= {}
5
19
  end
6
20
  end
7
21
  end
22
+
23
+ RackPipeline::Compiling.register '.coffee', 'CoffeeScript', 'rack-pipeline/compiling/coffee-script'
@@ -0,0 +1,13 @@
1
+ require 'coffee-script'
2
+
3
+ module RackPipeline
4
+ module Compiling
5
+ module CoffeeScript
6
+ def self.process(source, target)
7
+ compiled = ::CoffeeScript.compile File.read(source)
8
+ File.write(target, compiled)
9
+ target
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,7 +1,24 @@
1
1
  module RackPipeline
2
2
  module Compressing
3
3
  def self.process(source, target)
4
- nil
4
+ ext = File.extname source
5
+ if compressor = compressors[ext]
6
+ require compressor[1]
7
+ Compressing.const_get(compressor[0]).process(source, target)
8
+ else
9
+ warn "no compressor found for #{source}"
10
+ source
11
+ end
12
+ end
13
+
14
+ def self.register(ext, klass, feature)
15
+ compressors[ext] = [klass, feature]
16
+ end
17
+
18
+ def self.compressors
19
+ @compressors ||= {}
5
20
  end
6
21
  end
7
22
  end
23
+
24
+ RackPipeline::Compressing.register '.js', 'Uglifier', 'rack-pipeline/compressing/uglifier'
@@ -0,0 +1,13 @@
1
+ require 'uglifier'
2
+
3
+ module RackPipeline
4
+ module Compressing
5
+ module Uglifier
6
+ def self.process(source, target)
7
+ compiled = ::Uglifier.compile File.read(source)
8
+ File.write(target, compiled)
9
+ target
10
+ end
11
+ end
12
+ end
13
+ end
@@ -2,14 +2,10 @@ require 'fileutils'
2
2
 
3
3
  module RackPipeline
4
4
  module Processing
5
- def combine?
6
- settings[:combine]
7
- end
8
-
9
5
  def combine(sources, target)
10
6
  cache_target(sources, target) do |target_path|
11
7
  body = sources.inject('') do |all,(source,kind)|
12
- all << File.read(get_or_compile(source, static_type(target))).encode('utf-8') + "\n\n"
8
+ all << "/* #{source} */\n\n" + File.read(prepare_file(source, static_type(target))).encode('utf-8') + "\n\n"
13
9
  end
14
10
  File.write(target_path, body)
15
11
  target_path
@@ -17,16 +13,15 @@ module RackPipeline
17
13
  end
18
14
 
19
15
  def compress(source, target)
20
- return source unless settings[:compress] && defined?(Compressor)
16
+ return source unless settings[:compress]
21
17
  cache_target(source, target) do |target_path|
22
- Compressor.process(source, target_path)
18
+ Compressing.process(source, target_path)
23
19
  end
24
20
  end
25
21
 
26
22
  def compile(source, target)
27
- fail LoadError, "no compiler for #{source} => #{target}" unless defined?(Compiler)
28
23
  cache_target(source, target) do |target_path|
29
- Compiler.process(source, target_path)
24
+ Compiling.process(source, target_path)
30
25
  end
31
26
  end
32
27
  end
@@ -1,3 +1,3 @@
1
1
  module RackPipeline
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.10"
3
3
  end
@@ -22,4 +22,10 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency 'minitest'
23
23
  spec.add_development_dependency 'rack-test'
24
24
  spec.add_development_dependency 'awesome_print'
25
+
26
+ # compiling
27
+ spec.add_development_dependency 'coffee-script'
28
+
29
+ # compressing
30
+ spec.add_development_dependency 'uglifier'
25
31
  end
@@ -0,0 +1 @@
1
+ a = (x) -> x * x
@@ -4,7 +4,12 @@ require 'rack-pipeline/base'
4
4
 
5
5
  describe RackPipeline::Base do
6
6
  SETTINGS_1 = {}
7
- SETTINGS_2 = {}
7
+ SETTINGS_2 = {
8
+ :compress => true,
9
+ :js => {
10
+ :coffee => 'assets/**/*.coffee',
11
+ }
12
+ }
8
13
 
9
14
  before do
10
15
  Dir.chdir File.dirname(__FILE__)
@@ -56,6 +61,11 @@ describe RackPipeline::Base do
56
61
  response.headers['Content-Type'].must_include 'application/javascript'
57
62
  end
58
63
 
64
+ it 'should properly compile and compress coffeescript' do
65
+ response = @r2.get('/coffee.js')
66
+ response.body.must_include '=function('
67
+ end
68
+
59
69
  after do
60
70
  FileUtils.rm_r( File.join( Dir.tmpdir, 'RackPipeline' ) )
61
71
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-pipeline
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Bochkariov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-01 00:00:00.000000000 Z
11
+ date: 2014-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,34 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: coffee-script
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: uglifier
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
83
111
  description: Asset pipeline for ruby Rack
84
112
  email:
85
113
  - ujifgc@gmail.com
@@ -97,13 +125,16 @@ files:
97
125
  - lib/rack-pipeline/base.rb
98
126
  - lib/rack-pipeline/caching.rb
99
127
  - lib/rack-pipeline/compiling.rb
128
+ - lib/rack-pipeline/compiling/coffee-script.rb
100
129
  - lib/rack-pipeline/compressing.rb
130
+ - lib/rack-pipeline/compressing/uglifier.rb
101
131
  - lib/rack-pipeline/processing.rb
102
132
  - lib/rack-pipeline/sinatra.rb
103
133
  - lib/rack-pipeline/version.rb
104
134
  - rack-pipeline.gemspec
105
135
  - test/assets/javascripts/a.js
106
136
  - test/assets/javascripts/b.js
137
+ - test/assets/javascripts/coffee.coffee
107
138
  - test/assets/stylesheets/a.css
108
139
  - test/assets/stylesheets/b.css
109
140
  - test/minitest_helper.rb
@@ -129,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
160
  version: '0'
130
161
  requirements: []
131
162
  rubyforge_project:
132
- rubygems_version: 2.2.1
163
+ rubygems_version: 2.2.2
133
164
  signing_key:
134
165
  specification_version: 4
135
166
  summary: A Rack middleware to serve javascript and stylesheet assets for ruby web
@@ -137,6 +168,7 @@ summary: A Rack middleware to serve javascript and stylesheet assets for ruby we
137
168
  test_files:
138
169
  - test/assets/javascripts/a.js
139
170
  - test/assets/javascripts/b.js
171
+ - test/assets/javascripts/coffee.coffee
140
172
  - test/assets/stylesheets/a.css
141
173
  - test/assets/stylesheets/b.css
142
174
  - test/minitest_helper.rb