rubyXL 1.2.10 → 3.4.33

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 (518) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +60 -0
  3. data/.codeclimate.yml +3 -0
  4. data/.rubocop.yml +124 -0
  5. data/CHANGELOG.md +12 -0
  6. data/Gemfile +18 -14
  7. data/LICENSE.txt +1 -1
  8. data/README.rdoc +170 -100
  9. data/Rakefile +76 -26
  10. data/VERSION +1 -1
  11. data/lib/rubyXL/cell.rb +13 -447
  12. data/lib/rubyXL/convenience_methods/cell.rb +276 -0
  13. data/lib/rubyXL/convenience_methods/color.rb +156 -0
  14. data/lib/rubyXL/convenience_methods/font.rb +63 -0
  15. data/lib/rubyXL/convenience_methods/workbook.rb +137 -0
  16. data/lib/rubyXL/convenience_methods/worksheet.rb +734 -0
  17. data/lib/rubyXL/convenience_methods.rb +5 -0
  18. data/lib/rubyXL/objects/border.rb +71 -0
  19. data/lib/rubyXL/objects/calculation_chain.rb +31 -0
  20. data/lib/rubyXL/objects/cell_style.rb +63 -0
  21. data/lib/rubyXL/objects/chartsheet.rb +88 -0
  22. data/lib/rubyXL/objects/color.rb +25 -0
  23. data/lib/rubyXL/objects/column_range.rb +93 -0
  24. data/lib/rubyXL/objects/comments.rb +44 -0
  25. data/lib/rubyXL/objects/connection.rb +175 -0
  26. data/lib/rubyXL/objects/container_nodes.rb +131 -0
  27. data/lib/rubyXL/objects/content_types.rb +74 -0
  28. data/lib/rubyXL/objects/data_validation.rb +37 -0
  29. data/lib/rubyXL/objects/document_properties.rb +156 -0
  30. data/lib/rubyXL/objects/extensions.rb +51 -0
  31. data/lib/rubyXL/objects/external_links.rb +115 -0
  32. data/lib/rubyXL/objects/fill.rb +52 -0
  33. data/lib/rubyXL/objects/filters.rb +118 -0
  34. data/lib/rubyXL/objects/font.rb +43 -0
  35. data/lib/rubyXL/objects/formula.rb +22 -0
  36. data/lib/rubyXL/objects/ooxml_object.rb +469 -0
  37. data/lib/rubyXL/objects/query_table.rb +106 -0
  38. data/lib/rubyXL/objects/reference.rb +119 -0
  39. data/lib/rubyXL/objects/relationships.rb +213 -0
  40. data/lib/rubyXL/objects/root.rb +84 -0
  41. data/lib/rubyXL/objects/shared_strings.rb +67 -0
  42. data/lib/rubyXL/objects/sheet_common.rb +49 -0
  43. data/lib/rubyXL/objects/sheet_data.rb +219 -0
  44. data/lib/rubyXL/objects/simple_types.rb +249 -0
  45. data/lib/rubyXL/objects/storage.rb +193 -0
  46. data/lib/rubyXL/objects/stylesheet.rb +224 -0
  47. data/lib/rubyXL/objects/text.rb +92 -0
  48. data/lib/rubyXL/objects/theme.rb +1730 -0
  49. data/lib/rubyXL/objects/workbook.rb +572 -0
  50. data/lib/rubyXL/objects/worksheet.rb +762 -0
  51. data/lib/rubyXL/parser.rb +18 -459
  52. data/lib/rubyXL/worksheet.rb +73 -1461
  53. data/lib/rubyXL.rb +9 -7
  54. data/rdoc/README_rdoc.html +534 -0
  55. data/rdoc/RubyXL/AExtension.html +187 -0
  56. data/rdoc/RubyXL/AExtensionStorageArea.html +97 -0
  57. data/rdoc/RubyXL/ActiveX.html +156 -0
  58. data/rdoc/RubyXL/ActiveXBinary.html +106 -0
  59. data/rdoc/RubyXL/AdjustHandleList.html +99 -0
  60. data/rdoc/RubyXL/Alignment.html +99 -0
  61. data/rdoc/RubyXL/AlternateContent.html +97 -0
  62. data/rdoc/RubyXL/AlternateUrls.html +99 -0
  63. data/rdoc/RubyXL/Authors.html +99 -0
  64. data/rdoc/RubyXL/AutoFilter.html +99 -0
  65. data/rdoc/RubyXL/AutoFilterColumn.html +99 -0
  66. data/rdoc/RubyXL/BinaryImageFile.html +108 -0
  67. data/rdoc/RubyXL/BodyProperties.html +99 -0
  68. data/rdoc/RubyXL/BooleanNode.html +97 -0
  69. data/rdoc/RubyXL/BooleanValue.html +97 -0
  70. data/rdoc/RubyXL/Border.html +223 -0
  71. data/rdoc/RubyXL/BorderEdge.html +160 -0
  72. data/rdoc/RubyXL/Borders.html +138 -0
  73. data/rdoc/RubyXL/Break.html +99 -0
  74. data/rdoc/RubyXL/BreakList.html +99 -0
  75. data/rdoc/RubyXL/CT_AdjPoint2D.html +99 -0
  76. data/rdoc/RubyXL/CT_AlphaBiLevelEffect.html +99 -0
  77. data/rdoc/RubyXL/CT_AlphaModulateEffect.html +99 -0
  78. data/rdoc/RubyXL/CT_AlphaModulateFixedEffect.html +99 -0
  79. data/rdoc/RubyXL/CT_AlphaOutsetEffect.html +99 -0
  80. data/rdoc/RubyXL/CT_AlphaReplaceEffect.html +99 -0
  81. data/rdoc/RubyXL/CT_Backdrop.html +99 -0
  82. data/rdoc/RubyXL/CT_Bevel.html +99 -0
  83. data/rdoc/RubyXL/CT_BiLevelEffect.html +99 -0
  84. data/rdoc/RubyXL/CT_BlendEffect.html +99 -0
  85. data/rdoc/RubyXL/CT_Blip.html +99 -0
  86. data/rdoc/RubyXL/CT_BlipFillProperties.html +99 -0
  87. data/rdoc/RubyXL/CT_BlurEffect.html +99 -0
  88. data/rdoc/RubyXL/CT_Camera.html +99 -0
  89. data/rdoc/RubyXL/CT_Color.html +99 -0
  90. data/rdoc/RubyXL/CT_ColorChangeEffect.html +99 -0
  91. data/rdoc/RubyXL/CT_ColorMapping.html +99 -0
  92. data/rdoc/RubyXL/CT_ColorScheme.html +99 -0
  93. data/rdoc/RubyXL/CT_ColorSchemeAndMapping.html +99 -0
  94. data/rdoc/RubyXL/CT_ConnectionSite.html +99 -0
  95. data/rdoc/RubyXL/CT_ConnectionSiteList.html +99 -0
  96. data/rdoc/RubyXL/CT_DashStop.html +99 -0
  97. data/rdoc/RubyXL/CT_DashStopList.html +99 -0
  98. data/rdoc/RubyXL/CT_DefaultShapeDefinition.html +99 -0
  99. data/rdoc/RubyXL/CT_DuotoneEffect.html +99 -0
  100. data/rdoc/RubyXL/CT_EffectContainer.html +99 -0
  101. data/rdoc/RubyXL/CT_EffectList.html +99 -0
  102. data/rdoc/RubyXL/CT_EffectReference.html +99 -0
  103. data/rdoc/RubyXL/CT_EffectStyleItem.html +99 -0
  104. data/rdoc/RubyXL/CT_EffectStyleList.html +99 -0
  105. data/rdoc/RubyXL/CT_EmbeddedWAVAudioFile.html +99 -0
  106. data/rdoc/RubyXL/CT_FillEffect.html +99 -0
  107. data/rdoc/RubyXL/CT_FillOverlayEffect.html +99 -0
  108. data/rdoc/RubyXL/CT_FillStyleList.html +99 -0
  109. data/rdoc/RubyXL/CT_FlatText.html +99 -0
  110. data/rdoc/RubyXL/CT_FontCollection.html +99 -0
  111. data/rdoc/RubyXL/CT_FontReference.html +99 -0
  112. data/rdoc/RubyXL/CT_GeomGuideList.html +99 -0
  113. data/rdoc/RubyXL/CT_GlowEffect.html +99 -0
  114. data/rdoc/RubyXL/CT_GradientFillProperties.html +99 -0
  115. data/rdoc/RubyXL/CT_GradientStop.html +99 -0
  116. data/rdoc/RubyXL/CT_GradientStopList.html +99 -0
  117. data/rdoc/RubyXL/CT_HSLEffect.html +99 -0
  118. data/rdoc/RubyXL/CT_HslColor.html +99 -0
  119. data/rdoc/RubyXL/CT_Hyperlink.html +99 -0
  120. data/rdoc/RubyXL/CT_InnerShadowEffect.html +99 -0
  121. data/rdoc/RubyXL/CT_LightRig.html +99 -0
  122. data/rdoc/RubyXL/CT_LineEndProperties.html +99 -0
  123. data/rdoc/RubyXL/CT_LineJoinMiterProperties.html +99 -0
  124. data/rdoc/RubyXL/CT_LineProperties.html +99 -0
  125. data/rdoc/RubyXL/CT_LineStyleList.html +99 -0
  126. data/rdoc/RubyXL/CT_LinearShadeProperties.html +99 -0
  127. data/rdoc/RubyXL/CT_LuminanceEffect.html +99 -0
  128. data/rdoc/RubyXL/CT_ObjectStyleDefaults.html +99 -0
  129. data/rdoc/RubyXL/CT_OuterShadowEffect.html +99 -0
  130. data/rdoc/RubyXL/CT_Path2D.html +99 -0
  131. data/rdoc/RubyXL/CT_Path2DArcTo.html +99 -0
  132. data/rdoc/RubyXL/CT_Path2DCubicBezierTo.html +99 -0
  133. data/rdoc/RubyXL/CT_Path2DList.html +99 -0
  134. data/rdoc/RubyXL/CT_Path2DQuadBezierTo.html +99 -0
  135. data/rdoc/RubyXL/CT_Path2DTo.html +99 -0
  136. data/rdoc/RubyXL/CT_PathShadeProperties.html +99 -0
  137. data/rdoc/RubyXL/CT_PatternFillProperties.html +99 -0
  138. data/rdoc/RubyXL/CT_Point3D.html +99 -0
  139. data/rdoc/RubyXL/CT_PolarAdjustHandle.html +99 -0
  140. data/rdoc/RubyXL/CT_PresetColor.html +99 -0
  141. data/rdoc/RubyXL/CT_PresetLineDashProperties.html +99 -0
  142. data/rdoc/RubyXL/CT_PresetShadowEffect.html +99 -0
  143. data/rdoc/RubyXL/CT_PresetTextShape.html +99 -0
  144. data/rdoc/RubyXL/CT_ReflectionEffect.html +99 -0
  145. data/rdoc/RubyXL/CT_RelativeOffsetEffect.html +99 -0
  146. data/rdoc/RubyXL/CT_RelativeRect.html +99 -0
  147. data/rdoc/RubyXL/CT_SRgbColor.html +99 -0
  148. data/rdoc/RubyXL/CT_ScRgbColor.html +99 -0
  149. data/rdoc/RubyXL/CT_Scene3D.html +99 -0
  150. data/rdoc/RubyXL/CT_SchemeColor.html +99 -0
  151. data/rdoc/RubyXL/CT_Shape3D.html +99 -0
  152. data/rdoc/RubyXL/CT_ShapeStyle.html +99 -0
  153. data/rdoc/RubyXL/CT_SoftEdgesEffect.html +99 -0
  154. data/rdoc/RubyXL/CT_SphereCoords.html +99 -0
  155. data/rdoc/RubyXL/CT_StretchInfoProperties.html +99 -0
  156. data/rdoc/RubyXL/CT_StyleMatrix.html +99 -0
  157. data/rdoc/RubyXL/CT_StyleMatrixReference.html +99 -0
  158. data/rdoc/RubyXL/CT_SupplementalFont.html +99 -0
  159. data/rdoc/RubyXL/CT_SystemColor.html +99 -0
  160. data/rdoc/RubyXL/CT_TextAutonumberBullet.html +99 -0
  161. data/rdoc/RubyXL/CT_TextBlipBullet.html +99 -0
  162. data/rdoc/RubyXL/CT_TextCharBullet.html +99 -0
  163. data/rdoc/RubyXL/CT_TextCharacterProperties.html +99 -0
  164. data/rdoc/RubyXL/CT_TextFont.html +99 -0
  165. data/rdoc/RubyXL/CT_TextListStyle.html +99 -0
  166. data/rdoc/RubyXL/CT_TextNormalAutofit.html +99 -0
  167. data/rdoc/RubyXL/CT_TextParagraphProperties.html +99 -0
  168. data/rdoc/RubyXL/CT_TextSpacing.html +99 -0
  169. data/rdoc/RubyXL/CT_TextTabStop.html +99 -0
  170. data/rdoc/RubyXL/CT_TextTabStopList.html +99 -0
  171. data/rdoc/RubyXL/CT_TileInfoProperties.html +99 -0
  172. data/rdoc/RubyXL/CT_TintEffect.html +99 -0
  173. data/rdoc/RubyXL/CT_Transform2D.html +99 -0
  174. data/rdoc/RubyXL/CT_TransformEffect.html +99 -0
  175. data/rdoc/RubyXL/CT_Vector3D.html +99 -0
  176. data/rdoc/RubyXL/CT_XYAdjustHandle.html +99 -0
  177. data/rdoc/RubyXL/CalculationChain.html +149 -0
  178. data/rdoc/RubyXL/CalculationChainCell.html +99 -0
  179. data/rdoc/RubyXL/CalculationProperties.html +99 -0
  180. data/rdoc/RubyXL/Cell.html +510 -0
  181. data/rdoc/RubyXL/CellConvenienceMethods.html +1077 -0
  182. data/rdoc/RubyXL/CellExt.html +99 -0
  183. data/rdoc/RubyXL/CellSmartTag.html +99 -0
  184. data/rdoc/RubyXL/CellSmartTagProperty.html +99 -0
  185. data/rdoc/RubyXL/CellSmartTags.html +99 -0
  186. data/rdoc/RubyXL/CellStyle.html +99 -0
  187. data/rdoc/RubyXL/CellStyleXFs.html +138 -0
  188. data/rdoc/RubyXL/CellStyles.html +138 -0
  189. data/rdoc/RubyXL/CellValue.html +139 -0
  190. data/rdoc/RubyXL/CellWatch.html +99 -0
  191. data/rdoc/RubyXL/CellWatches.html +99 -0
  192. data/rdoc/RubyXL/CellXFs.html +139 -0
  193. data/rdoc/RubyXL/ChartColorsFile.html +108 -0
  194. data/rdoc/RubyXL/ChartFile.html +160 -0
  195. data/rdoc/RubyXL/ChartStyleFile.html +108 -0
  196. data/rdoc/RubyXL/ChartUserShapesFile.html +108 -0
  197. data/rdoc/RubyXL/Chartsheet.html +213 -0
  198. data/rdoc/RubyXL/ChartsheetPageSetup.html +99 -0
  199. data/rdoc/RubyXL/ChartsheetProperties.html +99 -0
  200. data/rdoc/RubyXL/ChartsheetProtection.html +99 -0
  201. data/rdoc/RubyXL/ChartsheetView.html +99 -0
  202. data/rdoc/RubyXL/ChartsheetViews.html +99 -0
  203. data/rdoc/RubyXL/Color.html +151 -0
  204. data/rdoc/RubyXL/ColorConvenienceClasses/HlsColor.html +246 -0
  205. data/rdoc/RubyXL/ColorConvenienceClasses/RgbColor.html +285 -0
  206. data/rdoc/RubyXL/ColorConvenienceClasses.html +91 -0
  207. data/rdoc/RubyXL/ColorConvenienceMethods.html +139 -0
  208. data/rdoc/RubyXL/ColorFilter.html +99 -0
  209. data/rdoc/RubyXL/ColorScale.html +99 -0
  210. data/rdoc/RubyXL/ColorSet.html +99 -0
  211. data/rdoc/RubyXL/Colors.html +99 -0
  212. data/rdoc/RubyXL/ColumnRange.html +230 -0
  213. data/rdoc/RubyXL/ColumnRanges.html +237 -0
  214. data/rdoc/RubyXL/Comment.html +99 -0
  215. data/rdoc/RubyXL/CommentList.html +99 -0
  216. data/rdoc/RubyXL/CommentsFile.html +165 -0
  217. data/rdoc/RubyXL/ConditionalFormatValue.html +99 -0
  218. data/rdoc/RubyXL/ConditionalFormatting.html +99 -0
  219. data/rdoc/RubyXL/ConditionalFormattingRule.html +99 -0
  220. data/rdoc/RubyXL/Connection.html +99 -0
  221. data/rdoc/RubyXL/ConnectionTable.html +99 -0
  222. data/rdoc/RubyXL/ConnectionTables.html +99 -0
  223. data/rdoc/RubyXL/ConnectionTextField.html +99 -0
  224. data/rdoc/RubyXL/ConnectionTextFields.html +99 -0
  225. data/rdoc/RubyXL/Connections.html +149 -0
  226. data/rdoc/RubyXL/ContentTypeDefault.html +97 -0
  227. data/rdoc/RubyXL/ContentTypeOverride.html +97 -0
  228. data/rdoc/RubyXL/ContentTypes.html +211 -0
  229. data/rdoc/RubyXL/ControlPropertiesFile.html +108 -0
  230. data/rdoc/RubyXL/CorePropertiesFile.html +355 -0
  231. data/rdoc/RubyXL/CustomColor.html +99 -0
  232. data/rdoc/RubyXL/CustomColorList.html +99 -0
  233. data/rdoc/RubyXL/CustomFilter.html +99 -0
  234. data/rdoc/RubyXL/CustomFilters.html +99 -0
  235. data/rdoc/RubyXL/CustomGeometry.html +99 -0
  236. data/rdoc/RubyXL/CustomProperties.html +99 -0
  237. data/rdoc/RubyXL/CustomPropertiesFile.html +108 -0
  238. data/rdoc/RubyXL/CustomProperty.html +99 -0
  239. data/rdoc/RubyXL/CustomPropertyFile.html +108 -0
  240. data/rdoc/RubyXL/CustomSheetView.html +99 -0
  241. data/rdoc/RubyXL/CustomSheetViews.html +99 -0
  242. data/rdoc/RubyXL/CustomWorkbookView.html +99 -0
  243. data/rdoc/RubyXL/CustomWorkbookViews.html +99 -0
  244. data/rdoc/RubyXL/CustomXMLFile.html +106 -0
  245. data/rdoc/RubyXL/DXF.html +99 -0
  246. data/rdoc/RubyXL/DXFs.html +99 -0
  247. data/rdoc/RubyXL/DataBar.html +99 -0
  248. data/rdoc/RubyXL/DataConsolidate.html +99 -0
  249. data/rdoc/RubyXL/DataConsolidationReference.html +99 -0
  250. data/rdoc/RubyXL/DataConsolidationReferences.html +99 -0
  251. data/rdoc/RubyXL/DataType.html +114 -0
  252. data/rdoc/RubyXL/DataValidation.html +99 -0
  253. data/rdoc/RubyXL/DataValidations.html +99 -0
  254. data/rdoc/RubyXL/DateGroupItem.html +99 -0
  255. data/rdoc/RubyXL/DefinedName.html +99 -0
  256. data/rdoc/RubyXL/DefinedNameExt.html +99 -0
  257. data/rdoc/RubyXL/DefinedNames.html +99 -0
  258. data/rdoc/RubyXL/DefinedNamesExt.html +99 -0
  259. data/rdoc/RubyXL/DocumentPropertiesFile.html +213 -0
  260. data/rdoc/RubyXL/DrawingFile.html +159 -0
  261. data/rdoc/RubyXL/DynamicFilter.html +99 -0
  262. data/rdoc/RubyXL/EmbeddedControl.html +99 -0
  263. data/rdoc/RubyXL/EmbeddedControls.html +99 -0
  264. data/rdoc/RubyXL/Extension.html +99 -0
  265. data/rdoc/RubyXL/ExtensionStorageArea.html +99 -0
  266. data/rdoc/RubyXL/Extents.html +99 -0
  267. data/rdoc/RubyXL/ExternalBook.html +99 -0
  268. data/rdoc/RubyXL/ExternalLinksFile.html +155 -0
  269. data/rdoc/RubyXL/ExternalReference.html +99 -0
  270. data/rdoc/RubyXL/ExternalReferences.html +99 -0
  271. data/rdoc/RubyXL/ExtraColorSchemeList.html +99 -0
  272. data/rdoc/RubyXL/FieldItem.html +99 -0
  273. data/rdoc/RubyXL/FileRecoveryProperties.html +99 -0
  274. data/rdoc/RubyXL/FileSharing.html +99 -0
  275. data/rdoc/RubyXL/FileVersion.html +99 -0
  276. data/rdoc/RubyXL/Fill.html +138 -0
  277. data/rdoc/RubyXL/Fills.html +138 -0
  278. data/rdoc/RubyXL/FilterContainer.html +99 -0
  279. data/rdoc/RubyXL/FloatNode.html +97 -0
  280. data/rdoc/RubyXL/FloatValue.html +97 -0
  281. data/rdoc/RubyXL/Font.html +148 -0
  282. data/rdoc/RubyXL/FontConvenienceMethods.html +442 -0
  283. data/rdoc/RubyXL/FontScheme.html +99 -0
  284. data/rdoc/RubyXL/Fonts.html +138 -0
  285. data/rdoc/RubyXL/Formula.html +99 -0
  286. data/rdoc/RubyXL/FunctionGroup.html +99 -0
  287. data/rdoc/RubyXL/FunctionGroups.html +99 -0
  288. data/rdoc/RubyXL/GenericStorageObject.html +241 -0
  289. data/rdoc/RubyXL/GradientFill.html +99 -0
  290. data/rdoc/RubyXL/HeaderFooterSettings.html +99 -0
  291. data/rdoc/RubyXL/Hyperlink.html +99 -0
  292. data/rdoc/RubyXL/HyperlinkRelFile.html +106 -0
  293. data/rdoc/RubyXL/Hyperlinks.html +99 -0
  294. data/rdoc/RubyXL/IconFilter.html +99 -0
  295. data/rdoc/RubyXL/IconSet.html +99 -0
  296. data/rdoc/RubyXL/IgnoredError.html +99 -0
  297. data/rdoc/RubyXL/IgnoredErrors.html +99 -0
  298. data/rdoc/RubyXL/IndexedColors.html +99 -0
  299. data/rdoc/RubyXL/InputCells.html +99 -0
  300. data/rdoc/RubyXL/IntegerNode.html +97 -0
  301. data/rdoc/RubyXL/IntegerValue.html +97 -0
  302. data/rdoc/RubyXL/LegacyCell.html +130 -0
  303. data/rdoc/RubyXL/LegacyWorksheet.html +306 -0
  304. data/rdoc/RubyXL/MRUColors.html +99 -0
  305. data/rdoc/RubyXL/MacrosFile.html +108 -0
  306. data/rdoc/RubyXL/MergedCell.html +99 -0
  307. data/rdoc/RubyXL/MergedCells.html +99 -0
  308. data/rdoc/RubyXL/NumFmt.html +99 -0
  309. data/rdoc/RubyXL/NumberFormat.html +139 -0
  310. data/rdoc/RubyXL/NumberFormats.html +147 -0
  311. data/rdoc/RubyXL/OLEObject.html +99 -0
  312. data/rdoc/RubyXL/OLEObjectFile.html +108 -0
  313. data/rdoc/RubyXL/OLEObjects.html +99 -0
  314. data/rdoc/RubyXL/OLESize.html +99 -0
  315. data/rdoc/RubyXL/OOXMLContainerObject.html +309 -0
  316. data/rdoc/RubyXL/OOXMLIgnored.html +167 -0
  317. data/rdoc/RubyXL/OOXMLObject.html +107 -0
  318. data/rdoc/RubyXL/OOXMLObjectClassMethods.html +455 -0
  319. data/rdoc/RubyXL/OOXMLObjectInstanceMethods.html +442 -0
  320. data/rdoc/RubyXL/OOXMLRelationshipsFile.html +470 -0
  321. data/rdoc/RubyXL/OOXMLTopLevelObject.html +297 -0
  322. data/rdoc/RubyXL/OdbcOleDbProperties.html +99 -0
  323. data/rdoc/RubyXL/Offset.html +99 -0
  324. data/rdoc/RubyXL/OlapProperties.html +99 -0
  325. data/rdoc/RubyXL/OleItem.html +99 -0
  326. data/rdoc/RubyXL/OleItems.html +99 -0
  327. data/rdoc/RubyXL/OleLink.html +99 -0
  328. data/rdoc/RubyXL/OutlineProperties.html +99 -0
  329. data/rdoc/RubyXL/PageMargins.html +99 -0
  330. data/rdoc/RubyXL/PageSetup.html +99 -0
  331. data/rdoc/RubyXL/PageSetupProperties.html +99 -0
  332. data/rdoc/RubyXL/Pane.html +99 -0
  333. data/rdoc/RubyXL/Parser.html +174 -0
  334. data/rdoc/RubyXL/PatternFill.html +99 -0
  335. data/rdoc/RubyXL/PersonMetadata.html +108 -0
  336. data/rdoc/RubyXL/PhoneticProperties.html +99 -0
  337. data/rdoc/RubyXL/PhoneticRun.html +99 -0
  338. data/rdoc/RubyXL/PivotArea.html +99 -0
  339. data/rdoc/RubyXL/PivotCache.html +99 -0
  340. data/rdoc/RubyXL/PivotCacheDefinitionFile.html +116 -0
  341. data/rdoc/RubyXL/PivotCacheRecordsFile.html +108 -0
  342. data/rdoc/RubyXL/PivotCaches.html +99 -0
  343. data/rdoc/RubyXL/PivotReference.html +99 -0
  344. data/rdoc/RubyXL/PivotReferences.html +99 -0
  345. data/rdoc/RubyXL/PivotTableFile.html +116 -0
  346. data/rdoc/RubyXL/PivotTableSelection.html +99 -0
  347. data/rdoc/RubyXL/PresetGeometry.html +99 -0
  348. data/rdoc/RubyXL/PrintOptions.html +99 -0
  349. data/rdoc/RubyXL/PrinterSettingsFile.html +108 -0
  350. data/rdoc/RubyXL/ProtectedRange.html +99 -0
  351. data/rdoc/RubyXL/ProtectedRanges.html +99 -0
  352. data/rdoc/RubyXL/Protection.html +99 -0
  353. data/rdoc/RubyXL/QueryParameter.html +99 -0
  354. data/rdoc/RubyXL/QueryParameters.html +99 -0
  355. data/rdoc/RubyXL/QueryTable.html +157 -0
  356. data/rdoc/RubyXL/QueryTableDeletedField.html +99 -0
  357. data/rdoc/RubyXL/QueryTableDeletedFields.html +99 -0
  358. data/rdoc/RubyXL/QueryTableField.html +99 -0
  359. data/rdoc/RubyXL/QueryTableFields.html +99 -0
  360. data/rdoc/RubyXL/QueryTableRefresh.html +99 -0
  361. data/rdoc/RubyXL/RID.html +97 -0
  362. data/rdoc/RubyXL/RawOOXML.html +187 -0
  363. data/rdoc/RubyXL/Reference.html +510 -0
  364. data/rdoc/RubyXL/Relationship.html +97 -0
  365. data/rdoc/RubyXL/RelationshipSupport/ClassMehods.html +131 -0
  366. data/rdoc/RubyXL/RelationshipSupport.html +336 -0
  367. data/rdoc/RubyXL/RevisionPointer.html +99 -0
  368. data/rdoc/RubyXL/RichText.html +141 -0
  369. data/rdoc/RubyXL/RichTextRun.html +138 -0
  370. data/rdoc/RubyXL/Row.html +357 -0
  371. data/rdoc/RubyXL/RowExt.html +99 -0
  372. data/rdoc/RubyXL/RunProperties.html +99 -0
  373. data/rdoc/RubyXL/Scenario.html +99 -0
  374. data/rdoc/RubyXL/Scenarios.html +99 -0
  375. data/rdoc/RubyXL/Selection.html +146 -0
  376. data/rdoc/RubyXL/ShapeGuide.html +99 -0
  377. data/rdoc/RubyXL/ShapeTextRectangle.html +99 -0
  378. data/rdoc/RubyXL/SharedStringsTable.html +328 -0
  379. data/rdoc/RubyXL/Sheet.html +99 -0
  380. data/rdoc/RubyXL/SheetCalculationProperties.html +99 -0
  381. data/rdoc/RubyXL/SheetData.html +162 -0
  382. data/rdoc/RubyXL/SheetDataExt.html +99 -0
  383. data/rdoc/RubyXL/SheetDataSet.html +99 -0
  384. data/rdoc/RubyXL/SheetMetadata.html +108 -0
  385. data/rdoc/RubyXL/SheetName.html +99 -0
  386. data/rdoc/RubyXL/SheetNames.html +99 -0
  387. data/rdoc/RubyXL/Sheets.html +99 -0
  388. data/rdoc/RubyXL/SlicerCacheFile.html +108 -0
  389. data/rdoc/RubyXL/SlicerFile.html +108 -0
  390. data/rdoc/RubyXL/SmartTagProperties.html +99 -0
  391. data/rdoc/RubyXL/SmartTagType.html +99 -0
  392. data/rdoc/RubyXL/SmartTagTypes.html +99 -0
  393. data/rdoc/RubyXL/SmartTags.html +99 -0
  394. data/rdoc/RubyXL/SortCondition.html +99 -0
  395. data/rdoc/RubyXL/SortState.html +99 -0
  396. data/rdoc/RubyXL/Sqref.html +167 -0
  397. data/rdoc/RubyXL/Stop.html +99 -0
  398. data/rdoc/RubyXL/StringNode.html +97 -0
  399. data/rdoc/RubyXL/StringNodeW3C.html +167 -0
  400. data/rdoc/RubyXL/StringValue.html +97 -0
  401. data/rdoc/RubyXL/Stylesheet.html +281 -0
  402. data/rdoc/RubyXL/TableFile.html +108 -0
  403. data/rdoc/RubyXL/TableParts.html +97 -0
  404. data/rdoc/RubyXL/TableStyle.html +99 -0
  405. data/rdoc/RubyXL/TableStyles.html +99 -0
  406. data/rdoc/RubyXL/Text.html +175 -0
  407. data/rdoc/RubyXL/TextImportSettings.html +99 -0
  408. data/rdoc/RubyXL/Theme.html +535 -0
  409. data/rdoc/RubyXL/ThemeElements.html +99 -0
  410. data/rdoc/RubyXL/ThumbnailFile.html +108 -0
  411. data/rdoc/RubyXL/Top10.html +99 -0
  412. data/rdoc/RubyXL/VMLDrawingFile.html +116 -0
  413. data/rdoc/RubyXL/Variant.html +99 -0
  414. data/rdoc/RubyXL/Vector.html +142 -0
  415. data/rdoc/RubyXL/VectorValue.html +97 -0
  416. data/rdoc/RubyXL/VisualProperties.html +99 -0
  417. data/rdoc/RubyXL/WebPublishObject.html +99 -0
  418. data/rdoc/RubyXL/WebPublishObjects.html +99 -0
  419. data/rdoc/RubyXL/WebPublishingItem.html +99 -0
  420. data/rdoc/RubyXL/WebPublishingItems.html +99 -0
  421. data/rdoc/RubyXL/WebPublishingProperties.html +99 -0
  422. data/rdoc/RubyXL/WebQueryProperties.html +99 -0
  423. data/rdoc/RubyXL/Workbook.html +948 -0
  424. data/rdoc/RubyXL/WorkbookConvenienceMethods.html +596 -0
  425. data/rdoc/RubyXL/WorkbookProperties.html +99 -0
  426. data/rdoc/RubyXL/WorkbookProtection.html +99 -0
  427. data/rdoc/RubyXL/WorkbookRoot.html +325 -0
  428. data/rdoc/RubyXL/WorkbookView.html +99 -0
  429. data/rdoc/RubyXL/WorkbookViews.html +99 -0
  430. data/rdoc/RubyXL/Worksheet.html +418 -0
  431. data/rdoc/RubyXL/WorksheetConvenienceMethods.html +2205 -0
  432. data/rdoc/RubyXL/WorksheetDimensions.html +99 -0
  433. data/rdoc/RubyXL/WorksheetFormatProperties.html +97 -0
  434. data/rdoc/RubyXL/WorksheetProperties.html +99 -0
  435. data/rdoc/RubyXL/WorksheetProtection.html +99 -0
  436. data/rdoc/RubyXL/WorksheetView.html +99 -0
  437. data/rdoc/RubyXL/WorksheetViews.html +99 -0
  438. data/rdoc/RubyXL/XF.html +99 -0
  439. data/rdoc/RubyXL.html +338 -0
  440. data/rdoc/created.rid +45 -0
  441. data/rdoc/css/fonts.css +167 -0
  442. data/rdoc/css/rdoc.css +687 -0
  443. data/rdoc/fonts/Lato-Light.ttf +0 -0
  444. data/rdoc/fonts/Lato-LightItalic.ttf +0 -0
  445. data/rdoc/fonts/Lato-Regular.ttf +0 -0
  446. data/rdoc/fonts/Lato-RegularItalic.ttf +0 -0
  447. data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
  448. data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
  449. data/rdoc/images/add.png +0 -0
  450. data/rdoc/images/arrow_up.png +0 -0
  451. data/rdoc/images/brick.png +0 -0
  452. data/rdoc/images/brick_link.png +0 -0
  453. data/rdoc/images/bug.png +0 -0
  454. data/rdoc/images/bullet_black.png +0 -0
  455. data/rdoc/images/bullet_toggle_minus.png +0 -0
  456. data/rdoc/images/bullet_toggle_plus.png +0 -0
  457. data/rdoc/images/date.png +0 -0
  458. data/rdoc/images/delete.png +0 -0
  459. data/rdoc/images/find.png +0 -0
  460. data/rdoc/images/loadingAnimation.gif +0 -0
  461. data/rdoc/images/macFFBgHack.png +0 -0
  462. data/rdoc/images/package.png +0 -0
  463. data/rdoc/images/page_green.png +0 -0
  464. data/rdoc/images/page_white_text.png +0 -0
  465. data/rdoc/images/page_white_width.png +0 -0
  466. data/rdoc/images/plugin.png +0 -0
  467. data/rdoc/images/ruby.png +0 -0
  468. data/rdoc/images/tag_blue.png +0 -0
  469. data/rdoc/images/tag_green.png +0 -0
  470. data/rdoc/images/transparent.png +0 -0
  471. data/rdoc/images/wrench.png +0 -0
  472. data/rdoc/images/wrench_orange.png +0 -0
  473. data/rdoc/images/zoom.png +0 -0
  474. data/rdoc/index.html +477 -0
  475. data/rdoc/js/darkfish.js +97 -0
  476. data/rdoc/js/navigation.js +105 -0
  477. data/rdoc/js/navigation.js.gz +0 -0
  478. data/rdoc/js/search.js +110 -0
  479. data/rdoc/js/search_index.js +1 -0
  480. data/rdoc/js/search_index.js.gz +0 -0
  481. data/rdoc/js/searcher.js +229 -0
  482. data/rdoc/js/searcher.js.gz +0 -0
  483. data/rdoc/table_of_contents.html +3021 -0
  484. data/rubyXL.gemspec +521 -60
  485. data/spec/lib/cell_spec.rb +386 -143
  486. data/spec/lib/color_spec.rb +11 -4
  487. data/spec/lib/parser_spec.rb +90 -38
  488. data/spec/lib/reference_spec.rb +64 -0
  489. data/spec/lib/rgb_color_spec.rb +29 -0
  490. data/spec/lib/stylesheet_spec.rb +27 -0
  491. data/spec/lib/text_spec.rb +27 -0
  492. data/spec/lib/workbook_spec.rb +168 -22
  493. data/spec/lib/worksheet_spec.rb +1207 -1220
  494. data/spec/spec_helper.rb +13 -0
  495. data/test/input/.gitkeep +0 -0
  496. data/test/output/.gitkeep +0 -0
  497. data/test/test_parse_write.rb +15 -0
  498. data/tmp/.gitignore +1 -0
  499. metadata +634 -168
  500. data/Gemfile.lock +0 -34
  501. data/lib/.DS_Store +0 -0
  502. data/lib/rubyXL/Hash.rb +0 -60
  503. data/lib/rubyXL/color.rb +0 -14
  504. data/lib/rubyXL/private_class.rb +0 -265
  505. data/lib/rubyXL/workbook.rb +0 -450
  506. data/lib/rubyXL/writer/app_writer.rb +0 -62
  507. data/lib/rubyXL/writer/calc_chain_writer.rb +0 -33
  508. data/lib/rubyXL/writer/content_types_writer.rb +0 -77
  509. data/lib/rubyXL/writer/core_writer.rb +0 -51
  510. data/lib/rubyXL/writer/root_rels_writer.rb +0 -25
  511. data/lib/rubyXL/writer/shared_strings_writer.rb +0 -30
  512. data/lib/rubyXL/writer/styles_writer.rb +0 -407
  513. data/lib/rubyXL/writer/theme_writer.rb +0 -343
  514. data/lib/rubyXL/writer/workbook_rels_writer.rb +0 -59
  515. data/lib/rubyXL/writer/workbook_writer.rb +0 -77
  516. data/lib/rubyXL/writer/worksheet_writer.rb +0 -230
  517. data/lib/rubyXL/zip.rb +0 -20
  518. data/spec/lib/hash_spec.rb +0 -28
