rack-less 1.3.1 → 1.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.
@@ -74,15 +74,27 @@ You should now see `Rack::Less` listed in the middleware pipeline:
74
74
  * .*combinations* [{}]
75
75
  - Directives for combining the output of many stylesheets and serving them as a single resource.
76
76
 
77
- * .*combination_timestamp* [false]
77
+ * .*cache_bust* [nil]
78
78
  - Directives for timestamping (cache-busting) while using combinations
79
- - :*false* - don't explicitly add timestamps
80
- - :*true* - add Time.now.to_i as the explicit timestamp (will never cache)
81
- - :*<any other value>* - add the value as "foo.css?<value>" (use something like a File.mtime to cache-bust like Rails does)
79
+ - :*false* - don't explicitly cache bust (no value added)
80
+ - :*true* - use Time.now.to_i as the explicit value (will never cache)
81
+ - :*nil* - change cache bust value if the file is modified (similar to Rails' stylesheet_link_tag)
82
+ - :*<any other value>* - add the value as "foo.css?<value>"
83
+
84
+ === Using in layouts
85
+
86
+ ==== Cache Busting
87
+
88
+ 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
+
90
+ To help provide this behavior, Rack::Less provides a helper for generating reference paths to your stylesheets.
91
+
92
+ # equivalent to: stylesheet_link_tag 'reset'
93
+ stylesheet_link_tag Rack::Less.stylesheet('reset')
82
94
 
83
- === Combinations
95
+ ==== Combinations
84
96
 
85
- 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, ie:
97
+ 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.
86
98
 
87
99
  stylesheet_link_tag 'reset', 'common', 'app_web', :cache => 'web'
88
100
  stylesheet_link_tag 'reset', 'common', 'iui', 'app_mobile', :cache => 'mobile'
@@ -96,13 +108,13 @@ Rack::Less uses combinations, in conjunction with the :cache config setting, to
96
108
  }
97
109
  end
98
110
 
99
- and stylesheet link tags like this, respectively:
111
+ and stylesheet link tags like this:
100
112
 
101
113
  # equivalent to: stylesheet_link_tag 'reset', 'common', 'app_web'
102
- stylesheet_link_tag Rack::Less.combinations('web')
114
+ stylesheet_link_tag Rack::Less.stylesheet('web')
103
115
 
104
116
  # equivalent to: stylesheet_link_tag 'reset', 'common', 'iui', 'app_mobile'
105
- stylesheet_link_tag Rack::Less.combinations('mobile')
117
+ stylesheet_link_tag Rack::Less.stylesheet('mobile')
106
118
 
107
119
  If you configure Rack::Less to cache, with something like this:
108
120
 
@@ -111,10 +123,10 @@ If you configure Rack::Less to cache, with something like this:
111
123
  then the same stylesheet link tags behave like they have the :cache option set, respectively:
112
124
 
113
125
  # equivalent to: stylesheet_link_tag 'reset', 'common', 'app_web', :cache => 'web'
114
- stylesheet_link_tag Rack::Less.combinations('web')
126
+ stylesheet_link_tag Rack::Less.stylesheet('web')
115
127
 
116
128
  # equivalent to: stylesheet_link_tag 'reset', 'common', 'iui', 'app_mobile', :cache => 'mobile'
117
- stylesheet_link_tag Rack::Less.combinations('mobile')
129
+ stylesheet_link_tag Rack::Less.stylesheet('mobile')
118
130
 
119
131
  == Links
120
132
 
data/Rakefile CHANGED
@@ -17,13 +17,14 @@ spec = Gem::Specification.new do |s|
17
17
  s.files = %w(README.rdoc Rakefile) + Dir.glob("{lib}/**/*")
18
18
  # s.executables = ['rack-less']
19
19
 
20
- s.add_dependency("rack", [">= 0.4"])
21
- s.add_dependency("less", [">= 1.2.21"])
22
-
23
20
  s.add_development_dependency("shoulda", [">= 2.10.2"])
24
21
  s.add_development_dependency("sinatra", [">= 0.9.4"])
25
22
  s.add_development_dependency("rack-test", [">= 0.5.3"])
26
23
  s.add_development_dependency("webrat", [">= 0.6.0"])
24
+ s.add_development_dependency("yui-compressor", [">=0.9.1"])
25
+
26
+ s.add_dependency("rack", [">= 0.4"])
27
+ s.add_dependency("less", [">= 1.2.21"])
27
28
  end
28
29
 
29
30
  Rake::GemPackageTask.new(spec) do |pkg|
@@ -43,12 +43,23 @@ module Rack::Less
43
43
  def combinations(key=nil)
44
44
  @@config.combinations(key)
45
45
  end
46
+
47
+ # Stylesheet helper, config convenience method
48
+ def stylesheet(key)
49
+ @@config.stylesheet(key)
50
+ end
46
51
 
