axlsx 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. data/LICENSE +22 -0
  2. data/README.md +70 -0
  3. data/lib/axlsx.rb~ +67 -0
  4. data/lib/axlsx/content_type/content_type.rb~ +20 -0
  5. data/lib/axlsx/content_type/default.rb~ +32 -0
  6. data/lib/axlsx/content_type/override.rb~ +30 -0
  7. data/lib/axlsx/doc_props/app.rb~ +127 -0
  8. data/lib/axlsx/doc_props/core.rb~ +25 -0
  9. data/lib/axlsx/drawing/axis.rb~ +0 -0
  10. data/lib/axlsx/drawing/bar_3D_chart.rb~ +64 -0
  11. data/lib/axlsx/drawing/bar_series.rb~ +92 -0
  12. data/lib/axlsx/drawing/cat_axis.rb~ +32 -0
  13. data/lib/axlsx/drawing/chart.rb~ +0 -0
  14. data/lib/axlsx/drawing/drawing.rb~ +102 -0
  15. data/lib/axlsx/drawing/graphic_frame.rb~ +40 -0
  16. data/lib/axlsx/drawing/marker.rb~ +50 -0
  17. data/lib/axlsx/drawing/pie_3D_chart.rb~ +132 -0
  18. data/lib/axlsx/drawing/pie_series.rb~ +0 -0
  19. data/lib/axlsx/drawing/scaling.rb~ +0 -0
  20. data/lib/axlsx/drawing/series.rb~ +114 -0
  21. data/lib/axlsx/drawing/title.rb~ +69 -0
  22. data/lib/axlsx/drawing/two_cell_anchor.rb~ +70 -0
  23. data/lib/axlsx/drawing/val_axis.rb~ +34 -0
  24. data/lib/axlsx/drawing/view_3D.rb~ +21 -0
  25. data/lib/axlsx/package.rb +3 -3
  26. data/lib/axlsx/package.rb~ +181 -0
  27. data/lib/axlsx/rels/relationship.rb~ +18 -0
  28. data/lib/axlsx/rels/relationships.rb~ +23 -0
  29. data/lib/axlsx/stylesheet/border.rb~ +24 -0
  30. data/lib/axlsx/stylesheet/border_pr.rb~ +64 -0
  31. data/lib/axlsx/stylesheet/cell_alignment.rb~ +93 -0
  32. data/lib/axlsx/stylesheet/cell_protection.rb~ +16 -0
  33. data/lib/axlsx/stylesheet/cell_style.rb~ +61 -0
  34. data/lib/axlsx/stylesheet/color.rb~ +56 -0
  35. data/lib/axlsx/stylesheet/fill.rb~ +31 -0
  36. data/lib/axlsx/stylesheet/font.rb~ +33 -0
  37. data/lib/axlsx/stylesheet/gradient_fill.rb~ +70 -0
  38. data/lib/axlsx/stylesheet/gradient_stop.rb~ +15 -0
  39. data/lib/axlsx/stylesheet/num_fmt.rb~ +60 -0
  40. data/lib/axlsx/stylesheet/pattern_fill.rb~ +63 -0
  41. data/lib/axlsx/stylesheet/styles.rb~ +279 -0
  42. data/lib/axlsx/stylesheet/table_style.rb~ +43 -0
  43. data/lib/axlsx/stylesheet/table_style_element.rb~ +66 -0
  44. data/lib/axlsx/stylesheet/table_styles.rb~ +36 -0
  45. data/lib/axlsx/stylesheet/xf.rb~ +37 -0
  46. data/lib/axlsx/util/constants.rb +1 -1
  47. data/lib/axlsx/util/constants.rb~ +187 -0
  48. data/lib/axlsx/util/monkey_patches_for_true_zip_stream.rb~ +61 -0
  49. data/lib/axlsx/util/simple_typed_list.rb~ +79 -0
  50. data/lib/axlsx/util/validators.rb +3 -3
  51. data/lib/axlsx/util/validators.rb~ +132 -0
  52. data/lib/axlsx/util/xml_escape.rb~ +6 -0
  53. data/lib/axlsx/workbook/workbook.rb +1 -0
  54. data/lib/axlsx/workbook/workbook.rb~ +130 -0
  55. data/lib/axlsx/workbook/worksheet/cell.rb~ +185 -0
  56. data/lib/axlsx/workbook/worksheet/row.rb +4 -4
  57. data/lib/axlsx/workbook/worksheet/row.rb~ +92 -0
  58. data/lib/axlsx/workbook/worksheet/worksheet.rb +3 -4
  59. data/lib/axlsx/workbook/worksheet/worksheet.rb~ +194 -0
  60. data/lib/schema/dc.xsd~ +118 -0
  61. data/lib/schema/dcterms.xsd~ +331 -0
  62. data/lib/schema/opc-coreProperties.xsd~ +50 -0
  63. data/test/drawing/tc_bar_3D_chart.rb +1 -1
  64. data/test/drawing/tc_bar_3D_chart.rb~ +62 -0
  65. data/test/drawing/tc_chart.rb +1 -1
  66. data/test/drawing/tc_chart.rb~ +1 -0
  67. data/test/drawing/tc_pie_3D_chart.rb +1 -1
  68. data/test/drawing/tc_pie_3D_chart.rb~ +3 -28
  69. data/test/drawing/tc_title.rb +1 -1
  70. data/test/drawing/tc_title.rb~ +16 -19
  71. data/test/drawing/tc_two_cell_anchor.rb +1 -1
  72. data/test/drawing/tc_two_cell_anchor.rb~ +16 -14
  73. data/test/tc_package.rb +1 -1
  74. data/test/workbook/worksheet/tc_row.rb +1 -1
  75. data/test/workbook/worksheet/tc_row.rb~ +30 -0
  76. data/test/workbook/worksheet/tc_worksheet.rb +3 -3
  77. data/test/workbook/worksheet/tc_worksheet.rb~ +85 -0
  78. metadata +84 -102
