Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9124680
range.rb
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
2 KB
Subscribers
None
range.rb
View Options
#
# range.rb
#
# TODO(Krzysztof Wilczynski): We probably need to approach numeric values differently ...
module
Puppet::Parser::Functions
newfunction
(
:range
,
:type
=>
:rvalue
,
:doc
=>
<<-
EOS
When given range in the form of (start, stop) it will extrapolate a range as
an array.
*Examples:*
range("0", "9")
Will return: [0,1,2,3,4,5,6,7,8,9]
range("00", "09")
Will return: [0,1,2,3,4,5,6,7,8,9] (Zero padded strings are converted to
integers automatically)
range("a", "c")
Will return: ["a","b","c"]
range("host01", "host10")
Will return: ["host01", "host02", ..., "host09", "host10"]
Passing a third argument will cause the generated range to step by that
interval, e.g.
range("0", "9", "2")
Will return: [0,2,4,6,8]
EOS
)
do
|
arguments
|
# We support more than one argument but at least one is mandatory ...
raise
(
Puppet
::
ParseError
,
"range(): Wrong number of "
+
"arguments given (
#{
arguments
.
size
}
for 1)"
)
if
arguments
.
size
<
1
if
arguments
.
size
>
1
start
=
arguments
[
0
]
stop
=
arguments
[
1
]
step
=
arguments
[
2
].
nil?
?
1
:
arguments
[
2
].
to_i
.
abs
type
=
'..'
# We select simplest type for Range available in Ruby ...
elsif
arguments
.
size
>
0
value
=
arguments
[
0
]
if
m
=
value
.
match
(
/^(\w+)(\.\.\.?|\-)(\w+)$/
)
start
=
m
[
1
]
stop
=
m
[
3
]
type
=
m
[
2
]
elsif
value
.
match
(
/^.+$/
)
raise
(
Puppet
::
ParseError
,
'range(): Unable to compute range '
+
'from the value given'
)
else
raise
(
Puppet
::
ParseError
,
'range(): Unknown format of range given'
)
end
end
# Check whether we have integer value if so then make it so ...
if
start
.
to_s
.
match
(
/^\d+$/
)
start
=
start
.
to_i
stop
=
stop
.
to_i
else
start
=
start
.
to_s
stop
=
stop
.
to_s
end
range
=
case
type
when
/^(\.\.|\-)$/
then
(
start
..
stop
)
when
/^(\.\.\.)$/
then
(
start
...
stop
)
# Exclusive of last element ...
end
result
=
range
.
step
(
step
)
.
collect
{
|
i
|
i
}
# Get them all ... Pokemon ...
return
result
end
end
# vim: set ts=2 sw=2 et :
File Metadata
Details
Attached
Mime Type
text/x-ruby
Expires
Sat, Jun 21, 7:24 PM (2 w, 5 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3249914
Attached To
rSPSTD puppet-puppetlabs-stdlib
Event Timeline
Log In to Comment