Module: Axlsx::SerializedAttributes

Overview

This module allows us to define a list of symbols defining which attributes will be serialized for a class.

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object

Extend with class methods



7
8
9
# File 'lib/axlsx/util/serialized_attributes.rb', line 7

def self.included(base)
  base.send :extend, ClassMethods
end

Instance Method Details

#serialized_attributes(str = '', additional_attributes = {}) ⇒ Object

serializes the instance values of the defining object based on the list of serializable attributes. serialization to. defining values that are not serializable attributes list.

Parameters:

  • str (String) (defaults to: '')

    The string instance to append this

  • additional_attributes (Hash) (defaults to: {})

    An option key value hash for



42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/axlsx/util/serialized_attributes.rb', line 42

def serialized_attributes(str = '', additional_attributes = {})
  key_value_pairs = instance_values
  key_value_pairs.each do |key, value|
    key_value_pairs.delete(key) if value == nil
    key_value_pairs.delete(key) unless self.class.xml_attributes.include?(key.to_sym)
  end
  key_value_pairs.merge! additional_attributes
  key_value_pairs.each do |key, value|
    str << "#{Axlsx.camel(key, false)}=\"#{value}\" "
  end
  str
end

#serialized_element_attributes(str = '', additional_attributes = [], &block) ⇒ String

serialized instance values at text nodes on a camelized element of the attribute name. You may pass in a block for evaluation against non nil values. We use an array for element attributes becuase misordering will break the xml and 1.8.7 does not support ordered hashes.

Parameters:

  • str (String) (defaults to: '')

    The string instance to which serialized data is appended

  • additional_attributes (Array) (defaults to: [])

    An array of additional attribute names.

Returns:

  • (String)

    The serialized output.



63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/axlsx/util/serialized_attributes.rb', line 63

def serialized_element_attributes(str='', additional_attributes=[], &block)
  attrs = self.class.xml_element_attributes + additional_attributes
  values = instance_values
  attrs.each do |attribute_name|
    value = values[attribute_name.to_s]
    next if value.nil?
    value = yield value if block_given?
    element_name = Axlsx.camel(attribute_name, false)
    str << "<#{element_name}>#{value}</#{element_name}>"
  end
  str
end