rack-less 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -16,46 +16,63 @@ 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
- use Rack::Less do
20
- set :source, 'app/less'
21
- set :hosted_at, '/'
22
- set :compress, true
23
- end
19
+
20
+ use Rack::Less,
21
+ :source => 'app/less'
22
+ :compress => true
23
+
24
24
  run app
25
25
 
26
26
  == Using with Rails
27
27
 
28
28
  Add this to your `config/environment.rb`:
29
29
 
30
- config.middleware.use Rack::Less, :compress => true
30
+ config.middleware.use "Rack::Less"
31
31
 
32
32
  You should now see `Rack::Less` listed in the middleware pipeline:
33
33
 
34
34
  rake middleware
35
35
 
36
36
  == Available Options
37
+ [<default_value>]
37
38
 
38
- * *root*["."]:
39
- the app root. the reference point for the source and public options. #TODO: default appropriately for Rails/Sinatra.
39
+ * *root* ["."]:
40
+ the app root. the reference point for the source and public options.
40
41
 
41
- * *source*['app/stylesheets']:
42
+ * *source* ['app/stylesheets']:
42
43
  the path (relative to the root) where LESS files are located
43
44
 
44
- * *public*['public']:
45
+ * *public* ['public']:
45
46
  the path (relative to the root) where LESS files are located
46
47
 
47
- * *hosted_at*['/stylesheets']:
48
+ * *hosted_at* ['/stylesheets']:
48
49
  the public HTTP root path for stylesheets
49
50
 
50
- * *cache*[false]:
51
+ * *cache* [false]:
51
52
  whether to cache the compilation output to a corresponding file in the hosted_root
52
53
 
53
- * *compress*[false]:
54
+ * *compress* [false]:
54
55
  whether to remove extraneous whitespace from compilation output
56
+
57
+ == Combinations
58
+
59
+ At times, it is useful to combine many stylesheets and serve them as one resource. Rails' has a helper for this:
60
+
61
+ stylesheet_link_tag 'one', two', :cache => 'app'
62
+
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:
64
+
65
+ Rack::Less.combinations = {
66
+ 'app' => ['one', 'two']
67
+ }
68
+
69
+ would service the above stylesheet_link_tag. Even better, you could re-factor the stylesheet_link_tag as follows to DRY it up:
70
+
71
+ stylesheet_link_tag Rack::Less.combinations['app'], :cache => 'app'
55
72
 
56
- * *combinations*[{}]:
73
+ * *combine* [{}]:
57
74
  directives for combining the ouput of one or more LESS compilations, for example:
58
- set :combine, { 'app' => ['one', 'two', 'three'] }
75
+ { 'app' => ['one', 'two', 'three'] }
59
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
60
77
 
61
78
  == Links
data/lib/rack/less.rb CHANGED
@@ -13,15 +13,27 @@ require 'rack/less/source'
13
13
  #
14
14
  # Within a rackup file (or with Rack::Builder):
15
15
  # require 'rack/less'
16
- # use Rack::Less do
17
- # set :root, "."
18
- # set :source, 'app/less'
19
- # set :compress, true
20
- # end
16
+ #
17
+ # use Rack::Less,
18
+ # :source => 'app/less'
19
+ # :compress => true
20
+ #
21
21
  # run app
22
22
 
23
23
  module Rack::Less
24
- MEDIA_TYPE = "text/css"
24
+ MIME_TYPE = "text/css"
25
+
26
+ class << self
27
+
28
+ # Proxy calls to Base.combinations
29
+ def combinations
30
+ Rack::Less::Base.combinations
31
+ end
32
+ def combinations=(value={})
33
+ Rack::Less::Base.combinations = value
34
+ end
35
+
36
+ end
25
37
 
26
38
  # Create a new Rack::Less middleware component
27
39
  # => the +options+ Hash can be used to specify default configuration values
@@ -20,16 +20,10 @@ module Rack::Less
20
20
  # => compress
21
21
  # whether to remove extraneous whitespace from
22
22
  # compilation output
23
- # => combine
24
- # expects a hash containing directives for combining
25
- # the ouput of one or more LESS compilations, for example:
26
- # { 'app' => ['one', 'two', 'three']}
27
- # will respond to a request for app.css with the concatenated
28
- # output of compiling one.less, two.less, and three.less
29
23
 
30
- # Note: the following code is more or less a rip from:
24
+ # Note: the following code is heavily influenced by:
31
25
  # => http://github.com/rtomayko/rack-cache/blob/master/lib/rack/cache/options.rb
