rack-sprocketize 0.3.0 → 0.4.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/lib/rack/sprocketize.rb +8 -55
- data/lib/rack/sprocketize/config.rb +60 -0
- data/lib/rack/sprocketize/sprocket.rb +12 -9
- data/lib/rack/sprocketize/version.rb +1 -1
- data/rack-sprocketize.gemspec +2 -1
- metadata +34 -17
data/lib/rack/sprocketize.rb
CHANGED
@@ -2,63 +2,16 @@ require 'rack'
|
|
2
2
|
|
3
3
|
module Rack
|
4
4
|
class Sprocketize
|
5
|
+
autoload :Config, 'rack/sprocketize/config'
|
6
|
+
autoload :Railtie, 'rack/sprocketize/railtie'
|
5
7
|
autoload :Sprocket, 'rack/sprocketize/sprocket'
|
6
8
|
autoload :VERSION, 'rack/sprocketize/version'
|
7
9
|
|
8
|
-
|
9
|
-
:source_path => 'app/javascripts',
|
10
|
-
:output_path => 'public/javascripts',
|
11
|
-
:load_path => %w(vendor/javascripts)
|
12
|
-
}.freeze
|
13
|
-
|
14
|
-
class << self
|
15
|
-
attr_accessor :options, :compression_options, :source_path, :output_path, :always_check, :always_compress
|
16
|
-
|
17
|
-
def configure(options = {})
|
18
|
-
self.options = DEFAULT_OPTIONS.dup.merge(options)
|
19
|
-
self.compression_options = self.options.delete(:compression_options) || {}
|
20
|
-
self.source_path = ::File.expand_path self.options.delete(:source_path)
|
21
|
-
self.output_path = ::File.expand_path self.options.delete(:output_path)
|
22
|
-
|
23
|
-
self.always_check = if self.options.key?(:always_check)
|
24
|
-
self.options.delete(:always_check)
|
25
|
-
else
|
26
|
-
self.environment == 'development'
|
27
|
-
end
|
28
|
-
|
29
|
-
self.always_compress = if self.options.key?(:always_compress)
|
30
|
-
self.options.delete(:always_compress)
|
31
|
-
else
|
32
|
-
self.environment == 'production'
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def environment
|
37
|
-
if defined?(RAILS_ENV)
|
38
|
-
RAILS_ENV # Rails 2
|
39
|
-
elsif defined?(Rails) && defined?(Rails.env)
|
40
|
-
Rails.env.to_s # Rails 3
|
41
|
-
elsif defined?(@app.settings) && defined?(@app.settings.environment)
|
42
|
-
@app.settings.environment # Sinatra
|
43
|
-
elsif ENV.key?('RACK_ENV')
|
44
|
-
ENV['RACK_ENV']
|
45
|
-
else
|
46
|
-
'development'
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def always_check?
|
51
|
-
!!@always_check
|
52
|
-
end
|
53
|
-
|
54
|
-
def always_compress?
|
55
|
-
!!@always_compress
|
56
|
-
end
|
57
|
-
end
|
10
|
+
attr_accessor :config
|
58
11
|
|
59
12
|
def initialize(app, options = {})
|
60
|
-
@app
|
61
|
-
|
13
|
+
@app = app
|
14
|
+
@config = Config.new(options)
|
62
15
|
end
|
63
16
|
|
64
17
|
def call(env)
|
@@ -70,19 +23,19 @@ module Rack
|
|
70
23
|
protected
|
71
24
|
|
72
25
|
def skip?
|
73
|
-
return false if
|
26
|
+
return false if config.always_check?
|
74
27
|
@sprocketized && @request.params['sprocketize'].nil?
|
75
28
|
end
|
76
29
|
|
77
30
|
def source_files
|
78
|
-
files = Dir.glob ::File.join(
|
31
|
+
files = Dir.glob ::File.join(config.source_path, '**/*.js')
|
79
32
|
files.reject! { |file| ::File.basename(file) =~ /^_/ }
|
80
33
|
files
|
81
34
|
end
|
82
35
|
|
83
36
|
def sprocketize
|
84
37
|
source_files.each do |source_file|
|
85
|
-
sprocket = Sprocket.new(source_file)
|
38
|
+
sprocket = Sprocket.new(source_file, config)
|
86
39
|
sprocket.sprocketize if sprocket.stale?
|
87
40
|
end
|
88
41
|
@sprocketized = true
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'valuable'
|
3
|
+
|
4
|
+
module Rack
|
5
|
+
class Sprocketize
|
6
|
+
# Configuration options for Rack::Sprocketize.
|
7
|
+
class Config < Valuable
|
8
|
+
def initialize(*args)
|
9
|
+
super
|
10
|
+
self.always_compress = environment == 'production' if always_compress.nil?
|
11
|
+
self.always_check = environment == 'development' if always_check.nil?
|
12
|
+
end
|
13
|
+
|
14
|
+
# Options that will be passed directly to Sprockets.
|
15
|
+
#
|
16
|
+
# Default: { :load_path => %w(vendor/javascripts) }
|
17
|
+
has_value :sprockets, :default => { :load_path => %w(vendor/javascripts) }
|
18
|
+
|
19
|
+
# Options that will be passed to the javascript compressor, if used.
|
20
|
+
#
|
21
|
+
# Default: {}
|
22
|
+
has_value :compression, :default => {}
|
23
|
+
|
24
|
+
# Enables javascript compression.
|
25
|
+
#
|
26
|
+
# Default: true in production environments, false otherwise
|
27
|
+
has_value :always_compress, :klass => :boolean
|
28
|
+
|
29
|
+
# When enabled, the javascripts will be checked for changes on every request.
|
30
|
+
#
|
31
|
+
# Default: true in development environments, false otherwise
|
32
|
+
has_value :always_check, :klass => :boolean
|
33
|
+
|
34
|
+
# Path to directory where the source javascripts are located.
|
35
|
+
#
|
36
|
+
# Default: 'app/javascripts'
|
37
|
+
has_value :source_path, :default => 'app/javascripts'
|
38
|
+
|
39
|
+
# Path to the directory where the sprocketized javascripts should be output.
|
40
|
+
#
|
41
|
+
# Default: 'public/javascripts'
|
42
|
+
has_value :output_path, :default => 'public/javascripts'
|
43
|
+
|
44
|
+
# Determines which environment we are currently in.
|
45
|
+
#
|
46
|
+
# Default: 'development'
|
47
|
+
def environment
|
48
|
+
if defined?(RAILS_ENV)
|
49
|
+
RAILS_ENV # Rails 2
|
50
|
+
elsif defined?(Rails) && defined?(Rails.env)
|
51
|
+
Rails.env.to_s # Rails 3
|
52
|
+
elsif ENV.key?('RACK_ENV')
|
53
|
+
ENV['RACK_ENV']
|
54
|
+
else
|
55
|
+
'development'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -4,10 +4,13 @@ require 'sprockets'
|
|
4
4
|
module Rack
|
5
5
|
class Sprocketize
|
6
6
|
class Sprocket
|
7
|
-
|
7
|
+
attr_accessor :source_file, :output_path, :config, :secretary
|
8
|
+
|
9
|
+
def initialize(source_file, config)
|
8
10
|
@source_file = source_file
|
9
|
-
@
|
10
|
-
@
|
11
|
+
@config = config
|
12
|
+
@output_path = source_file.sub /^#{Regexp.escape(config.source_path)}/, config.output_path
|
13
|
+
@secretary = Sprockets::Secretary.new config.sprockets.merge(:source_files => [ @source_file ])
|
11
14
|
end
|
12
15
|
|
13
16
|
def compress(output)
|
@@ -25,18 +28,18 @@ module Rack
|
|
25
28
|
end
|
26
29
|
|
27
30
|
def concat
|
28
|
-
|
31
|
+
secretary.concatenation.to_s
|
29
32
|
end
|
30
33
|
|
31
34
|
def stale?
|
32
|
-
!::File.exist?(
|
35
|
+
!::File.exist?(output_path) || secretary.source_last_modified > ::File.mtime(output_path)
|
33
36
|
end
|
34
37
|
|
35
38
|
def sprocketize
|
36
|
-
FileUtils.mkdir_p ::File.dirname(
|
37
|
-
::File.open(
|
39
|
+
FileUtils.mkdir_p ::File.dirname(output_path)
|
40
|
+
::File.open(output_path, 'w') do |file|
|
38
41
|
output = concat
|
39
|
-
output = compress(output) if
|
42
|
+
output = compress(output) if config.always_compress? && !already_compressed?
|
40
43
|
file.write(output.strip)
|
41
44
|
end
|
42
45
|
end
|
@@ -48,7 +51,7 @@ module Rack
|
|
48
51
|
protected
|
49
52
|
|
50
53
|
def compression_options(defaults = {})
|
51
|
-
defaults.merge
|
54
|
+
defaults.merge(config.compression)
|
52
55
|
end
|
53
56
|
end
|
54
57
|
end
|
data/rack-sprocketize.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = %w(Pete Browne)
|
10
10
|
s.email = %w(me@petebrowne.com)
|
11
|
-
s.homepage = ''
|
11
|
+
s.homepage = 'http://github.com/petebrowne/rack-sprocketize'
|
12
12
|
s.summary = %(Rack::Sprocketize is a piece of Rack Middleware which uses Sprockets to concatenate javascript files and then optionally compresses them.)
|
13
13
|
s.description = %(Rack::Sprocketize is a piece of Rack Middleware which uses Sprockets to concatenate javascript files and then optionally compresses them. In a development environment, the files will be sprocketized on each request if there have been changes to the source files. In a production environment, the files will only be sprocketized one time, and only if there have been changes. Also, in a production environment, the files will be compressed by whichever javascript compressor is available.)
|
14
14
|
|
@@ -16,6 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
|
17
17
|
s.add_dependency 'rack', '~> 1.2.1'
|
18
18
|
s.add_dependency 'sprockets', '~> 1.0.2'
|
19
|
+
s.add_dependency 'valuable', '~> 0.8.5'
|
19
20
|
s.add_development_dependency 'rspec', '~> 2.5.0'
|
20
21
|
s.add_development_dependency 'test-construct', '~> 1.2.0'
|
21
22
|
s.add_development_dependency 'jsmin', '~> 1.0.1'
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-sprocketize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 4
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Pete
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-03-
|
19
|
+
date: 2011-03-17 00:00:00 -05:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -52,9 +52,25 @@ dependencies:
|
|
52
52
|
type: :runtime
|
53
53
|
version_requirements: *id002
|
54
54
|
- !ruby/object:Gem::Dependency
|
55
|
-
name:
|
55
|
+
name: valuable
|
56
56
|
prerelease: false
|
57
57
|
requirement: &id003 !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
hash: 53
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
- 8
|
66
|
+
- 5
|
67
|
+
version: 0.8.5
|
68
|
+
type: :runtime
|
69
|
+
version_requirements: *id003
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rspec
|
72
|
+
prerelease: false
|
73
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
58
74
|
none: false
|
59
75
|
requirements:
|
60
76
|
- - ~>
|
@@ -66,11 +82,11 @@ dependencies:
|
|
66
82
|
- 0
|
67
83
|
version: 2.5.0
|
68
84
|
type: :development
|
69
|
-
version_requirements: *
|
85
|
+
version_requirements: *id004
|
70
86
|
- !ruby/object:Gem::Dependency
|
71
87
|
name: test-construct
|
72
88
|
prerelease: false
|
73
|
-
requirement: &
|
89
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
74
90
|
none: false
|
75
91
|
requirements:
|
76
92
|
- - ~>
|
@@ -82,11 +98,11 @@ dependencies:
|
|
82
98
|
- 0
|
83
99
|
version: 1.2.0
|
84
100
|
type: :development
|
85
|
-
version_requirements: *
|
101
|
+
version_requirements: *id005
|
86
102
|
- !ruby/object:Gem::Dependency
|
87
103
|
name: jsmin
|
88
104
|
prerelease: false
|
89
|
-
requirement: &
|
105
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
90
106
|
none: false
|
91
107
|
requirements:
|
92
108
|
- - ~>
|
@@ -98,11 +114,11 @@ dependencies:
|
|
98
114
|
- 1
|
99
115
|
version: 1.0.1
|
100
116
|
type: :development
|
101
|
-
version_requirements: *
|
117
|
+
version_requirements: *id006
|
102
118
|
- !ruby/object:Gem::Dependency
|
103
119
|
name: packr
|
104
120
|
prerelease: false
|
105
|
-
requirement: &
|
121
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
106
122
|
none: false
|
107
123
|
requirements:
|
108
124
|
- - ~>
|
@@ -114,11 +130,11 @@ dependencies:
|
|
114
130
|
- 0
|
115
131
|
version: 3.1.0
|
116
132
|
type: :development
|
117
|
-
version_requirements: *
|
133
|
+
version_requirements: *id007
|
118
134
|
- !ruby/object:Gem::Dependency
|
119
135
|
name: yui-compressor
|
120
136
|
prerelease: false
|
121
|
-
requirement: &
|
137
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
122
138
|
none: false
|
123
139
|
requirements:
|
124
140
|
- - ~>
|
@@ -130,11 +146,11 @@ dependencies:
|
|
130
146
|
- 4
|
131
147
|
version: 0.9.4
|
132
148
|
type: :development
|
133
|
-
version_requirements: *
|
149
|
+
version_requirements: *id008
|
134
150
|
- !ruby/object:Gem::Dependency
|
135
151
|
name: closure-compiler
|
136
152
|
prerelease: false
|
137
|
-
requirement: &
|
153
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
138
154
|
none: false
|
139
155
|
requirements:
|
140
156
|
- - ~>
|
@@ -146,7 +162,7 @@ dependencies:
|
|
146
162
|
- 0
|
147
163
|
version: 1.0.0
|
148
164
|
type: :development
|
149
|
-
version_requirements: *
|
165
|
+
version_requirements: *id009
|
150
166
|
description: Rack::Sprocketize is a piece of Rack Middleware which uses Sprockets to concatenate javascript files and then optionally compresses them. In a development environment, the files will be sprocketized on each request if there have been changes to the source files. In a production environment, the files will only be sprocketized one time, and only if there have been changes. Also, in a production environment, the files will be compressed by whichever javascript compressor is available.
|
151
167
|
email:
|
152
168
|
- me@petebrowne.com
|
@@ -164,6 +180,7 @@ files:
|
|
164
180
|
- Rakefile
|
165
181
|
- lib/rack-sprocketize.rb
|
166
182
|
- lib/rack/sprocketize.rb
|
183
|
+
- lib/rack/sprocketize/config.rb
|
167
184
|
- lib/rack/sprocketize/railtie.rb
|
168
185
|
- lib/rack/sprocketize/sprocket.rb
|
169
186
|
- lib/rack/sprocketize/version.rb
|
@@ -171,7 +188,7 @@ files:
|
|
171
188
|
- spec/rack/sprocketize_spec.rb
|
172
189
|
- spec/spec_helper.rb
|
173
190
|
has_rdoc: true
|
174
|
-
homepage:
|
191
|
+
homepage: http://github.com/petebrowne/rack-sprocketize
|
175
192
|
licenses: []
|
176
193
|
|
177
194
|
post_install_message:
|