doggystyle 0.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.
Files changed (294) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/.hound.yml +5 -0
  4. data/.npmignore +18 -0
  5. data/.ruby-version +1 -0
  6. data/.scss-lint.yml +243 -0
  7. data/.travis.yml +5 -0
  8. data/CHANGELOG.md +5 -0
  9. data/Gemfile +4 -0
  10. data/LICENSE.txt +21 -0
  11. data/README.md +40 -0
  12. data/RELEASING.md +1 -0
  13. data/Rakefile +9 -0
  14. data/bin/doggystyle +5 -0
  15. data/bower.json +38 -0
  16. data/circle.yml +13 -0
  17. data/core/_imports.scss +229 -0
  18. data/core/animations/_jump.scss +7 -0
  19. data/core/animations/_shake.scss +24 -0
  20. data/core/animations/_wobble.scss +8 -0
  21. data/core/functions/_mobile-first.scss +3 -0
  22. data/core/functions/_opposite-direction.scss +45 -0
  23. data/core/functions/casts/_to-bool.scss +19 -0
  24. data/core/functions/casts/_to-color.scss +74 -0
  25. data/core/functions/casts/_to-list.scss +38 -0
  26. data/core/functions/casts/_to-map.scss +27 -0
  27. data/core/functions/casts/_to-null.scss +15 -0
  28. data/core/functions/casts/_to-number.scss +66 -0
  29. data/core/functions/casts/_to-string.scss +15 -0
  30. data/core/functions/colours/_colour-contrast.scss +61 -0
  31. data/core/functions/colours/_colour.scss +69 -0
  32. data/core/functions/colours/_random-colour.scss +78 -0
  33. data/core/functions/lists/_contains.scss +62 -0
  34. data/core/functions/lists/_first.scss +19 -0
  35. data/core/functions/lists/_insert-nth.scss +37 -0
  36. data/core/functions/lists/_last.scss +11 -0
  37. data/core/functions/lists/_merge.scss +30 -0
  38. data/core/functions/lists/_prepend.scss +11 -0
  39. data/core/functions/lists/_remove-nth.scss +53 -0
  40. data/core/functions/lists/_remove.scss +30 -0
  41. data/core/functions/lists/_replace-nth.scss +55 -0
  42. data/core/functions/lists/_replace.scss +36 -0
  43. data/core/functions/lists/_reverse.scss +31 -0
  44. data/core/functions/lists/_second.scss +19 -0
  45. data/core/functions/lists/_shift.scss +24 -0
  46. data/core/functions/lists/_slice.scss +52 -0
  47. data/core/functions/lists/_sort.scss +51 -0
  48. data/core/functions/maps/_map-deep-get.scss +51 -0
  49. data/core/functions/maps/_map-deep-set.scss +34 -0
  50. data/core/functions/maps/_map-depth.scss +23 -0
  51. data/core/functions/maps/_map-extend.scss +47 -0
  52. data/core/functions/maps/_map-has-keys.scss +23 -0
  53. data/core/functions/maps/_map-has-nested-keys.scss +24 -0
  54. data/core/functions/maps/_map-set.scss +4 -0
  55. data/core/functions/maps/_map-zip.scss +50 -0
  56. data/core/functions/numbers/_add-unit.scss +54 -0
  57. data/core/functions/numbers/_pad.scss +16 -0
  58. data/core/functions/numbers/_spacer.scss +16 -0
  59. data/core/functions/numbers/_strip.scss +29 -0
  60. data/core/functions/numbers/_units.scss +17 -0
  61. data/core/functions/svg/_dots.scss +84 -0
  62. data/core/functions/svg/_fake-radius.scss +131 -0
  63. data/core/functions/svg/_lines.scss +76 -0
  64. data/core/functions/svg/_svg.scss +12 -0
  65. data/core/functions/text/_smart-lineheight.scss +13 -0
  66. data/core/functions/text/_string-explode.scss +45 -0
  67. data/core/functions/text/_string-replace.scss +38 -0
  68. data/core/helpers/_custom-elements.scss +114 -0
  69. data/core/helpers/_eases.scss +44 -0
  70. data/core/helpers/_reset.scss +282 -0
  71. data/core/helpers/_show-breakpoints.scss +25 -0
  72. data/core/helpers/_strings.scss +648 -0
  73. data/core/helpers/_warnings.scss +3 -0
  74. data/core/helpers/checks/_check.scss +69 -0
  75. data/core/helpers/checks/_is-absolute-length.scss +25 -0
  76. data/core/helpers/checks/_is-angel.scss +25 -0
  77. data/core/helpers/checks/_is-arglist.scss +11 -0
  78. data/core/helpers/checks/_is-bool.scss +23 -0
  79. data/core/helpers/checks/_is-calc.scss +11 -0
  80. data/core/helpers/checks/_is-colour.scss +23 -0
  81. data/core/helpers/checks/_is-dark.scss +14 -0
  82. data/core/helpers/checks/_is-duration.scss +15 -0
  83. data/core/helpers/checks/_is-false.scss +13 -0
  84. data/core/helpers/checks/_is-first-character.scss +11 -0
  85. data/core/helpers/checks/_is-frequency.scss +15 -0
  86. data/core/helpers/checks/_is-function.scss +44 -0
  87. data/core/helpers/checks/_is-integer.scss +15 -0
  88. data/core/helpers/checks/_is-length.scss +16 -0
  89. data/core/helpers/checks/_is-light.scss +14 -0
  90. data/core/helpers/checks/_is-list.scss +11 -0
  91. data/core/helpers/checks/_is-map.scss +11 -0
  92. data/core/helpers/checks/_is-null.scss +11 -0
  93. data/core/helpers/checks/_is-number.scss +19 -0
  94. data/core/helpers/checks/_is-percentage.scss +13 -0
  95. data/core/helpers/checks/_is-position.scss +16 -0
  96. data/core/helpers/checks/_is-pseudo.scss +24 -0
  97. data/core/helpers/checks/_is-relative-length.scss +25 -0
  98. data/core/helpers/checks/_is-resolution.scss +15 -0
  99. data/core/helpers/checks/_is-selector.scss +3 -0
  100. data/core/helpers/checks/_is-string.scss +11 -0
  101. data/core/helpers/checks/_is-time.scss +15 -0
  102. data/core/helpers/checks/_is-unit.scss +16 -0
  103. data/core/helpers/private/_arglist-to-list.scss +36 -0
  104. data/core/helpers/private/_brightness.scss +13 -0
  105. data/core/helpers/private/_find-digits.scss +41 -0
  106. data/core/helpers/private/_find-integer.scss +40 -0
  107. data/core/helpers/private/_from-hex.scss +48 -0
  108. data/core/helpers/private/_from-hsl.scss +55 -0
  109. data/core/helpers/private/_from-rgb.scss +55 -0
  110. data/core/helpers/private/_get-color-value.scss +26 -0
  111. data/core/helpers/private/_hash-fix.scss +15 -0
  112. data/core/helpers/private/_hex-to-dec.scss +28 -0
  113. data/core/helpers/private/_length.scss +26 -0
  114. data/core/helpers/private/_lightness.scss +15 -0
  115. data/core/helpers/private/_list-items-to-strings.scss +8 -0
  116. data/core/helpers/private/_min-max-number.scss +12 -0
  117. data/core/helpers/private/_pow.scss +29 -0
  118. data/core/helpers/private/_string-compare.scss +38 -0
  119. data/core/helpers/private/_string-explode.scss +43 -0
  120. data/core/helpers/private/_sudo.scss +23 -0
  121. data/core/helpers/symbols/_arrows.scss +337 -0
  122. data/core/helpers/symbols/_block.scss +97 -0
  123. data/core/helpers/symbols/_box.scss +385 -0
  124. data/core/helpers/symbols/_common.scss +101 -0
  125. data/core/helpers/symbols/_currency.scss +82 -0
  126. data/core/helpers/symbols/_dingbats.scss +565 -0
  127. data/core/helpers/symbols/_geometric.scss +289 -0
  128. data/core/helpers/symbols/_letterlike.scss +235 -0
  129. data/core/helpers/symbols/_misc.scss +568 -0
  130. data/core/helpers/symbols/_operators.scss +766 -0
  131. data/core/helpers/symbols/_punctuation.scss +214 -0
  132. data/core/mixins/_align.scss +15 -0
  133. data/core/mixins/_animate.scss +16 -0
  134. data/core/mixins/_aspect-ratio.scss +86 -0
  135. data/core/mixins/_backface-visibility.scss +7 -0
  136. data/core/mixins/_background-image.scss +13 -0
  137. data/core/mixins/_blend.scss +10 -0
  138. data/core/mixins/_blendmodes.scss +24 -0
  139. data/core/mixins/_border-radius.scss +105 -0
  140. data/core/mixins/_browsers.scss +155 -0
  141. data/core/mixins/_bulletpoint.scss +12 -0
  142. data/core/mixins/_center.scss +3 -0
  143. data/core/mixins/_clearfix.scss +7 -0
  144. data/core/mixins/_columns.scss +22 -0
  145. data/core/mixins/_custom-property.scss +15 -0
  146. data/core/mixins/_devices.scss +97 -0
  147. data/core/mixins/_dropdown.scss +38 -0
  148. data/core/mixins/_fake-radius.scss +99 -0
  149. data/core/mixins/_filters.scss +163 -0
  150. data/core/mixins/_flip.scss +11 -0
  151. data/core/mixins/_font-face.scss +11 -0
  152. data/core/mixins/_fontsize.scss +126 -0
  153. data/core/mixins/_gallery.scss +134 -0
  154. data/core/mixins/_gradient.scss +72 -0
  155. data/core/mixins/_image-size.scss +18 -0
  156. data/core/mixins/_image.scss +12 -0
  157. data/core/mixins/_inputs.scss +18 -0
  158. data/core/mixins/_keyframes.scss +8 -0
  159. data/core/mixins/_last.scss +5 -0
  160. data/core/mixins/_nth-last.scss +7 -0
  161. data/core/mixins/_nth.scss +10 -0
  162. data/core/mixins/_placeholder.scss +15 -0
  163. data/core/mixins/_prefixer.scss +55 -0
  164. data/core/mixins/_selection.scss +15 -0
  165. data/core/mixins/_shadow.scss +7 -0
  166. data/core/mixins/_size.scss +13 -0
  167. data/core/mixins/_smart-horizontal.scss +21 -0
  168. data/core/mixins/_sudo-image.scss +12 -0
  169. data/core/mixins/_text-shadow.scss +30 -0
  170. data/core/mixins/_transforms.scss +264 -0
  171. data/core/mixins/_transition.scss +189 -0
  172. data/core/mixins/_triangle-classic.scss +170 -0
  173. data/core/mixins/_triangle.scss +250 -0
  174. data/core/mixins/_unwrap.scss +5 -0
  175. data/core/mixins/_user-select.scss +5 -0
  176. data/core/mixins/_vertical.scss +10 -0
  177. data/core/mixins/columns/_columns.scss +92 -0
  178. data/core/mixins/flexbox/_flex-container.scss +201 -0
  179. data/core/mixins/flexbox/_flex-grid.scss +235 -0
  180. data/core/mixins/flexbox/_flex-items.scss +140 -0
  181. data/core/mixins/flexbox/_flex-remove.scss +12 -0
  182. data/core/mixins/grid/_break-between.scss +6 -0
  183. data/core/mixins/grid/_grid.scss +150 -0
  184. data/core/mixins/svg/_svg-size.scss +4 -0
  185. data/core/mixins/svg/_svg.scss +9 -0
  186. data/core/placeholders/_clear.scss +27 -0
  187. data/core/placeholders/_cursor.scss +35 -0
  188. data/core/placeholders/_misc.scss +20 -0
  189. data/core/placeholders/_rendering.scss +21 -0
  190. data/core/placeholders/_text.scss +41 -0
  191. data/core/settings/_colours.scss +30 -0
  192. data/core/settings/_directories.scss +7 -0
  193. data/core/settings/_global.scss +14 -0
  194. data/core/settings/_grid.scss +24 -0
  195. data/core/settings/_padding.scss +8 -0
  196. data/core/settings/_spacing.scss +8 -0
  197. data/core/settings/_text.scss +13 -0
  198. data/doggystyle.gemspec +29 -0
  199. data/eyeglass-exports.js +7 -0
  200. data/features/install.feature +29 -0
  201. data/features/step_definitions/doggystyle_steps.rb +31 -0
  202. data/features/support/bourbon_support.rb +19 -0
  203. data/features/support/env.rb +1 -0
  204. data/features/update.feature +30 -0
  205. data/features/version.feature +5 -0
  206. data/index.js +7 -0
  207. data/lib/doggystyle.rb +7 -0
  208. data/lib/doggystyle/generator.rb +81 -0
  209. data/lib/doggystyle/version.rb +3 -0
  210. data/package.json +33 -0
  211. data/spec/doggystyle/library/border_color_spec.rb +51 -0
  212. data/spec/doggystyle/library/border_radius_spec.rb +25 -0
  213. data/spec/doggystyle/library/border_style_spec.rb +51 -0
  214. data/spec/doggystyle/library/border_width_spec.rb +51 -0
  215. data/spec/doggystyle/library/buttons_spec.rb +53 -0
  216. data/spec/doggystyle/library/clearfix_spec.rb +18 -0
  217. data/spec/doggystyle/library/contrast_switch_spec.rb +23 -0
  218. data/spec/doggystyle/library/ellipsis_spec.rb +20 -0
  219. data/spec/doggystyle/library/font_face_spec_1.rb +16 -0
  220. data/spec/doggystyle/library/font_face_spec_2.rb +21 -0
  221. data/spec/doggystyle/library/font_face_spec_3.rb +16 -0
  222. data/spec/doggystyle/library/font_face_spec_4.rb +17 -0
  223. data/spec/doggystyle/library/font_stacks_spec.rb +40 -0
  224. data/spec/doggystyle/library/hide_text_spec.rb +17 -0
  225. data/spec/doggystyle/library/hide_visually_spec.rb +35 -0
  226. data/spec/doggystyle/library/margin_spec.rb +51 -0
  227. data/spec/doggystyle/library/modular_scale_spec.rb +43 -0
  228. data/spec/doggystyle/library/padding_spec.rb +51 -0
  229. data/spec/doggystyle/library/position_spec.rb +67 -0
  230. data/spec/doggystyle/library/prefixer_spec.rb +34 -0
  231. data/spec/doggystyle/library/shade_spec.rb +31 -0
  232. data/spec/doggystyle/library/size_spec.rb +31 -0
  233. data/spec/doggystyle/library/strip_unit_spec.rb +31 -0
  234. data/spec/doggystyle/library/text_inputs_spec.rb +75 -0
  235. data/spec/doggystyle/library/tint_spec.rb +31 -0
  236. data/spec/doggystyle/library/triangle_spec.rb +31 -0
  237. data/spec/doggystyle/library/word_wrap_spec.rb +29 -0
  238. data/spec/doggystyle/utilities/assign_inputs_spec.rb +50 -0
  239. data/spec/doggystyle/utilities/collapse_directionals.rb +25 -0
  240. data/spec/doggystyle/utilities/directional_values_spec.rb +21 -0
  241. data/spec/doggystyle/utilities/font_source_declaration_spec.rb +29 -0
  242. data/spec/doggystyle/utilities/retrieve_bourbon_setting_spec.rb +31 -0
  243. data/spec/doggystyle/utilities/unpack_spec.rb +32 -0
  244. data/spec/doggystyle/validators/contains_spec.rb +27 -0
  245. data/spec/doggystyle/validators/is_length_spec.rb +49 -0
  246. data/spec/doggystyle/validators/is_light_spec.rb +37 -0
  247. data/spec/doggystyle/validators/is_number_spec.rb +43 -0
  248. data/spec/doggystyle/validators/is_size_spec.rb +43 -0
  249. data/spec/fixtures/_setup.scss +1 -0
  250. data/spec/fixtures/library/border-color.scss +26 -0
  251. data/spec/fixtures/library/border-radius.scss +17 -0
  252. data/spec/fixtures/library/border-style.scss +21 -0
  253. data/spec/fixtures/library/border-width.scss +21 -0
  254. data/spec/fixtures/library/buttons.scss +17 -0
  255. data/spec/fixtures/library/clearfix.scss +5 -0
  256. data/spec/fixtures/library/contrast-switch.scss +9 -0
  257. data/spec/fixtures/library/ellipsis.scss +5 -0
  258. data/spec/fixtures/library/font-face-1.scss +6 -0
  259. data/spec/fixtures/library/font-face-2.scss +10 -0
  260. data/spec/fixtures/library/font-face-3.scss +8 -0
  261. data/spec/fixtures/library/font-face-4.scss +7 -0
  262. data/spec/fixtures/library/font-stacks.scss +41 -0
  263. data/spec/fixtures/library/hide-text.scss +5 -0
  264. data/spec/fixtures/library/hide-visually.scss +9 -0
  265. data/spec/fixtures/library/margin.scss +21 -0
  266. data/spec/fixtures/library/modular-scale.scss +29 -0
  267. data/spec/fixtures/library/padding.scss +21 -0
  268. data/spec/fixtures/library/position.scss +25 -0
  269. data/spec/fixtures/library/prefixer.scss +13 -0
  270. data/spec/fixtures/library/shade.scss +17 -0
  271. data/spec/fixtures/library/size.scss +13 -0
  272. data/spec/fixtures/library/strip-unit.scss +17 -0
  273. data/spec/fixtures/library/text-inputs.scss +21 -0
  274. data/spec/fixtures/library/tint.scss +17 -0
  275. data/spec/fixtures/library/triangle.scss +9 -0
  276. data/spec/fixtures/library/word-wrap.scss +9 -0
  277. data/spec/fixtures/utilities/assign-inputs.scss +19 -0
  278. data/spec/fixtures/utilities/collapse-directionals.scss +17 -0
  279. data/spec/fixtures/utilities/directional-values.scss +13 -0
  280. data/spec/fixtures/utilities/font-source-declaration.scss +11 -0
  281. data/spec/fixtures/utilities/retrieve-bourbon-setting.scss +16 -0
  282. data/spec/fixtures/utilities/unpack.scss +17 -0
  283. data/spec/fixtures/validators/contains.scss +28 -0
  284. data/spec/fixtures/validators/is-length.scss +35 -0
  285. data/spec/fixtures/validators/is-light.scss +29 -0
  286. data/spec/fixtures/validators/is-number.scss +31 -0
  287. data/spec/fixtures/validators/is-size.scss +31 -0
  288. data/spec/spec_helper.rb +22 -0
  289. data/spec/support/matchers/have_rule.rb +35 -0
  290. data/spec/support/matchers/have_ruleset.rb +20 -0
  291. data/spec/support/matchers/have_value.rb +17 -0
  292. data/spec/support/parser_support.rb +16 -0
  293. data/spec/support/sass_support.rb +10 -0
  294. metadata +527 -0
