openxml-docx 0.8.0.beta1

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 (331) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/.travis.yml +6 -0
  4. data/Gemfile +3 -0
  5. data/Gemfile.lock +56 -0
  6. data/LICENSE.txt +20 -0
  7. data/README.md +67 -0
  8. data/Rakefile +6 -0
  9. data/example +23 -0
  10. data/lib/openxml-docx.rb +1 -0
  11. data/lib/openxml/docx.rb +20 -0
  12. data/lib/openxml/docx/attribute_builder.rb +298 -0
  13. data/lib/openxml/docx/elements.rb +13 -0
  14. data/lib/openxml/docx/elements/absolute_position_tab.rb +31 -0
  15. data/lib/openxml/docx/elements/bidi_embed.rb +19 -0
  16. data/lib/openxml/docx/elements/bidi_override.rb +19 -0
  17. data/lib/openxml/docx/elements/break.rb +26 -0
  18. data/lib/openxml/docx/elements/carriage_return.rb +10 -0
  19. data/lib/openxml/docx/elements/container.rb +37 -0
  20. data/lib/openxml/docx/elements/content_part.rb +10 -0
  21. data/lib/openxml/docx/elements/control.rb +12 -0
  22. data/lib/openxml/docx/elements/deleted_text.rb +10 -0
  23. data/lib/openxml/docx/elements/dirty.rb +8 -0
  24. data/lib/openxml/docx/elements/element.rb +64 -0
  25. data/lib/openxml/docx/elements/last_rendered_page_break.rb +8 -0
  26. data/lib/openxml/docx/elements/long_day.rb +10 -0
  27. data/lib/openxml/docx/elements/long_month.rb +10 -0
  28. data/lib/openxml/docx/elements/long_year.rb +10 -0
  29. data/lib/openxml/docx/elements/nonbreaking_hyphen.rb +9 -0
  30. data/lib/openxml/docx/elements/optional_hyphen.rb +10 -0
  31. data/lib/openxml/docx/elements/page_number.rb +9 -0
  32. data/lib/openxml/docx/elements/paper_source.rb +13 -0
  33. data/lib/openxml/docx/elements/paragraph.rb +58 -0
  34. data/lib/openxml/docx/elements/ruby.rb +48 -0
  35. data/lib/openxml/docx/elements/run.rb +51 -0
  36. data/lib/openxml/docx/elements/short_day.rb +10 -0
  37. data/lib/openxml/docx/elements/short_month.rb +10 -0
  38. data/lib/openxml/docx/elements/short_year.rb +10 -0
  39. data/lib/openxml/docx/elements/symbol.rb +13 -0
  40. data/lib/openxml/docx/elements/tab.rb +8 -0
  41. data/lib/openxml/docx/elements/text.rb +30 -0
  42. data/lib/openxml/docx/package.rb +34 -0
  43. data/lib/openxml/docx/parts.rb +10 -0
  44. data/lib/openxml/docx/parts/document.rb +66 -0
  45. data/lib/openxml/docx/parts/settings.rb +22 -0
  46. data/lib/openxml/docx/parts/styles.rb +50 -0
  47. data/lib/openxml/docx/properties.rb +21 -0
  48. data/lib/openxml/docx/properties/alignment.rb +14 -0
  49. data/lib/openxml/docx/properties/auto_adjust_right_indent.rb +11 -0
  50. data/lib/openxml/docx/properties/auto_space_de.rb +10 -0
  51. data/lib/openxml/docx/properties/auto_space_dn.rb +10 -0
  52. data/lib/openxml/docx/properties/base_property.rb +50 -0
  53. data/lib/openxml/docx/properties/bidi.rb +8 -0
  54. data/lib/openxml/docx/properties/bold.rb +10 -0
  55. data/lib/openxml/docx/properties/boolean_property.rb +17 -0
  56. data/lib/openxml/docx/properties/border.rb +24 -0
  57. data/lib/openxml/docx/properties/caps.rb +8 -0
  58. data/lib/openxml/docx/properties/character_spacing.rb +10 -0
  59. data/lib/openxml/docx/properties/color.rb +13 -0
  60. data/lib/openxml/docx/properties/column.rb +18 -0
  61. data/lib/openxml/docx/properties/columns.rb +15 -0
  62. data/lib/openxml/docx/properties/complex_bold.rb +10 -0
  63. data/lib/openxml/docx/properties/complex_font_size.rb +10 -0
  64. data/lib/openxml/docx/properties/complex_italics.rb +10 -0
  65. data/lib/openxml/docx/properties/complex_property.rb +19 -0
  66. data/lib/openxml/docx/properties/complex_script_formatting.rb +10 -0
  67. data/lib/openxml/docx/properties/compress_punctuation.rb +10 -0
  68. data/lib/openxml/docx/properties/conditional_formatting.rb +23 -0
  69. data/lib/openxml/docx/properties/container_property.rb +65 -0
  70. data/lib/openxml/docx/properties/contextual_spacing.rb +8 -0
  71. data/lib/openxml/docx/properties/div_id.rb +8 -0
  72. data/lib/openxml/docx/properties/document_grid.rb +22 -0
  73. data/lib/openxml/docx/properties/double_strikethrough.rb +10 -0
  74. data/lib/openxml/docx/properties/east_asian_layout.rb +22 -0
  75. data/lib/openxml/docx/properties/effect.rb +13 -0
  76. data/lib/openxml/docx/properties/emboss.rb +8 -0
  77. data/lib/openxml/docx/properties/emphasis.rb +14 -0
  78. data/lib/openxml/docx/properties/expansion.rb +20 -0
  79. data/lib/openxml/docx/properties/font.rb +34 -0
  80. data/lib/openxml/docx/properties/font_size.rb +10 -0
  81. data/lib/openxml/docx/properties/form_protection.rb +9 -0
  82. data/lib/openxml/docx/properties/frame.rb +59 -0
  83. data/lib/openxml/docx/properties/hidden_style.rb +9 -0
  84. data/lib/openxml/docx/properties/hidden_text.rb +10 -0
  85. data/lib/openxml/docx/properties/highlight.rb +13 -0
  86. data/lib/openxml/docx/properties/imprint.rb +8 -0
  87. data/lib/openxml/docx/properties/indentation.rb +18 -0
  88. data/lib/openxml/docx/properties/integer_property.rb +17 -0
  89. data/lib/openxml/docx/properties/italics.rb +10 -0
  90. data/lib/openxml/docx/properties/keep_lines.rb +8 -0
  91. data/lib/openxml/docx/properties/keep_next.rb +8 -0
  92. data/lib/openxml/docx/properties/kerning.rb +10 -0
  93. data/lib/openxml/docx/properties/kinsoku.rb +8 -0
  94. data/lib/openxml/docx/properties/language.rb +21 -0
  95. data/lib/openxml/docx/properties/latent_styles.rb +23 -0
  96. data/lib/openxml/docx/properties/latent_styles_exception.rb +21 -0
  97. data/lib/openxml/docx/properties/line_numbering.rb +23 -0
  98. data/lib/openxml/docx/properties/linked_style.rb +18 -0
  99. data/lib/openxml/docx/properties/manual_width.rb +13 -0
  100. data/lib/openxml/docx/properties/math.rb +10 -0
  101. data/lib/openxml/docx/properties/mirror_indent.rb +8 -0
  102. data/lib/openxml/docx/properties/next_style.rb +17 -0
  103. data/lib/openxml/docx/properties/no_proof.rb +8 -0
  104. data/lib/openxml/docx/properties/numbering.rb +22 -0
  105. data/lib/openxml/docx/properties/on_off_property.rb +17 -0
  106. data/lib/openxml/docx/properties/outline.rb +8 -0
  107. data/lib/openxml/docx/properties/outline_level.rb +10 -0
  108. data/lib/openxml/docx/properties/overflow_punctuation.rb +10 -0
  109. data/lib/openxml/docx/properties/page_borders.rb +61 -0
  110. data/lib/openxml/docx/properties/page_break_before.rb +8 -0
  111. data/lib/openxml/docx/properties/page_margins.rb +17 -0
  112. data/lib/openxml/docx/properties/page_numbering.rb +89 -0
  113. data/lib/openxml/docx/properties/page_size.rb +23 -0
  114. data/lib/openxml/docx/properties/paragraph_borders.rb +45 -0
  115. data/lib/openxml/docx/properties/paragraph_style.rb +10 -0
  116. data/lib/openxml/docx/properties/parent_style.rb +17 -0
  117. data/lib/openxml/docx/properties/personal.rb +8 -0
  118. data/lib/openxml/docx/properties/personal_compose.rb +8 -0
  119. data/lib/openxml/docx/properties/personal_reply.rb +8 -0
  120. data/lib/openxml/docx/properties/phonetic_guide_alignment.rb +15 -0
  121. data/lib/openxml/docx/properties/phonetic_guide_base_font_size.rb +10 -0
  122. data/lib/openxml/docx/properties/phonetic_guide_font_size.rb +10 -0
  123. data/lib/openxml/docx/properties/phonetic_guide_font_size_raise.rb +10 -0
  124. data/lib/openxml/docx/properties/phonetic_guide_language.rb +19 -0
  125. data/lib/openxml/docx/properties/position.rb +8 -0
  126. data/lib/openxml/docx/properties/positive_integer_property.rb +17 -0
  127. data/lib/openxml/docx/properties/primary_style.rb +9 -0
  128. data/lib/openxml/docx/properties/right_to_left.rb +10 -0
  129. data/lib/openxml/docx/properties/rtl_gutter.rb +8 -0
  130. data/lib/openxml/docx/properties/run_style.rb +10 -0
  131. data/lib/openxml/docx/properties/section_type.rb +15 -0
  132. data/lib/openxml/docx/properties/semi_hidden.rb +8 -0
  133. data/lib/openxml/docx/properties/shading.rb +64 -0
  134. data/lib/openxml/docx/properties/shadow.rb +8 -0
  135. data/lib/openxml/docx/properties/small_caps.rb +8 -0
  136. data/lib/openxml/docx/properties/snap_to_grid.rb +8 -0
  137. data/lib/openxml/docx/properties/spacing.rb +25 -0
  138. data/lib/openxml/docx/properties/spec_vanish.rb +8 -0
  139. data/lib/openxml/docx/properties/strikethrough.rb +10 -0
  140. data/lib/openxml/docx/properties/string_property.rb +17 -0
  141. data/lib/openxml/docx/properties/style.rb +17 -0
  142. data/lib/openxml/docx/properties/style_aliases.rb +9 -0
  143. data/lib/openxml/docx/properties/style_auto_redefinition.rb +9 -0
  144. data/lib/openxml/docx/properties/style_lock.rb +9 -0
  145. data/lib/openxml/docx/properties/style_name.rb +10 -0
  146. data/lib/openxml/docx/properties/supress_auto_hyphens.rb +8 -0
  147. data/lib/openxml/docx/properties/supress_line_numbers.rb +8 -0
  148. data/lib/openxml/docx/properties/supress_overlap.rb +8 -0
  149. data/lib/openxml/docx/properties/tab.rb +71 -0
  150. data/lib/openxml/docx/properties/tabs.rb +10 -0
  151. data/lib/openxml/docx/properties/text_alignment.rb +13 -0
  152. data/lib/openxml/docx/properties/text_direction.rb +13 -0
  153. data/lib/openxml/docx/properties/textbox_tight_wrap.rb +13 -0
  154. data/lib/openxml/docx/properties/toggle_property.rb +17 -0
  155. data/lib/openxml/docx/properties/ui_priority.rb +8 -0
  156. data/lib/openxml/docx/properties/underline.rb +24 -0
  157. data/lib/openxml/docx/properties/unhide_when_used.rb +8 -0
  158. data/lib/openxml/docx/properties/value_property.rb +31 -0
  159. data/lib/openxml/docx/properties/vertical_alignment.rb +14 -0
  160. data/lib/openxml/docx/properties/vertical_text_alignment.rb +14 -0
  161. data/lib/openxml/docx/properties/web_hidden.rb +8 -0
  162. data/lib/openxml/docx/properties/widow_control.rb +8 -0
  163. data/lib/openxml/docx/properties/word_wrap.rb +8 -0
  164. data/lib/openxml/docx/property_builder.rb +74 -0
  165. data/lib/openxml/docx/section.rb +36 -0
  166. data/lib/openxml/docx/style.rb +84 -0
  167. data/lib/openxml/docx/version.rb +5 -0
  168. data/openxml-docx.gemspec +32 -0
  169. data/spec/elements/absolute_position_tab_spec.rb +84 -0
  170. data/spec/elements/bidi_embed_spec.rb +31 -0
  171. data/spec/elements/bidi_override_spec.rb +31 -0
  172. data/spec/elements/break_spec.rb +55 -0
  173. data/spec/elements/carriage_return_spec.rb +12 -0
  174. data/spec/elements/content_part_spec.rb +18 -0
  175. data/spec/elements/control_spec.rb +41 -0
  176. data/spec/elements/deleted_text_spec.rb +24 -0
  177. data/spec/elements/dirty_spec.rb +12 -0
  178. data/spec/elements/last_rendered_page_break_spec.rb +12 -0
  179. data/spec/elements/long_day_spec.rb +12 -0
  180. data/spec/elements/long_month_spec.rb +12 -0
  181. data/spec/elements/long_year_spec.rb +12 -0
  182. data/spec/elements/nonbreaking_hyphen_spec.rb +12 -0
  183. data/spec/elements/optional_hyphen_spec.rb +12 -0
  184. data/spec/elements/page_number_spec.rb +12 -0
  185. data/spec/elements/paragraph_spec.rb +33 -0
  186. data/spec/elements/ruby_spec.rb +66 -0
  187. data/spec/elements/run_spec.rb +15 -0
  188. data/spec/elements/short_day_spec.rb +12 -0
  189. data/spec/elements/short_month_spec.rb +12 -0
  190. data/spec/elements/short_year_spec.rb +12 -0
  191. data/spec/elements/symbol_spec.rb +34 -0
  192. data/spec/elements/tab_spec.rb +12 -0
  193. data/spec/elements/text_spec.rb +24 -0
  194. data/spec/package_spec.rb +36 -0
  195. data/spec/parts/document_spec.rb +95 -0
  196. data/spec/parts/settings_spec.rb +13 -0
  197. data/spec/parts/styles_spec.rb +27 -0
  198. data/spec/properties/alignment_spec.rb +58 -0
  199. data/spec/properties/auto_adjust_right_indent_spec.rb +23 -0
  200. data/spec/properties/auto_space_de_spec.rb +23 -0
  201. data/spec/properties/auto_space_dn_spec.rb +23 -0
  202. data/spec/properties/bidi_spec.rb +23 -0
  203. data/spec/properties/bold_spec.rb +23 -0
  204. data/spec/properties/border_spec.rb +156 -0
  205. data/spec/properties/caps_spec.rb +23 -0
  206. data/spec/properties/character_spacing_spec.rb +26 -0
  207. data/spec/properties/color_spec.rb +49 -0
  208. data/spec/properties/column_spec.rb +46 -0
  209. data/spec/properties/columns_spec.rb +174 -0
  210. data/spec/properties/complex_bold_spec.rb +23 -0
  211. data/spec/properties/complex_font_size_spec.rb +24 -0
  212. data/spec/properties/complex_italics_spec.rb +23 -0
  213. data/spec/properties/complex_script_formatting_spec.rb +23 -0
  214. data/spec/properties/compress_punctuation_spec.rb +23 -0
  215. data/spec/properties/conditional_formatting_spec.rb +160 -0
  216. data/spec/properties/contextual_spacing_spec.rb +23 -0
  217. data/spec/properties/div_id_spec.rb +17 -0
  218. data/spec/properties/document_grid_spec.rb +78 -0
  219. data/spec/properties/double_strikethrough_spec.rb +23 -0
  220. data/spec/properties/east_asian_layout_spec.rb +115 -0
  221. data/spec/properties/effect_spec.rb +43 -0
  222. data/spec/properties/emboss_spec.rb +23 -0
  223. data/spec/properties/emphasis_spec.rb +37 -0
  224. data/spec/properties/expansion_spec.rb +34 -0
  225. data/spec/properties/font_size_spec.rb +24 -0
  226. data/spec/properties/font_spec.rb +273 -0
  227. data/spec/properties/form_protection_spec.rb +23 -0
  228. data/spec/properties/frame_spec.rb +338 -0
  229. data/spec/properties/hidden_style_spec.rb +23 -0
  230. data/spec/properties/hidden_text_spec.rb +23 -0
  231. data/spec/properties/highlight_spec.rb +97 -0
  232. data/spec/properties/imprint_spec.rb +23 -0
  233. data/spec/properties/indentation_spec.rb +176 -0
  234. data/spec/properties/italics_spec.rb +23 -0
  235. data/spec/properties/keep_lines_spec.rb +23 -0
  236. data/spec/properties/keep_next_spec.rb +23 -0
  237. data/spec/properties/kerning_spec.rb +24 -0
  238. data/spec/properties/kinsoku_spec.rb +23 -0
  239. data/spec/properties/language_spec.rb +29 -0
  240. data/spec/properties/latent_styles_exception_spec.rb +83 -0
  241. data/spec/properties/latent_styles_spec.rb +336 -0
  242. data/spec/properties/line_numbering_spec.rb +96 -0
  243. data/spec/properties/linked_style_spec.rb +17 -0
  244. data/spec/properties/manual_width_spec.rb +55 -0
  245. data/spec/properties/math_spec.rb +23 -0
  246. data/spec/properties/mirror_indent_spec.rb +23 -0
  247. data/spec/properties/next_style_spec.rb +17 -0
  248. data/spec/properties/no_proof_spec.rb +23 -0
  249. data/spec/properties/numbering_spec.rb +46 -0
  250. data/spec/properties/outline_level_spec.rb +20 -0
  251. data/spec/properties/outline_spec.rb +23 -0
  252. data/spec/properties/overflow_punctuation_spec.rb +23 -0
  253. data/spec/properties/page_borders_spec.rb +129 -0
  254. data/spec/properties/page_break_before_spec.rb +23 -0
  255. data/spec/properties/page_margins_spec.rb +150 -0
  256. data/spec/properties/page_numbering_spec.rb +395 -0
  257. data/spec/properties/page_size_spec.rb +90 -0
  258. data/spec/properties/paper_source_spec.rb +56 -0
  259. data/spec/properties/paragraph_borders_spec.rb +66 -0
  260. data/spec/properties/paragraph_style_spec.rb +12 -0
  261. data/spec/properties/parent_style_spec.rb +17 -0
  262. data/spec/properties/personal_compose_spec.rb +23 -0
  263. data/spec/properties/personal_reply_spec.rb +23 -0
  264. data/spec/properties/personal_spec.rb +23 -0
  265. data/spec/properties/phonetic_guide_alignment_spec.rb +42 -0
  266. data/spec/properties/phonetic_guide_base_font_size_spec.rb +25 -0
  267. data/spec/properties/phonetic_guide_font_size_raise_spec.rb +25 -0
  268. data/spec/properties/phonetic_guide_font_size_spec.rb +25 -0
  269. data/spec/properties/phonetic_guide_language_spec.rb +12 -0
  270. data/spec/properties/position_spec.rb +26 -0
  271. data/spec/properties/primary_style_spec.rb +23 -0
  272. data/spec/properties/right_to_left_spec.rb +23 -0
  273. data/spec/properties/rtl_gutter_spec.rb +23 -0
  274. data/spec/properties/run_style_spec.rb +12 -0
  275. data/spec/properties/section_type_spec.rb +33 -0
  276. data/spec/properties/semi_hidden_spec.rb +23 -0
  277. data/spec/properties/shading_spec.rb +135 -0
  278. data/spec/properties/shadow_property_spec.rb +23 -0
  279. data/spec/properties/small_caps_spec.rb +22 -0
  280. data/spec/properties/snap_to_grid_spec.rb +23 -0
  281. data/spec/properties/spacing_spec.rb +159 -0
  282. data/spec/properties/spec_vanish_spec.rb +23 -0
  283. data/spec/properties/strikethrough_spec.rb +23 -0
  284. data/spec/properties/style_aliases_spec.rb +22 -0
  285. data/spec/properties/style_auto_redefinition_spec.rb +23 -0
  286. data/spec/properties/style_lock_spec.rb +23 -0
  287. data/spec/properties/style_name_spec.rb +17 -0
  288. data/spec/properties/supress_auto_hyphens_spec.rb +23 -0
  289. data/spec/properties/supress_line_numbers_spec.rb +23 -0
  290. data/spec/properties/supress_overlap_spec.rb +23 -0
  291. data/spec/properties/tab_spec.rb +45 -0
  292. data/spec/properties/tabs_spec.rb +39 -0
  293. data/spec/properties/text_alignment_spec.rb +33 -0
  294. data/spec/properties/text_direction_spec.rb +42 -0
  295. data/spec/properties/textbox_tight_wrap_spec.rb +33 -0
  296. data/spec/properties/ui_priority_spec.rb +22 -0
  297. data/spec/properties/underline_spec.rb +161 -0
  298. data/spec/properties/unhide_when_used_spec.rb +23 -0
  299. data/spec/properties/vertical_alignment_spec.rb +26 -0
  300. data/spec/properties/vertical_text_alignment_spec.rb +28 -0
  301. data/spec/properties/web_hidden_spec.rb +23 -0
  302. data/spec/properties/widow_control_spec.rb +23 -0
  303. data/spec/properties/word_wrap_spec.rb +23 -0
  304. data/spec/section_spec.rb +44 -0
  305. data/spec/spec_helper.rb +14 -0
  306. data/spec/style_spec.rb +108 -0
  307. data/spec/support/data/elements/break_element.xml +4 -0
  308. data/spec/support/data/elements/break_with_attributes_element.xml +4 -0
  309. data/spec/support/data/elements/paragraph_element.xml +8 -0
  310. data/spec/support/data/elements/paragraph_with_runs_element.xml +14 -0
  311. data/spec/support/data/elements/run_element.xml +8 -0
  312. data/spec/support/data/elements/symbol_element.xml +4 -0
  313. data/spec/support/data/elements/text_element.xml +4 -0
  314. data/spec/support/data/parts/content_types_part.xml +1 -0
  315. data/spec/support/data/parts/document_with_children_part.xml +1 -0
  316. data/spec/support/data/parts/document_with_multiple_sections_part.xml +24 -0
  317. data/spec/support/data/parts/document_with_one_section_part.xml +16 -0
  318. data/spec/support/data/parts/empty_document_part.xml +1 -0
  319. data/spec/support/data/parts/global_rels_part.xml +1 -0
  320. data/spec/support/data/parts/rels_part.xml +1 -0
  321. data/spec/support/data/parts/settings_part.xml +1 -0
  322. data/spec/support/data/parts/styles_part.xml +1 -0
  323. data/spec/support/data/parts/styles_with_custom_style_part.xml +20 -0
  324. data/spec/support/data/styles/character_styles.xml +15 -0
  325. data/spec/support/data/styles/paragraph_styles.xml +11 -0
  326. data/spec/support/element_test_macros.rb +193 -0
  327. data/spec/support/part_test_macros.rb +27 -0
  328. data/spec/support/property_test_macros.rb +116 -0
  329. data/spec/support/style_test_macros.rb +33 -0
  330. data/spec/support/value_property_test_macros.rb +69 -0
  331. metadata +486 -0
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="utf-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="/word/styles.xml" Id="Rf06246a95c004384"/><Relationship Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings" Target="/word/settings.xml" Id="R1efaa81aac7a4831"/></Relationships>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="utf-8" standalone="yes"?><w:settings xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"/>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="utf-8" standalone="yes"?><w:styles xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:docDefaults><w:rPrDefault><w:rPr><w:lang w:bidi="ar-SA" w:eastAsia="en-US" w:val="en-US"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:after="0" w:line="240" w:lineRule="auto"/></w:pPr></w:pPrDefault></w:docDefaults></w:styles>
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="utf-8" standalone="yes"?>
2
+ <w:styles xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
3
+ <w:docDefaults>
4
+ <w:rPrDefault>
5
+ <w:rPr>
6
+ <w:lang w:bidi="ar-SA" w:eastAsia="en-US" w:val="en-US"/>
7
+ </w:rPr>
8
+ </w:rPrDefault>
9
+ <w:pPrDefault>
10
+ <w:pPr>
11
+ <w:spacing w:after="0" w:line="240" w:lineRule="auto"/>
12
+ </w:pPr>
13
+ </w:pPrDefault>
14
+ </w:docDefaults>
15
+ <w:style w:styleId="coolStyle" w:type="paragraph">
16
+ <w:pPr>
17
+ <w:jc w:val="start"/>
18
+ </w:pPr>
19
+ </w:style>
20
+ </w:styles>
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0"?>
2
+ <styleFoo xmlns:w="http://wnamespace.com">
3
+ <w:style w:styleId="anotherCoolStyle" w:type="character">
4
+ <w:name w:val="anotherCoolStyle"/>
5
+ <w:pPr/>
6
+ <w:rPr>
7
+ <w:rFonts w:ascii="Times New Roman" w:cs="Times New Roman" w:hAnsi="Times New Roman"/>
8
+ <w:color w:val="FF0000"/>
9
+ <w:sz w:val="20"/>
10
+ <w:b w:val="0"/>
11
+ <w:i w:val="0"/>
12
+ <w:u w:val="none"/>
13
+ </w:rPr>
14
+ </w:style>
15
+ </styleFoo>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0"?>
2
+ <styleFoo xmlns:w="http://wnamespace.com">
3
+ <w:style w:styleId="coolStyle" w:type="paragraph">
4
+ <w:name w:val="coolStyle"/>
5
+ <w:pPr>
6
+ <w:ind w:firstLine="0" w:left="0" w:right="0"/>
7
+ <w:jc w:val="left"/>
8
+ </w:pPr>
9
+ <w:rPr/>
10
+ </w:style>
11
+ </styleFoo>
@@ -0,0 +1,193 @@
1
+ module ElementTestMacros
2
+
3
+ def element_xml(part)
4
+ File.read(File.join(File.dirname(__FILE__), "data", "elements", "#{part}_element.xml")).strip
5
+ end
6
+
7
+ def xml(obj)
8
+ doc = Nokogiri::XML::Builder.new do |xml|
9
+ xml.root("xmlns:w" => "http://wnamespace.org") {
10
+ obj.to_xml(xml)
11
+ }
12
+ end.to_xml
13
+ doc_pattern =~ doc ? $1 : ""
14
+ end
15
+
16
+ def doc_pattern
17
+ /<\?xml\sversion="1.0"\?>\n<root xmlns:w="http:\/\/wnamespace.org">\n\s+([^\s].+)\n<\/root>/m
18
+ end
19
+
20
+ def self.included(base)
21
+ attr_reader :instance, :attribute, :value, :args
22
+ base.extend ClassMethods
23
+ end
24
+
25
+ module ClassMethods
26
+
27
+ def it_should_output_correct_xml(node_xml: nil)
28
+ it "should be able to output the correct XML" do
29
+ if node_xml.nil?
30
+ node_xml = described_class.to_s.split(/::/).last
31
+ node_xml = node_xml.gsub(/(.)([A-Z])/, '\1_\2').downcase
32
+ end
33
+
34
+ generated_xml = Nokogiri::XML::Builder.new do |xml|
35
+ xml.root("xmlns:w" => "http://wnamespace.org") {
36
+ instance.to_xml(xml)
37
+ }
38
+ end.to_xml
39
+
40
+ expect(generated_xml).to eq(element_xml(node_xml) + "\n")
41
+ end
42
+ end
43
+
44
+ def it_should_use(tag: nil, name: nil, value: nil)
45
+ context "always" do
46
+ before(:each) do
47
+ if value.nil?
48
+ @instance = described_class.new
49
+ else
50
+ @instance = described_class.new(*value)
51
+ end
52
+ end
53
+
54
+ it "should use the correct tag" do
55
+ expect(instance.tag).to eq(tag)
56
+ end
57
+
58
+ it "should use the correct name" do
59
+ expect(instance.name).to eq(name)
60
+ end
61
+ end
62
+ end
63
+
64
+ def for_attribute(attribute, &block)
65
+ attribute_context = context "for the #{attribute} attribute" do
66
+ before(:each) do
67
+ @attribute = attribute
68
+ end
69
+ end
70
+
71
+ attribute_context.class_eval &block
72
+ end
73
+
74
+ def with_value(value, &block)
75
+ value_context = context "with the value as #{value}" do
76
+ before(:each) do
77
+ @value = value
78
+ end
79
+ end
80
+
81
+ value_context.class_eval &block
82
+ end
83
+
84
+ def it_should_assign_successfully(*args)
85
+ it "should assign successfully" do
86
+ expect do
87
+ obj = described_class.new *args
88
+ obj.send "#{attribute}=", value
89
+ end.to_not raise_error
90
+ end
91
+ end
92
+
93
+ def it_should_raise_an_exception
94
+ it "should raise an exception" do
95
+ expect do
96
+ obj = described_class.new
97
+ obj.send "#{attribute}=", value
98
+ end.to raise_error(ArgumentError)
99
+ end
100
+ end
101
+
102
+ def it_should_output(expected_xml, *args, assign: true)
103
+ it "should output the correct XML" do
104
+ if assign
105
+ @instance = described_class.new *args
106
+ instance.send "#{attribute}=", value
107
+ end
108
+
109
+ expect(xml(instance)).to eq(expected_xml)
110
+ end
111
+ end
112
+
113
+ def with_no_attributes_set(args: nil, &block)
114
+ attribute_context = context "with no attributes set, it" do
115
+ before(:each) do
116
+ @instance = described_class.new *Array(args)
117
+ end
118
+ end
119
+
120
+ attribute_context.class_eval &block
121
+ end
122
+
123
+ def with_these_attributes_set(attributes, &block)
124
+ args = attributes.delete(:args)
125
+ attribute_context = context "with valid attributes set" do
126
+ before(:each) do
127
+ @instance = described_class.new *Array(args)
128
+ attributes.each do |attr, val|
129
+ instance.send "#{attr}=", val
130
+ end
131
+ end
132
+ end
133
+
134
+ attribute_context.class_eval &block
135
+ end
136
+
137
+ def it_should_have_property(property, as_instance_of: nil)
138
+ as_instance_of ||= property
139
+
140
+ context "this class" do
141
+ before(:each) do
142
+ @instance = described_class.new
143
+ end
144
+
145
+ it "should have the #{property} method defined" do
146
+ expect(instance.respond_to?(property)).to be(true)
147
+ end
148
+
149
+ it "should have #{property} return an instance of #{as_instance_of}" do
150
+ class_name = as_instance_of.to_s.split("_").map(&:capitalize).join
151
+ prop_class = OpenXml::Docx::Properties.const_get class_name
152
+ expect(instance.public_send(property)).to be_instance_of(prop_class)
153
+ end
154
+ end
155
+ end
156
+
157
+ def it_should_have_value_property(property, as_instance_of: nil, with_value: nil)
158
+ as_instance_of ||= property
159
+
160
+ context "this class" do
161
+ before(:each) do
162
+ @instance = described_class.new *Array(args)
163
+ end
164
+
165
+ it "should have the #{property} method defined" do
166
+ expect(instance.respond_to?("#{property}")).to be(true)
167
+ end
168
+
169
+ it "should have the #{property}= method defined" do
170
+ expect(instance.respond_to?("#{property}=")).to be(true)
171
+ end
172
+
173
+ it "should have #{property} return an instance of #{as_instance_of}" do
174
+ instance.public_send "#{property}=", with_value
175
+ class_name = as_instance_of.to_s.split("_").map(&:capitalize).join
176
+ prop_class = OpenXml::Docx::Properties.const_get class_name
177
+ expect(instance.public_send(property)).to be_instance_of(prop_class)
178
+ end
179
+ end
180
+ end
181
+
182
+ def with_arguments(*args, &block)
183
+ arg_context = context "" do
184
+ before(:each) do
185
+ @args = args
186
+ end
187
+ end
188
+
189
+ arg_context.class_eval &block
190
+ end
191
+ end
192
+
193
+ end
@@ -0,0 +1,27 @@
1
+ module PartTestMacros
2
+
3
+ def xml(part)
4
+ File.read(File.join(File.dirname(__FILE__), "data", "parts", "#{part}_part.xml")).lines.map(&:strip).join
5
+ end
6
+
7
+ def self.included(base)
8
+ attr_reader :doc
9
+ base.extend ClassMethods
10
+ end
11
+
12
+ module ClassMethods
13
+
14
+ def it_should_output_correct_xml(part: nil)
15
+ it "should be able to output the correct XML" do
16
+ if part.nil?
17
+ part = described_class.to_s.split(/::/).last
18
+ part = part.gsub(/(.)([A-Z])/, '\1_\2').downcase
19
+ end
20
+
21
+ expect(doc.read).to eq(xml(part))
22
+ end
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,116 @@
1
+ module PropertyTestMacros
2
+
3
+ def xml(obj)
4
+ doc = Nokogiri::XML::Builder.new do |xml|
5
+ xml.root("xmlns:w" => "http://wnamespace.org") {
6
+ obj.to_xml(xml)
7
+ }
8
+ end.to_xml
9
+ doc_pattern =~ doc ? $1 : ""
10
+ end
11
+
12
+ def doc_pattern
13
+ /<\?xml\sversion="1.0"\?>\n<root xmlns:w="http:\/\/wnamespace.org">\n\s+([^\s].+)\n<\/root>/m
14
+ end
15
+
16
+ def self.included(base)
17
+ attr_reader :instance, :value, :attribute
18
+ base.extend ClassMethods
19
+ end
20
+
21
+ module ClassMethods
22
+
23
+ def it_should_use(tag: nil, name: nil, value: nil)
24
+ context "always" do
25
+ before(:each) do
26
+ if value.nil?
27
+ @instance = described_class.new
28
+ else
29
+ @instance = described_class.new(*value)
30
+ end
31
+ end
32
+
33
+ it "should use the correct tag" do
34
+ expect(instance.tag).to eq(tag)
35
+ end
36
+
37
+ it "should use the correct name" do
38
+ expect(instance.name).to eq(name)
39
+ end
40
+ end
41
+ end
42
+
43
+ def it_should_output(expected_xml, *values, assign: true)
44
+ it "should output the correct XML" do
45
+ if assign
46
+ @instance = described_class.new *values
47
+ instance.send "#{attribute}=", value
48
+ end
49
+
50
+ expect(xml(instance)).to eq(expected_xml)
51
+ end
52
+ end
53
+
54
+ def for_attribute(attribute, &block)
55
+ attribute_context = context "for the #{attribute} attribute" do
56
+ before(:each) do
57
+ @attribute = attribute
58
+ end
59
+ end
60
+
61
+ attribute_context.class_eval &block
62
+ end
63
+
64
+ def with_value(value, &block)
65
+ value_context = context "with the value as #{value}" do
66
+ before(:each) do
67
+ @value = value
68
+ end
69
+ end
70
+
71
+ value_context.class_eval &block
72
+ end
73
+
74
+ def it_should_assign_successfully(*values)
75
+ it "should assign successfully" do
76
+ expect do
77
+ obj = described_class.new *values
78
+ obj.send "#{attribute}=", value
79
+ end.to_not raise_error
80
+ end
81
+ end
82
+
83
+ def it_should_raise_an_exception
84
+ it "should raise an exception" do
85
+ expect do
86
+ obj = described_class.new
87
+ obj.send "#{attribute}=", value
88
+ end.to raise_error(ArgumentError)
89
+ end
90
+ end
91
+
92
+ def with_no_attributes_set(&block)
93
+ attribute_context = context "with no attributes set" do
94
+ before(:each) do
95
+ @instance = described_class.new
96
+ end
97
+ end
98
+
99
+ attribute_context.class_eval &block
100
+ end
101
+
102
+ def with_these_attributes_set(attributes, &block)
103
+ attribute_context = context "with valid attributes set" do
104
+ before(:each) do
105
+ @instance = described_class.new
106
+ attributes.each do |attr, val|
107
+ instance.send "#{attr}=", val
108
+ end
109
+ end
110
+ end
111
+
112
+ attribute_context.class_eval &block
113
+ end
114
+
115
+ end
116
+ end
@@ -0,0 +1,33 @@
1
+ module StyleTestMacros
2
+
3
+ def xml(part)
4
+ File.read(File.join(File.dirname(__FILE__), "data", "styles", "#{part}_styles.xml")).strip
5
+ end
6
+
7
+ def self.included(base)
8
+ attr_reader :style
9
+ base.extend ClassMethods
10
+ end
11
+
12
+ module ClassMethods
13
+
14
+ def it_should_output_correct_xml(style_xml: nil)
15
+ it "should be able to output the correct XML" do
16
+ if style_xml.nil?
17
+ style_xml = described_class.to_s.split(/::/).last
18
+ style_xml = style_xml.gsub(/(.)([A-Z])/, '\1_\2').downcase
19
+ end
20
+
21
+ generated_xml = Nokogiri::XML::Builder.new do |xml|
22
+ xml.styleFoo("xmlns:w" => "http://wnamespace.com") {
23
+ style.build_xml(xml)
24
+ }
25
+ end.to_xml
26
+
27
+ expect(generated_xml).to eq(xml(style_xml) + "\n")
28
+ end
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,69 @@
1
+ module ValuePropertyTestMacros
2
+
3
+ def xml(obj)
4
+ doc = Nokogiri::XML::Builder.new do |xml|
5
+ xml.root("xmlns:w" => "http://wnamespace.org") {
6
+ obj.to_xml(xml)
7
+ }
8
+ end.to_xml
9
+ doc_pattern =~ doc ? $1 : ""
10
+ end
11
+
12
+ def doc_pattern
13
+ /<\?xml\sversion="1.0"\?>\n<root xmlns:w="http:\/\/wnamespace.org">\n\s+([^\s].+)\n<\/root>/m
14
+ end
15
+
16
+ def self.included(base)
17
+ attr_reader :instance, :value
18
+ base.extend ClassMethods
19
+ end
20
+
21
+ module ClassMethods
22
+
23
+ def it_should_use(tag: nil, name: nil, value: nil)
24
+ context "always" do
25
+ before(:each) do
26
+ @instance = described_class.new(value)
27
+ end
28
+
29
+ it "should use the correct tag" do
30
+ expect(instance.tag).to eq(tag)
31
+ end
32
+
33
+ it "should use the correct name" do
34
+ expect(instance.name).to eq(name)
35
+ end
36
+ end
37
+ end
38
+
39
+ def it_should_output(expected_xml)
40
+ it "should output the correct XML" do
41
+ @instance = described_class.new(value)
42
+ expect(xml(instance)).to eq(expected_xml)
43
+ end
44
+ end
45
+
46
+ def with_value(value, &block)
47
+ value_context = context "when the value is #{value.inspect}" do
48
+ before(:each) do
49
+ @value = value
50
+ end
51
+ end
52
+
53
+ value_context.class_eval &block
54
+ end
55
+
56
+ def it_should_work
57
+ it "should not raise an exception" do
58
+ expect { described_class.new(value) }.to_not raise_error
59
+ end
60
+ end
61
+
62
+ def it_should_not_work
63
+ it "should raise an exception" do
64
+ expect { described_class.new(value) }.to raise_error(ArgumentError)
65
+ end
66
+ end
67
+
68
+ end
69
+ end