@@ -1,14 +1,21 @@
1
- require 'rubygems'
2
- require 'rubyXL'
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'rubyXL/convenience_methods/color'
3
5
 
4
6
  describe RubyXL::Color do
5
7
  describe '.validate_color' do
6
8
  it 'should return true if a valid hex color without a # is passed' do
7
- RubyXL::Color.validate_color('0fbCAd').should == true
9
+ expect(RubyXL::Color.validate_color('0fbCAd')).to eq(true)
10
+ end
11
+
12
+ it 'should return true if a valid hex color with alpha is passed' do
13
+ expect(RubyXL::Color.validate_color('01AbCdeF')).to eq(true)
8
14
  end
9
15
 
10
16
  it 'should cause an error if an invalid hex color code or one with a # is passed' do
11
- lambda {RubyXL::Color.validate_color('#G')}.should raise_error
17
+ expect { RubyXL::Color.validate_color('#G') }.to raise_error(RuntimeError)
18
+ expect { RubyXL::Color.validate_color('1234567') }.to raise_error(RuntimeError)
12
19
  end
13
20
  end
14
21
  end
@@ -1,66 +1,118 @@
1
- require 'rubygems'
2
- require 'rubyXL'
1
+ # frozen_string_literal: true
2
+
3
+ require 'English'
4
+ require 'spec_helper'
5
+ require 'tmpdir'
3
6
 
