rack-pack 0.3.0 → 0.3.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.
- data/lib/rack/pack.rb +46 -15
- data/lib/rack/pack/version.rb +1 -1
- data/spec/rack/pack_spec.rb +10 -3
- data/spec/spec_helper.rb +9 -3
- metadata +3 -3
data/lib/rack/pack.rb
CHANGED
@@ -7,51 +7,79 @@ module Rack
|
|
7
7
|
autoload :Stylesheet, 'rack/pack/stylesheet'
|
8
8
|
autoload :Version, 'rack/pack/version'
|
9
9
|
|
10
|
-
|
10
|
+
class << self
|
11
|
+
attr_accessor :packages, :environment, :options
|
12
|
+
end
|
13
|
+
|
14
|
+
# Setup the defaults
|
15
|
+
@packages = {}
|
16
|
+
@environment = 'development'
|
17
|
+
@options = {
|
11
18
|
:public_dir => 'public',
|
19
|
+
:add_default_packages => true,
|
12
20
|
:always_update => false,
|
13
21
|
:always_compress => false,
|
14
22
|
:js_compression => {},
|
15
|
-
:css_compression => {}
|
16
|
-
|
17
|
-
:add_default_packages => true
|
18
|
-
}.freeze
|
23
|
+
:css_compression => {}
|
24
|
+
}
|
19
25
|
|
20
26
|
class << self
|
21
|
-
|
22
|
-
|
27
|
+
# Sets up Rack::Pack, optionally adding packages.
|
28
|
+
#
|
29
|
+
# @param [Hash] options
|
30
|
+
# @option options [String] :public_dir ('public') The directory to output the packaged file.
|
31
|
+
# @option options [Boolean] :add_default_packages (true) Wether or not to add the default packages.
|
32
|
+
# @option options [Boolean] :always_update (false) Updates the packages on every request.
|
33
|
+
# @option options [Boolean] :always_compress (false) Compress the packages on every request.
|
34
|
+
# @option options [Hash] :js_compression Options to pass directly
|
35
|
+
# to the Javascript compression engine.
|
36
|
+
# @option options [Hash] :css_compression Options to pass directly
|
37
|
+
# to the Stylesheet compression engine.
|
38
|
+
# @option options [String] :environment Manually set the environment.
|
23
39
|
def configure(options = {})
|
24
|
-
self.packages = {}
|
25
|
-
self.options = DEFAULT_OPTIONS.dup
|
26
|
-
|
27
40
|
self.options.each_key do |key|
|
28
41
|
self.options[key] = options.delete(key) if options.key?(key)
|
29
42
|
end
|
30
43
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
44
|
+
self.environment = options.delete(:environment) if options.key?(:environment)
|
45
|
+
|
46
|
+
add_default_packages if self.options[:add_default_packages]
|
35
47
|
|
36
48
|
options.each do |to_file, from_files|
|
37
49
|
add_package(to_file, from_files)
|
38
50
|
end
|
39
51
|
end
|
40
52
|
|
53
|
+
# Determines if we're running in a production environment.
|
41
54
|
def production?
|
42
55
|
self.environment.to_s == 'production'
|
43
56
|
end
|
44
57
|
|
58
|
+
# Adds a new Package for Rack::Pack to update.
|
59
|
+
# The Package class is determined based on the filename.
|
60
|
+
#
|
61
|
+
# @param [String] output_file The path to the file the Package will output.
|
62
|
+
# @param [Array, String] source_files The source files to package. Can be either
|
63
|
+
# an Array of individual source files or a string that will be used in a glob.
|
45
64
|
def add_package(output_file, source_files)
|
46
65
|
if source_files.nil?
|
47
66
|
packages.delete(output_file)
|
48
67
|
else
|
49
|
-
public_output_file = ::File.join(
|
68
|
+
public_output_file = ::File.join(options[:public_dir], output_file.to_s)
|
50
69
|
package_class = Package[output_file]
|
51
70
|
packages[output_file] = package_class.new(public_output_file, source_files)
|
52
71
|
end
|
53
72
|
end
|
54
73
|
|
74
|
+
# Adds the default Packages, which essentially look in the `vendor`, `app`,
|
75
|
+
# and current directories for javascripts & stylesheets and packages them into
|
76
|
+
# `javascripts/application.js` & `stylesheets/application.css`
|
77
|
+
def add_default_packages
|
78
|
+
add_package 'javascripts/application.js', '{vendor,app,.}/javascripts/*.js'
|
79
|
+
add_package 'stylesheets/application.css', '{vendor,app,.}/stylesheets/*.css'
|
80
|
+
end
|
81
|
+
|
82
|
+
# Loops through each added Package and updates them when stale.
|
55
83
|
def update_packages
|
56
84
|
Pack.packages.each_value do |package|
|
57
85
|
package.update if package.stale?
|
@@ -59,6 +87,9 @@ module Rack
|
|
59
87
|
end
|
60
88
|
end
|
61
89
|
|
90
|
+
# Interface for creating the Rack::Pack middleware.
|
91
|
+
#
|
92
|
+
# @param []
|
62
93
|
def initialize(app, options = {})
|
63
94
|
@app = app
|
64
95
|
Pack.configure(options)
|
data/lib/rack/pack/version.rb
CHANGED
data/spec/rack/pack_spec.rb
CHANGED
@@ -14,17 +14,24 @@ describe Rack::Pack do
|
|
14
14
|
end
|
15
15
|
alias_method :request, :request_for
|
16
16
|
|
17
|
+
describe '.add_default_packages' do
|
18
|
+
it 'adds default packages' do
|
19
|
+
Rack::Pack.add_default_packages
|
20
|
+
Rack::Pack.packages['javascripts/application.js'].should be_an_instance_of(Rack::Pack::Javascript)
|
21
|
+
Rack::Pack.packages['stylesheets/application.css'].should be_an_instance_of(Rack::Pack::Stylesheet)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
17
25
|
describe '.configure' do
|
18
26
|
it 'sets the given options' do
|
19
27
|
Rack::Pack.configure(:public_dir => '_site', :always_compress => true, :environment => :production)
|
20
28
|
Rack::Pack.options.should == {
|
21
29
|
:public_dir => '_site',
|
30
|
+
:add_default_packages => true,
|
22
31
|
:always_update => false,
|
23
32
|
:always_compress => true,
|
24
33
|
:js_compression => {},
|
25
|
-
:css_compression => {}
|
26
|
-
:environment => :production,
|
27
|
-
:add_default_packages => true
|
34
|
+
:css_compression => {}
|
28
35
|
}
|
29
36
|
end
|
30
37
|
|
data/spec/spec_helper.rb
CHANGED
@@ -23,13 +23,19 @@ $hidden_consts = {}
|
|
23
23
|
Object.send :remove_const, const
|
24
24
|
end
|
25
25
|
|
26
|
+
$default_config = {
|
27
|
+
:packages => Rack::Pack.packages,
|
28
|
+
:environment => Rack::Pack.environment,
|
29
|
+
:options => Rack::Pack.options
|
30
|
+
}
|
31
|
+
|
26
32
|
RSpec.configure do |config|
|
27
33
|
config.include Construct::Helpers
|
28
34
|
|
29
35
|
config.after do
|
30
|
-
|
31
|
-
|
32
|
-
|
36
|
+
$default_config.each do |key, value|
|
37
|
+
Rack::Pack.send("#{key}=", value.dup)
|
38
|
+
end
|
33
39
|
end
|
34
40
|
|
35
41
|
def reveal_const(const)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-pack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 1
|
10
|
+
version: 0.3.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Pete Browne
|