@@ -0,0 +1,18 @@
1
+ module Axlsx
2
+ class Relationship
3
+ attr_accessor :Target, :Type
4
+ def initialize(type, target)
5
+ self.Target=target
6
+ self.Type=type
7
+ end
8
+
9
+ def Target=(v) Axlsx::validate_string v; @Target = v end
10
+ def Type=(v) Axlsx::validate_relationship_type v; @Type = v end
11
+
12
+ def to_xml(xml, rId)
13
+ h = self.instance_values
14
+ h[:Id] = rId
15
+ xml.Relationship(h)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,23 @@
1
+ module Axlsx
2
+ # Relationships are a collection of Relations that define how package parts are related.
3
+ # @note The package automatically manages releationships.
4
+ class Relationships < SimpleTypedList
5
+
6
+ # Creates a new Relationships collection based on SimpleTypedList
7
+ def initialize
8
+ super Relationship
9
+ end
10
+
11
+ # Serializes the relationships document.
12
+ # @return [String]
13
+ def to_xml()
14
+ builder = Nokogiri::XML::Builder.new(:encoding => ENCODING) do |xml|
15
+ xml.Relationships(:xmlns => Axlsx::RELS_R) {
16
+ each_with_index { |rel, index| rel.to_xml(xml, "rId#{index+1}") }
17
+ }
18
+ end
19
+ builder.to_xml
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ module Axlsx
2
+ class Border
3
+ attr_accessor :diagonalUp, :diagonalDown, :outline
4
+ attr_reader :prs
5
+ def initialize(options={})
6
+ @prs = SimpleTypedList.new BorderPr
7
+ options.each do |o|
8
+ self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
9
+ end
10
+ end
11
+
12
+ def diagonalUp=(v) Axlsx::validate_boolean v; @diagonalUp = v end
13
+ def diagonalDown=(v) Axlsx::validate_boolean v; @diagonalDown = v end
14
+ def outline=(v) Axlsx::validate_boolean v; @outline = v end
15
+
16
+ def to_xml(xml)
17
+ xml.border(self.instance_values.select{ |k,v| [:diagonalUp, :diagonalDown, :outline].include? k }) {
18
+ [:start, :end, :left, :right, :top, :bottom, :diagonal, :vertical, :horizontal].each do |k|
19
+ @prs.select { |pr| pr.name == k }.each { |pr| pr.to_xml(xml) }
20
+ end
21
+ }
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,64 @@
1
+ module Axlsx
2
+ # A border part.
3
+ class BorderPr
4
+
5
+ # @return [Color] The color of this border part.
6
+ attr_accessor :color
7
+
8
+ # @return [Symbol] The syle of this border part.
9
+ # @note
10
+ # The following are allowed
11
+ # :none
12
+ # :thin
13
+ # :medium
14
+ # :dashed
15
+ # :dotted
16
+ # :thick
17
+ # :double
18
+ # :hair
19
+ # :mediumDashed
20
+ # :dashDot
21
+ # :mediumDashDot
22
+ # :dashDotDot
23
+ # :mediumDashDotDot
24
+ # :slantDashDot
25
+ attr_accessor :style
26
+
27
+ # @return [Symbol] The name of this border part
28
+ # @note
29
+ # The following are allowed
30
+ # :start
31
+ # :end
32
+ # :left
33
+ # :right
34
+ # :top
35
+ # :bottom
36
+ # :diagonal
37
+ # :vertical
38
+ # :horizontal
39
+ attr_accessor :name
40
+
41
+ # Creates a new Border Part Object
42
+ # @option options [Color] color
43
+ # @option options [Symbol] name
44
+ # @option options [Symbol] style
45
+ # @see Axlsx::Border
46
+ def initialize(options={})
47
+ options.each do |o|
48
+ self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
49
+ end
50
+ end
51
+
52
+ def name=(v) RestrictionValidator.validate "BorderPr.name", [:start, :end, :left, :right, :top, :bottom, :diagonal, :vertical, :horizontal], v; @name = v end
53
+ def color=(v) DataTypeValidator.validate(:color, Color, v); @color = v end
54
+ def style=(v) RestrictionValidator.validate "BorderPr.style", [:none, :thin, :medium, :dashed, :dotted, :thick, :double, :hair, :mediumDashed, :dashDot, :mediumDashDot, :dashDotDot, :mediumDashDotDot, :slantDashDot], v; @style = v end
55
+
56
+ # Serializes the border part
57
+ # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
58
+ def to_xml(xml)
59
+ xml.send(@name, :style=>@style) {
60
+ @color.to_xml(xml) if @color.is_a? Color
61
+ }
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,93 @@
1
+ module Axlsx
2
+ # CellAlignment stores information about the cell alignment of a style Xf Object.
3
+ # @note Using Styles#add_style is the recommended way to manage cell alignment.
4
+ # @see Styles#add_style
5
+ class CellAlignment
6
+ # The horizontal alignment of the cell.
7
+ # @note
8
+ # The horizontal cell alignement style must be one of
9
+ # :general
10
+ # :left
11
+ # :center
12
+ # :right
13
+ # :fill
14
+ # :justify
15
+ # :centerContinuous
16
+ # :distributed
17
+ # @return [Symbol]
18
+ attr_accessor :horizontal
19
+
20
+ # The vertical alignment of the cell.
21
+ # @note
22
+ # The vertical cell allingment style must be one of the following:
23
+ # :top
24
+ # :center
25
+ # :bottom
26
+ # :justify
27
+ # :distributed
28
+ # @return [Symbol]
29
+ attr_accessor :vertical
30
+
31
+ # The textRotation of the cell.
32
+ # @return [Integer]
33
+ attr_accessor :textRotation
34
+
35
+ # Indicate if the text of the cell should wrap
36
+ # @return [Boolean]
37
+ attr_accessor :wrapText
38
+
39
+ # The amount of indent
40
+ # @return [Integer]
41
+ attr_accessor :indent
42
+
43
+ # The amount of relativeIndent
44
+ # @return [Integer]
45
+ attr_accessor :relativeIndent
46
+
47
+ # Indicate if the last line should be justified.
48
+ # @return [Boolean]
49
+ attr_accessor :justifyLastLine
50
+
51
+ # Indicate if the text should be shrunk to the fit in the cell.
52
+ # @return [Boolean]
53
+ attr_accessor :shrinkToFit
54
+
55
+ # The reading order of the text
56
+ # @return [Integer]
57
+ attr_accessor :readingOrder
58
+
59
+ # Create a new cell_alignment object
60
+ # @option options [Symbol] horizontal
61
+ # @option options [Symbol] vertical
62
+ # @option options [Integer] textRotation
63
+ # @option options [Boolean] wrapText
64
+ # @option options [Integer] indent
65
+ # @option options [Integer] relativeIndent
66
+ # @option options [Boolean] justifyLastLine
67
+ # @option options [Boolean] shrinkToFit
68
+ # @option options [Integer] readingOrder
69
+ def initialize(options={})
70
+ options.each do |o|
71
+ self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
72
+ end
73
+ end
74
+
75
+ def horizontal=(v) Axlsx::validate_horizontal_alignment v; @horizontal = v end
76
+ def vertical=(v) Axlsx::validate_vertical_alignment v; @vertical = v end
77
+ def textRotation=(v) Axlsx::validate_unsigned_int v; @textRotation = v end
78
+ def wrapText=(v) Axlsx::validate_boolean v; @wrapText = v end
79
+ def indent=(v) Axlsx::validate_unsigned_int v; @indent = v end
80
+ def relativeIndent=(v) Axlsx::validate_int v; @relativeIndent = v end
81
+ def justifyLastLine=(v) Axlsx::validate_boolean v; @justifyLastLine = v end
82
+ def shrinkToFit=(v) Axlsx::validate_boolean v; @shrinkToFit = v end
83
+ def readingOrder=(v) Axlsx::validate_insigned_int v; @readingOrder = v end
84
+
85
+ # Serializes the cell alignment
86
+ # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
87
+ # @return [String]
88
+ def to_xml(xml)
89
+ xml.alignment(self.instance_values)
90
+ end
91
+
92
+ end
93
+ end
@@ -0,0 +1,16 @@
1
+ module Axlsx
2
+
3
+ class CellProtection
4
+ attr_accessor :hidden, :locked
5
+ def initialize(options={})
6
+ options.each do |o|
7
+ self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
8
+ end
9
+ end
10
+ def hidden=(v) Axlsx::validate_boolean v; @hidden = v end
11
+ def locked=(v) Axlsx::validate_boolean v; @locked = v end
12
+ def to_xml(xml)
13
+ xml.protection(self.instance_values)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,61 @@
1
+ module Axlsx
2
+ # CellStyle defines named styles that reference defined formatting records and can be used in your worksheet.
3
+ # @note Using Styles#add_style is the recommended way to manage cell styling.
4
+ # @see Styles#add_style
5
+ class CellStyle
6
+ # The name of this cell style
7
+ # @return [String]
8
+ attr_accessor :name
9
+
10
+ # The formatting record id this named style utilizes
11
+ # @return [Integer]
12
+ # @see Axlsx::Xf
13
+ attr_accessor :xfId
14
+
15
+ # The buildinId to use when this named style is applied
16
+ # @return [Integer]
17
+ # @see Axlsx::NumFmt
18
+ attr_accessor :builtinId
19
+
20
+ # Determines if this formatting is for an outline style, and what level of the outline it is to be applied to.
21
+ # @return [Integer]
22
+ attr_accessor :iLevel
23
+
24
+ # Determines if this named style should show in the list of styles when using excel
25
+ # @return [Boolean]
26
+ attr_accessor :hidden
27
+
28
+ # Indicates that the build in style reference has been customized.
29
+ # @return [Boolean]
30
+ attr_accessor :customBuiltin
31
+
32
+ # Creats a new CellStyle object
33
+ # @option options [String] name
34
+ # @option options [Integer] xfId
35
+ # @option options [Integer] buildinId
36
+ # @option options [Integer] iLevel
37
+ # @option options [Boolean] hidden
38
+ # @option options [Boolean] customBuiltIn
39
+ def initialize(options={})
40
+ raise ArgumentError, "Support for extLst has not been implimented" if options[:extLst]
41
+ options.each do |o|
42
+ self.send("#{o[0]}=", o[1]) if self.respond_to? o[0]
43
+ end
44
+ end
45
+
46
+ def name=(v) Axlsx::validate_string v; @name = v end
47
+ def xfId=(v) Axlsx::validate_unsigned_int v; @xfId = v end
48
+ def builtinId=(v) Axlsx::validate_unsigned_int v; @builtinId = v end
49
+ def iLevel=(v) Axlsx::validate_unsigned_int v; @iLevel = v end
50
+ def hidden=(v) Axlsx::validate_boolean v; @hidden = v end
51
+ def customBuiltin=(v) Axlsx::validate_boolean v; @customBuiltin = v end
52
+
53
+ # Serializes the cell style
54
+ # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
55
+ # @return [String]
56
+ def to_xml(xml)
57
+ xml.cellStyle(self.instance_values)
58
+ end
59
+ end
60
+
61
+ end
@@ -0,0 +1,56 @@
1
+ module Axlsx
2
+ # The color class represents a color used for borders, fills an fonts
3
+ class Color
4
+ # Determines if the color is system color dependant
5
+ # @return [Boolean]
6
+ attr_accessor :auto
7
+
8
+ # Backwards compatability color index
9
+ # return [Integer]
10
+ #attr_accessor :indexed
11
+
12
+ # The color as defined in rgb terms.
13
+ # @note
14
+ # rgb colors need to conform to ST_UnsignedIntHex. That basically means put 'FF' before you color
15
+ # @example rgb colors
16
+ # "FF000000" is black
17
+ # "FFFFFFFF" is white
18
+ # @return [String]
19
+ attr_accessor :rgb
20
+
21
+ # no support for theme just yet
22
+ # @return [Integer]
23
+ #attr_accessor :theme
24
+
25
+ # The tint value.
26
+ # @note valid values are between -1.0 and 1.0
27
+ # @return [Float]
28
+ attr_accessor :tint
29
+
30
+ # Creates a new Color object
31
+ # @option options [Boolean] auto
32
+ # @option options [String] rgb
33
+ # @option options [Float] tint
34
+ def initialize(options={})
35
+ options.each do |o|
36
+ self.send("#{o[0]}=", o[1]) if self.respond_to? o[0]
37
+ end
38
+ end
39
+
40
+ def auto=(v) Axlsx::validate_boolean v; @auto = v end
41
+ def rgb=(v) Axlsx::validate_string v; @rgb = v end
42
+ def tint=(v) Axlsx::validate_float v; @tint = v end
43
+
44
+ # This version does not support themes
45
+ # def theme=(v) Axlsx::validate_unsigned_integer v; @theme = v end
46
+
47
+ # Indexed colors are for backward compatability which I am choosing not to support
48
+ # def indexed=(v) Axlsx::validate_unsigned_integer v; @indexed = v end
49
+
50
+
51
+ # Serializes the color
52
+ # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
53
+ # @return [String]
54
+ def to_xml(xml) xml.color(self.instance_values) end
55
+ end
56
+ end
@@ -0,0 +1,31 @@
1
+ module Axlsx
2
+ # The Fill is a formatting object that manages the background color, and pattern for cells.
3
+ # @note The recommended way to manage styles in your workbook is to use Styles#add_style.
4
+ # @see Styles#add_style
5
+ # @see PatternFill
6
+ # @see GradientFill
7
+ class Fill
8
+
9
+ # The type of fill
10
+ # @return [PatternFill, GradientFill]
11
+ attr_reader :fill_type
12
+
13
+ # Creates a new Fill object
14
+ # @param [PatternFill, GradientFill] fill_type
15
+ # @raise [ArgumentError] if the fill_type parameter is not a PatternFill or a GradientFill instance
16
+ def initialize(fill_type)
17
+ self.fill_type = fill_type
18
+ end
19
+
20
+ # Serializes the fill
21
+ # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
22
+ # @return [String]
23
+ def to_xml(xml)
24
+ xml.fill { @fill_type.to_xml(xml) }
25
+ end
26
+
27
+ private
28
+ def fill_type=(v) DataTypeValidator.validate "Fill.fill_type", [PatternFill, GradientFill], v; @fill_type = v; end
29
+
30
+ end
31
+ end
@@ -0,0 +1,33 @@
1
+ module Axlsx
2
+
3
+
4
+ class Font
5
+ attr_accessor :name, :charset, :family, :b, :i, :strike, :outline, :shadow, :condense, :extend, :color, :sz
6
+ def initialize(options={})
7
+ options.each do |o|
8
+ self.send("#{o[0]}=", o[1]) if self.respond_to? o[0]
9
+ end
10
+ end
11
+ #there must be a cleaner way to do this....
12
+ def name=(v) Axlsx::validate_string v; @name = v end
13
+ def charset=(v) Axlsx::validate_unsigned_int v; @charset = v end
14
+ def family=(v) Axlsx::validate_unsigned_int v; @family = v end
15
+ def b=(v) Axlsx::validate_boolean v; @b = v end
16
+ def i=(v) Axlsx::validate_boolean v; @i = v end
17
+ def strike=(v) Axlsx::validate_boolean v; @strike = v end
18
+ def outline=(v) Axlsx::validate_boolean v; @outline = v end
19
+ def shadow=(v) Axlsx::validate_boolean v; @shadow = v end
20
+ def condense=(v) Axlsx::validate_boolean v; @condense = v end
21
+ def extend=(v) Axlsx::validate_boolean v; @extend = v end
22
+ def color=(v) DataTypeValidator.validate "Font.color", Color, v; @color=v end
23
+ def sz=(v) Axlsx::validate_unsigned_int v; @sz=v end
24
+
25
+ def to_xml(xml)
26
+ xml.font {
27
+ self.instance_values.each do |k, v|
28
+ v.is_a?(Color) ? v.to_xml(xml) : xml.send(k, {:val => v})
29
+ end
30
+ }
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,70 @@
1
+ # -*- coding: utf-8 -*-
2
+ module Axlsx
3
+ # A GradientFill defines the color and positioning for gradiant cell fill.
4
+ # @see Open Office XML Part 1 §18.8.24
5
+ class GradientFill
6
+
7
+ # The type of gradient.
8
+ # @note
9
+ # valid options are
10
+ # :linear
11
+ # :path
12
+ # @return [Symbol]
13
+ attr_accessor :type
14
+
15
+ # Angle of the linear gradient
16
+ # @return [Float]
17
+ attr_accessor :degree
18
+
19
+ # Percentage format left
20
+ # @return [Float]
21
+ attr_accessor :left
22
+
23
+ # Percentage format right
24
+ # @return [Float]
25
+ attr_accessor :right
26
+
27
+ # Percentage format top
28
+ # @return [Float]
29
+ attr_accessor :top
30
+
31
+ # Percentage format bottom
32
+ # @return [Float]
33
+ attr_accessor :bottom
34
+
35
+ # Collection of stop objects
36
+ # @return [SimpleTypedList]
37
+ attr_reader :stop
38
+
39
+ # Creates a new GradientFill object
40
+ # @option options [Symbol] type
41
+ # @option options [Float] degree
42
+ # @option options [Float] left
43
+ # @option options [Float] right
44
+ # @option options [Float] top
45
+ # @option options [Float] bottom
46
+ def initialize(options={})
47
+ options[:type] ||= :linear
48
+ options.each do |o|
49
+ self.send("#{o[0]}=", o[1]) if self.respond_to? o[0]
50
+ end
51
+ @stop = SimpleTypedList.new GradientStop
52
+ end
53
+
54
+ def type=(v) Axlsx::validate_gradient_type v; @type = v end
55
+ def degree=(v) Axlsx::validate_float v; @degree = v end
56
+ def left=(v) DataTypeValidator.validate "GradientFill.left", Float, v, lambda { |v| v >= 0 && v <= 1}; @left = v end
57
+ def right=(v) DataTypeValidator.validate "GradientFill.right", Float, v, lambda { |v| v >= 0 && v <= 1}; @right = v end
58
+ def top=(v) DataTypeValidator.validate "GradientFill.top", Float, v, lambda { |v| v >= 0 && v <= 1}; @top = v end
59
+ def bottom=(v) DataTypeValidator.validate "GradientFill.bottom", Float, v, lambda { |v| v >= 0 && v <= 1}; @bottom= v end
60
+
61
+ # Serializes the gradientFill
62
+ # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
63
+ # @return [String]
64
+ def to_xml(xml)
65
+ xml.gradientFill(self.instance_values.reject { |k,v| k.to_sym == :stop }) {
66
+ @stop.each { |s| s.to_xml(xml) }
67
+ }
68
+ end
69
+ end
70
+ end