4
7
  describe RubyXL::Parser do
5
8
  before do
6
- @workbook = (RubyXL::Workbook.new)
7
- @time_str = Time.now.to_s
8
- @file = @time_str + '.xlsx'
9
- @workbook.write(@file)
10
- end
9
+ @test_sheet_name = 'This is a very long sheet name that should be trimmed ' \
10
+ 'to 31 characters for compatibility with MS Excel'
11
+ @workbook = RubyXL::Workbook.new
12
+ @workbook.add_worksheet('Test Worksheet')
13
+ @time = Time.at(Time.now.to_i) # Excel only saves times with 1-second precision.
14
+ @time2 = @time + 123456
11
15
 
12
- describe '.convert_to_index' do
13
- it 'should convert a well-formed Excel index into a pair of array indices' do
14
- RubyXL::Parser.convert_to_index('AA1').should == [0, 26]
15
- end
16
+ ws = @workbook.add_worksheet('Escape Test')
17
+ ws.add_cell(0, 0, '&')
18
+ ws.add_cell(0, 1, '<')
19
+ ws.add_cell(0, 2, '>')
20
+ ws.add_cell(0, 3, '')
16
21
 
17
- it 'should return [-1, -1] if the Excel index is not well-formed' do
18
- RubyXL::Parser.convert_to_index('A1B').should == [-1, -1]
19
- end
22
+ ws.add_cell(1, 0, '&') #TODO# .datatype = RubyXL::Cell::SHARED_STRING
23
+ ws.add_cell(1, 1, '<') #TODO# .datatype = RubyXL::Cell::SHARED_STRING
24
+ ws.add_cell(1, 2, '>') #TODO# .datatype = RubyXL::Cell::SHARED_STRING
25
+ ws.add_cell(1, 3, '')
26
+
27
+ ws.add_cell(2, 0, 0)
28
+ ws.add_cell(2, 1, 12345)
29
+ ws.add_cell(2, 2, 123.456e78)
30
+ ws.add_cell(2, 3, 123.456e-78)
31
+
32
+ ws.add_cell(3, 0, -0)
33
+ ws.add_cell(3, 1, -12345)
34
+ ws.add_cell(3, 2, -123.456e78)
35
+ ws.add_cell(3, 3, -123.456e-78)
36
+
37
+ ws[3][3].set_number_format('#.###')
38
+
39
+ @workbook.add_worksheet(@test_sheet_name)
40
+
41
+ @workbook.creator = 'test creator'
42
+ @workbook.modifier = 'test modifier'
43
+ @workbook.created_at = @time
44
+ @workbook.modified_at = @time2
45
+
46
+ @time_str = Time.now.to_s
47
+ @file = "rubyXL-#{$PROCESS_ID}-#{DateTime.now.strftime('%Q')}.xlsx"
48
+ @workbook.write(@file)
20
49
  end
