diff options
| author | Noel Peden <[email protected]> | 2022-04-01 08:48:55 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-04-01 08:48:55 -0700 |
| commit | 09c8f3fdd5d62918d59951697107b3b58ad24fb2 (patch) | |
| tree | 3d94ab92b28d8b844f379e122ecf78dc659996b6 /lib | |
| parent | 5757365548dc668e7642b49ddc6aaf63ac52a6f3 (diff) | |
| parent | e92da874f5addf7caa265d58741c652a05e331b7 (diff) | |
| download | caxlsx-09c8f3fdd5d62918d59951697107b3b58ad24fb2.tar.gz caxlsx-09c8f3fdd5d62918d59951697107b3b58ad24fb2.zip | |
Merge pull request #132 from pjskennedy/remove-object-monkey-patch
Remove Object#instance_values monkey patch
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/axlsx.rb | 17 | ||||
| -rw-r--r-- | lib/axlsx/content_type/abstract_content_type.rb | 2 | ||||
| -rw-r--r-- | lib/axlsx/doc_props/app.rb | 2 | ||||
| -rw-r--r-- | lib/axlsx/drawing/d_lbls.rb | 5 | ||||
| -rw-r--r-- | lib/axlsx/drawing/view_3D.rb | 2 | ||||
| -rw-r--r-- | lib/axlsx/rels/relationship.rb | 2 | ||||
| -rw-r--r-- | lib/axlsx/stylesheet/font.rb | 2 | ||||
| -rw-r--r-- | lib/axlsx/stylesheet/styles.rb | 5 | ||||
| -rw-r--r-- | lib/axlsx/util/serialized_attributes.rb | 4 | ||||
| -rw-r--r-- | lib/axlsx/workbook/worksheet/cell_serializer.rb | 2 | ||||
| -rw-r--r-- | lib/axlsx/workbook/worksheet/data_validation.rb | 2 | ||||
| -rw-r--r-- | lib/axlsx/workbook/worksheet/rich_text_run.rb | 2 | ||||
| -rw-r--r-- | lib/axlsx/workbook/worksheet/worksheet.rb | 2 |
13 files changed, 24 insertions, 25 deletions
diff --git a/lib/axlsx.rb b/lib/axlsx.rb index 4e804513..f2403893 100644 --- a/lib/axlsx.rb +++ b/lib/axlsx.rb @@ -30,16 +30,6 @@ require 'zip' require 'bigdecimal' require 'time' -#if object does not have this already, I am borrowing it from active_support. -# I am a very big fan of activesupports instance_values method, but do not want to require nor include the entire -# library just for this one method. -if !Object.respond_to?(:instance_values) - Object.send :public # patch for 1.8.7 as it uses private scope - Object.send :define_method, :instance_values do - Hash[instance_variables.map { |name| [name.to_s[1..-1], instance_variable_get(name)] }] - end -end - # xlsx generation with charts, images, automated column width, customizable styles # and full schema validation. Axlsx excels at helping you generate beautiful # Office Open XML Spreadsheet documents without having to understand the entire @@ -47,6 +37,13 @@ end # Best of all, you can validate your xlsx file before serialization so you know # for sure that anything generated is going to load on your client's machine. module Axlsx + # I am a very big fan of activesupports instance_values method, but do not want to require nor include the entire + # library just for this one method. + # + # Defining as a class method on Axlsx to refrain from monkeypatching Object for all users of this gem. + def self.instance_values_for(object) + Hash[object.instance_variables.map { |name| [name.to_s[1..-1], object.instance_variable_get(name)] }] + end # determines the cell range for the items provided def self.cell_range(cells, absolute=true) diff --git a/lib/axlsx/content_type/abstract_content_type.rb b/lib/axlsx/content_type/abstract_content_type.rb index 832ccce6..82a659dd 100644 --- a/lib/axlsx/content_type/abstract_content_type.rb +++ b/lib/axlsx/content_type/abstract_content_type.rb @@ -24,7 +24,7 @@ module Axlsx # Serialize the contenty type to xml def to_xml_string(node_name = '', str = '') str << "<#{node_name} " - str << instance_values.map { |key, value| Axlsx::camel(key) << '="' << value.to_s << '"' }.join(' ') + str << Axlsx.instance_values_for(self).map { |key, value| Axlsx::camel(key) << '="' << value.to_s << '"' }.join(' ') str << '/>' end diff --git a/lib/axlsx/doc_props/app.rb b/lib/axlsx/doc_props/app.rb index b0dadf40..c7df1fcb 100644 --- a/lib/axlsx/doc_props/app.rb +++ b/lib/axlsx/doc_props/app.rb @@ -223,7 +223,7 @@ module Axlsx def to_xml_string(str = '') str << '<?xml version="1.0" encoding="UTF-8"?>' str << ('<Properties xmlns="' << APP_NS << '" xmlns:vt="' << APP_NS_VT << '">') - instance_values.each do |key, value| + Axlsx.instance_values_for(self).each do |key, value| node_name = Axlsx.camel(key) str << "<#{node_name}>#{value}</#{node_name}>" end diff --git a/lib/axlsx/drawing/d_lbls.rb b/lib/axlsx/drawing/d_lbls.rb index 3cb8409f..0fb3c6ad 100644 --- a/lib/axlsx/drawing/d_lbls.rb +++ b/lib/axlsx/drawing/d_lbls.rb @@ -71,9 +71,10 @@ module Axlsx def to_xml_string(str = '') validate_attributes_for_chart_type str << '<c:dLbls>' + instance_vals = Axlsx.instance_values_for(self) %w(d_lbl_pos show_legend_key show_val show_cat_name show_ser_name show_percent show_bubble_size show_leader_lines).each do |key| - next unless instance_values.keys.include?(key) && instance_values[key] != nil - str << "<c:#{Axlsx::camel(key, false)} val='#{instance_values[key]}' />" + next unless instance_vals.keys.include?(key) && instance_vals[key] != nil + str << "<c:#{Axlsx::camel(key, false)} val='#{instance_vals[key]}' />" end str << '</c:dLbls>' end diff --git a/lib/axlsx/drawing/view_3D.rb b/lib/axlsx/drawing/view_3D.rb index 55bbc6c3..2223d501 100644 --- a/lib/axlsx/drawing/view_3D.rb +++ b/lib/axlsx/drawing/view_3D.rb @@ -107,7 +107,7 @@ module Axlsx private # Note: move this to Axlsx module if we find the smae pattern elsewhere. def element_for_attribute(name, namespace='') - val = instance_values[name] + val = Axlsx.instance_values_for(self)[name] return "" if val == nil "<%s:%s val='%s'/>" % [namespace, Axlsx::camel(name, false), val] end diff --git a/lib/axlsx/rels/relationship.rb b/lib/axlsx/rels/relationship.rb index ad47c9a3..157f316e 100644 --- a/lib/axlsx/rels/relationship.rb +++ b/lib/axlsx/rels/relationship.rb @@ -103,7 +103,7 @@ module Axlsx # @param [String] str # @return [String] def to_xml_string(str = '') - h = self.instance_values.reject{|k, _| k == "source_obj"} + h = Axlsx.instance_values_for(self).reject{|k, _| k == "source_obj"} str << '<Relationship ' str << (h.map { |key, value| '' << key.to_s << '="' << Axlsx::coder.encode(value.to_s) << '"'}.join(' ')) str << '/>' diff --git a/lib/axlsx/stylesheet/font.rb b/lib/axlsx/stylesheet/font.rb index d9a4a4d8..48d2b584 100644 --- a/lib/axlsx/stylesheet/font.rb +++ b/lib/axlsx/stylesheet/font.rb @@ -147,7 +147,7 @@ module Axlsx # @return [String] def to_xml_string(str = '') str << '<font>' - instance_values.each do |k, v| + Axlsx.instance_values_for(self).each do |k, v| v.is_a?(Color) ? v.to_xml_string(str) : (str << ('<' << k.to_s << ' val="' << Axlsx.booleanize(v).to_s << '"/>')) end str << '</font>' diff --git a/lib/axlsx/stylesheet/styles.rb b/lib/axlsx/stylesheet/styles.rb index d1ee1f66..6bfd0a52 100644 --- a/lib/axlsx/stylesheet/styles.rb +++ b/lib/axlsx/stylesheet/styles.rb @@ -279,7 +279,7 @@ module Axlsx # @return [Font|Integer] def parse_font_options(options={}) return if (options.keys & [:fg_color, :sz, :b, :i, :u, :strike, :outline, :shadow, :charset, :family, :font_name]).empty? - fonts.first.instance_values.each do |key, value| + Axlsx.instance_values_for(fonts.first).each do |key, value| # Thanks for that 1.8.7 - cant do a simple merge... options[key.to_sym] = value unless options.keys.include?(key.to_sym) end @@ -438,8 +438,9 @@ module Axlsx # @return [String] def to_xml_string(str = '') str << ('<styleSheet xmlns="' << XML_NS << '">') + instance_vals = Axlsx.instance_values_for(self) [:numFmts, :fonts, :fills, :borders, :cellStyleXfs, :cellXfs, :cellStyles, :dxfs, :tableStyles].each do |key| - self.instance_values[key.to_s].to_xml_string(str) unless self.instance_values[key.to_s].nil? + instance_vals[key.to_s].to_xml_string(str) unless instance_vals[key.to_s].nil? end str << '</styleSheet>' end diff --git a/lib/axlsx/util/serialized_attributes.rb b/lib/axlsx/util/serialized_attributes.rb index d6b5d3c7..06d1697a 100644 --- a/lib/axlsx/util/serialized_attributes.rb +++ b/lib/axlsx/util/serialized_attributes.rb @@ -61,7 +61,7 @@ module Axlsx # seraialized_attributes and are not nil. # This requires ruby 1.9.3 or higher def declared_attributes - instance_values.select do |key, value| + Axlsx.instance_values_for(self).select do |key, value| value != nil && self.class.xml_attributes.include?(key.to_sym) end end @@ -75,7 +75,7 @@ module Axlsx # @return [String] The serialized output. def serialized_element_attributes(str='', additional_attributes=[], &block) attrs = self.class.xml_element_attributes + additional_attributes - values = instance_values + values = Axlsx.instance_values_for(self) attrs.each do |attribute_name| value = values[attribute_name.to_s] next if value.nil? diff --git a/lib/axlsx/workbook/worksheet/cell_serializer.rb b/lib/axlsx/workbook/worksheet/cell_serializer.rb index eb834b08..962b575d 100644 --- a/lib/axlsx/workbook/worksheet/cell_serializer.rb +++ b/lib/axlsx/workbook/worksheet/cell_serializer.rb @@ -22,7 +22,7 @@ module Axlsx def run_xml_string(cell, str = '') if cell.is_text_run? valid = RichTextRun::INLINE_STYLES - [:value, :type] - data = Hash[cell.instance_values.map{ |k, v| [k.to_sym, v] }] + data = Hash[Axlsx.instance_values_for(cell).map{ |k, v| [k.to_sym, v] }] data = data.select { |key, value| valid.include?(key) && !value.nil? } RichText.new(cell.value.to_s, data).to_xml_string(str) elsif cell.contains_rich_text? diff --git a/lib/axlsx/workbook/worksheet/data_validation.rb b/lib/axlsx/workbook/worksheet/data_validation.rb index 1c5f5051..835b5b33 100644 --- a/lib/axlsx/workbook/worksheet/data_validation.rb +++ b/lib/axlsx/workbook/worksheet/data_validation.rb @@ -216,7 +216,7 @@ module Axlsx valid_attributes = get_valid_attributes str << '<dataValidation ' - str << instance_values.map do |key, value| + str << Axlsx.instance_values_for(self).map do |key, value| '' << key << '="' << Axlsx.booleanize(value).to_s << '"' if (valid_attributes.include?(key.to_sym) && !CHILD_ELEMENTS.include?(key.to_sym)) end.join(' ') str << '>' diff --git a/lib/axlsx/workbook/worksheet/rich_text_run.rb b/lib/axlsx/workbook/worksheet/rich_text_run.rb index c8668da6..b3870672 100644 --- a/lib/axlsx/workbook/worksheet/rich_text_run.rb +++ b/lib/axlsx/workbook/worksheet/rich_text_run.rb @@ -190,7 +190,7 @@ module Axlsx # @return [String] def to_xml_string(str = '') valid = RichTextRun::INLINE_STYLES - data = Hash[self.instance_values.map{ |k, v| [k.to_sym, v] }] + data = Hash[Axlsx.instance_values_for(self).map{ |k, v| [k.to_sym, v] }] data = data.select { |key, value| valid.include?(key) && !value.nil? } str << '<r><rPr>' diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb index 0942daa2..d782fefe 100644 --- a/lib/axlsx/workbook/worksheet/worksheet.rb +++ b/lib/axlsx/workbook/worksheet/worksheet.rb @@ -168,7 +168,7 @@ module Axlsx # @return Boolean # @see #page_setup def fit_to_page? - return false unless self.instance_values.keys.include?('page_setup') + return false unless Axlsx.instance_values_for(self).keys.include?('page_setup') page_setup.fit_to_page? end |
