lib/axlsx/workbook/worksheet/row.rb in axlsx-1.3.2 vs lib/axlsx/workbook/worksheet/row.rb in axlsx-1.3.3
- old
+ new
@@ -3,63 +3,18 @@
# A Row is a single row in a worksheet.
# @note The recommended way to manage rows and cells is to use Worksheet#add_row
# @see Worksheet#add_row
class Row
+ include SerializedAttributes
+ include Accessors
# No support is provided for the following attributes
# spans
# thickTop
# thickBottom
-
- # A list of serilizable attributes.
- # @note height(ht) and customHeight are manages separately for now. Have a look at Row#height
- SERIALIZABLE_ATTRIBUTES = [:hidden, :outlineLevel, :collapsed, :s, :customFormat, :ph]
-
- # The worksheet this row belongs to
- # @return [Worksheet]
- attr_reader :worksheet
-
- # The cells this row holds
- # @return [SimpleTypedList]
- attr_reader :cells
-
- # Row height measured in point size. There is no margin padding on row height.
- # @return [Float]
- attr_reader :height
-
- # Flag indicating if the outlining of row.
- # @return [Boolean]
- attr_reader :collapsed
-
- # Flag indicating if the the row is hidden.
- # @return [Boolean]
- attr_reader :hidden
-
- # Outlining level of the row, when outlining is on
- # @return [Integer]
- attr_reader :outlineLevel
-
- # The style applied ot the row. This affects the entire row.
- # @return [Integer]
- attr_reader :s
-
- # indicates that a style has been applied directly to the row via Row#s
- # @return [Boolean]
- attr_reader :customFormat
-
- # indicates if the row should show phonetic
- # @return [Boolean]
- attr_reader :ph
-
- # NOTE removing this from the api as it is actually incorrect.
- # having a method to style a row's cells is fine, but it is not an attribute on the row.
- # The proper attribute is ':s'
- # attr_reader style
- #
-
- # Creates a new row. New Cell objects are created based on the values, types and style options.
+ # Creates a new row. New Cell objects are created based on the values, types and style options.
# A new cell is created for each item in the values array. style and types options are applied as follows:
# If the types option is defined and is a symbol it is applied to all the cells created.
# If the types option is an array, cell types are applied by index for each cell
# If the types option is not set, the cell will automatically determine its type.
# If the style option is defined and is an Integer, it is applied to all cells created.
@@ -71,41 +26,60 @@
# @option options [Array, Integer] style
# @option options [Float] height the row's height (in points)
# @see Row#array_to_cells
# @see Cell
def initialize(worksheet, values=[], options={})
- @height = nil
+ @ht = nil
self.worksheet = worksheet
@cells = SimpleTypedList.new Cell
@worksheet.rows << self
self.height = options.delete(:height) if options[:height]
array_to_cells(values, options)
end
- # @see Row#collapsed
- def collapsed=(v)
- Axlsx.validate_boolean(v)
- @collapsed = v
- end
+ # A list of serializable attributes.
+ serializable_attributes :hidden, :outline_level, :collapsed, :custom_format, :s, :ph, :custom_height, :ht
- # @see Row#hidden
- def hidden=(v)
- Axlsx.validate_boolean(v)
- @hidden = v
+ # Boolean row attribute accessors
+ boolean_attr_accessor :hidden, :collapsed, :custom_format, :ph, :custom_height
+
+ # The worksheet this row belongs to
+ # @return [Worksheet]
+ attr_reader :worksheet
+
+ # The cells this row holds
+ # @return [SimpleTypedList]
+ attr_reader :cells
+
+ # Row height measured in point size. There is no margin padding on row height.
+ # @return [Float]
+ def height
+ @ht
end
-
- # @see Row#ph
- def ph=(v) Axlsx.validate_boolean(v); @ph = v end
+ # Outlining level of the row, when outlining is on
+ # @return [Integer]
+ attr_reader :outline_level
+ alias :outlineLevel :outline_level
+
+ # The style applied ot the row. This affects the entire row.
+ # @return [Integer]
+ attr_reader :s
+
# @see Row#s
- def s=(v) Axlsx.validate_unsigned_numeric(v); @s = v; @customFormat = true end
+ def s=(v)
+ Axlsx.validate_unsigned_numeric(v)
+ @custom_format = true
+ @s = v
+ end
# @see Row#outline
- def outlineLevel=(v)
+ def outline_level=(v)
Axlsx.validate_unsigned_numeric(v)
- @outlineLevel = v
+ @outline_level = v
end
+ alias :outlineLevel= :outline_level=
# The index of this row in the worksheet
# @return [Integer]
def index
worksheet.rows.index(self)
@@ -114,22 +88,15 @@
# Serializes the row
# @param [Integer] r_index The row index, 0 based.
# @param [String] str The string this rows xml will be appended to.
# @return [String]
def to_xml_string(r_index, str = '')
- str << '<row r="' << (r_index + 1 ).to_s << '" '
- instance_values.select { |key, value| SERIALIZABLE_ATTRIBUTES.include? key.to_sym }.each do |key, value|
- str << key << '="' << value.to_s << '" '
- end
- if custom_height?
- str << 'customHeight="1" ht="' << height.to_s << '">'
- else
- str << '>'
- end
+ str << '<row '
+ serialized_attributes(str, { :r => r_index + 1 })
+ str << '>'
@cells.each_with_index { |cell, c_index| cell.to_xml_string(r_index, c_index, str) }
str << '</row>'
- str
end
# Adds a singel sell to the row based on the data provided and updates the worksheet's autofit data.
# @return [Cell]
def add_cell(value="", options={})
@@ -152,16 +119,16 @@
def to_ary
@cells.to_ary
end
# @see height
- def height=(v); Axlsx::validate_unsigned_numeric(v) unless v.nil?; @height = v end
-
- # true if the row height has been manually set
- # @return [Boolean]
- # @see #height
- def custom_height?
- @height != nil
+ def height=(v)
+ Axlsx::validate_unsigned_numeric(v)
+ unless v.nil?
+ @ht = v
+ @custom_height = true
+ end
+ @ht
end
private
# assigns the owning worksheet for this row