32
- # => thanks to rtomayko, I thought this approach was really smart and the credit is his.
26
+ # => thanks to rtomayko, I thought his approach was really smart.
33
27
 
34
28
  RACK_ENV_NS = "rack-less"
35
29
 
@@ -42,8 +36,7 @@ module Rack::Less
42
36
  option_name(:public) => 'public',
43
37
  option_name(:hosted_at) => '/stylesheets',
44
38
  option_name(:cache) => false,
45
- option_name(:compress) => false,
46
- option_name(:combine) => {}
39
+ option_name(:compress) => false
47
40
  }
48
41
  end
49
42
 
@@ -58,6 +51,21 @@ module Rack::Less
58
51
  end
59
52
  end
60
53
 
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
+
61
69
  end
62
70
 
63
71
  module InstanceMethods
@@ -92,10 +100,8 @@ module Rack::Less
92
100
  # exactly as specified. The +option+ argument may also be a Hash in
93
101
  # which case each key/value pair is merged into the environment as if
94
102
  # the #set method were called on each.
95
- def set(option, value=nil, &block)
96
- if block_given?
97
- write_option option, block
98
- elsif value.nil?
103
+ def set(option, value=nil)
104
+ if value.nil?
99
105
  self.options = option.to_hash
100
106
  else
101
107
  write_option option, value
@@ -28,7 +28,10 @@ module Rack::Less
28
28
  @env['PATH_INFO']
29
29
  end
30
30
 
31
- # TODO: test these
31
+ def http_accept
32
+ @env['HTTP_ACCEPT']
33
+ end
34
+
32
35
  def path_resource_name
33
36
  path_info =~ CSS_PATH_REGEX ? path_info.match(CSS_PATH_REGEX)[1] : nil
34
37
  end
@@ -48,15 +51,15 @@ module Rack::Less
48
51
  source_opts = {
49
52
  :folder => File.join(options(:root), options(:source)),
50
53
  :cache => cache,
51
- :compress => options(:compress),
52
- :combine => options(:combine)
54
+ :compress => options(:compress)
53
55
  }
54
56
  Source.new(path_resource_name, source_opts)
55
57
  end
56
58
  end
57
59
 
58
60
  def for_css?
59
- media_type == Rack::Less::MEDIA_TYPE ||
61
+ (http_accept && http_accept.include?(Rack::Less::MIME_TYPE)) ||
62
+ (media_type && media_type.include?(Rack::Less::MIME_TYPE )) ||
60
63
  CSS_PATH_FORMATS.include?(path_resource_format)
61
64
  end
62
65
 
@@ -33,7 +33,7 @@ module Rack::Less
33
33
  @status = 200 # OK
34
34
  @headers = Rack::Utils::HeaderHash.new
35
35
 
36
- headers["Content-Type"] = Rack::Less::MEDIA_TYPE
36
+ headers["Content-Type"] = Rack::Less::MIME_TYPE
37
37
  headers["Content-Length"] = self.class.content_length(body).to_s
38
38
  end
39
39
 
@@ -19,7 +19,6 @@ module Rack::Less
19
19
  @compress = options[:compress]
20
20
  @cache = options[:cache]
21
21
  @folder = get_required_path(options, :folder)
22
- @combine = options[:combine] || {}
23
22
  end
24
23
 
25
24
  def compress?
@@ -29,9 +28,9 @@ module Rack::Less
29
28
  !@cache.nil?
30
29
  end
31
30
 
32
- # Use named css sources before using combine directive sources
31
+ # Use named css sources before using combination sources
33
32
  def files
34
- @files ||= (css_sources.empty? ? combined_sources : css_sources)
33
+ @files ||= (css_sources.empty? ? combination_sources : css_sources)
35
34
  end
36
35
 
37
36
  def compiled
@@ -62,9 +61,9 @@ module Rack::Less
62
61
  end
63
62
 
64
63
  # Preferred, existing source files matching a corresponding
65
- # combine directive, if any
66
- def combined_sources
67
- @combined_sources ||= preferred_sources(@combine[@css_name] || [])
64
+ # Rack::Less::Base combination directive, if any
65
+ def combination_sources
66
+ @combination_sources ||= preferred_sources(Base.combinations[@css_name] || [])
68
67
  end
69
68
 
70
69
  private
@@ -1,8 +1,8 @@
1
1
  module RackLess
2
2
  module Version
3
3
 
4
- MAJOR = 0
5
- MINOR = 1
4
+ MAJOR = 1
5
+ MINOR = 0
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: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kelly Redding