21
50
 
22
51
  describe '.parse' do
23
52
  it 'should parse a valid Excel xlsx or xlsm workbook correctly' do
24
53
  @workbook2 = RubyXL::Parser.parse(@file)
25
54
 
26
- @workbook2.worksheets.size.should == @workbook.worksheets.size
27
- @workbook2[0].sheet_data.should == @workbook[0].sheet_data
28
- @workbook2[0].sheet_name.should == @workbook[0].sheet_name
55
+ expect(@workbook2).to be_an_instance_of(::RubyXL::Workbook)
56
+
57
+ expect(@workbook2.worksheets.size).to eq(@workbook.worksheets.size)
58
+ @workbook2.worksheets.each_index { |i|
59
+ expect(@workbook2[i]).to be_an_instance_of(::RubyXL::Worksheet)
60
+ }
29
61
  end
30
62
 
31
63
  it 'should cause an error if an xlsx or xlsm workbook is not passed' do
32
- lambda {@workbook2 = RubyXL::Parser.parse(@time_str+".xls")}.should raise_error
64
+ expect { @workbook2 = RubyXL::Parser.parse('nonexistent_file.tmp') }.to raise_error(Zip::Error)
33
65
  end
34
66
 
35
- it 'should not cause an error if an xlsx or xlsm workbook is not passed but the skip_filename_check option is used' do
36
- filename = @time_str
37
- FileUtils.cp(@file, filename)
38
-
39
- lambda {@workbook2 = RubyXL::Parser.parse(filename)}.should raise_error
40
- lambda {@workbook2 = RubyXL::Parser.parse(filename, :skip_filename_check => true)}.should_not raise_error
41
-
42
- File.delete(filename)
67
+ it 'should construct consistent number formats' do
68
+ @workbook2 = RubyXL::Parser.parse(@file)
69
+ expect(@workbook2.stylesheet.number_formats).to be_instance_of(RubyXL::NumberFormats)
70
+ expect(@workbook2.stylesheet.number_formats.size).to eq(1)
43
71
  end
