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

#declared_attributesObject

A hash of instance variables that have been declared with seraialized_attributes and are not nil. This requires ruby 1.9.3 or higher


63
64
65
66
67
# File 'lib/axlsx/util/serialized_attributes.rb', line 63

def declared_attributes
  instance_values.select do |key, value|
    value != nil && self.class.xml_attributes.include?(key.to_sym)
  end
end

#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


52
53
54
55
56
57
58
# File 'lib/axlsx/util/serialized_attributes.rb', line 52

def serialized_attributes(str = '', additional_attributes = {})
  attributes = declared_attributes.merge! additional_attributes
  attributes.each do |key, value|
    str << "#{Axlsx.camel(key, false)}=\"#{Axlsx.camel(Axlsx.booleanize(value), false)}\" "
  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.


76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/axlsx/util/serialized_attributes.rb', line 76

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

#serialized_tag(tagname, str, additional_attributes = {}, &block) ⇒ Object

creates a XML tag with serialized attributes


34
35
36
37
38
39
40
41
42
43
44
# File 'lib/axlsx/util/serialized_attributes.rb', line 34

def serialized_tag(tagname, str, additional_attributes = {}, &block)
  str << "<#{tagname} "
  serialized_attributes(str, additional_attributes)
  if block_given?
    str << '>'
    yield
    str << "</#{tagname}>"
  else
    str << '/>'
  end
end