rack-less 0.1.0 → 1.0.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 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