rack-less 2.0.2 → 3.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.
Files changed (41) hide show
  1. data/.gitignore +5 -4
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +15 -19
  4. data/README.rdoc +9 -7
  5. data/Rakefile +3 -3
  6. data/lib/rack/less/base.rb +1 -1
  7. data/lib/rack/less/config.rb +1 -1
  8. data/lib/rack/less/response.rb +4 -4
  9. data/lib/rack/less/source.rb +6 -1
  10. data/lib/rack/less/version.rb +2 -2
  11. data/rack-less.gemspec +4 -3
  12. data/test/app_helper.rb +3 -3
  13. data/test/bootstrap_test.rb +26 -0
  14. data/test/config_test.rb +112 -150
  15. data/test/fixtures/bootstrap_v1.1.0/bootstrap-1.1.0.css +1894 -0
  16. data/test/fixtures/bootstrap_v1.1.0/bootstrap.less +23 -0
  17. data/test/fixtures/bootstrap_v1.1.0/forms.less +369 -0
  18. data/test/fixtures/bootstrap_v1.1.0/patterns.less +683 -0
  19. data/test/fixtures/bootstrap_v1.1.0/preboot.less +267 -0
  20. data/test/fixtures/bootstrap_v1.1.0/reset.less +21 -0
  21. data/test/fixtures/bootstrap_v1.1.0/scaffolding.less +174 -0
  22. data/test/fixtures/bootstrap_v1.1.0/tables.less +148 -0
  23. data/test/fixtures/bootstrap_v1.1.0/type.less +185 -0
  24. data/test/fixtures/sinatra/app/stylesheets/all_compiled.css +7 -3
  25. data/test/fixtures/sinatra/app/stylesheets/nested/file_compiled.css +6 -2
  26. data/test/fixtures/sinatra/app/stylesheets/nested/nested_import.less +3 -0
  27. data/test/fixtures/sinatra/app/stylesheets/nested/really/really.less +5 -3
  28. data/test/fixtures/sinatra/app/stylesheets/nested/really/really_compiled.css +7 -2
  29. data/test/fixtures/sinatra/app/stylesheets/nested/really/really_nested_import.less +4 -0
  30. data/test/fixtures/sinatra/app/stylesheets/normal.less +1 -1
  31. data/test/fixtures/sinatra/app/stylesheets/normal_compiled.css +6 -2
  32. data/test/helper.rb +35 -38
  33. data/test/irb.rb +9 -0
  34. data/test/options_test.rb +25 -22
  35. data/test/request_test.rb +86 -74
  36. data/test/response_test.rb +6 -4
  37. data/test/sinatra_test.rb +38 -37
  38. data/test/source_test.rb +128 -114
  39. metadata +57 -34
  40. data/.bundle/config +0 -2
  41. data/test/env.rb +0 -9
