css_builder 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -83,6 +83,97 @@ A ruby interface for creating CSS files; LESS and SASS planned;
83
83
  border : 1px;
84
84
  }
85
85
 
86
+ ## LESS support
87
+
88
+ The LESS templating language has limited support right now. You can use it in the following way.
89
+
90
+ ###
91
+
92
+ css = CssBuilder.new
93
+
94
+ css.div {
95
+ font_size "1.2em"
96
+ class!("roger") {
97
+ color "green"
98
+ }
99
+ a {
100
+ text_decoration "none"
101
+ self.&(:hover => nil) {
102
+ color "#333"
103
+ }
104
+ }
105
+ }
106
+
107
+ css.value! # outputs =>
108
+
109
+ div {
110
+ font-size : 1.2em;
111
+ .roger {
112
+ color : "green";
113
+ }
114
+ a {
115
+ text-decoration : "none";
116
+ &:hover() {
117
+ color : "#333";
118
+ }
119
+ }
120
+ }
121
+
122
+ Variables
123
+
124
+ ###
125
+
126
+ css = CssBuilder.new
127
+
128
+ @css.variable!("color", "#4D926F")
129
+
130
+ @css.id!("header") {
131
+ color variable!("color")
132
+ }
133
+
134
+ css.value! # outputs =>
135
+
136
+ @color: #4D926F;
137
+
138
+ #header {
139
+ color: @color;
140
+ }
141
+
142
+ Mixins
143
+
144
+ ###
145
+
146
+ css = CssBuilder.new
147
+
148
+ @css.mixin!("rounded-corners", ["radius", "5px"]) {
149
+ border_radius variable!("radius")
150
+ _webkit_border_radius variable!("radius")
151
+ _moz_border_radius variable!("radius")
152
+ }
153
+
154
+ @css.id!("header") {
155
+ mixin! "rounded-corners"
156
+ }
157
+
158
+ @css.id!("footer") {
159
+ mixin!("rounded-corners", "10px")
160
+ }
161
+
162
+ css.value! # outputs =>
163
+
164
+ .rounded-corners (@radius: 5px) {
165
+ border-radius: @radius;
166
+ -webkit-border-radius: @radius;
167
+ -moz-border-radius: @radius;
168
+ }
169
+
170
+ #header {
171
+ .rounded-corners;
172
+ }
173
+ #footer {
174
+ .rounded-corners(10px);
175
+ }
176
+
86
177
  ## Contributing to css_builder
87
178
 
88
179
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
data/css_builder.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "css_builder"
8
- s.version = "0.1.3"
8
+ s.version = "0.1.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Justin Derrek Van Eaton"]
data/lib/css_builder.rb CHANGED
@@ -25,6 +25,38 @@ class CssBuilder
25
25
  @css
26
26
  end
27
27
 
28
+ ## enventaully move all LESS specific stuff to another file
29
+
30
+ def variable!(name, value=nil)
31
+ if value
32
+ css! "@#{_dasherize name} : #{value};"
33
+ _newline
34
+ else
35
+ return "@#{_dasherize name}"
36
+ end
37
+ @css
38
+ end
39
+
40
+ def mixin!(name, *args, &block)
41
+ css! _class(name)
42
+ _args_param_values(args)
43
+ if block
44
+ _open
45
+ _newline
46
+
47
+ self.instance_eval(&block)
48
+
49
+ _close
50
+ _newline
51
+ else
52
+ css! ";"
53
+ end
54
+ _newline
55
+ @css
56
+ end
57
+
58
+ ## the magic
59
+
28
60
  def method_missing(m, *args, &block)
29
61
 
30
62
  if block
@@ -109,4 +141,27 @@ private
109
141
  end
110
142
  end
111
143
 
144
+ ## enventaully move all LESS specific stuff to another file
145
+
146
+ def _args_param_values(args)
147
+ return if args.empty?
148
+ css! " ("
149
+
150
+ len = args.length
151
+ args.each_with_index do |v, idx|
152
+ if v.is_a?(Array)
153
+ case v.length
154
+ when 0
155
+ when 1
156
+ css! "@#{_dasherize v[0]}"
157
+ else
158
+ css! "@#{_dasherize v[0]}: #{v[1]}"
159
+ end
160
+ else
161
+ css! v
162
+ end
163
+ css! ", " if idx < len - 1
164
+ end
165
+ css! ")"
166
+ end
112
167
  end
