Class: MediaTypes::Scheme::Rules

Inherits:
Hash
  • Object
show all
Defined in:
lib/media_types/scheme/rules.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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_typeObject

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

Returns:

  • (Boolean)


21
22
23
# File 'lib/media_types/scheme/rules.rb', line 21

def allow_empty?
  allow_empty
end

#cloneObject



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

Parameters:

  • the (Rules, ::Hash)

    other rules

Returns:



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

#requiredArray<Symbol>

Returns the keys that are not options

#see #merge

Returns:

  • (Array<Symbol>)

    required keys

See Also:



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