rack-less 1.4.0 → 1.5.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/README.rdoc +23 -20
- data/Rakefile +6 -23
- data/lib/rack/less/base.rb +4 -4
- data/lib/rack/less/request.rb +16 -12
- data/lib/rack/less/source.rb +29 -29
- data/lib/rack/less/version.rb +1 -1
- metadata +48 -16
data/README.rdoc
CHANGED
@@ -39,28 +39,17 @@ Add this to your `config/environment.rb`:
|
|
39
39
|
Add any configs in an initializer (optional - use as necessary):
|
40
40
|
|
41
41
|
Rack::Less.configure do |config|
|
42
|
-
|
43
|
-
|
42
|
+
# for example
|
43
|
+
config.cache = Rails.configuration.action_controller.perform_caching
|
44
|
+
if Rails.env.development?
|
45
|
+
config.cache_bust = true
|
46
|
+
end
|
44
47
|
end
|
45
48
|
|
46
49
|
You should now see `Rack::Less` listed in the middleware pipeline:
|
47
50
|
|
48
51
|
rake middleware
|
49
52
|
|
50
|
-
== Available Options
|
51
|
-
|
52
|
-
* :*root* ["."]
|
53
|
-
- The app root. The reference point for the source and public options.
|
54
|
-
|
55
|
-
* :*source* ['app/stylesheets']
|
56
|
-
- The path (relative to the root) where LESS source files are located
|
57
|
-
|
58
|
-
* :*public* ['public']
|
59
|
-
- The path where static files are located
|
60
|
-
|
61
|
-
* :*hosted_at* ['/stylesheets']
|
62
|
-
- The public HTTP path for hosted stylesheets.
|
63
|
-
|
64
53
|
== Available Configurations
|
65
54
|
|
66
55
|
* .*cache* [false]
|
@@ -75,15 +64,29 @@ You should now see `Rack::Less` listed in the middleware pipeline:
|
|
75
64
|
- Directives for combining the output of many stylesheets and serving them as a single resource.
|
76
65
|
|
77
66
|
* .*cache_bust* [nil]
|
78
|
-
- Directives for timestamping (cache-busting)
|
67
|
+
- Directives for timestamping (cache-busting) stylesheet references
|
79
68
|
- :*false* - don't explicitly cache bust (no value added)
|
80
69
|
- :*true* - use Time.now.to_i as the explicit value (will never cache)
|
81
70
|
- :*nil* - change cache bust value if the file is modified (similar to Rails' stylesheet_link_tag)
|
82
71
|
- :*<any other value>* - add the value as "foo.css?<value>"
|
83
72
|
|
84
|
-
|
73
|
+
== Available Options
|
74
|
+
|
75
|
+
* :*root* ["."]
|
76
|
+
- The app root. The reference point for the source and public options.
|
77
|
+
|
78
|
+
* :*source* ['app/stylesheets']
|
79
|
+
- The path (relative to the root) where LESS source files are located
|
80
|
+
|
81
|
+
* :*public* ['public']
|
82
|
+
- The path where static files are located
|
83
|
+
|
84
|
+
* :*hosted_at* ['/stylesheets']
|
85
|
+
- The public HTTP path for hosted stylesheets.
|
86
|
+
|
87
|
+
== Using in layouts
|
85
88
|
|
86
|
-
|
89
|
+
=== Cache Busting
|
87
90
|
|
88
91
|
Rails does a lot of helpful things with 'stylesheet_link_tag' to help reference your stylesheets into your layouts - things like cache busting stylesheet hrefs. However, Rails' will only cache bust your stylesheets if the file exists in the public/stylesheets directory. When using Rack::Less a file may never exist at that path or, when caching is used, only exist after the initial request.
|
89
92
|
|
@@ -92,7 +95,7 @@ To help provide this behavior, Rack::Less provides a helper for generating refer
|
|
92
95
|
# equivalent to: stylesheet_link_tag 'reset'
|
93
96
|
stylesheet_link_tag Rack::Less.stylesheet('reset')
|
94
97
|
|
95
|
-
|
98
|
+
=== Combinations
|
96
99
|
|
97
100
|
At times, it is useful to combine multiple stylesheets and serve them as one resource. For example you may have two sets of stylesheets: one for traditional web views and one for mobile web views. Rails' provides the :cache option on 'stylesheet_link_tag' helper to provide this function.
|
98
101
|
|
data/Rakefile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake/gempackagetask'
|
3
|
-
require '
|
3
|
+
require 'simple_gem/testtasks'
|
4
4
|
|
5
5
|
require 'lib/rack/less/version'
|
6
6
|
|
@@ -18,10 +18,12 @@ spec = Gem::Specification.new do |s|
|
|
18
18
|
# s.executables = ['rack-less']
|
19
19
|
|
20
20
|
s.add_development_dependency("shoulda", [">= 2.10.2"])
|
21
|
+
s.add_development_dependency("leftright", [">= 0.0.6"])
|
21
22
|
s.add_development_dependency("sinatra", [">= 0.9.4"])
|
22
23
|
s.add_development_dependency("rack-test", [">= 0.5.3"])
|
23
24
|
s.add_development_dependency("webrat", [">= 0.6.0"])
|
24
25
|
s.add_development_dependency("yui-compressor", [">=0.9.1"])
|
26
|
+
s.add_development_dependency("kelredd-simple-gem", [">= 0.7.0"])
|
25
27
|
|
26
28
|
s.add_dependency("rack", [">= 0.4"])
|
27
29
|
s.add_dependency("less", [">= 1.2.21"])
|
@@ -31,28 +33,7 @@ Rake::GemPackageTask.new(spec) do |pkg|
|
|
31
33
|
pkg.gem_spec = spec
|
32
34
|
end
|
33
35
|
|
34
|
-
|
35
|
-
t.libs << 'test'
|
36
|
-
t.test_files = FileList["test/**/*_test.rb"]
|
37
|
-
t.verbose = true
|
38
|
-
end
|
39
|
-
|
40
|
-
begin
|
41
|
-
require 'rcov/rcovtask'
|
42
|
-
|
43
|
-
Rcov::RcovTask.new(:coverage) do |t|
|
44
|
-
t.libs = ['test']
|
45
|
-
t.test_files = FileList["test/**/*_test.rb"]
|
46
|
-
t.verbose = true
|
47
|
-
t.rcov_opts = ['--text-report', "-x #{Gem.path}", '-x /Library/Ruby', '-x /usr/lib/ruby']
|
48
|
-
end
|
49
|
-
|
50
|
-
task :default => :coverage
|
51
|
-
|
52
|
-
rescue LoadError
|
53
|
-
warn "\n**** Install rcov (sudo gem install relevance-rcov) to get coverage stats ****\n"
|
54
|
-
task :default => :test
|
55
|
-
end
|
36
|
+
SimpleGem::TestTasks.new
|
56
37
|
|
57
38
|
desc 'Generate the gemspec to serve this gem'
|
58
39
|
task :gemspec do
|
@@ -60,3 +41,5 @@ task :gemspec do
|
|
60
41
|
File.open(file, 'w') {|f| f << spec.to_ruby }
|
61
42
|
puts "Created gemspec: #{file}"
|
62
43
|
end
|
44
|
+
|
45
|
+
task :default => :gem
|
data/lib/rack/less/base.rb
CHANGED
@@ -33,16 +33,16 @@ module Rack::Less
|
|
33
33
|
def call!(env)
|
34
34
|
@default_options.each { |k,v| env[k] ||= v }
|
35
35
|
@env = env
|
36
|
-
|
36
|
+
|
37
37
|
if (@request = Request.new(@env.dup.freeze)).for_less?
|
38
38
|
Response.new(@env.dup.freeze, @request.source.to_css).to_rack
|
39
39
|
else
|
40
40
|
@app.call(env)
|
41
41
|
end
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
private
|
45
|
-
|
45
|
+
|
46
46
|
def validate_options
|
47
47
|
# ensure a root path is specified and does exists
|
48
48
|
unless options.has_key?(option_name(:root)) and !options(:root).nil?
|
@@ -55,6 +55,6 @@ module Rack::Less
|
|
55
55
|
raise(ArgumentError, "no :source option set")
|
56
56
|
end
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
end
|
60
60
|
end
|
data/lib/rack/less/request.rb
CHANGED
@@ -12,7 +12,7 @@ module Rack::Less
|
|
12
12
|
|
13
13
|
class Request < Rack::Request
|
14
14
|
include Rack::Less::Options
|
15
|
-
|
15
|
+
|
16
16
|
CSS_PATH_FORMATS = ['.css']
|
17
17
|
|
18
18
|
# The HTTP request method. This is the standard implementation of this
|
@@ -22,21 +22,25 @@ module Rack::Less
|
|
22
22
|
def request_method
|
23
23
|
@env['REQUEST_METHOD']
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
def path_info
|
27
27
|
@env['PATH_INFO']
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
def http_accept
|
31
31
|
@env['HTTP_ACCEPT']
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
|
+
def path_resource_format
|
35
|
+
File.extname(path_info)
|
36
|
+
end
|
37
|
+
|
34
38
|
def path_resource_name
|
35
39
|
File.basename(path_info, path_resource_format)
|
36
40
|
end
|
37
|
-
|
38
|
-
def
|
39
|
-
File.
|
41
|
+
|
42
|
+
def path_resource_source
|
43
|
+
File.join(File.dirname(path_info).gsub(/#{options(:hosted_at)}/, ''), path_resource_name).gsub(/^\//, '')
|
40
44
|
end
|
41
45
|
|
42
46
|
def cache
|
@@ -51,7 +55,7 @@ module Rack::Less
|
|
51
55
|
:cache => Rack::Less.config.cache? ? cache : nil,
|
52
56
|
:compress => Rack::Less.config.compress?
|
53
57
|
}
|
54
|
-
Source.new(
|
58
|
+
Source.new(path_resource_source, source_opts)
|
55
59
|
end
|
56
60
|
end
|
57
61
|
|
@@ -62,11 +66,11 @@ module Rack::Less
|
|
62
66
|
end
|
63
67
|
|
64
68
|
def hosted_at?
|
65
|
-
|
69
|
+
path_info =~ /^#{options(:hosted_at)}\//
|
66
70
|
end
|
67
|
-
|
71
|
+
|
68
72
|
def exists?
|
69
|
-
File.exists?(File.join(cache, "#{
|
73
|
+
File.exists?(File.join(cache, "#{path_resource_source}#{path_resource_format}"))
|
70
74
|
end
|
71
75
|
|
72
76
|
# Determine if the request is for existing LESS CSS file
|
@@ -81,6 +85,6 @@ module Rack::Less
|
|
81
85
|
!exists? &&
|
82
86
|
!source.files.empty?
|
83
87
|
end
|
84
|
-
|
88
|
+
|
85
89
|
end
|
86
90
|
end
|
data/lib/rack/less/source.rb
CHANGED
@@ -14,22 +14,22 @@ module Rack::Less
|
|
14
14
|
# to compile and a path to the source files,
|
15
15
|
# will returns corresponding compiled LESS CSS
|
16
16
|
class Source
|
17
|
-
|
17
|
+
|
18
18
|
# prefer source files with the .less extension
|
19
19
|
# but also accept files with the .css extension
|
20
20
|
PREFERRED_EXTENSIONS = [:less, :css]
|
21
|
-
|
21
|
+
|
22
22
|
YUI_OPTS = {}
|
23
|
-
|
24
|
-
attr_reader :
|
25
|
-
|
26
|
-
def initialize(
|
27
|
-
@
|
23
|
+
|
24
|
+
attr_reader :path
|
25
|
+
|
26
|
+
def initialize(path, options={})
|
27
|
+
@path = path
|
28
28
|
@compress = options[:compress]
|
29
29
|
@cache = options[:cache]
|
30
30
|
@folder = get_required_path(options, :folder)
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def compress?
|
34
34
|
!!@compress
|
35
35
|
end
|
@@ -39,18 +39,18 @@ module Rack::Less
|
|
39
39
|
def cache
|
40
40
|
@cache
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
# Use named css sources before using combination sources
|
44
44
|
def files
|
45
45
|
@files ||= (css_sources.empty? ? combination_sources : css_sources)
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
def compiled
|
49
49
|
@compiled ||= begin
|
50
50
|
compiled_css = files.collect do |file_path|
|
51
51
|
Less::Engine.new(File.new(file_path)).to_css
|
52
52
|
end.join("\n")
|
53
|
-
|
53
|
+
|
54
54
|
compiled_css = case @compress
|
55
55
|
when :whitespace, true
|
56
56
|
compiled_css.delete("\n")
|
@@ -64,58 +64,58 @@ module Rack::Less
|
|
64
64
|
compiled_css
|
65
65
|
end
|
66
66
|
|
67
|
-
if cache? && !File.exists?(cf = File.join(@cache, "#{@
|
67
|
+
if cache? && !File.exists?(cf = File.join(@cache, "#{@path}.css"))
|
68
68
|
FileUtils.mkdir_p(@cache)
|
69
69
|
File.open(cf, "w") do |file|
|
70
70
|
file.write(compiled_css)
|
71
71
|
end
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
74
|
compiled_css
|
75
75
|
end
|
76
76
|
end
|
77
77
|
alias_method :to_css, :compiled
|
78
78
|
alias_method :css, :compiled
|
79
|
-
|
79
|
+
|
80
80
|
protected
|
81
|
-
|
81
|
+
|
82
82
|
# Preferred, existing source files matching the css name
|
83
83
|
def css_sources
|
84
|
-
@css_sources ||= preferred_sources([@
|
84
|
+
@css_sources ||= preferred_sources([@path])
|
85
85
|
end
|
86
|
-
|
86
|
+
|
87
87
|
# Preferred, existing source files matching a corresponding
|
88
88
|
# Rack::Less::Config combination directive, if any
|
89
89
|
def combination_sources
|
90
|
-
@combination_sources ||= preferred_sources(Rack::Less.config.combinations[@
|
90
|
+
@combination_sources ||= preferred_sources(Rack::Less.config.combinations[@path] || [])
|
91
91
|
end
|
92
|
-
|
92
|
+
|
93
93
|
private
|
94
|
-
|
95
|
-
# Given a list of
|
96
|
-
# existing source files with the corresponding
|
94
|
+
|
95
|
+
# Given a list of sources, return a list of
|
96
|
+
# existing source files with the corresponding source paths
|
97
97
|
# honoring the preferred extension list
|
98
|
-
def preferred_sources(
|
99
|
-
|
98
|
+
def preferred_sources(paths)
|
99
|
+
paths.collect do |source_path|
|
100
100
|
PREFERRED_EXTENSIONS.inject(nil) do |source_file, extension|
|
101
101
|
source_file || begin
|
102
|
-
path = File.join(@folder, "#{
|
102
|
+
path = File.join(@folder, "#{source_path}.#{extension}")
|
103
103
|
File.exists?(path) ? path : nil
|
104
104
|
end
|
105
105
|
end
|
106
106
|
end.compact
|
107
107
|
end
|
108
|
-
|
108
|
+
|
109
109
|
def get_required_path(options, path_key)
|
110
110
|
unless options.has_key?(path_key)
|
111
111
|
raise(ArgumentError, "no :#{path_key} option specified")
|
112
112
|
end
|
113
113
|
unless File.exists?(options[path_key])
|
114
|
-
raise(ArgumentError, "the :#{path_key} ('#{options[path_key]}') does not exist")
|
114
|
+
raise(ArgumentError, "the :#{path_key} ('#{options[path_key]}') does not exist")
|
115
115
|
end
|
116
116
|
options[path_key]
|
117
117
|
end
|
118
|
-
|
118
|
+
|
119
119
|
end
|
120
|
-
|
120
|
+
|
121
121
|
end
|
data/lib/rack/less/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-less
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
8
|
+
- 5
|
9
9
|
- 0
|
10
|
-
version: 1.
|
10
|
+
version: 1.5.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kelly Redding
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-09-25 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -35,9 +35,25 @@ dependencies:
|
|
35
35
|
type: :development
|
36
36
|
version_requirements: *id001
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
|
-
name:
|
38
|
+
name: leftright
|
39
39
|
prerelease: false
|
40
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 19
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
- 0
|
49
|
+
- 6
|
50
|
+
version: 0.0.6
|
51
|
+
type: :development
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: sinatra
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
41
57
|
none: false
|
42
58
|
requirements:
|
43
59
|
- - ">="
|
@@ -49,11 +65,11 @@ dependencies:
|
|
49
65
|
- 4
|
50
66
|
version: 0.9.4
|
51
67
|
type: :development
|
52
|
-
version_requirements: *
|
68
|
+
version_requirements: *id003
|
53
69
|
- !ruby/object:Gem::Dependency
|
54
70
|
name: rack-test
|
55
71
|
prerelease: false
|
56
|
-
requirement: &
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
57
73
|
none: false
|
58
74
|
requirements:
|
59
75
|
- - ">="
|
@@ -65,11 +81,11 @@ dependencies:
|
|
65
81
|
- 3
|
66
82
|
version: 0.5.3
|
67
83
|
type: :development
|
68
|
-
version_requirements: *
|
84
|
+
version_requirements: *id004
|
69
85
|
- !ruby/object:Gem::Dependency
|
70
86
|
name: webrat
|
71
87
|
prerelease: false
|
72
|
-
requirement: &
|
88
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
73
89
|
none: false
|
74
90
|
requirements:
|
75
91
|
- - ">="
|
@@ -81,11 +97,11 @@ dependencies:
|
|
81
97
|
- 0
|
82
98
|
version: 0.6.0
|
83
99
|
type: :development
|
84
|
-
version_requirements: *
|
100
|
+
version_requirements: *id005
|
85
101
|
- !ruby/object:Gem::Dependency
|
86
102
|
name: yui-compressor
|
87
103
|
prerelease: false
|
88
|
-
requirement: &
|
104
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
89
105
|
none: false
|
90
106
|
requirements:
|
91
107
|
- - ">="
|
@@ -97,11 +113,27 @@ dependencies:
|
|
97
113
|
- 1
|
98
114
|
version: 0.9.1
|
99
115
|
type: :development
|
100
|
-
version_requirements: *
|
116
|
+
version_requirements: *id006
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: kelredd-simple-gem
|
119
|
+
prerelease: false
|
120
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
hash: 3
|
126
|
+
segments:
|
127
|
+
- 0
|
128
|
+
- 7
|
129
|
+
- 0
|
130
|
+
version: 0.7.0
|
131
|
+
type: :development
|
132
|
+
version_requirements: *id007
|
101
133
|
- !ruby/object:Gem::Dependency
|
102
134
|
name: rack
|
103
135
|
prerelease: false
|
104
|
-
requirement: &
|
136
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
105
137
|
none: false
|
106
138
|
requirements:
|
107
139
|
- - ">="
|
@@ -112,11 +144,11 @@ dependencies:
|
|
112
144
|
- 4
|
113
145
|
version: "0.4"
|
114
146
|
type: :runtime
|
115
|
-
version_requirements: *
|
147
|
+
version_requirements: *id008
|
116
148
|
- !ruby/object:Gem::Dependency
|
117
149
|
name: less
|
118
150
|
prerelease: false
|
119
|
-
requirement: &
|
151
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
120
152
|
none: false
|
121
153
|
requirements:
|
122
154
|
- - ">="
|
@@ -128,7 +160,7 @@ dependencies:
|
|
128
160
|
- 21
|
129
161
|
version: 1.2.21
|
130
162
|
type: :runtime
|
131
|
-
version_requirements: *
|
163
|
+
version_requirements: *id009
|
132
164
|
description:
|
133
165
|
email: kelly@kelredd.com
|
134
166
|
executables: []
|