47
- # Combination timestamp config convenience method
48
- def combination_timestamp
49
- @@config.combination_timestamp
52
+ # Cache bust config convenience method
53
+ def cache_bust
54
+ @@config.cache_bust
50
55
  end
51
56
 
57
+ # <b>DEPRECATED:</b> Please use <tt>cache_bust</tt> instead.
58
+ def combination_timestamp
59
+ warn "[DEPRECATION] `combination_timestamp` is deprecated. Please use `cache_bust` instead."
60
+ cache_bust
61
+ end
62
+
52
63
  end
53
64
 
54
65
  # Create a new Rack::Less middleware component
@@ -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
@@ -21,24 +21,36 @@ module Rack::Less
21
21
  # 'web' => ['reset', 'common', 'app_web'],
22
22
  # 'mobile' => ['reset', 'iui', 'common', 'app_mobile']
23
23
  # }
24
- # :combination_timestamps
24
+ # :cache_bust
25
25
  # whether to append a timestamp to the sheet requests generated by combinations
26
26
  class Config
27
27
 
28
- ATTRIBUTES = [:cache, :compress, :combinations, :combination_timestamp]
28
+ ATTRIBUTES = [:cache, :compress, :combinations, :cache_bust]
29
29
  attr_accessor *ATTRIBUTES
30
30
 
31
31
  DEFAULTS = {
32
32
  :cache => false,
33
33
  :compress => false,
34
- :combinations => {},
35
- :combination_timestamp => false
34
+ :combinations => {}
36
35
  }
37
36
 
38
37
  def initialize(settings={})
39
38
  ATTRIBUTES.each do |a|
40
39
  instance_variable_set("@#{a}", settings[a] || DEFAULTS[a])
41
- end
40
+ end
41
+ @cache_bust = default_cache_bust if @cache_bust.nil?
42
+ end
43
+
44
+ # <b>DEPRECATED:</b> Please use <tt>cache_bust</tt> instead.
45
+ def combination_timestamp
46
+ warn "[DEPRECATION] `combination_timestamp` is deprecated. Please use `cache_bust` instead."
47
+ cache_bust
48
+ end
49
+
50
+ # <b>DEPRECATED:</b> Please use <tt>cache_bust=</tt> instead.
51
+ def combination_timestamp=(value)
52
+ warn "[DEPRECATION] `combination_timestamp=` is deprecated. Please use `cache_bust=` instead."
53
+ cache_bust = value
42
54
  end
43
55
 
44
56
  def cache?
@@ -54,30 +66,58 @@ module Rack::Less
54
66
  @combinations
55
67
  else
56
68
  if cache?
57
- combo_filename(key)
69
+ stylesheet_filename(key)
58
70
  else
59
71
  (@combinations[key] || []).collect do |combo|
60
- combo_filename(combo)
72
+ stylesheet_filename(combo)
61
73
  end
62
74
  end
63
75
  end
64
76
  end
65
77
 
78
+ def stylesheet(key)
79
+ if @combinations[key]
80
+ combinations(key.to_s)
81
+ else
82
+ stylesheet_filename(key.to_s)
83
+ end
84
+ end
85
+
66
86
  private
67
87
 
68
- def combo_filename(combo)
69
- filename = combo.strip
88
+ def stylesheet_filename(key)
89
+ filename = key.strip
70
90
  filename += ".css" unless filename.include?('.css')
71
- if !filename.include?('?') && combination_timestamp
91
+ if !filename.include?('?') && cache_bust
72
92
  filename += "?"
73
- filename += if combination_timestamp == true
93
+ filename += if cache_bust == true
74
94
  Time.now.to_i
75
95
  else
76
- combination_timestamp
96
+ cache_bust
77
97
  end.to_s
78
98
  end
79
99
  filename
80
100
  end
81
101
 
102
+ def default_cache_bust
103
+ if defined?(::Sinatra) && defined?(::Sinatra::Application)
104
+ app_root_cache_bust(::Sinatra::Application)
105
+ elsif defined?(::Rails)
106
+ app_root_cache_bust(::Rails)
107
+ end || false
108
+ end
109
+
110
+ def app_root_cache_bust(app)
111
+ if app.respond_to?(:root)
112
+ mtime_cache_bust(app.root.to_s)
113
+ end
114
+ end
115
+
116
+ def mtime_cache_bust(path)
117
+ if File.exists?(path)
118
+ File.mtime(path).to_i
119
+ end
120
+ end
121
+
82
122
  end
83
123
  end
@@ -2,8 +2,8 @@ module RackLess
2
2
  module Version
3
3
 
4
4
  MAJOR = 1
5
- MINOR = 3
6
- TINY = 1
5
+ MINOR = 4
6
+ TINY = 0
7
7
 
8
8
  def self.to_s # :nodoc:
9
9
  [MAJOR, MINOR, TINY].join('.')
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-less
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 7
4
5
  prerelease: false
