Class: Sass::Script::Number
Overview
Constant Summary
collapse
- PRECISION =
1000.0
Instance Attribute Summary collapse
Attributes inherited from Literal
#value
Instance Method Summary
collapse
Methods inherited from Literal
#==, #and, #comma, #concat, #neq, #or, #perform, #to_bool, #unary_not
Constructor Details
#initialize(value, numerator_units = [], denominator_units = []) ⇒ Number
Returns a new instance of Number.
10
11
12
13
14
15
|
# File 'lib/sass/script/number.rb', line 10
def initialize(value, numerator_units = [], denominator_units = [])
super(value)
@numerator_units = numerator_units
@denominator_units = denominator_units
normalize!
end
|
Instance Attribute Details
#denominator_units ⇒ Object
Returns the value of attribute denominator_units.
6
7
8
|
# File 'lib/sass/script/number.rb', line 6
def denominator_units
@denominator_units
end
|
#numerator_units ⇒ Object
Returns the value of attribute numerator_units.
6
7
8
|
# File 'lib/sass/script/number.rb', line 6
def numerator_units
@numerator_units
end
|
Instance Method Details
#div(other) ⇒ Object
49
50
51
52
53
54
55
|
# File 'lib/sass/script/number.rb', line 49
def div(other)
if other.is_a? Number
operate(other, :/)
else
raise NoMethodError.new(nil, :div)
end
end
|
#eq(other) ⇒ Object
68
69
70
71
72
|
# File 'lib/sass/script/number.rb', line 68
def eq(other)
Sass::Script::Bool.new(super.to_bool &&
self.numerator_units.sort == other.numerator_units.sort &&
self.denominator_units.sort == other.denominator_units.sort)
end
|
#gt(other) ⇒ Object
74
75
76
77
|
# File 'lib/sass/script/number.rb', line 74
def gt(other)
raise NoMethodError.new(nil, :gt) unless other.is_a?(Number)
operate(other, :>)
end
|
#gte(other) ⇒ Object
79
80
81
82
|
# File 'lib/sass/script/number.rb', line 79
def gte(other)
raise NoMethodError.new(nil, :gt) unless other.is_a?(Number)
operate(other, :>=)
end
|
99
100
101
102
103
104
105
106
107
108
109
|
# File 'lib/sass/script/number.rb', line 99
def inspect
value =
if self.value.is_a?(Float) && (self.value.infinite? || self.value.nan?)
self.value
elsif int?
self.value.to_i
else
(self.value * PRECISION).round / PRECISION
end
"#{value}#{unit_str}"
end
|
#int? ⇒ Boolean
116
117
118
|
# File 'lib/sass/script/number.rb', line 116
def int?
value % 1 == 0.0
end
|
#legal_units? ⇒ Boolean
124
125
126
|
# File 'lib/sass/script/number.rb', line 124
def legal_units?
(numerator_units.empty? || numerator_units.size == 1) && denominator_units.empty?
end
|
#lt(other) ⇒ Object
84
85
86
87
|
# File 'lib/sass/script/number.rb', line 84
def lt(other)
raise NoMethodError.new(nil, :gt) unless other.is_a?(Number)
operate(other, :<)
end
|
#lte(other) ⇒ Object
89
90
91
92
|
# File 'lib/sass/script/number.rb', line 89
def lte(other)
raise NoMethodError.new(nil, :gt) unless other.is_a?(Number)
operate(other, :<=)
end
|
#minus(other) ⇒ Object
27
28
29
30
31
32
33
|
# File 'lib/sass/script/number.rb', line 27
def minus(other)
if other.is_a? Number
operate(other, :-)
else
raise NoMethodError.new(nil, :minus)
end
end
|
#mod(other) ⇒ Object
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/sass/script/number.rb', line 57
def mod(other)
if other.is_a?(Number)
unless other.unitless?
raise Sass::SyntaxError.new("Cannot modulo by a number with units: #{other.inspect}.")
end
operate(other, :%)
else
raise NoMethodError.new(nil, :mod)
end
end
|
#plus(other) ⇒ Object
17
18
19
20
21
22
23
24
25
|
# File 'lib/sass/script/number.rb', line 17
def plus(other)
if other.is_a? Number
operate(other, :+)
elsif other.is_a?(Color)
other.plus(self)
else
Sass::Script::String.new(self.to_s + other.to_s)
end
end
|
#times(other) ⇒ Object
39
40
41
42
43
44
45
46
47
|
# File 'lib/sass/script/number.rb', line 39
def times(other)
if other.is_a? Number
self.operate(other, :*)
elsif other.is_a? Color
other.times(self)
else
raise NoMethodError.new(nil, :times)
end
end
|
111
112
113
114
|
# File 'lib/sass/script/number.rb', line 111
def to_i
super unless int?
return value
end
|
94
95
96
97
|
# File 'lib/sass/script/number.rb', line 94
def to_s
raise Sass::SyntaxError.new("#{inspect} isn't a valid CSS value.") unless legal_units?
inspect
end
|
#unary_minus ⇒ Object
35
36
37
|
# File 'lib/sass/script/number.rb', line 35
def unary_minus
Number.new(-value, numerator_units, denominator_units)
end
|
#unitless? ⇒ Boolean
120
121
122
|
# File 'lib/sass/script/number.rb', line 120
def unitless?
numerator_units.empty? && denominator_units.empty?
end
|