@@ -169,4 +169,63 @@ describe "CssBuilder" do
169
169
 
170
170
  end
171
171
 
172
+ describe "LESS" do
173
+
174
+ it "can create and set variables" do
175
+ @css.variable!("color", "#4D926F")
176
+
177
+ @css.id!("header") {
178
+ color variable!("color")
179
+ }
180
+ @css.value!.should match /^@color\s+:\s+#4D926F;\s+#header\s+\{\s+color\s+:\s+@color;\s+\}/
181
+ end
182
+
183
+ it "can create and use mixins" do
184
+ @css.mixin!("rounded-corners", ["radius", "5px"]) {
185
+ border_radius variable!("radius")
186
+ _webkit_border_radius variable!("radius")
187
+ _moz_border_radius variable!("radius")
188
+ }
189
+
190
+ @css.id!("header") {
191
+ mixin! "rounded-corners"
192
+ }
193
+
194
+ @css.id!("footer") {
195
+ mixin!("rounded-corners", "10px")
196
+ }
197
+
198
+ @css.value!.should match /^\.rounded-corners\s+\(@radius:\s+5px\)\s+{\s+border-radius\s+:\s+@radius;\s+-webkit-border-radius\s+:\s+@radius;\s+-moz-border-radius\s+:\s+@radius;\s+}\s+#header\s+{\s+\.rounded-corners;\s+}\s+#footer\s+{\s+\.rounded-corners\s+\(10px\);\s+}/
199
+ end
200
+
201
+ it "can create and use mixins many params" do
202
+ @css.mixin!("rounded-corners", ["radius", "5px"], ["color", "red"]) {
203
+ border_radius variable!("radius")
204
+ }
205
+
206
+ @css.id!("footer") {
207
+ mixin!("rounded-corners", "10px", "green")
208
+ }
209
+
210
+ @css.value!.should match /^\.rounded-corners\s+\(@radius:\s+5px,\s+@color:\s+red\)\s+{\s+border-radius\s+:\s+@radius;\s+}\s+#footer\s+{\s+\.rounded-corners\s+\(10px,\s+green\);\s+}/
211
+ end
212
+
213
+ it "can create and use mixins no defualt" do
214
+ @css.mixin!("rounded-corners", ["radius"]) {
215
+ border_radius variable!("radius")
216
+ }
217
+
218
+ @css.value!.should match /^\.rounded-corners\s+\(@radius\)\s+{\s+border-radius\s+:\s+@radius;\s+}/
219
+ end
220
+
221
+ it "can create and use mixins empty" do
222
+ @css.mixin!("rounded-corners", []) {
223
+ border_radius variable!("radius")
224
+ }
225
+
226
+ @css.value!.should match /^\.rounded-corners\s+\(\)\s+{\s+border-radius\s+:\s+@radius;\s+}/
227
+ end
228
+
229
+ end
230
+
172
231
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: css_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-03-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &2161210120 !ruby/object:Gem::Requirement
16
+ requirement: &2153594100 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.8.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2161210120
24
+ version_requirements: *2153594100
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rdoc
27
- requirement: &2161209160 !ruby/object:Gem::Requirement
27
+ requirement: &2154252480 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '3.12'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2161209160
35
+ version_requirements: *2154252480
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &2161869580 !ruby/object:Gem::Requirement
38
+ requirement: &2154251160 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.0.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2161869580
46
+ version_requirements: *2154251160
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &2161868200 !ruby/object:Gem::Requirement
49
+ requirement: &2154249760 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: 1.8.3
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2161868200
57
+ version_requirements: *2154249760
58
58
  description: A ruby interface for creating CSS files; LESS and SASS planned;
59
59
  email: jvaneat@iit.edu
60
60
  executables: []
@@ -90,7 +90,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
90
90
  version: '0'
91
91
  segments:
92
92
  - 0
93
- hash: -2673597597399935291
93
+ hash: -410341613257085463
94
94
  required_rubygems_version: !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements: