sass 3.3.0.alpha.198 → 3.3.0.alpha.201

Sign up to get free protection for your applications and to get access to all the features.
data/REVISION CHANGED
@@ -1 +1 @@
1
- be5f2f981c18818dbb8dd8b08f13262bbf112ef1
1
+ 3a64325d2550f0bc57f6490854c0a7d0bc5c9db5
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.3.0.alpha.198
1
+ 3.3.0.alpha.201
@@ -1 +1 @@
1
- 03 July 2013 00:40:44 GMT
1
+ 17 July 2013 20:29:34 GMT
@@ -192,6 +192,9 @@ module Sass::Script
192
192
  # \{#comparable comparable($number-1, $number-2)}
193
193
  # : Returns whether two numbers can be added, subtracted, or compared.
194
194
  #
195
+ # \{#call call($name, $args...)}
196
+ # : Dynamically calls a Sass function.
197
+ #
195
198
  # ## Miscellaneous Functions
196
199
  #
197
200
  # \{#if if($condition, $if-true, $if-false)}
@@ -408,8 +411,9 @@ module Sass::Script
408
411
  # Asserts that the value is an integer.
409
412
  #
410
413
  # @example
411
- # assert_unit number, "px"
412
- # assert_unit number, nil
414
+ # assert_integer 2px
415
+ # assert_integer 2.5px => SyntaxError: "Expected 2.5px to be an integer"
416
+ # assert_integer 2.5px, "width" => SyntaxError: "Expected width to be an integer but got 2.5px"
413
417
  # @param number [Sass::Script::Value::Base] The value to be validated.
414
418
  # @param name [::String] The name of the parameter being validated.
415
419
  # @raise [ArgumentError] if number is not an integer or is not a number.
@@ -1781,6 +1785,33 @@ module Sass::Script
1781
1785
  end
1782
1786
  declare :unique_id, []
1783
1787
 
1788
+ # Dynamically calls a function. This can call user-defined
1789
+ # functions, built-in functions, or plain CSS functions. It will
1790
+ # pass along all arguments, including keyword arguments, to the
1791
+ # called function.
1792
+ #
1793
+ # @example
1794
+ # call(rgb, 10, 100, 255) => #0a64ff
1795
+ # call(scale-color, #0a64ff, $lightness: -10%) => #0058ef
1796
+ #
1797
+ # $fn: nth;
1798
+ # call($fn, 2, (a b c)) => b
1799
+ #
1800
+ # @overload call($name, $args...)
1801
+ # @param $name [String] The name of the function to call.
1802
+ def call(name, *args)
1803
+ assert_type name, :String, :name
1804
+ kwargs = args.last.is_a?(Hash) ? args.pop : {}
1805
+ funcall = Sass::Script::Tree::Funcall.new(
1806
+ name.value,
1807
+ args.map {|a| Sass::Script::Tree::Literal.new(a)},
1808
+ Sass::Util.map_vals(kwargs) {|v| Sass::Script::Tree::Literal.new(v)},
1809
+ nil)
1810
+ funcall.options = options
1811
+ funcall.perform(environment)
1812
+ end
1813
+ declare :call, [:name], :var_args => true, :var_kwargs => true
1814
+
1784
1815
  # This function only exists as a workaround for IE7's [`content:counter`
1785
1816
  # bug](http://jes.st/2013/ie7s-css-breaking-content-counter-bug/).
1786
1817
  # It works identically to any other plain-CSS function, except it
@@ -205,7 +205,7 @@ module Sass::Script::Tree
205
205
  return args
206
206
  end
207
207
 
208
- args = args + signature.args[args.size..-1].map do |argname|
208
+ args = args + (signature.args[args.size..-1] || []).map do |argname|
209
209
  if keywords.has_key?(argname)
210
210
  keywords.delete(argname)
211
211
  else
@@ -1258,6 +1258,41 @@ MSG
1258
1258
  end
1259
1259
  end
1260
1260
 
1261
+ def test_call_with_positional_arguments
1262
+ assert_equal evaluate("lighten(blue, 5%)"), evaluate("call(lighten, blue, 5%)")
1263
+ end
1264
+
1265
+ def test_call_with_keyword_arguments
1266
+ assert_equal(
1267
+ evaluate("lighten($color: blue, $amount: 5%)"),
1268
+ evaluate("call(lighten, $color: blue, $amount: 5%)"))
1269
+ end
1270
+
1271
+ def test_call_with_keyword_and_positional_arguments
1272
+ assert_equal(
1273
+ evaluate("lighten(blue, $amount: 5%)"),
1274
+ evaluate("call(lighten, blue, $amount: 5%)"))
1275
+ end
1276
+
1277
+ def test_call_with_dynamic_name
1278
+ assert_equal(
1279
+ evaluate("lighten($color: blue, $amount: 5%)"),
1280
+ evaluate("call($fn, $color: blue, $amount: 5%)",
1281
+ env("fn" => Sass::Script::String.new("lighten"))))
1282
+ end
1283
+
1284
+ def test_call_unknown_function
1285
+ assert_equal evaluate("unknown(red, blue)"), evaluate("call(unknown, red, blue)")
1286
+ end
1287
+
1288
+ def test_call_with_non_string_argument
1289
+ assert_error_message "$name: 3px is not a string for `call'", "call(3px)"
1290
+ end
1291
+
1292
+ def test_errors_in_called_function
1293
+ assert_error_message "3px is not a color for `lighten'", "call(lighten, 3px, 5%)"
1294
+ end
1295
+
1261
1296
  ## Regression Tests
1262
1297
 
1263
1298
  def test_saturation_bounds
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sass
3
3
  version: !ruby/object:Gem::Version
4
- hash: 592302721
4
+ hash: 592302751
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 3
8
8
  - 3
9
9
  - 0
10
10
  - alpha
11
- - 198
12
- version: 3.3.0.alpha.198
11
+ - 201
12
+ version: 3.3.0.alpha.201
13
13
  platform: ruby
14
14
  authors:
15
15
  - Nathan Weizenbaum
@@ -19,7 +19,7 @@ autorequire:
19
19
  bindir: bin
20
20
  cert_chain: []
21
21
 
22
- date: 2013-07-02 00:00:00 -04:00
22
+ date: 2013-07-17 00:00:00 -04:00
23
23
  default_executable:
24
24
  dependencies:
25
25
  - !ruby/object:Gem::Dependency