rack-less 1.0.0 → 1.1.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.
@@ -16,10 +16,17 @@ or uses Rack::Builder to construct the application pipeline, simply require
16
16
  and use as follows:
17
17
 
18
18
  require 'rack/less'
19
+
20
+ # optional - use as necessary
21
+ Rack::Less.configure do |config|
22
+ config.compress = true
23
+ # other configs ...
24
+ end
19
25
 
20
26
  use Rack::Less,
21
- :source => 'app/less'
22
- :compress => true
27
+ :source => 'app/less',
28
+ :hosted_at => '/'
29
+ # additional options ...
23
30
 
24
31
  run app
25
32
 
@@ -29,56 +36,84 @@ Add this to your `config/environment.rb`:
29
36
 
30
37
  config.middleware.use "Rack::Less"
31
38
 
39
+ Add any configs in an initializer (optional - use as necessary):
40
+
41
+ Rack::Less.configure do |config|
42
+ config.cache = true
43
+ # additional configs ...
44
+ end
45
+
32
46
  You should now see `Rack::Less` listed in the middleware pipeline:
33
47
 
34
48
  rake middleware
35
49
 
36
50
  == Available Options
37
- [<default_value>]
51
+ key: name [default]: description
38
52
 
39
53
  * *root* ["."]:
40
54
  the app root. the reference point for the source and public options.
41
55
 
42
56
  * *source* ['app/stylesheets']:
43
- the path (relative to the root) where LESS files are located
57
+ the path (relative to the root) where LESS source files are located
44
58
 
45
59
  * *public* ['public']:
46
- the path (relative to the root) where LESS files are located
60
+ the path (relative to the root) static files are located
47
61
 
48
62
  * *hosted_at* ['/stylesheets']:
49
- the public HTTP root path for stylesheets
63
+ the public HTTP path for hosted stylesheets
64
+
65
+ == Available Configurations
66
+ key: name [default]: description
50
67
 
51
68
  * *cache* [false]:
52
- whether to cache the compilation output to a corresponding file in the hosted_root
69
+ whether to cache the compilation output to a corresponding static file
53
70
 
54
71
  * *compress* [false]:
55
72
  whether to remove extraneous whitespace from compilation output
56
-
57
- == Combinations
58
73
 
59
- At times, it is useful to combine many stylesheets and serve them as one resource. Rails' has a helper for this:
74
+ * *combinations* [{}]:
75
+ directives for combining the output of many stylesheets and serving them as a single resource
76
+
77
+ === Combinations
78
+
79
+ 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:
80
+
81
+ stylesheet_link_tag 'reset', 'common', 'app_web', :cache => 'web'
82
+ stylesheet_link_tag 'reset', 'common', 'iui', 'app_mobile', :cache => 'mobile'
83
+
84
+ Rack::Less uses combinations, in conjunction with the :cache config setting, to provide this function. Combinations are configured using a hash, where the key is the resource name and the value is an array of names corresponding to stylesheets to combine as the named resource. For the above example, use a configuration like this:
85
+
86
+ Rack::Less.configure do |config|
87
+ config.combinations = {
88
+ 'web' => ['reset', 'common', 'app_web'],
89
+ 'mobile' => ['reset', 'common', 'iui', 'app_mobile']
90
+ }
91
+ end
60
92
 
61
- stylesheet_link_tag 'one', two', :cache => 'app'
93
+ and stylesheet link tags like this, respectively:
94
+
95
+ # equivalent to: stylesheet_link_tag 'reset', 'common', 'app_web'
96
+ stylesheet_link_tag Rack::Less.combinations('web')
97
+
98
+ # equivalent to: stylesheet_link_tag 'reset', 'common', 'iui', 'app_mobile'
99
+ stylesheet_link_tag Rack::Less.combinations('mobile')
62
100
 
63
- Rack::Less supports this concept by providing combinations. Combinations are specified using a hash, where the key is the combined resource name and the value is an array of stylesheets to combine as that resource. For example:
101
+ If you configure Rack::Less to cache, with something like this:
64
102
 
65
- Rack::Less.combinations = {
66
- 'app' => ['one', 'two']
67
- }
103
+ Rack::Less.config.cache = true
104
+
105
+ then the same stylesheet link tags behave like they have the :cache option set, respectively:
68
106
 