44
-
45
- it 'should only read the data and not any of the styles (for the sake of speed) when passed true' do
46
- @workbook2 = RubyXL::Parser.parse(@file, :data_only => true)
47
72
 
48
- @workbook2.worksheets.size.should == @workbook.worksheets.size
49
- @workbook2[0].sheet_data.should == @workbook[0].sheet_data
50
- @workbook2[0].sheet_name.should == @workbook[0].sheet_name
73
+ it 'should unescape HTML entities properly' do
74
+ @workbook2 = RubyXL::Parser.parse(@file)
75
+ expect(@workbook2['Escape Test'][0][0].value).to eq('&')
76
+ expect(@workbook2['Escape Test'][0][1].value).to eq('<')
77
+ expect(@workbook2['Escape Test'][0][2].value).to eq('>')
78
+
79
+ expect(@workbook2['Escape Test'][1][0].value).to eq('&')
80
+ expect(@workbook2['Escape Test'][1][1].value).to eq('<')
81
+ expect(@workbook2['Escape Test'][1][2].value).to eq('>')
51
82
  end
52
83
 
53
- it 'should construct consistent number formats' do
84
+ it 'should parse Core properties correctly' do
85
+ @workbook2 = RubyXL::Parser.parse(@file)
86
+ expect(@workbook2.creator).to eq('test creator')
87
+ expect(@workbook2.modifier).to eq('test modifier')
88
+ expect(@workbook2.created_at).to eq(@time)
89
+ expect(@workbook2.modified_at).to eq(@time2)
90
+ end
91
+
92
+ it 'should trim excessively long sheet names on save' do
54
93
  @workbook2 = RubyXL::Parser.parse(@file)
