Class: MediaTypes::Scheme::Rules
- Inherits:
-
Hash
- Object
- Hash
- MediaTypes::Scheme::Rules
- Defined in:
- lib/media_types/scheme/rules.rb
Instance Attribute Summary collapse
-
#expected_type ⇒ Object
readonly
Returns the value of attribute expected_type.
Instance Method Summary collapse
- #[](key) ⇒ Object (also: #get)
- #[]=(key, val) ⇒ Object
- #add(key, val, optional: false) ⇒ Object
- #allow_empty? ⇒ Boolean
- #clone ⇒ Object
- #delete(key) ⇒ Object (also: #remove)
- #fetch(key, &block) ⇒ Object
-
#initialize(allow_empty:, expected_type:) ⇒ Rules
constructor
A new instance of Rules.
- #inspect(indent = 0) ⇒ Object
- #inspect_format_attribute(indent, key, value = ) ⇒ Object
-
#merge(rules) ⇒ Rules
Merges another set of rules into a clone of this one.
-
#required ⇒ Array<Symbol>
Returns the keys that are not options.
Constructor Details
#initialize(allow_empty:, expected_type:) ⇒ Rules
Returns a new instance of Rules.
11 12 13 14 15 16 17 18 19 |
# File 'lib/media_types/scheme/rules.rb', line 11 def initialize(allow_empty:, expected_type:) super({}) self.allow_empty = allow_empty self.expected_type = expected_type self.optional_keys = [] self.default = MissingValidation.new end |
Instance Attribute Details
#expected_type ⇒ Object
Returns the value of attribute expected_type.
9 10 11 |
# File 'lib/media_types/scheme/rules.rb', line 9 def expected_type @expected_type end |
Instance Method Details
#[](key) ⇒ Object Also known as: get
25 26 27 |
# File 'lib/media_types/scheme/rules.rb', line 25 def [](key) __getobj__[normalize_key(key)] end |
#[]=(key, val) ⇒ Object
37 38 39 |
# File 'lib/media_types/scheme/rules.rb', line 37 def []=(key, val) add(key, val, optional: false) end |
#add(key, val, optional: false) ⇒ Object
29 30 31 32 33 34 35 |
# File 'lib/media_types/scheme/rules.rb', line 29 def add(key, val, optional: false) normalized_key = normalize_key(key) __getobj__[normalized_key] = val optional_keys << normalized_key if optional self end |
#allow_empty? ⇒ Boolean
21 22 23 |
# File 'lib/media_types/scheme/rules.rb', line 21 def allow_empty? allow_empty end |
#clone ⇒ Object
66 67 68 69 70 |
# File 'lib/media_types/scheme/rules.rb', line 66 def clone super.tap do |cloned| cloned.__setobj__(__getobj__.clone) end end |
#delete(key) ⇒ Object Also known as: remove
45 46 47 48 |
# File 'lib/media_types/scheme/rules.rb', line 45 def delete(key) __getobj__.delete(normalize_key(key)) self end |
#fetch(key, &block) ⇒ Object
41 42 43 |
# File 'lib/media_types/scheme/rules.rb', line 41 def fetch(key, &block) __getobj__.fetch(normalize_key(key), &block) end |
#inspect(indent = 0) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/media_types/scheme/rules.rb', line 89 def inspect(indent = 0) prefix = ' ' * indent return "#{prefix}[Error]Depth limit reached[/Error]" if indent > 5_000 [ "#{prefix}[Rules n=#{keys.length} optional=#{optional_keys.length} allow_empty=#{allow_empty?}]", "#{prefix} #{inspect_format_attribute(indent, '*', default)}", *keys.map { |key| "#{prefix} #{inspect_format_attribute(indent, key)}" }, "#{prefix}[/Rules]" ].join("\n") end |
#inspect_format_attribute(indent, key, value = ) ⇒ Object
101 102 103 104 105 106 |
# File 'lib/media_types/scheme/rules.rb', line 101 def inspect_format_attribute(indent, key, value = self[key]) [ [key.to_s, optional_keys.include?(key) && '(optional)' || nil].compact.join(' '), value.is_a?(Scheme) || value.is_a?(Rules) ? "\n#{value.inspect(indent + 2)}" : value.inspect ].join(': ') end |
#merge(rules) ⇒ Rules
Merges another set of rules into a clone of this one
78 79 80 81 82 83 84 85 86 87 |
# File 'lib/media_types/scheme/rules.rb', line 78 def merge(rules) clone.instance_exec do __setobj__(__getobj__.merge(rules)) if rules.respond_to?(:optional_keys, true) optional_keys.push(*rules.send(:optional_keys)) end self end end |
#required ⇒ Array<Symbol>
Returns the keys that are not options
#see #merge
58 59 60 61 62 63 64 |
# File 'lib/media_types/scheme/rules.rb', line 58 def required clone.tap do |cloned| optional_keys.each do |key| cloned.delete(key) end end end |