69
- would service the above stylesheet_link_tag. Even better, you could re-factor the stylesheet_link_tag as follows to DRY it up:
107
+ # equivalent to: stylesheet_link_tag 'reset', 'common', 'app_web', :cache => 'web'
108
+ stylesheet_link_tag Rack::Less.combinations('web')
70
109
 
71
- stylesheet_link_tag Rack::Less.combinations['app'], :cache => 'app'
110
+ # equivalent to: stylesheet_link_tag 'reset', 'common', 'iui', 'app_mobile', :cache => 'mobile'
111
+ stylesheet_link_tag Rack::Less.combinations('mobile')
72
112
 
73
- * *combine* [{}]:
74
- directives for combining the ouput of one or more LESS compilations, for example:
75
- { 'app' => ['one', 'two', 'three'] }
76
- will direct Rack::Less to respond to a request for app.css with the concatenated output of compiling one.less, two.less, and three.less
77
-
78
113
  == Links
79
114
 
80
115
  GitHub: http://github.com/kelredd/rack-less
81
-
116
+
82
117
  Less: http://lesscss.org
83
118
 
84
119
  == License
@@ -1,4 +1,5 @@
1
1
  require 'rack'
2
+ require 'rack/less/config'
2
3
  require 'rack/less/base'
3
4
  require 'rack/less/options'
4
5
  require 'rack/less/request'
@@ -22,15 +23,25 @@ require 'rack/less/source'
22
23
 
23
24
  module Rack::Less
24
25
  MIME_TYPE = "text/css"
26
+ @@config = Config.new
25
27
 
26
28
  class << self
27
29
 
28
- # Proxy calls to Base.combinations
29
- def combinations
30
- Rack::Less::Base.combinations
30
+ # Configuration accessors for Rack::Less
31
+ # (see config.rb for details)
32
+ def configure
33
+ yield @@config if block_given?
31
34
  end
32
- def combinations=(value={})
33
- Rack::Less::Base.combinations = value
35
+ def config
36
+ @@config
37
+ end
38
+ def config=(value)
39
+ @@config = value
40
+ end
41
+
42
+ # Combinations config convenience method
43
+ def combinations(key=nil)
44
+ @@config.combinations(key)
34
45
  end
35
46
 
36
47
  end
@@ -0,0 +1,58 @@
1
+ module Rack::Less
2
+
3
+ # Handles configuration for Rack::Less
4
+ # Available config settings:
5
+ # :cache
6
+ # whether to cache the compilation output to
7
+ # a corresponding static file. Also determines
8
+ # what value config#combinations(:key) returns
9
+ # :compress
10
+ # whether to remove extraneous whitespace from
11
+ # compilation output
12
+ # :combinations
13
+ # Rack::Less uses combinations as directives for
14
+ # combining the output of many stylesheets and
15
+ # serving them as a single resource. Combinations
16
+ # are defined using a hash, where the key is the
17
+ # resource name and the value is an array of
18
+ # names specifying the stylesheets to combine
19
+ # as that resource. For example:
20
+ # Rack::Less.config.combinations = {
21
+ # 'web' => ['reset', 'common', 'app_web'],
22
+ # 'mobile' => ['reset', 'iui', 'common', 'app_mobile']
23
+ # }
24
+ class Config
25
+
26
+ ATTRIBUTES = [:cache, :compress, :combinations]
27
+ attr_accessor *ATTRIBUTES
28
+
29
+ DEFAULTS = {
30
+ :cache => false,
31
+ :compress => false,
32
+ :combinations => {}
33
+ }
34
+
35
+ def initialize(settings={})
36
+ ATTRIBUTES.each do |a|
37
+ instance_variable_set("@#{a}", settings[a] || DEFAULTS[a])
38
+ end
39
+ end
40
+
41
+ def cache?
42
+ !!@cache
43
+ end
44
+
45
+ def compress?
46
+ !!@compress
47
+ end
48
+
49
+ def combinations(key=nil)
50
+ if key.nil?
51
+ @combinations
52
+ else
53
+ cache? ? key : @combinations[key]
54
+ end
55
+ end
56
+
57
+ end
58
+ end
@@ -1,7 +1,7 @@
1
1
  module Rack::Less
2
2
  module Options