94
+ expect(@workbook2[@test_sheet_name]).to be_nil
95
+ expect(@workbook2[@test_sheet_name[0..30]]).not_to be_nil
96
+ end
97
+ end
55
98
 
56
- @workbook2.num_fmts[:numFmt].should be_an(Array)
57
- @workbook2.num_fmts[:numFmt].length.should == @workbook2.num_fmts[:attributes][:count]
99
+ describe 'parse_buffer' do
100
+ it 'should parse string buffer correctly' do
101
+ buffer = File.read(@file)
102
+ expect(buffer).to be_instance_of(String)
103
+ f = RubyXL::Parser.parse_buffer(buffer)
104
+ expect(f).to be_instance_of(RubyXL::Workbook)
105
+ end
106
+
107
+ it 'should parse an IO object correctly' do
108
+ io = File.open(@file)
109
+ expect(io).to be_instance_of(File)
110
+ f = RubyXL::Parser.parse_buffer(io)
111
+ expect(f).to be_instance_of(RubyXL::Workbook)
58
112
  end
59
113
  end
60
114
 
61
115
  after do
62
- if File.exist?(@file)
63
- File.delete(@file)
64
- end
116
+ FileUtils.rm_f(@file)
65
117
  end
66
118
  end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RubyXL::Reference do