5
6
  segments:
6
7
  - 1
7
- - 3
8
- - 1
9
- version: 1.3.1
8
+ - 4
9
+ - 0
10
+ version: 1.4.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - Kelly Redding
@@ -14,92 +15,120 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-04-14 00:00:00 -05:00
18
+ date: 2010-08-08 00:00:00 -05:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
- name: rack
22
+ name: shoulda
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 35
27
30
  segments:
28
- - 0
29
- - 4
30
- version: "0.4"
31
- type: :runtime
31
+ - 2
32
+ - 10
33
+ - 2
34
+ version: 2.10.2
35
+ type: :development
32
36
  version_requirements: *id001
33
37
  - !ruby/object:Gem::Dependency
34
- name: less
38
+ name: sinatra
35
39
  prerelease: false
36
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
43
  - - ">="
39
44
  - !ruby/object:Gem::Version
45
+ hash: 51
40
46
  segments:
41
- - 1
42
- - 2
43
- - 21
44
- version: 1.2.21
45
- type: :runtime
47
+ - 0
48
+ - 9
49
+ - 4
50
+ version: 0.9.4
51
+ type: :development
46
52
  version_requirements: *id002
47
53
  - !ruby/object:Gem::Dependency
48
- name: shoulda
54
+ name: rack-test
49
55
  prerelease: false
50
56
  requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
59
  - - ">="
53
60
  - !ruby/object:Gem::Version
61
+ hash: 13
54
62
  segments:
55
- - 2
56
- - 10
57
- - 2
58
- version: 2.10.2
63
+ - 0
64
+ - 5
65
+ - 3
66
+ version: 0.5.3
59
67
  type: :development
60
68
  version_requirements: *id003
61
69
  - !ruby/object:Gem::Dependency
62
- name: sinatra
70
+ name: webrat
63
71
  prerelease: false
64
72
  requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
75
  - - ">="
67
76
  - !ruby/object:Gem::Version
77
+ hash: 7
68
78
  segments:
69
79
  - 0
70
- - 9
71
- - 4
72
- version: 0.9.4
80
+ - 6
81
+ - 0
82
+ version: 0.6.0
73
83
  type: :development
74
84
  version_requirements: *id004
75
85
  - !ruby/object:Gem::Dependency
76
- name: rack-test
86
+ name: yui-compressor
77
87
  prerelease: false
78
88
  requirement: &id005 !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
91
  - - ">="
81
92
  - !ruby/object:Gem::Version
93
+ hash: 57
82
94
  segments:
83
95
  - 0
84
- - 5
85
- - 3
86
- version: 0.5.3
96
+ - 9
97
+ - 1
98
+ version: 0.9.1
87
99
  type: :development
88
100
  version_requirements: *id005
89
101
  - !ruby/object:Gem::Dependency
90
- name: webrat
102
+ name: rack
91
103
  prerelease: false
92
104
  requirement: &id006 !ruby/object:Gem::Requirement
105
+ none: false
93
106
  requirements:
94
107
  - - ">="
95
108
  - !ruby/object:Gem::Version
109
+ hash: 3
96
110
  segments:
97
111
  - 0
98
- - 6
99
- - 0
100
- version: 0.6.0
101
- type: :development
112
+ - 4
113
+ version: "0.4"
114
+ type: :runtime
102
115
  version_requirements: *id006
116
+ - !ruby/object:Gem::Dependency
117
+ name: less
118
+ prerelease: false
119
+ requirement: &id007 !ruby/object:Gem::Requirement
120
+ none: false
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ hash: 53
125
+ segments:
126
+ - 1
127
+ - 2
128
+ - 21
129
+ version: 1.2.21
130
+ type: :runtime
131
+ version_requirements: *id007
103
132
  description:
104
133
  email: kelly@kelredd.com
105
134
  executables: []
@@ -130,23 +159,27 @@ rdoc_options:
130
159
  require_paths:
131
160
  - lib
132
161
  required_ruby_version: !ruby/object:Gem::Requirement
162
+ none: false
133
163
  requirements:
134
164
  - - ">="
135
165
  - !ruby/object:Gem::Version
166
+ hash: 3
136
167
  segments:
137
168
  - 0
138
169
  version: "0"
139
170
  required_rubygems_version: !ruby/object:Gem::Requirement
171
+ none: false
140
172
  requirements:
141
173
  - - ">="
142
174
  - !ruby/object:Gem::Version
175
+ hash: 3
143
176
  segments:
144
177
  - 0
145
178
  version: "0"
146
179
  requirements: []
147
180
 
148
181
  rubyforge_project:
149
- rubygems_version: 1.3.6
182
+ rubygems_version: 1.3.7
150
183
  signing_key:
151
184
  specification_version: 3
152
185
  summary: A better way to use LESS CSS in Ruby web apps.