3 describe 'try_get_value' do
25 context 'with single values' do
27 is_expected.not_to eq(nil)
30 it 'is able to return a single value' do
31 is_expected.to run.with_params('test').and_return('test')
34 it 'uses the default value if data is a single value and path is present' do
35 is_expected.to run.with_params('test', 'path', 'default').and_return('default')
38 it 'returns default if there is no data' do
39 is_expected.to run.with_params(nil, nil, 'default').and_return('default')
42 it 'is able to use data structures as default values' do
43 is_expected.to run.with_params('test', 'path', data).and_return(data)
47 context 'with structure values' do
48 it 'is able to extracts a single hash value' do
49 is_expected.to run.with_params(data, 'd', 'default').and_return('1')
52 it 'is able to extract a deeply nested hash value' do
53 is_expected.to run.with_params(data, 'a/g', 'default').and_return('2')
56 it 'returns the default value if the path is not found' do
57 is_expected.to run.with_params(data, 'missing', 'default').and_return('default')
60 it 'returns the default value if the path is too long' do
61 is_expected.to run.with_params(data, 'a/g/c/d', 'default').and_return('default')
64 it 'supports an array index in the path' do
65 is_expected.to run.with_params(data, 'a/e/1', 'default').and_return('f1')
68 it 'returns the default value if an array index is not a number' do
69 is_expected.to run.with_params(data, 'a/b/c', 'default').and_return('default')
72 it 'returns the default value if and index is out of array length' do
73 is_expected.to run.with_params(data, 'a/e/5', 'default').and_return('default')
76 it 'is able to path though both arrays and hashes' do
77 is_expected.to run.with_params(data, 'a/e/2/x/y', 'default').and_return('z')
80 it 'is able to return "true" value: default' do
81 is_expected.to run.with_params(data, 'b', 'default').and_return(true)
84 it 'is able to return "true" value' do
85 is_expected.to run.with_params(data, 'm', true).and_return(true)
88 it 'is able to return "false" value: default' do
89 is_expected.to run.with_params(data, 'c', 'default').and_return(false)
92 it 'is able to return "false" value' do
93 is_expected.to run.with_params(data, 'm', false).and_return(false)
96 it 'returns "nil" if value is not found and no default value is provided' do
97 is_expected.to run.with_params(data, 'a/1').and_return(nil)
100 it 'is able to use a custom path separator' do
101 is_expected.to run.with_params(data, 'a::g', 'default', '::').and_return('2')
104 it 'is able to use a custom path separator: default' do
105 is_expected.to run.with_params(data, 'a::c', 'default', '::').and_return('default')