6
+ describe '.ind2ref' do
7
+ it "should correctly return the 'Excel Style' description of cells when given a row/column number" do
8
+ expect(RubyXL::Reference.ind2ref(0, 26)).to eq('AA1')
9
+ expect(RubyXL::Reference.ind2ref(99, 0)).to eq('A100')
10
+ expect(RubyXL::Reference.ind2ref(0, 26)).to eq('AA1')
11
+ expect(RubyXL::Reference.ind2ref(0, 51)).to eq('AZ1')
12
+ expect(RubyXL::Reference.ind2ref(0, 52)).to eq('BA1')
13
+ expect(RubyXL::Reference.ind2ref(0, 77)).to eq('BZ1')
14
+ expect(RubyXL::Reference.ind2ref(0, 78)).to eq('CA1')
15
+ expect(RubyXL::Reference.ind2ref(0, 16383)).to eq('XFD1')
16
+ end
17
+
18
+ it "should correctly convert back and forth between 'Excel Style' and index style cell references" do
19
+ 0.upto(16383) do |n|
20
+ expect(RubyXL::Reference.ref2ind(RubyXL::Reference.ind2ref(n, 16383 - n))).to eq([ n, 16383 - n ])
21
+ end
22
+ end
23
+ end
24
+
25
+ describe '.valid?' do
26
+ it 'should return true for valid references' do
27
+ expect(RubyXL::Reference.new('C23').valid?).to be true
28
+ end
29
+
30
+ it 'should return false for invalid references' do
31
+ expect(RubyXL::Reference.new('C2A').valid?).to be false
32
+ end
33
+ end
34
+
35
+ describe '.ref2ind' do
36
+ it 'should return [-1, -1] if the Excel index is not well-formed' do
37
+ expect(RubyXL::Reference.ref2ind('A1B')).to eq([-1, -1])
38
+ end
39
+ end
40
+
41
+ describe '.new' do
42
+ it 'should take a string parameter' do
43
+ new_ref = RubyXL::Reference.new('C23')
44
+ expect(new_ref.single_cell?).to be true
45
+ expect(new_ref.to_s).to eq 'C23'
46
+ end
47
+
48
+ it 'should take 2 coordinate parameters' do
49
+ new_ref = RubyXL::Reference.new(11, 22)
50
+ expect(new_ref.single_cell?).to be true
51
+ expect(new_ref.to_s).to eq 'W12'
52
+ end
53
+
54
+ it 'should take 4 coordinate parameters' do
55
+ new_ref = RubyXL::Reference.new(11, 22, 33, 44)
56
+ expect(new_ref.single_cell?).to be false
57
+ expect(new_ref.to_s).to eq 'AH12:AS23'
58
+ end
59
+
60
+ it 'should take named parameters' do
61
+ expect(RubyXL::Reference.new(row_from: 44, row_to: 33, col_from: 22, col_to: 11).to_s).to eq('W45:L34')
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'rubyXL/convenience_methods/color'
5
+
6
+ describe RubyXL::RgbColor do
7
+ describe '.to_s' do
8
+ it 'should properly translate RGB color to string' do
9
+ rgb_color = RubyXL::RgbColor.new
10
+
11
+ rgb_color.r = 1
12
+ rgb_color.g = 2
13
+ rgb_color.b = 255
14
+
15
+ expect(rgb_color.to_s).to eq('0102ff')
16
+ end
17
+
18
+ it 'should properly translate RGB color with alpha value to string' do
19
+ rgb_color = RubyXL::RgbColor.new
20
+
21
+ rgb_color.r = 11
22
+ rgb_color.g = 22
23
+ rgb_color.b = 33
24
+ rgb_color.a = 255
25
+
26
+ expect(rgb_color.to_s).to eq('0b1621ff')
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RubyXL::NumberFormat do
6
+ describe '.is_date_format?' do
7
+ it 'should return true if number format = dd// yy// mm' do
8
+ expect(RubyXL::NumberFormat.new(:num_fmt_id => 1, :format_code => 'dd// yy// mm').is_date_format?).to eq(true)
9
+ end
10
+
11
+ it 'should return true if number format = DD// YY// MM (uppercase)' do
12
+ expect(RubyXL::NumberFormat.new(:num_fmt_id => 1, :format_code => 'DD// YY// MM').is_date_format?).to eq(true)
13
+ end
14
+
15
+ it 'should return false if number format = @' do
16
+ expect(RubyXL::NumberFormat.new(:num_fmt_id => 1, :format_code => '@').is_date_format?).to eq(false)
17
+ expect(RubyXL::NumberFormat.new(:num_fmt_id => 1, :format_code => 'general').is_date_format?).to eq(false)
18
+ expect(RubyXL::NumberFormat.new(:num_fmt_id => 1, :format_code => '0.00e+00').is_date_format?).to eq(false)
19
+ end
20
+
21
+ it 'should properly detect date formats amongst default ones' do
22
+ all_formats = RubyXL::NumberFormats::DEFAULT_NUMBER_FORMATS
23
+ id_list = all_formats.collect { |fmt| fmt.num_fmt_id if fmt.is_date_format? }.compact.sort
24
+ expect(id_list).to eq([14, 15, 16, 17, 18, 19, 20, 21, 22, 45, 46, 47])
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RubyXL::Text do
6
+ describe '.to_s' do
7
+ it 'should not crash processing UNICODE data' do
8
+ bytes = [ 114, 39, 95, 120, 48, 48, 56, 48, 95, 226, 132, 162, 115,
9
+ 32, 103, 105, 114, 108, 102, 114, 105, 101, 110, 100,
10
+ 39, 95, 120, 48, 48, 56, 48, 95, 226, 132, 162, 115, 32, 104, 111]
11
+
12
+ t = RubyXL::Text.new(:value => bytes.pack('c*').force_encoding('UTF-8'))
13
+
14
+ str = t.to_s
15
+
16
+ expect(str).to be
17
+ end
18
+
19
+ it 'should not escape valid XML extended UNICODE characters' do
20
+ t = RubyXL::Text.new(:value => "\u{10000}\u{10FFFF}")
21
+
22
+ xml = t.write_xml[%r{<t>[^<]+</t>}]
23
+
24
+ expect(xml).to eq("<t>\u{10000}\u{10FFFF}</t>")
25
+ end
26
+ end
27
+ end
@@ -1,51 +1,197 @@
1
- require 'rubygems'
2
- require 'rubyXL'
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'rubyXL/convenience_methods/workbook'
3
5
 
4
6
  describe RubyXL::Workbook do
5
7
  before do
6
8
  @workbook = RubyXL::Workbook.new
7
- @worksheet = RubyXL::Worksheet.new(@workbook)
8
- @workbook.worksheets << @worksheet
9
- (0..10).each do |i|
10
- (0..10).each do |j|
9
+ @worksheet = @workbook.add_worksheet('Test Worksheet')
10
+
11
+ 11.times do |i|
12
+ 11.times do |j|
11
13
  @worksheet.add_cell(i, j, "#{i}:#{j}")
12
14
  end
13
15
  end
16
+
14
17
  @cell = @worksheet[0][0]
15
18
  end
16
19
 
17
- describe '.write' do
18
- #method not conducive to unit tests
20
+ describe '.new' do
21
+ it 'should automatically create a blank worksheet named "Sheet1"' do
22
+ expect(@workbook[0]).not_to be_nil
23
+ expect(@workbook[0].sheet_name).to eq('Sheet1')
24
+ end
19
25
  end
20
26
 