@@ -0,0 +1,148 @@
1
+ /*
2
+ * Tables.less
3
+ * Tables for, you guessed it, tabular data
4
+ * ---------------------------------------- */
5
+
6
+
7
+ // BASELINE STYLES
8
+ // ---------------
9
+
10
+ table {
11
+ width: 100%;
12
+ margin-bottom: @baseline;
13
+ padding: 0;
14
+ border-collapse: separate;
15
+ font-size: 13px;
16
+ th, td {
17
+ padding: 10px 10px 9px;
18
+ line-height: @baseline * .75;
19
+ text-align: left;
20
+ vertical-align: middle;
21
+ border-bottom: 1px solid #ddd;
22
+ }
23
+ th {
24
+ padding-top: 9px;
25
+ font-weight: bold;
26
+ border-bottom-width: 2px;
27
+ }
28
+ }
29
+
30
+
31
+ // ZEBRA-STRIPING
32
+ // --------------
33
+
34
+ // Default zebra-stripe styles (alternating gray and transparent backgrounds)
35
+ .zebra-striped {
36
+ tbody {
37
+ tr:nth-child(odd) td {
38
+ background-color: #f9f9f9;
39
+ }
40
+ tr:hover td {
41
+ background-color: #f5f5f5;
42
+ }
43
+ }
44
+
45
+ // Tablesorting styles w/ jQuery plugin
46
+ .header {
47
+ cursor: pointer;
48
+ &:after {
49
+ content: "";
50
+ float: right;
51
+ margin-top: 7px;
52
+ border-width: 0 4px 4px;
53
+ border-style: solid;
54
+ border-color: #000 transparent;
55
+ visibility: hidden;
56
+ }
57
+ }
58
+ // Style the sorted column headers (THs)
59
+ .headerSortUp,
60
+ .headerSortDown {
61
+ background-color: rgba(141,192,219,.25);
62
+ text-shadow: 0 1px 1px rgba(255,255,255,.75);
63
+ .border-radius(3px 3px 0 0);
64
+ }
65
+ // Style the ascending (reverse alphabetical) column header
66
+ .header:hover {
67
+ &:after {
68
+ visibility:visible;
69
+ }
70
+ }
71
+ // Style the descending (alphabetical) column header
72
+ .headerSortDown,
73
+ .headerSortDown:hover {
74
+ &:after {
75
+ visibility:visible;
76
+ .opacity(60);
77
+ }
78
+ }
79
+ // Style the ascending (reverse alphabetical) column header
80
+ .headerSortUp {
81
+ &:after {
82
+ border-bottom: none;
83
+ border-left: 4px solid transparent;
84
+ border-right: 4px solid transparent;
85
+ border-top: 4px solid #000;
86
+ visibility:visible;
87
+ .box-shadow(none); //can't add boxshadow to downward facing arrow :(
88
+ .opacity(60);
89
+ }
90
+ }
91
+ }
92
+
93
+ table {
94
+ // Blue Table Headings
95
+ .blue {
96
+ color: @blue;
97
+ border-bottom-color: @blue;
98
+ }
99
+ .headerSortUp.blue,
100
+ .headerSortDown.blue {
101
+ background-color: lighten(@blue, 40%);
102
+ }
103
+ // Green Table Headings
104
+ .green {
105
+ color: @green;
106
+ border-bottom-color: @green;
107
+ }
108
+ .headerSortUp.green,
109
+ .headerSortDown.green {
110
+ background-color: lighten(@green, 40%);
111
+ }
112
+ // Red Table Headings
113
+ .red {
114
+ color: @red;
115
+ border-bottom-color: @red;
116
+ }
117
+ .headerSortUp.red,
118
+ .headerSortDown.red {
119
+ background-color: lighten(@red, 50%);
120
+ }
121
+ // Yellow Table Headings
122
+ .yellow {
123
+ color: @yellow;
124
+ border-bottom-color: @yellow;
125
+ }
126
+ .headerSortUp.yellow,
127
+ .headerSortDown.yellow {
128
+ background-color: lighten(@yellow, 40%);
129
+ }
130
+ // Orange Table Headings
131
+ .orange {
132
+ color: @orange;
133
+ border-bottom-color: @orange;
134
+ }
135
+ .headerSortUp.orange,
136
+ .headerSortDown.orange {
137
+ background-color: lighten(@orange, 40%);
138
+ }
139
+ // Purple Table Headings
140
+ .purple {
141
+ color: @purple;
142
+ border-bottom-color: @purple;
143
+ }
144
+ .headerSortUp.purple,
145
+ .headerSortDown.purple {
146
+ background-color: lighten(@purple, 40%);
147
+ }
148
+ }
@@ -0,0 +1,185 @@
1
+ /* Typography.less
2
+ * Headings, body text, lists, code, and more for a versatile and durable typography system
3
+ * ---------------------------------------------------------------------------------------- */
4
+
5
+
6
+ // BODY TEXT
7
+ // ---------
8
+
9
+ p {
10
+ #font > .shorthand(normal,@basefont,@baseline);
11
+ margin-bottom: @baseline / 2;
12
+ small {
13
+ font-size: @basefont - 2;
14
+ color: @grayLight;
15
+ }
16
+ }
17
+
18
+
19
+ // HEADINGS
20
+ // --------
21
+
22
+ h1, h2, h3, h4, h5, h6 {
23
+ font-weight: bold;
24
+ color: @grayDark;
25
+ small {
26
+ color: @grayLight;
27
+ }
28
+ }
29
+ h1 {
30
+ margin-bottom: @baseline;
31
+ font-size: 30px;
32
+ line-height: @baseline * 2;
33
+ small {
34
+ font-size: 18px;
35
+ }
36
+ }
37
+ h2 {
38
+ font-size: 24px;
39
+ line-height: @baseline * 2;
40
+ small {
41
+ font-size: 14px;
42
+ }
43
+ }
44
+ h3, h4, h5, h6 {
45
+ line-height: @baseline * 2;
46
+ }
47
+ h3 {
48
+ font-size: 18px;
49
+ small {
50
+ font-size: 14px;
51
+ }
52
+ }
53
+ h4 {
54
+ font-size: 16px;
55
+ small {
56
+ font-size: 12px;
57
+ }
58
+ }
59
+ h5 {
60
+ font-size: 14px;
61
+ }
62
+ h6 {
63
+ font-size: 13px;
64
+ color: @grayLight;
65
+ text-transform: uppercase;
66
+ }
67
+
68
+
69
+ // COLORS
70
+ // ------
71
+
72
+ // Unordered and Ordered lists
73
+ ul, ol {
74
+ margin: 0 0 @baseline 25px;
75
+ }
76
+ ul ul,
77
+ ul ol,
78
+ ol ol,
79
+ ol ul {
80
+ margin-bottom: 0;
81
+ }
82
+ ul {
83
+ list-style: disc;
84
+ }
85
+ ol {
86
+ list-style: decimal;
87
+ }
88
+ li {
89
+ line-height: @baseline;
90
+ color: @gray;
91
+ }
92
+ ul.unstyled {
93
+ list-style: none;
94
+ margin-left: 0;
95
+ }
96
+
97
+ // Description Lists
98
+ dl {
99
+ margin-bottom: @baseline;
100
+ dt, dd {
101
+ line-height: @baseline;
102
+ }
103
+ dt {
104
+ font-weight: bold;
105
+ }
106
+ dd {
107
+ margin-left: @baseline / 2;
108
+ }
109
+ }
110
+
111
+ // MISC
112
+ // ----
113
+
114
+ // Horizontal rules
115
+ hr {
116
+ margin: 0 0 19px;
117
+ border: 0;
118
+ border-bottom: 1px solid #eee;
119
+ }
120
+
121
+ // Emphasis
122
+ strong {
123
+ font-style: inherit;
124
+ font-weight: bold;
125
+ line-height: inherit;
126
+ }
127
+ em {
128
+ font-style: italic;
129
+ font-weight: inherit;
130
+ line-height: inherit;
131
+ }
132
+ .muted {
133
+ color: @grayLighter;
134
+ }
135
+
136
+ // Blockquotes
137
+ blockquote {
138
+ margin-bottom: @baseline;
139
+ border-left: 5px solid #eee;
140
+ padding-left: 15px;
141
+ p {
142
+ #font > .shorthand(300,14px,@baseline);
143
+ margin-bottom: 0;
144
+ }
145
+ small {
146
+ display: block;
147
+ #font > .shorthand(300,12px,@baseline);
148
+ color: @grayLight;
149
+ &:before {
150
+ content: '\2014 \00A0';
151
+ }
152
+ }
153
+ }
154
+
155
+ // Addresses
156
+ address {
157
+ display: block;
158
+ line-height: @baseline;
159
+ margin-bottom: @baseline;
160
+ }
161
+
162
+ // Inline and block code styles
163
+ code, pre {
164
+ padding: 0 3px 2px;
165
+ font-family: Monaco, Andale Mono, Courier New, monospace;
166
+ font-size: 12px;
167
+ .border-radius(3px);
168
+ }
169
+ code {
170
+ background-color: lighten(@orange, 40%);
171
+ color: rgba(0,0,0,.75);
172
+ padding: 1px 3px;
173
+ }
174
+ pre {
175
+ background-color: #f5f5f5;
176
+ display: block;
177
+ padding: @baseline - 1;
178
+ margin: 0 0 @baseline;
179
+ line-height: @baseline;
180
+ font-size: 12px;
181
+ border: 1px solid #ccc;
182
+ border: 1px solid rgba(0,0,0,.15);
183
+ .border-radius(3px);
184
+ white-space: pre-wrap;
185
+ }
@@ -1,7 +1,11 @@
1
- #header { color: #6c94be; }
2
- div { width: 2; }
1
+ #header {
2
+ color: #6c94be;
3
+ }
4
+ div {
5
+ width: 2;
6
+ }
3
7
 
