module Definition::Types::Keys::Dsl
Public Instance Methods
include(other)
click to toggle source
# File lib/definition/types/keys.rb, line 29 def include(other) raise ArgumentError.new("Included Definition can only be a Keys Definition") unless other.is_a?(Types::Keys) ensure_keys_do_not_interfere(other) other.required_definitions.each do |key, definition| required(key, definition) end other.optional_definitions.each do |key, definition| optional(key, definition) end other.defaults.each do |key, default| default(key, default) end end
option(option_name)
click to toggle source
# File lib/definition/types/keys.rb, line 20 def option(option_name) case option_name when :ignore_extra_keys self.ignore_extra_keys = true else raise "Option #{option_name} is not defined" end end
optional(key, definition, **opts)
click to toggle source
# File lib/definition/types/keys.rb, line 15 def optional(key, definition, **opts) optional_definitions[key] = definition default(key, opts[:default]) if opts.key?(:default) end
required(key, definition)
click to toggle source
# File lib/definition/types/keys.rb, line 11 def required(key, definition) required_definitions[key] = definition end
Private Instance Methods
default(key, value)
click to toggle source
# File lib/definition/types/keys.rb, line 46 def default(key, value) defaults[key] = value end
ensure_keys_do_not_interfere(other)
click to toggle source
# File lib/definition/types/keys.rb, line 50 def ensure_keys_do_not_interfere(other) overlapping_keys = keys & other.keys return if overlapping_keys.empty? raise ArgumentError.new( "Included definition tries to redefine already defined fields: #{overlapping_keys.join(', ')}" ) end