21
- describe '.get_style' do
22
- it 'should return the cell_xfs object based on the passed in style index (string or number)' do
23
- @workbook.get_style('0').should == @workbook.cell_xfs[:xf][0]
27
+ describe '[]' do
28
+ it 'should properly locate worksheet by index' do
29
+ expect(@workbook[1]).not_to be_nil
30
+ expect(@workbook[1].sheet_name).to eq('Test Worksheet')
24
31
  end
25
32
 
26
- it 'should return nil if index out of range or string is passed in' do
27
- @workbook.get_style('20000').should be_nil
33
+ it 'should properly locate worksheet by name' do
34
+ expect(@workbook['Test Worksheet']).not_to be_nil
35
+ expect(@workbook['Test Worksheet'].sheet_name).to eq('Test Worksheet')
28
36
  end
29
37
  end
30
38
 
31
- describe '.get_style_attributes' do
32
- it 'should return the attributes of the style object when passed the style object itself' do
33
- @workbook.get_style_attributes(@workbook.get_style(0)).should == @workbook.cell_xfs[:xf][0][:attributes]
34
- end
35
-
36
- it 'should cause an error if nil is passed' do
37
- lambda {@workbook.get_style_attributes(nil)}.should raise_error
39
+ describe '.add_worksheet' do
40
+ it 'when not given a name, it should automatically pick a name "SheetX" that is not taken yet' do
41
+ expect(@workbook['Sheet2']).to be_nil
42
+ @workbook.add_worksheet
43
+ expect(@workbook['Sheet2']).not_to be_nil
44
+ expect(@workbook['Sheet2'].sheet_name).to eq('Sheet2')
38
45
  end
39
46
  end
40
47
 
41
48
  describe '.get_fill_color' do
42
49
  it 'should return the fill color of a particular style attribute' do
43
50
  @cell.change_fill('000000')
44
- @workbook.get_fill_color(@workbook.get_style_attributes(@workbook.get_style(@cell.style_index))).should == '000000'
51
+ expect(@workbook.get_fill_color(@workbook.cell_xfs[@cell.style_index])).to eq('000000')
45
52
  end
46
53
 
47
54
  it 'should return white (ffffff) if no fill color is specified in style' do
48
- @workbook.get_fill_color(@workbook.get_style_attributes(@workbook.get_style(@cell.style_index))).should == 'ffffff'
55
+ expect(@workbook.get_fill_color(@workbook.cell_xfs[@cell.style_index])).to eq('ffffff')
56
+ end
57
+ end
58
+
59
+ describe '.application' do
60
+ it 'should contain default application string' do
61
+ expect(@workbook.application).to eq(RubyXL::Workbook::APPLICATION)
62
+ end
63
+
64
+ it 'should set application properly' do
65
+ @workbook.application = 'TEST APPLICATION'
66
+ expect(@workbook.application).to eq('TEST APPLICATION')
67
+ end
68
+ end
69
+
70
+ describe '.company' do
71
+ it 'should have default company empty' do
72
+ expect(@workbook.company).to eq('')
73
+ end
74
+
75
+ it 'should set company properly' do
76
+ @workbook.company = 'TEST COMPANY'
77
+ expect(@workbook.company).to eq('TEST COMPANY')
78
+ end
79
+ end
80
+
81
+ describe '.appversion' do
82
+ it 'should contain default appversion' do
83
+ expect(@workbook.appversion).to eq(RubyXL::Workbook::APPVERSION)
84
+ end
85
+
86
+ it 'should set appversion properly' do
87
+ @workbook.appversion = '12.34'
88
+ expect(@workbook.appversion).to eq('12.34')
89
+ end
90
+ end
91
+
92
+ describe '.creator' do
93
+ it 'should contain default creator' do
94
+ expect(@workbook.creator).to be_nil
95
+ end
96
+
97
+ it 'should set creator properly' do
98
+ @workbook.creator = 'CREATOR'
99
+ expect(@workbook.creator).to eq('CREATOR')
100
+ end
101
+ end
102
+
103
+ describe '.modifier' do
104
+ it 'should contain default modifier' do
105
+ expect(@workbook.modifier).to be_nil
106
+ end
107
+
108
+ it 'should set modifier properly' do
109
+ @workbook.modifier = 'MODIFIER'
110
+ expect(@workbook.modifier).to eq('MODIFIER')
111
+ end
112
+ end
113
+
114
+ describe '.created_at' do
115
+ it 'should contain current time by default' do
116
+ expect(@workbook.created_at).to be_a_kind_of(Time)
117
+ end
118
+
119
+ it 'should set modifier properly' do
120
+ dt = Time.at(Time.now.to_i) # Strip time of microseconds
121
+ @workbook.created_at = dt
122
+ expect(@workbook.created_at.to_time).to eq(dt)
123
+ end
124
+ end
125
+
126
+ describe '.created_at' do
127
+ it 'should contain current time by default' do
128
+ expect(@workbook.modified_at).to be_a_kind_of(Time)
129
+ end
130
+
131
+ it 'should set modifier properly' do
132
+ dt = Time.at(Time.now.to_i) # Strip time of microseconds
133
+ @workbook.modified_at = dt
134
+ expect(@workbook.modified_at.to_time).to eq(dt)
135
+ end
136
+ end
137
+
138
+ describe '.title' do
139
+ it 'should contain default title' do
140
+ expect(@workbook.title).to be_nil
141
+ end
142
+
143
+ it 'should set title properly' do
144
+ @workbook.title = 'TITLE'
145
+ expect(@workbook.title).to eq('TITLE')
146
+ end
147
+ end
148
+
149
+ describe '.stream' do
150
+ it 'It should not be confused by missing sheet_id' do
151
+ workbook = RubyXL::Workbook.new
152
+ workbook[0].sheet_id = 1
153
+ workbook.add_worksheet('Sheet2')
154
+ workbook.stream
155
+ end
156
+
157
+ it 'should raise error if bad characters are present in worksheet name' do
158
+ workbook = RubyXL::Workbook.new
159
+ workbook[0].sheet_name = 'Sheet007'
160
+ expect{ workbook.stream }.to_not raise_error
161
+
162
+ '\\/*[]:?'.each_char { |char|
163
+ workbook = RubyXL::Workbook.new
164
+ workbook[0].sheet_name = "Sheet#{char}007"
165
+ expect{ workbook.stream }.to raise_error(RuntimeError)
166
+ }
167
+ end
168
+ end
169
+
170
+ describe '.collect_related_objects' do
171
+ it 'should not save shared strings if there are none' do
172
+ wb = RubyXL::Workbook.new
173
+ expect(wb.root.collect_related_objects.map(&:class).include?(::RubyXL::SharedStringsTable)).to be false
174
+ Zip::File.open_buffer(wb.stream) { |zf|
175
+ expect(zf.entries.any? { |e| e.name =~ /sharedstrings/i }).to be false
176
+ }
177
+
178
+ wb.shared_strings_container.add('test')
179
+ expect(wb.root.collect_related_objects.map(&:class).include?(::RubyXL::SharedStringsTable)).to be true
180
+ Zip::File.open_buffer(wb.stream) { |zf|
181
+ expect(zf.entries.any? { |e| e.name =~ /sharedstrings/i }).to be true
182
+ }
183
+ end
184
+ end
185
+
186
+ describe 'defined names' do
187
+ it 'should add and access defined names properly' do
188
+ wb = RubyXL::Workbook.new
189
+ wb.define_new_name('TEST', 'Sheet1!$A$2')
190
+
191
+ wb2 = RubyXL::Parser.parse_buffer(wb.stream)
192
+ expect(wb2.get_defined_name('TEST')).to_not be_nil
193
+ expect(wb2.get_defined_name('TEST').reference).to eq('Sheet1!$A$2')
194
+ expect(wb2.get_defined_name('TEST2')).to be_nil
49
195
  end
50
196
  end
51
197
  end