| Total Complexity | 1 | 
| Total Lines | 26 | 
| Duplicated Lines | 0 % | 
| Changes | 1 | ||
| Bugs | 0 | Features | 0 | 
| 1 | # frozen_string_literal: true | ||
| 9 | class Privilege | ||
| 10 | include Mixin::Entity | ||
| 11 | |||
| 12 | attribute :type, Symbol | ||
| 13 |           attribute :options, [Hash, K: Symbol, V: [:*, NilClass]], default: {} | ||
| 14 | |||
| 15 | denormalizer_block do |input, type, context, &block| | ||
| 16 |             input = {} unless input.is_a?(Hash) | ||
| 17 |             target = {} | ||
| 18 | keys = ['type', 'options', :type, :options] | ||
| 19 | keys.each do |key| | ||
| 20 | target[key.to_sym] = input[key] if input[key] | ||
| 21 | end | ||
| 22 |             target[:options] = {} unless target[:options].is_a?(Hash) | ||
| 23 | input.each do |key, value| | ||
| 24 | next if keys.include?(key) | ||
| 25 | target[:options][key] = value | ||
| 26 | end | ||
| 27 | target[:type] = context.path.current.name unless target.key?(:type) | ||
| 28 | block.call(target, type, context) | ||
| 29 | end | ||
| 30 | |||
| 31 | def to_s | ||
| 32 |             "Privilege :#{type}" | ||
| 33 | end | ||
| 34 | end | ||
| 35 | end | ||
| 39 |