expression type | example output |
---|---|
literal undef | nil |
literal default | "default" |
literal integer | 1 |
literal float | 3.14 |
literal false | false |
literal true | true |
literal string | "hello" |
literal regexp | "/this|that.*/" |
View puppet.ebnf
# Puppet EBNF (kind of) | |
# Try with: http://www.bottlecaps.de/rr/ui | |
ACTOR ::= 'actor' ( '(' PARAMS ')')? ('inherits' NAME)? | |
'{' | |
(QUEUE | INBOX | ACTION | SEQUENCE | PARALLEL | FUNCTION | STATE | CONSTANT | LOCAL_TYPE)* | |
'}' | |
SEQUENCE ::= 'sequence' '{' (ACTION | SEQUENCE | PARALLEL)* '}' | |
PARALLEL ::= 'parallel' '{' (ACTION | SEQUENCE | PARALLEL)* '}' |
View gist:e033ab9c8e20282cc494db6f04afc308
# The latch function remembers what it was called with | |
# and returns what it was previously called with. | |
# | |
# This is using global namespace - in your code use a module namespace | |
# | |
Puppet::Functions.create_function(:latch) do | |
dispatch :example do | |
repeated_param 'Any', :arg | |
end |
View sorthash.pp
# When you need to process a hash with keys in sorted order | |
# you may have found the `sort()` function - but it only | |
# operates on an Array. | |
# | |
# Most of the time what is wanted is simply achieved | |
# by taking the keys of a hash and sorting those and | |
# then iterating over the keys. | |
# | |
# When, however the wanted result is a new Hash | |
# with all keys sorted recursively then this becomes |
View example.pp
$h = { 'b' => ['banana', 'bandana'], 'o' => ['orange', 'ovaltine'] } | |
$h2 = $h.map |$k, $v | { [$k,$v[0]] } | |
notice "h2 = ${h2}" | |
notice Hash($h2) |
View puppet_grammar.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> | |
<head> | |
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" /> | |
<meta name="generator" content="Railroad Diagram Generator 1.52.1729" /> | |
<style type="text/css"> | |
::-moz-selection | |
{ | |
color: #FFFEF8; | |
background: #1E1800; | |
} |
View any2bool.rb
Puppet::Functions.create_function(:any2bool) do | |
dispatch :any2bool do | |
param 'Any', :to_be_converted | |
end | |
def any2bool(to_be_converted) | |
call_function('new', Puppet::Pops::Types::PBooleanType::DEFAULT, to_be_converted) | |
end | |
end |
View functional_puppet.pp
# Resolves a given value - if given a Deferred it will be called and all other values are returned as is. | |
# | |
function resolve(Any $x) { | |
if $x =~ Deferred { $x.call } else { $x } | |
} | |
# Resolves and evaluates a condition and either resolves and evaluates the given when_true, | |
# or the given when_false depending on the outcome of the evaluation of the condition. | |
# The result is undef if the selected when_true/when_false is undefined. | |
# |
View sample_mocking_spec.rb
require 'spec_helper' | |
# Example rspec_puppet function rspec test (i.e. subject is the function 'min') | |
# This works for other rspec subjects as well as a compiler is always involved. | |
# This kind of mocking can be required when it is not enough to simply override | |
# a function with another implementation (which can be done with a `let(:pre_condition) { 'function min($x, $y) { ... }'}` | |
# | |
# The main difficulty that this overcomes is the need to let the compiler initialize and | |
# create the context in which it will operate before making any mocks. | |
# |
View comma_separated_list.java
StringJoiner joiner = new StringJoiner(","); | |
for (Item item : list) { | |
joiner.add(item.toString()); | |
} | |
return joiner.toString(); |
View output.md
NewerOlder