-
Notifications
You must be signed in to change notification settings - Fork 34
Conditionals
A Conditional is executed depending on a boolean condition that can be true or false. For instance, to skip a Catmandu item when the field error exists one would write the conditional exists:
if exists(error)
reject()
end
A condition contains an if or unless statement a Conditional (Fix functions which can be true or false), a body of zero or more Fix functions and an optional else clause:
if exists(error)
# Write here all the Fix functions when the field 'error' exists
end
unless exists(error)
# Write here all the Fix functions when the field 'error' doesn't exist
end
if exists(error)
# If error exists then do this
else
# otherwise do this
end
Below follows some basic fix functions that are implemented in Catmandu. Check the manual pages of the individual Catmandu extensions for more elaborate Conditionals.
####all_equal(path,value)
True, when the path exists and is exactly equal to a value. When the path points to a list, then all the list members need to be equal to the value. False otherwise.
if all_equal(year,"2018")
set_field(published,"future")
end
if all_equal(animals.*,"cat")
set_field(animal_types,"feline")
end
####any_equal(path,value)
True, when the path exists and is exactly equal to a value. When the path points to a list, then at least one of the list members need to be equal to the value. False otherwise.
if any_equal(year,"2018")
set_field(published,"future")
end
if any_equal(animals.*,"cat")
set_field(animal_types,"some feline")
end
####all_match(path,regex)
True, when the path exists and the value matched the regex regular expression. When the path points to a list, then all the values have to match the regular expression. False otherwise.
if all_match(year,"^19.*$")
set_field(period,"20th century")
end
if all_match(publishers.*,"Elsevier.*")
set_field(is_elsevier,1)
end
####any_match(path,regex)
True, when the path exists and the value matched the regex regular expression. When the path points to a list, then at least one of the values has to match the regular expression. False otherwise.
if any_match(year,"^19.*$")
set_field(period,"20th century")
end
if any_match(publishers.*,"Elsevier.*")
set_field(some_elsevier,1)
end
####exists(path)
True, when the path exists in the Catmandu item. False otherwise.
if exists(my.deep.field)
end
if exists(my.list.0)
end
####greater_than(path,number)
True, when the path exists and the value is greater than a number. When the path points to a list, then all the members need to be greater than the number. False otherwise.
####less_than(path,number)
True, when the path exists and the value is less than a number. When the path points to a list, then all the members need to be less than the number. False otherwise.
####in(path1,path2)
True, when the values of the first path1 are contained in the values at the second path2. False otherwise.
For instance to check if two paths contain the same values type:
if in(my.title,your.title)
set_field(same,1)
end
To check if a value in one path is contained in a list of an other path type:
if in(my.author,your.authors.*)
set_field(known_author,1)
end
###is_true(path) True, if the value at path can be evaluated to a boolean true. False otherwise
###is_false(path) True, if the value at path can be evaluated to a boolean false. False otherwise