diff --git a/README.md b/README.md index b6d6c0dd2..fe13e710e 100644 --- a/README.md +++ b/README.md @@ -357,6 +357,30 @@ Unacceptable input example: C:/whatever ``` +#### `Stdlib::Filemode` + +Matches valid four digit modes in octal format. + +Acceptable input examples: + +```shell +0644 +``` + +```shell +1777 +``` + +Unacceptable input examples: + +```shell +644 +``` + +```shell +0999 +``` + #### `Stdlib::Windowspath` Matches paths on Windows operating systems. diff --git a/spec/aliases/filemode_spec.rb b/spec/aliases/filemode_spec.rb new file mode 100644 index 000000000..4db13a20e --- /dev/null +++ b/spec/aliases/filemode_spec.rb @@ -0,0 +1,48 @@ +require 'spec_helper' + +if Puppet::Util::Package.versioncmp(Puppet.version, '4.5.0') >= 0 + describe 'test::filemode', type: :class do + describe 'valid modes' do + %w{ + 0644 + 1644 + 2644 + 4644 + 0123 + 0777 + }.each do |value| + describe value.inspect do + let(:params) {{ value: value }} + it { is_expected.to compile } + end + end + end + + describe 'invalid modes' do + context 'garbage inputs' do + [ + nil, + [ nil ], + [ nil, nil ], + { 'foo' => 'bar' }, + { }, + '', + "ネット", + '644', + '7777', + '1', + '22', + '333', + '55555', + '0x123', + '0649', + ].each do |value| + describe value.inspect do + let(:params) {{ value: value }} + it { is_expected.to compile.and_raise_error(/parameter 'value' expects a match for Stdlib::Filemode/) } + end + end + end + end + end +end diff --git a/spec/fixtures/test/manifests/filemode.pp b/spec/fixtures/test/manifests/filemode.pp new file mode 100644 index 000000000..56864072d --- /dev/null +++ b/spec/fixtures/test/manifests/filemode.pp @@ -0,0 +1,6 @@ +# Class to test the Stdlib::Filemode type alias +class test::filemode ( + Stdlib::Filemode $value, +) { + notice("Success") +} diff --git a/types/filemode.pp b/types/filemode.pp new file mode 100644 index 000000000..ed45ff7fc --- /dev/null +++ b/types/filemode.pp @@ -0,0 +1 @@ +type Stdlib::Filemode = Pattern[/^[0124]{1}[0-7]{3}$/]