4
8
  div {
5
9
  width: 20px;
6
10
  height: 30px;
7
- }
11
+ }
@@ -1,2 +1,6 @@
1
- #header { color: #6c94be; }
2
- div { width: 2; }
1
+ #header {
2
+ color: #6c94be;
3
+ }
4
+ div {
5
+ width: 2;
6
+ }
@@ -0,0 +1,3 @@
1
+ @bad-blue: #5B83FF;
2
+ @white: #ffffff;
3
+
@@ -1,10 +1,12 @@
1
- @bad-blue: #5B83FF;
2
- @bad-light-blue: @bad-blue + #111;
1
+ @import "../nested_import.less";
2
+ @import "really_nested_import.less";
3
+
3
4
 
4
5
  #header {
5
6
  color: @bad-light-blue;
7
+ background-color: @white;
6
8
  }
7
9
 
8
10
  div {
9
11
  width: 2 + 2
10
- }
12
+ }
@@ -1,2 +1,7 @@
1
- #header { color: #6c94ff; }
2
- div { width: 4; }
1
+ #header {
2
+ color: #6c94ff;
3
+ background-color: #ffffff;
4
+ }
5
+ div {
6
+ width: 4;
7
+ }
@@ -0,0 +1,4 @@
1
+ @import "../nested_import.less";
2
+
3
+ @bad-light-blue: @bad-blue + #111;
4
+
@@ -7,4 +7,4 @@
7
7
 