3
3
 
4
- # Handles options and configuration for Rack::Less
4
+ # Handles options for Rack::Less
5
5
  # Available options:
6
6
  # => root
7
7
  # the app root. the reference point for the
@@ -14,12 +14,6 @@ module Rack::Less
14
14
  # static files are served
15
15
  # => hosted_at
16
16
  # the public HTTP root path for stylesheets
17
- # => cache
18
- # whether to cache the compilation output to a
19
- # corresponding file in the hosted_root
20
- # => compress
21
- # whether to remove extraneous whitespace from
22
- # compilation output
23
17
 
24
18
  # Note: the following code is heavily influenced by:
25
19
  # => http://github.com/rtomayko/rack-cache/blob/master/lib/rack/cache/options.rb
@@ -35,8 +29,6 @@ module Rack::Less
35
29
  option_name(:source) => 'app/stylesheets',
36
30
  option_name(:public) => 'public',
37
31
  option_name(:hosted_at) => '/stylesheets',
38
- option_name(:cache) => false,
39
- option_name(:compress) => false
40
32
  }
41
33
  end
42
34
 
@@ -51,21 +43,6 @@ module Rack::Less
51
43
  end
52
44
  end
53
45
 
54
- # Rack::Less uses combinations to combine the output of many stylesheets
55
- # and serve them as a single resource. Combinations are specified using
56
- # a hash, where the key is the combined resource name and the value is an
57
- # array of stylesheets to combine as that resource. For example:
58
- # Rack::Less.combinations = {
59
- # 'app' => ['one', 'two']
60
- # }
61
- @@combinations = {}
62
- def combinations
63
- @@combinations || {}
64
- end
65
- def combinations=(value={})
66
- @@combinations = value
67
- end
68
-
69
46
  end
70
47
 
71
48
  module InstanceMethods
@@ -43,7 +43,7 @@ module Rack::Less
43
43
  # The Rack::Less::Source that the request is for
44
44
  def source
45
45
  @source ||= begin
46
- cache = if options(:cache)
46
+ cache = if Rack::Less.config.cache?
47
47
  File.join(options(:root), options(:public), options(:hosted_at))
48
48
  else
49
49
  nil
@@ -51,7 +51,7 @@ module Rack::Less
51
51
  source_opts = {
52
52
  :folder => File.join(options(:root), options(:source)),
53
53
  :cache => cache,
54
- :compress => options(:compress)
54
+ :compress => Rack::Less.config.compress?
55
55
  }
56
56
  Source.new(path_resource_name, source_opts)
57
57
  end
@@ -1,4 +1,5 @@
1
1
  require 'less'
2
+ require 'rack/less'
2
3
 
3
4
  module Rack::Less
4
5
 
@@ -27,6 +28,9 @@ module Rack::Less
27
28
  def cache?
28
29
  !@cache.nil?
29
30
  end
31
+ def cache
32
+ @cache
33
+ end
30
34
 
31
35
  # Use named css sources before using combination sources
32
36
  def files
@@ -61,9 +65,9 @@ module Rack::Less
61
65
  end
62
66
 
63
67
  # Preferred, existing source files matching a corresponding
64
- # Rack::Less::Base combination directive, if any
68
+ # Rack::Less::Config combination directive, if any
65
69
  def combination_sources
66
- @combination_sources ||= preferred_sources(Base.combinations[@css_name] || [])
70
+ @combination_sources ||= preferred_sources(Rack::Less.config.combinations[@css_name] || [])
67
71
  end
68
72
 
69
73
  private
@@ -2,7 +2,7 @@ module RackLess
2
2
  module Version
3
3
 
4
4
  MAJOR = 1
5
- MINOR = 0
5
+ MINOR = 1
6
6
  TINY = 0
7
7
 
8
8
  def self.to_s # :nodoc:
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-less
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kelly Redding
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-08 00:00:00 -06:00
12
+ date: 2010-02-09 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -84,6 +84,7 @@ files:
84
84
  - README.rdoc
85
85
  - Rakefile
86
86
  - lib/rack/less/base.rb
87
+ - lib/rack/less/config.rb
87
88
  - lib/rack/less/options.rb
88
89
  - lib/rack/less/request.rb
89
90
  - lib/rack/less/response.rb