@@ -0,0 +1,50 @@
1
+ require "spec_helper"
2
+
3
+ describe "assign-inputs" do
4
+ before(:all) do
5
+ ParserSupport.parse_file("utilities/assign-inputs")
6
+ @text_inputs_list = [
7
+ "[type='password']",
8
+ "[type='text']",
9
+ "textarea"
10
+ ]
11
+ end
12
+
13
+ context "expands plain text inputs" do
14
+ it "finds selectors" do
15
+ @text_inputs_list.each do |input|
16
+ expect(input).to have_rule("color: #f00")
17
+ end
18
+ end
19
+ end
20
+
21
+ context "expands text inputs with pseudo classes" do
22
+ it "finds selectors" do
23
+ list = @text_inputs_list.dup
24
+ list.map! { |input| input + ":active" }
25
+ list.each do |input|
26
+ expect(input).to have_rule("color: #0f0")
27
+ end
28
+ end
29
+ end
30
+
31
+ context "expands text inputs when first in list" do
32
+ it "finds selectors" do
33
+ list = @text_inputs_list.dup
34
+ list.push "select"
35
+ list.each do |input|
36
+ expect(input).to have_rule("color: #00f")
37
+ end
38
+ end
39
+ end
40
+
41
+ context "expands text inputs when middle of list" do
42
+ it "finds selectors" do
43
+ list = @text_inputs_list.dup
44
+ list.unshift "[type=\"file\"]"
45
+ list.each do |input|
46
+ expect(input).to have_rule("color: #f0f")
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ describe "collapse-directionals" do
4
+ before(:all) do
5
+ ParserSupport.parse_file("utilities/collapse-directionals")
6
+ end
7
+
8
+ context "collapse-directionals" do
9
+ it "returns four distinct lengths unaltered" do
10
+ expect(".four").to have_rule("padding: 10px 20px 30px 40px")
11
+ end
12
+
13
+ it "returns collapsed horizontal lengths" do
14
+ expect(".three").to have_rule("padding: 5px 10px 5px 20px")
15
+ end
16
+
17
+ it "returns collapsed vertical and horizontal lengths" do
18
+ expect(".two").to have_rule("padding: 50px 100px")
19
+ end
20
+
21
+ it "returns collapsed lengths when all match" do
22
+ expect(".one").to have_rule("padding: 10px")
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+
3
+ describe "directional-values" do
4
+ before(:all) do
5
+ ParserSupport.parse_file("utilities/directional-values")
6
+ end
7
+
8
+ context "directional-property" do
9
+ it "returns property and values with four distinct lengths" do
10
+ expect(".border-all").to have_rule("border-width: 2px 5px 8px 12px")
11
+ end
12
+
13
+ it "returns property and value with one length" do
14
+ expect(".border-top").to have_rule("border-top: 10px")
15
+ end
16
+
17
+ it "returns property and value with vertical and horizontal values" do
18
+ expect(".border-color").to have_rule("border-color: #fff #000")
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ describe "font-source-declaration" do
4
+ before(:all) do
5
+ ParserSupport.parse_file("utilities/font-source-declaration")
6
+ end
7
+
8
+ context "called with pipeline" do
9
+ it "returns pipeline path" do
10
+ rule = 'src: font-url("b.eot?#iefix") format("embedded-opentype"), ' +
11
+ 'font-url("b.woff2") format("woff2"), ' +
12
+ 'font-url("b.woff") format("woff"), ' +
13
+ 'font-url("b.ttf") format("truetype"), ' +
14
+ 'font-url("b.svg#a") format("svg")'
15
+ expect(".has-pipeline").to have_rule(rule)
16
+ end
17
+ end
18
+
19
+ context "called with no pipeline" do
20
+ it "does not return pipeline path" do
21
+ rule = 'src: url("b.eot?#iefix") format("embedded-opentype"), ' +
22
+ 'url("b.woff2") format("woff2"), ' +
23
+ 'url("b.woff") format("woff"), ' +
24
+ 'url("b.ttf") format("truetype"), ' +
25
+ 'url("b.svg#a") format("svg")'
26
+ expect(".no-pipeline").to have_rule(rule)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,31 @@
1
+ require "spec_helper"
2
+
3
+ describe "_retrieve-bourbon-setting" do
4
+ before(:all) do
5
+ ParserSupport.parse_file("utilities/retrieve-bourbon-setting")
6
+ end
7
+
8
+ context "gets the modular-scale-base setting" do
9
+ it "and returns the default value" do
10
+ expect(".test-1").to have_rule("content: 1em")
11
+ end
12
+ end
13
+
14
+ context "gets the rails-asset-pipeline setting" do
15
+ it "and returns the user-overridden value" do
16
+ expect(".test-2").to have_rule("content: true")
17
+ end
18
+ end
19
+
20
+ context "called from the font-face mixin" do
21
+ it "outputs user-overridden font file formats" do
22
+ ruleset = 'font-family: "source-sans-pro"; ' +
23
+ 'src: font-url("source-sans-pro-regular.woff2") ' +
24
+ 'format("woff2"), ' +
25
+ 'font-url("source-sans-pro-regular.woff") ' +
26
+ 'format("woff");'
27
+
28
+ expect("@font-face").to have_ruleset(ruleset)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,32 @@
1
+ require "spec_helper"
2
+
3
+ describe "unpack" do
4
+ before(:all) do
5
+ ParserSupport.parse_file("utilities/unpack")
6
+ end
7
+
8
+ context "single" do
9
+ it "unpacks four identical measurements" do
10
+ expect(".single").to have_rule("padding: 10px 10px 10px 10px")
11
+ end
12
+ end
13
+
14
+ context "double" do
15
+ it "unpacks identical measurements for top and bottom,
16
+ and different identical measurements for left and right" do
17
+ expect(".double").to have_rule("padding: 1em 2em 1em 2em")
18
+ end
19
+ end
20
+
21
+ context "triple" do
22
+ it "unpacks identical measurements for left and right" do
23
+ expect(".triple").to have_rule("padding: 10px 20px 0 20px")
24
+ end
25
+ end
26
+
27
+ context "quadruple" do
28
+ it "unpacks four distict measurements" do
29
+ expect(".quadruple").to have_rule("padding: 0 calc(1em + 10px) 20px 50px")
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,27 @@
1
+ require "spec_helper"
2
+
3
+ describe "contains" do
4
+ before(:all) do
5
+ ParserSupport.parse_file("validators/contains")
6
+ end
7
+
8
+ context "called on array with single item" do
9
+ it "contains item" do
10
+ expect(".single").to have_rule("color: #fff")
11
+ end
12
+
13
+ it "doesn't contain missing item" do
14
+ expect(".single-missing").to have_rule("color: #000")
15
+ end
16
+ end
17
+
18
+ context "called with array with multiple items" do
19
+ it "contains item" do
20
+ expect(".multiple").to have_rule("color: #fff")
21
+ end
22
+
23
+ it "doesn't contain missing item" do
24
+ expect(".multiple-missing").to have_rule("color: #000")
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,49 @@
1
+ require "spec_helper"
2
+
3
+ describe "is-length" do
4
+ before(:all) do
5
+ ParserSupport.parse_file("validators/is-length")
6
+ end
7
+
8
+ context "checks if unitless integer can be represented as a length" do
9
+ it "returns false" do
10
+ expect(".integer").not_to have_rule("color: #fff")
11
+ end
12
+ end
13
+
14
+ context "checks if px can be represented as a length" do
15
+ it "returns true" do
16
+ expect(".pixels").to have_rule("color: #fff")
17
+ end
18
+ end
19
+
20
+ context "checks if em can be represented as a length" do
21
+ it "returns true" do
22
+ expect(".ems").to have_rule("color: #fff")
23
+ end
24
+ end
25
+
26
+ context "checks if percent can be represented as a length" do
27
+ it "returns true" do
28
+ expect(".percent").to have_rule("color: #fff")
29
+ end
30
+ end
31
+
32
+ context "parses calculated values" do
33
+ it "returns true" do
34
+ expect(".calc").to have_rule("color: #fff")
35
+ end
36
+ end
37
+
38
+ context "checks if strings can be represented as a length" do
39
+ it "returns false" do
40
+ expect(".string").not_to have_rule("color: #fff")
41
+ end
42
+ end
43
+
44
+ context "checks if null can be represented as a length" do
45
+ it "returns false" do
46
+ expect(".null").not_to have_rule("color: #fff")
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,37 @@
1
+ require "spec_helper"
2
+
3
+ describe "is-light" do
4
+ before(:all) do
5
+ ParserSupport.parse_file("validators/is-light")
6
+ end
7
+
8
+ context "takes a light color" do
9
+ it "and returns true" do
10
+ expect(".pink").to have_rule("color: #000")
11
+ end
12
+ end
13
+
14
+ context "takes a medium-light color" do
15
+ it "and returns true" do
16
+ expect(".sky").to have_rule("color: #000")
17
+ end
18
+ end
19
+
20
+ context "takes a medium-dark color" do
21
+ it "and returns false" do
22
+ expect(".medium-gray").to have_rule("color: #fff")
23
+ end
24
+ end
25
+
26
+ context "takes a dark color" do
27
+ it "and returns false" do
28
+ expect(".charcoal").to have_rule("color: #fff")
29
+ end
30
+ end
31
+
32
+ context "takes a translucent color" do
33
+ it "and processes as an opaque color" do
34
+ expect(".translucent").to have_rule("color: #000")
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,43 @@
1
+ require "spec_helper"
2
+
3
+ describe "is-number" do
4
+ before(:all) do
5
+ ParserSupport.parse_file("validators/is-number")
6
+ end
7
+
8
+ context "called with integer" do
9
+ it "is a number" do
10
+ expect(".integer").to have_rule("line-height: 1")
11
+ end
12
+ end
13
+
14
+ context "called with px" do
15
+ it "is a number" do
16
+ expect(".px").to have_rule("line-height: 2px")
17
+ end
18
+ end
19
+
20
+ context "called with em" do
21
+ it "is a number" do
22
+ expect(".em").to have_rule("line-height: 3em")
23
+ end
24
+ end
25
+
26
+ context "called with rem" do
27
+ it "is a number" do
28
+ expect(".rem").to have_rule("line-height: 4rem")
29
+ end
30
+ end
31
+
32
+ context "called with percent" do
33
+ it "is a number" do
34
+ expect(".percent").to have_rule("line-height: 5%")
35
+ end
36
+ end
37
+
38
+ context "called with string" do
39
+ it "is not a number" do
40
+ expect(".string").to_not have_rule("line-height: \"stringy\"")
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,43 @@
1
+ require "spec_helper"
2
+
3
+ describe "is-size" do
4
+ before(:all) do
5
+ ParserSupport.parse_file("validators/is-size")
6
+ end
7
+
8
+ context "called with integer" do
9
+ it "is not a size" do
10
+ expect(".integer").to_not have_rule("margin-top: 1")
11
+ end
12
+ end
13
+
14
+ context "called with px" do
15
+ it "is a size" do
16
+ expect(".px").to have_rule("margin-top: 2px")
17
+ end
18
+ end
19
+
20
+ context "called with em" do
21
+ it "is a size" do
22
+ expect(".em").to have_rule("margin-top: 3em")
23
+ end
24
+ end
25
+
26
+ context "called with rem" do
27
+ it "is a size" do
28
+ expect(".rem").to have_rule("margin-top: 4rem")
29
+ end
30
+ end
31
+
32
+ context "called with percent" do
33
+ it "is a size" do
34
+ expect(".percent").to have_rule("margin-top: 5%")
35
+ end
36
+ end
37
+
38
+ context "called with string" do
39
+ it "is not a size" do
40
+ expect(".string").to_not have_rule("margin-top: \"stringy\"")
41
+ end
42
+ end
43
+ end
@@ -0,0 +1 @@
1
+ @import "core/bourbon";
@@ -0,0 +1,26 @@
1
+ @import "setup";
2
+
3
+ $red: #f00;
4
+ $blue: #0f0;
5
+ $green: #00f;
6
+ $purple: #ff0;
7
+
8
+ .border-color-all {
9
+ @include border-color($red);
10
+ }
11
+
12
+ .border-color-alternate {
13
+ @include border-color($blue $green);
14
+ }
15
+
16
+ .border-color-implied-left {
17
+ @include border-color($red $blue $green);
18
+ }
19
+
20
+ .border-color-explicit {
21
+ @include border-color($green $blue $red $purple);
22
+ }
23
+
24
+ .border-color-false-third {
25
+ @include border-color($blue $purple null $green);
26
+ }
@@ -0,0 +1,17 @@
1
+ @import "setup";
2
+
3
+ .border-top-radius {
4
+ @include border-top-radius(1em);
5
+ }
6
+
7
+ .border-left-radius {
8
+ @include border-left-radius(2em);
9
+ }
10
+
11
+ .border-right-radius {
12
+ @include border-right-radius(3em);
13
+ }
14
+
15
+ .border-bottom-radius {
16
+ @include border-bottom-radius(4em);
17
+ }