8
8
  div {
9
9
  width: 1 + 1
10
- }
10
+ }
@@ -1,2 +1,6 @@
1
- #header { color: #6c94be; }
2
- div { width: 2; }
1
+ #header {
2
+ color: #6c94be;
3
+ }
4
+ div {
5
+ width: 2;
6
+ }
@@ -1,11 +1,11 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- Bundler.setup
1
+ # this file is automatically required in when you require 'assert' in your tests
2
+ # put test helpers here
4
3
 
5
- require 'test_belt'
6
- require 'test/env'
4
+ # add root dir to the load path
5
+ $LOAD_PATH.unshift(File.expand_path("../..", __FILE__))
6
+ require 'rack/less'
7
7
 
8
- class Test::Unit::TestCase
8
+ class Assert::Context
9
9
 
10
10
  def file_path(*segments)
11
11
  segs = segments.unshift([File.dirname(__FILE__), '..']).flatten
@@ -13,17 +13,15 @@ class Test::Unit::TestCase
13
13
  end
14
14
 
15
15
  def self.should_compile_source(name, desc)
16
- context desc do
17
- setup do
18
- @compiled = File.read(File.join(@source_folder, "#{name}_compiled.css"))
19
- @source = Rack::Less::Source.new(name, :folder => @source_folder)
20
- end
16
+ setup do
17
+ @compiled = File.read(File.join(@source_folder, "#{name}_compiled.css"))
18
+ @source = Rack::Less::Source.new(name, :folder => @source_folder)
19
+ end
21
20
 
22
- should "compile LESS" do
23
- assert_equal @compiled.strip, @source.compiled.strip, '.compiled is incorrect'
24
- assert_equal @compiled.strip, @source.to_css.strip, '.to_css is incorrect'
25
- assert_equal @compiled.strip, @source.css.strip, '.css is incorrect'
26
- end
21
+ should "compile LESS" do
22
+ assert_equal @compiled.strip, @source.compiled.strip, '.compiled is incorrect'
23
+ assert_equal @compiled.strip, @source.to_css.strip, '.to_css is incorrect'
24
+ assert_equal @compiled.strip, @source.css.strip, '.css is incorrect'
27
25
  end
28
26
  end
29
27
 
@@ -45,33 +43,32 @@ class Test::Unit::TestCase
45
43
  end
46
44
 
47
45
  def self.should_not_be_a_valid_rack_less_request(args)
48
- context "to #{args[:method].upcase} #{args[:resource]} (#{args[:description]})" do
49
- setup do
50
- @request = less_request(args[:method], args[:resource])
51
- end
46
+ desc "to #{args[:method].upcase} #{args[:resource]} (#{args[:description]})"
47
+ setup do
48
+ @request = less_request(args[:method], args[:resource])
49
+ end
52
50
 
53
- should "not be a valid endpoint for Rack::Less" do
54
- not_valid = !@request.get?
55
- not_valid ||= !@request.for_css?
56
- not_valid ||= @request.source.files.empty?
57
- assert not_valid, 'request is a GET for .css format and has source'
58
- assert !@request.for_less?, 'the request is for less'
59
- end
51
+ should "not be a valid endpoint for Rack::Less" do
52
+ not_valid = !@request.get?
53
+ not_valid ||= !@request.for_css?
54
+ not_valid ||= @request.source.files.empty?
55
+ assert not_valid, 'request is a GET for .css format and has source'
56
+ assert !@request.for_less?, 'the request is for less'
60
57
  end
61
58
  end
59
+
62
60
  def self.should_be_a_valid_rack_less_request(args)
63
- context "to #{args[:method].upcase} #{args[:resource]} (#{args[:description]})" do
64
- setup do
65
- @request = less_request(args[:method], args[:resource])
66
- end
61
+ desc "to #{args[:method].upcase} #{args[:resource]} (#{args[:description]})"
62
+ setup do
63
+ @request = less_request(args[:method], args[:resource])
64
+ end
67
65
 
68
- should "be a valid endpoint for Rack::Less" do
69
- assert @request.get?, 'the request is not a GET'
70
- assert @request.for_css?, 'the request is not for css'
71
- assert !@request.source.files.empty?, 'the request resource has no source'
72
- assert @request.for_less?, 'the request is not for less'
73
- end
66
+ should "be a valid endpoint for Rack::Less" do
67
+ assert @request.get?, 'the request is not a GET'
68
+ assert @request.for_css?, 'the request is not for css'
69
+ assert !@request.source.files.empty?, 'the request resource has no source'
70
+ assert @request.for_less?, 'the request is not for less'
74
71
  end
75
72
  end
76
73
 
77
- end
74
+ end