Module: Occi::Core::Helpers::HashDereferencer
- Included in:
- Hash
- Defined in:
- lib/occi/core/helpers/hash_dereferencer.rb
Overview
Introduces hash dereferencing capabilities to ‘Hash`. This allowes hash instances containing `Occi::Core::Category` sub-types by identifier and `Occi::Core::AttributeDefinition` instances by name to be converted into proper objects.
Instance Method Summary collapse
-
#dereference_action_with!(_model, _attribute_definitions) ⇒ Integer
Replaces all hashes with attribute definitions with valid instnaces of ‘Occi::Core::AttributeDefinition`.
-
#dereference_attribute_definitions_with!(attribute_definitions) ⇒ Integer
Replaces all name-only references to existing attribute definitions with actual instances from from the given hash.
-
#dereference_category_with!(model, attribute_definitions) ⇒ Integer
Replaces all references to existing categories with actual instances from from the given model.
-
#dereference_kind_with!(model, attribute_definitions) ⇒ Integer
Replaces all references to existing categories with actual instances from from the given model.
-
#dereference_mixin_with!(model, attribute_definitions) ⇒ Integer
Replaces all references to existing categories with actual instances from from the given model.
-
#dereference_with!(klass, model, attribute_definitions) ⇒ Integer
Replaces all references to existing categories with actual instances from from the given model.
Instance Method Details
#dereference_action_with!(_model, _attribute_definitions) ⇒ Integer
Replaces all hashes with attribute definitions with valid instnaces of ‘Occi::Core::AttributeDefinition`.
95 96 97 98 99 100 101 102 |
# File 'lib/occi/core/helpers/hash_dereferencer.rb', line 95 def dereference_action_with!(_model, _attribute_definitions) return 0 if self[:attributes].blank? # TODO: handle attributes referenced by name only self[:attributes].each_pair do |key, val| self[:attributes][key] = Occi::Core::AttributeDefinition.new(val.symbolize_keys) end self[:attributes].count end |
#dereference_attribute_definitions_with!(attribute_definitions) ⇒ Integer
Replaces all name-only references to existing attribute definitions with actual instances from from the given hash.
56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/occi/core/helpers/hash_dereferencer.rb', line 56 def dereference_attribute_definitions_with!(attribute_definitions) return 0 if self[:attributes].blank? new_attributes = {} self[:attributes].each do |attribute| new_attributes[attribute] = dereference_via_hash(attribute, attribute_definitions) next unless fetch(:attribute_defaults, {})[attribute] new_attributes[attribute].default = self[:attribute_defaults][attribute] end self[:attributes] = new_attributes self[:attributes].count end |
#dereference_category_with!(model, attribute_definitions) ⇒ Integer
Replaces all references to existing categories with actual instances from from the given model. Similar processing is done on attribute definitions referenced by attribute names.
38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/occi/core/helpers/hash_dereferencer.rb', line 38 def dereference_category_with!(model, attribute_definitions) changed = 0 unless self[:actions].blank? self[:actions].map! { |action| dereference_via_model(action, model) } changed += self[:actions].count end self[:actions] = Set.new(self[:actions]) changed += dereference_attribute_definitions_with!(attribute_definitions) changed end |
#dereference_kind_with!(model, attribute_definitions) ⇒ Integer
Replaces all references to existing categories with actual instances from from the given model. Similar processing is done on attribute definitions referenced by attribute names.
77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/occi/core/helpers/hash_dereferencer.rb', line 77 def dereference_kind_with!(model, attribute_definitions) changed = 0 if self[:parent] self[:parent] = dereference_via_model(self[:parent], model) changed += 1 end changed += dereference_category_with!(model, attribute_definitions) changed end |
#dereference_mixin_with!(model, attribute_definitions) ⇒ Integer
Replaces all references to existing categories with actual instances from from the given model. Similar processing is done on attribute definitions referenced by attribute names.
111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/occi/core/helpers/hash_dereferencer.rb', line 111 def dereference_mixin_with!(model, attribute_definitions) changed = 0 %i[depends applies].each do |symbol| unless self[symbol].blank? self[symbol].map! { |elm| dereference_via_model(elm, model) } changed += self[symbol].count end self[symbol] = Set.new(self[symbol]) end changed += dereference_category_with!(model, attribute_definitions) changed end |
#dereference_with!(klass, model, attribute_definitions) ⇒ Integer
Replaces all references to existing categories with actual instances from from the given model. Similar processing is done on attribute definitions referenced by attribute names.
19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/occi/core/helpers/hash_dereferencer.rb', line 19 def dereference_with!(klass, model, attribute_definitions) unless model && attribute_definitions raise 'Both `model` and `attribute_definitions` are ' \ 'required for dereferencing' end send( "dereference_#{klass.to_s.demodulize.downcase}_with!", model, attribute_definitions ) end |