goldendocx 0.2.2 → 0.3.0

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 (84) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/.ruby-version +1 -0
  4. data/CHANGELOG.md +8 -2
  5. data/Gemfile.lock +3 -1
  6. data/README.md +10 -2
  7. data/Rakefile +14 -3
  8. data/demo/tables/create_embed_image_table.rb +3 -3
  9. data/demo/templates/generate_codes.rb +10 -0
  10. data/demo/templates/xml_to_class.rb +97 -0
  11. data/demo/texts/append_plain_text.rb +1 -1
  12. data/demo/texts/append_styled_text.rb +1 -2
  13. data/demo/texts/create_text.rb +14 -0
  14. data/lib/extensions/active_support_extensions.rb +16 -0
  15. data/lib/extensions/nokogiri_extensions.rb +41 -0
  16. data/lib/extensions/ox_extensions.rb +35 -0
  17. data/lib/extensions/xml_serialize_extensions.rb +45 -0
  18. data/lib/goldendocx/charts/properties.rb +1 -1
  19. data/lib/goldendocx/charts/series.rb +2 -2
  20. data/lib/goldendocx/charts.rb +1 -1
  21. data/lib/goldendocx/components/bar_chart.rb +2 -2
  22. data/lib/goldendocx/components/chart.rb +6 -6
  23. data/lib/goldendocx/components/column_chart.rb +2 -2
  24. data/lib/goldendocx/components/doughnut_chart.rb +2 -2
  25. data/lib/goldendocx/components/line_chart.rb +2 -2
  26. data/lib/goldendocx/components/properties/font_property.rb +19 -0
  27. data/lib/goldendocx/components/properties/language_property.rb +18 -0
  28. data/lib/goldendocx/components/properties/run_property.rb +2 -0
  29. data/lib/goldendocx/components/properties.rb +1 -1
  30. data/lib/goldendocx/components/table.rb +2 -2
  31. data/lib/goldendocx/components.rb +1 -1
  32. data/lib/goldendocx/content_types/default.rb +2 -6
  33. data/lib/goldendocx/content_types/override.rb +2 -6
  34. data/lib/goldendocx/document.rb +9 -28
  35. data/lib/goldendocx/documents/body.rb +23 -14
  36. data/lib/goldendocx/documents/document.rb +2 -4
  37. data/lib/goldendocx/documents/latent_styles.rb +12 -0
  38. data/lib/goldendocx/documents/properties/default_style_property.rb +17 -0
  39. data/lib/goldendocx/documents/properties/page_margin_property.rb +37 -0
  40. data/lib/goldendocx/documents/properties/page_size_property.rb +17 -0
  41. data/lib/goldendocx/documents/properties/paragraph_default_style_property.rb +16 -0
  42. data/lib/goldendocx/documents/properties/run_default_style_property.rb +22 -0
  43. data/lib/goldendocx/documents/properties/section_property.rb +17 -0
  44. data/lib/goldendocx/documents/properties/style_name_property.rb +16 -0
  45. data/lib/goldendocx/documents/properties.rb +12 -0
  46. data/lib/goldendocx/documents/settings.rb +23 -0
  47. data/lib/goldendocx/documents/style.rb +10 -10
  48. data/lib/goldendocx/documents/styles.rb +9 -33
  49. data/lib/goldendocx/documents.rb +1 -1
  50. data/lib/goldendocx/docx.rb +55 -12
  51. data/lib/goldendocx/element.rb +33 -140
  52. data/lib/goldendocx/has_associations.rb +54 -0
  53. data/lib/goldendocx/has_attributes.rb +67 -0
  54. data/lib/goldendocx/has_children.rb +116 -0
  55. data/lib/goldendocx/images/picture.rb +1 -1
  56. data/lib/goldendocx/images/properties.rb +1 -1
  57. data/lib/goldendocx/images.rb +1 -1
  58. data/lib/goldendocx/{documents → models}/relationship.rb +1 -1
  59. data/lib/goldendocx/models/relationships.rb +31 -0
  60. data/lib/goldendocx/models.rb +10 -0
  61. data/lib/goldendocx/parts/app.rb +46 -0
  62. data/lib/goldendocx/parts/content_types.rb +16 -30
  63. data/lib/goldendocx/parts/core.rb +46 -0
  64. data/lib/goldendocx/parts/documents.rb +27 -14
  65. data/lib/goldendocx/parts/media.rb +1 -1
  66. data/lib/goldendocx/parts/properties/created_at_property.rb +17 -0
  67. data/lib/goldendocx/parts/properties/creator_property.rb +16 -0
  68. data/lib/goldendocx/parts/properties/revision_property.rb +16 -0
  69. data/lib/goldendocx/parts/properties/updated_at_property.rb +17 -0
  70. data/lib/goldendocx/parts/properties/updater_property.rb +16 -0
  71. data/lib/goldendocx/parts/properties.rb +12 -0
  72. data/lib/goldendocx/parts.rb +1 -1
  73. data/lib/goldendocx/tables/header_cell.rb +1 -1
  74. data/lib/goldendocx/tables/properties.rb +1 -1
  75. data/lib/goldendocx/tables/row.rb +1 -1
  76. data/lib/goldendocx/tables.rb +1 -1
  77. data/lib/goldendocx/version.rb +1 -1
  78. data/lib/goldendocx/xml_serializers/nokogiri.rb +32 -24
  79. data/lib/goldendocx/xml_serializers/ox.rb +15 -25
  80. data/lib/goldendocx.rb +14 -2
  81. metadata +54 -9
  82. data/lib/goldendocx/documents/element.rb +0 -23
  83. data/lib/goldendocx/documents/relationships.rb +0 -39
  84. data/lib/goldendocx/documents/unparsed_style.rb +0 -17
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Parts
5
+ class Core
6
+ include Goldendocx::Document
7
+
8
+ TYPE = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties'
9
+ XML_PATH = 'docProps/core.xml'
10
+ NAMESPACE = 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties'
11
+ CONTENT_TYPE = 'application/vnd.openxmlformats-package.core-properties+xml'
12
+
13
+ concern_namespaces :cp, :dc, :dcterms, :dcmitype, :xsi
14
+
15
+ namespace :cp
16
+ tag :coreProperties
17
+
18
+ embeds_one :creator, class_name: 'Goldendocx::Parts::Properties::CreatorProperty'
19
+ embeds_one :created_at, class_name: 'Goldendocx::Parts::Properties::CreatedAtProperty'
20
+ embeds_one :revision, class_name: 'Goldendocx::Parts::Properties::RevisionProperty'
21
+ embeds_one :updater, class_name: 'Goldendocx::Parts::Properties::UpdaterProperty'
22
+ embeds_one :updated_at, class_name: 'Goldendocx::Parts::Properties::UpdatedAtProperty'
23
+
24
+ class << self
25
+ def read_from(xml_node)
26
+ core = super(xml_node)
27
+ revision = (core.revision || core.build_revision)
28
+ revision.value = revision.value.to_i + 1
29
+ core.build_updater(name: "Goldendocx_#{Goldendocx::VERSION}")
30
+ core.build_updated_at(timestamp: Time.now)
31
+ core
32
+ end
33
+ end
34
+
35
+ def initialize
36
+ build_creator(name: "Goldendocx_#{Goldendocx::VERSION}")
37
+ build_created_at(timestamp: Time.now)
38
+ end
39
+
40
+ def write_to(zos)
41
+ zos.put_next_entry XML_PATH
42
+ zos.write to_document_xml
43
+ end
44
+ end
45
+ end
46
+ end
@@ -4,37 +4,50 @@
4
4
  module Goldendocx
5
5
  module Parts
6
6
  class Documents
7
+ include Goldendocx::HasAssociations
8
+
7
9
  XML_PATH = 'word/'
10
+ RELATIONSHIPS_XML_PATH = 'word/_rels/document.xml.rels'
8
11
 
9
12
  attr_reader :document, # document.xml
10
- :styles, # styles.xml
11
- :relationships, # _rels/document.xml.rels
12
13
  :charts, # charts/
13
14
  :medias # New Medias to media/
14
15
 
15
16
  attr_accessor :media_amount # Entries amount in directory media/ for generating relationship id
16
17
 
18
+ relationships_at RELATIONSHIPS_XML_PATH
19
+ associate :styles, class_name: 'Goldendocx::Documents::Styles'
20
+ associate :settings, class_name: 'Goldendocx::Documents::Settings'
21
+ associate :document, class_name: 'Goldendocx::Documents::Document', isolate: true
22
+
17
23
  class << self
18
24
  def read_from(docx_file)
19
25
  parts = Goldendocx::Parts::Documents.new
20
- parts.document.read_from(docx_file)
21
- parts.styles.read_from(docx_file)
22
- parts.relationships.read_from(docx_file)
26
+ parts.read_relationships(docx_file)
27
+ parts.read_associations(docx_file)
23
28
  parts.media_amount = docx_file.entries.count { |entry| entry.name.start_with?('word/media/') }
24
29
  parts
25
30
  end
26
31
  end
27
32
 
28
33
  def initialize
29
- @document = Goldendocx::Documents::Document.new
30
- @styles = Goldendocx::Documents::Styles.new
31
- @relationships = Goldendocx::Documents::Relationships.new
34
+ associations.each do |association, options|
35
+ association_class = options.class_name.constantize
36
+ instance_variable_set("@#{association}", association_class.new)
37
+ add_relationship association_class::TYPE, association_class::XML_PATH.gsub(XML_PATH, '') unless options.isolate
38
+ end
39
+
32
40
  @medias = []
41
+ @media_amount = 0
33
42
  end
34
43
 
35
44
  def write_stream(zos)
36
- styles.write_to(zos)
37
- relationships.write_to(zos)
45
+ write_relationships(zos)
46
+
47
+ associations.each_key do |association|
48
+ send(association).write_to(zos)
49
+ end
50
+
38
51
  document.write_to(zos)
39
52
  medias.each { |media| media.write_to(zos) }
40
53
  document.body.charts.each { |chart| chart.write_to(zos) }
@@ -60,14 +73,14 @@ module Goldendocx
60
73
 
61
74
  def create_image(image_data, options = {})
62
75
  image_media = add_image_media(image_data, options)
63
- relationship_id = relationships.add_relationship(image_media.type, image_media.target)
76
+ relationship_id = add_relationship(image_media.type, image_media.target)
64
77
 
65
78
  document.body.create_image(relationship_id, options)
66
79
  end
67
80
 
68
81
  def create_embed_image(image_data, options = {})
69
82
  image_media = add_image_media(image_data, options)
70
- relationship_id = relationships.add_relationship(image_media.type, image_media.target)
83
+ relationship_id = add_relationship(image_media.type, image_media.target)
71
84
 
72
85
  document.body.create_embed_image(relationship_id, options)
73
86
  end
@@ -87,12 +100,12 @@ module Goldendocx
87
100
 
88
101
  chart_id = document.body.charts.size + 1
89
102
 
90
- relationship_id = relationships.add_relationship(
103
+ relationship_id = add_relationship(
91
104
  Goldendocx::Charts::RELATIONSHIP_TYPE,
92
105
  format(Goldendocx::Charts::RELATIONSHIP_NAME_PATTERN, id: chart_id)
93
106
  )
94
107
 
95
- document.body.create_chart(chart_type, chart_id, relationship_id, width: width, height: height)
108
+ document.body.create_chart(chart_type, chart_id, relationship_id, width:, height:)
96
109
  end
97
110
 
98
111
  def add_style(fragment)
@@ -7,7 +7,7 @@ module Goldendocx
7
7
  BASE64_PNG_PATTERN = %r{
8
8
  ^data:image/png;base64,
9
9
  (?<data>(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?)$
10
- }x.freeze
10
+ }x
11
11
 
12
12
  def initialize(name, data)
13
13
  @name = name
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Parts
5
+ module Properties
6
+ class CreatedAtProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :dcterms
10
+ tag :created
11
+
12
+ attribute :type, namespace: :xsi, default: 'dcterms:W3CDTF'
13
+ embeds_one :timestamp, class_name: 'Time'
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Parts
5
+ module Properties
6
+ class CreatorProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :dc
10
+ tag :creator
11
+
12
+ embeds_one :name, class_name: 'String'
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Parts
5
+ module Properties
6
+ class RevisionProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :cp
10
+ tag :revision
11
+
12
+ embeds_one :value, class_name: 'Integer'
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Parts
5
+ module Properties
6
+ class UpdatedAtProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :dcterms
10
+ tag :modified
11
+
12
+ attribute :type, namespace: :xsi, default: 'dcterms:W3CDTF'
13
+ embeds_one :timestamp, class_name: 'Time'
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Parts
5
+ module Properties
6
+ class UpdaterProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :cp
10
+ tag :lastModifiedBy
11
+
12
+ embeds_one :name, class_name: 'String'
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Parts
5
+ module Properties
6
+ end
7
+ end
8
+ end
9
+
10
+ Dir.glob(File.join(File.dirname(__FILE__), 'properties', '*.rb').to_s).each do |file|
11
+ require file
12
+ end
@@ -5,6 +5,6 @@ module Goldendocx
5
5
  end
6
6
  end
7
7
 
8
- Dir.glob(File.join(File.dirname(__FILE__), 'parts', '*.rb').to_s).sort.each do |file|
8
+ Dir.glob(File.join(File.dirname(__FILE__), 'parts', '*.rb').to_s).each do |file|
9
9
  require file
10
10
  end
@@ -9,7 +9,7 @@ module Goldendocx
9
9
  end
10
10
 
11
11
  def width=(width, type: :dxa)
12
- property.width.assign_attributes(width: width, type: type)
12
+ property.width.assign_attributes(width:, type:)
13
13
  end
14
14
  end
15
15
  end
@@ -7,6 +7,6 @@ module Goldendocx
7
7
  end
8
8
  end
9
9
 
10
- Dir.glob(File.join(File.dirname(__FILE__), 'properties', '*.rb').to_s).sort.each do |file|
10
+ Dir.glob(File.join(File.dirname(__FILE__), 'properties', '*.rb').to_s).each do |file|
11
11
  require file
12
12
  end
@@ -18,7 +18,7 @@ module Goldendocx
18
18
  def add_cell(data)
19
19
  cell = case data
20
20
  when Goldendocx::Tables::Cell then data
21
- when Hash then Goldendocx::Tables::Cell.new(data)
21
+ when Hash then Goldendocx::Tables::Cell.new(**data)
22
22
  else Goldendocx::Tables::Cell.new(content: data.to_s)
23
23
  end
24
24
  cells << cell
@@ -14,6 +14,6 @@ require 'goldendocx/tables/properties'
14
14
  require 'goldendocx/tables/row'
15
15
  require 'goldendocx/tables/cell'
16
16
 
17
- Dir.glob(File.join(File.dirname(__FILE__), 'tables', '*.rb').to_s).sort.each do |file|
17
+ Dir.glob(File.join(File.dirname(__FILE__), 'tables', '*.rb').to_s).each do |file|
18
18
  require file
19
19
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Goldendocx
4
- VERSION = '0.2.2'
4
+ VERSION = '0.3.0'
5
5
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'nokogiri'
3
+ require 'extensions/nokogiri_extensions'
4
4
 
5
5
  module Goldendocx
6
6
  module XmlSerializers
@@ -11,19 +11,33 @@ module Goldendocx
11
11
  options.no_declaration
12
12
  end
13
13
 
14
- def parse(xml, paths = [])
15
- xml = ::Nokogiri::XML(xml)
16
- # Should with namespaces
17
- xml = xml.xpath(paths.map { |path| path.include?(':') || path == '*' ? path : ['xmlns', path].join(':') }.join('/')) unless paths.empty?
18
- xml
14
+ # TODO: Nokogiri namespace is soooo strict....
15
+ # TODO: To read nokogiri source codes and try to understand how it works
16
+ def parse(xml)
17
+ document = ::Nokogiri::XML(xml)
18
+
19
+ missing_namespaces = document.errors.filter_map do |error|
20
+ error.str1 if error.message.match?('Namespace.*not defined')
21
+ end.uniq.compact
22
+ return document if missing_namespaces.blank?
23
+
24
+ wrap_document(document, missing_namespaces)
25
+ end
26
+
27
+ def search(node, paths)
28
+ return node if paths.blank?
29
+
30
+ search_paths = paths.map { |path| path.include?(':') || path == '*' ? path : ['xmlns', path].join(':') }
31
+ namespaces = node.namespaces.merge(node.document.namespaces)
32
+ node.xpath(search_paths.join('/'), namespaces)
19
33
  end
20
34
 
21
- def build_xml(tag, &block)
22
- build_element(tag, &block).to_xml(indent: 0, save_with: DEFAULT_BUILD_OPTIONS).delete("\n")
35
+ def build_xml(tag, &)
36
+ CGI.unescapeHTML build_element(tag, &).to_xml(indent: 0, save_with: DEFAULT_BUILD_OPTIONS).delete("\n")
23
37
  end
24
38
 
25
- def build_document_xml(tag, namespaces = [], ignore_namespaces = [], &block)
26
- build_document(tag, namespaces, ignore_namespaces, &block).to_xml(indent: 0).delete("\n")
39
+ def build_document_xml(tag, namespaces = [], ignore_namespaces = [], &)
40
+ CGI.unescapeHTML build_document(tag, namespaces, ignore_namespaces, &).to_xml(indent: 0).delete("\n")
27
41
  end
28
42
 
29
43
  def build_document(tag, namespaces = [], ignore_namespaces = [])
@@ -41,25 +55,19 @@ module Goldendocx
41
55
 
42
56
  def build_element(tag, parent: nil)
43
57
  parent ||= ::Nokogiri::XML('<?xml version="1.0"')
44
- ::Nokogiri::XML::Node.new(tag, parent).tap do |element|
58
+ ::Nokogiri::XML::Node.new(tag.to_s, parent).tap do |element|
45
59
  yield(element) if block_given?
46
60
  end
47
61
  end
48
- end
49
- end
50
- end
51
- end
52
62
 
53
- # FIXME: Temporarily here to provider syntactic sugar
54
- module Nokogiri
55
- module XML
56
- class Node
57
- def <<(node_or_tags)
58
- # FIXME: Add this line to transform element implicitly
59
- node_or_tags = node_or_tags.public_send(:to_element, parent: self) if node_or_tags.respond_to?(:to_element)
63
+ private
60
64
 
61
- add_child(node_or_tags)
62
- self
65
+ def wrap_document(document, missing_namespaces)
66
+ missing_namespaces.each do |ns|
67
+ document.root.add_namespace ns, (Goldendocx::NAMESPACES[ns.to_sym] || "#{ns}:goldendocx")
68
+ end
69
+ ::Nokogiri::XML(document.to_xml(indent: 0).delete("\n"))
70
+ end
63
71
  end
64
72
  end
65
73
  end
@@ -1,24 +1,30 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ox'
3
+ require 'extensions/ox_extensions'
4
4
 
5
5
  module Goldendocx
6
6
  module XmlSerializers
7
- class Ox
7
+ module Ox
8
8
  class << self
9
9
  def parse(xml, paths = [])
10
10
  xml = ::Ox.parse(xml)
11
- xml = xml.locate(paths.join('/')) unless paths.empty?
12
- xml
11
+ xml = ::Ox::Document.new.tap { |document| document << xml } unless xml.is_a?(::Ox::Document)
12
+ search(xml, paths)
13
13
  end
14
14
 
15
- def build_xml(tag, &block)
16
- xml = build_element(tag, &block)
17
- ::Ox.dump(xml, indent: -1, with_xml: true)
15
+ def search(node, paths)
16
+ return node if paths.blank?
17
+
18
+ node.locate(paths.join('/'))
18
19
  end
19
20
 
20
- def build_document_xml(tag, namespaces = [], ignore_namespaces = [], &block)
21
- xml = build_document(tag, namespaces, ignore_namespaces, &block)
21
+ def build_xml(tag, &)
22
+ xml = build_element(tag, &)
23
+ ::Ox.dump(xml, indent: -1, with_xml: true, encoding: 'UTF-8')
24
+ end
25
+
26
+ def build_document_xml(tag, namespaces = [], ignore_namespaces = [], &)
27
+ xml = build_document(tag, namespaces, ignore_namespaces, &)
22
28
  ::Ox.dump(xml, indent: -1, with_xml: true)
23
29
  end
24
30
 
@@ -45,19 +51,3 @@ module Goldendocx
45
51
  end
46
52
  end
47
53
  end
48
-
49
- # FIXME: Temporarily here to provider syntactic sugar
50
- module Ox
51
- class Element
52
- def <<(node)
53
- # FIXME: Add this line to transform element implicitly
54
- node = node.public_send(:to_element) if node.respond_to?(:to_element)
55
-
56
- raise 'argument to << must be a String or Ox::Node.' unless node.is_a?(String) || node.is_a?(Node)
57
-
58
- @nodes = [] if !instance_variable_defined?(:@nodes) || @nodes.nil?
59
- @nodes << node
60
- self
61
- end
62
- end
63
- end
data/lib/goldendocx.rb CHANGED
@@ -1,9 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'zip'
4
+ require 'extensions/active_support_extensions'
5
+ require 'extensions/xml_serialize_extensions'
4
6
 
5
7
  require 'goldendocx/version'
6
- require 'goldendocx/docx'
7
8
 
8
9
  module Goldendocx
9
10
  autoload :Configuration, 'goldendocx/configuration'
@@ -13,6 +14,7 @@ module Goldendocx
13
14
  a14: 'http://schemas.microsoft.com/office/drawing/2010/main',
14
15
  c: 'http://schemas.openxmlformats.org/drawingml/2006/chart',
15
16
  c14: 'http://schemas.microsoft.com/office/drawing/2007/8/2/chart',
17
+ cp: 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',
16
18
  cx: 'http://schemas.microsoft.com/office/drawing/2014/chartex',
17
19
  cx1: 'http://schemas.microsoft.com/office/drawing/2015/9/8/chartex',
18
20
  cx2: 'http://schemas.microsoft.com/office/drawing/2015/10/21/chartex',
@@ -22,6 +24,9 @@ module Goldendocx
22
24
  cx6: 'http://schemas.microsoft.com/office/drawing/2016/5/12/chartex',
23
25
  cx7: 'http://schemas.microsoft.com/office/drawing/2016/5/13/chartex',
24
26
  cx8: 'http://schemas.microsoft.com/office/drawing/2016/5/14/chartex',
27
+ dc: 'http://purl.org/dc/elements/1.1/',
28
+ dcmitype: 'http://purl.org/dc/dcmitype/',
29
+ dcterms: 'http://purl.org/dc/terms/',
25
30
  m: 'http://schemas.openxmlformats.org/officeDocument/2006/math',
26
31
  mc: 'http://schemas.openxmlformats.org/markup-compatibility/2006',
27
32
  mo: 'http://schemas.microsoft.com/office/mac/office/2008/main',
@@ -43,7 +48,8 @@ module Goldendocx
43
48
  wpc: 'http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas',
44
49
  wpg: 'http://schemas.microsoft.com/office/word/2010/wordprocessingGroup',
45
50
  wpi: 'http://schemas.microsoft.com/office/word/2010/wordprocessingInk',
46
- wps: 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape'
51
+ wps: 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',
52
+ xsi: 'http://www.w3.org/2001/XMLSchema-instance'
47
53
  }.freeze
48
54
 
49
55
  class << self
@@ -70,3 +76,9 @@ module Goldendocx
70
76
  end
71
77
  end
72
78
  end
79
+
80
+ require 'goldendocx/units'
81
+ require 'goldendocx/element'
82
+ require 'goldendocx/document'
83
+ require 'goldendocx/has_associations'
84
+ require 'goldendocx/docx'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: goldendocx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - WangYuechen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-29 00:00:00.000000000 Z
11
+ date: 2023-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
166
  version: 0.8.0
167
+ - !ruby/object:Gem::Dependency
168
+ name: timecop
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: 0.9.6
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: 0.9.6
167
181
  description: Ruby APIs for manipulating Microsoft Word based upon OOXML standards.
168
182
  email:
169
183
  - 291943739@qq.com
@@ -173,6 +187,7 @@ extra_rdoc_files: []
173
187
  files:
174
188
  - ".rspec"
175
189
  - ".rubocop.yml"
190
+ - ".ruby-version"
176
191
  - CHANGELOG.md
177
192
  - Gemfile
178
193
  - Gemfile.lock
@@ -190,13 +205,20 @@ files:
190
205
  - demo/tables/create_styled_table.rb
191
206
  - demo/templates/bg.png
192
207
  - demo/templates/blankDocument.docx
208
+ - demo/templates/generate_codes.rb
193
209
  - demo/templates/image_base64
194
210
  - demo/templates/styles/reportLabel
195
211
  - demo/templates/styles/reportSubTitle
196
212
  - demo/templates/styles/reportTable
197
213
  - demo/templates/styles/reportTitle
214
+ - demo/templates/xml_to_class.rb
198
215
  - demo/texts/append_plain_text.rb
199
216
  - demo/texts/append_styled_text.rb
217
+ - demo/texts/create_text.rb
218
+ - lib/extensions/active_support_extensions.rb
219
+ - lib/extensions/nokogiri_extensions.rb
220
+ - lib/extensions/ox_extensions.rb
221
+ - lib/extensions/xml_serialize_extensions.rb
200
222
  - lib/goldendocx.rb
201
223
  - lib/goldendocx/charts.rb
202
224
  - lib/goldendocx/charts/category_axis.rb
@@ -247,11 +269,13 @@ files:
247
269
  - lib/goldendocx/components/properties/color_property.rb
248
270
  - lib/goldendocx/components/properties/drawing.rb
249
271
  - lib/goldendocx/components/properties/extents_property.rb
272
+ - lib/goldendocx/components/properties/font_property.rb
250
273
  - lib/goldendocx/components/properties/graphic_data_property.rb
251
274
  - lib/goldendocx/components/properties/graphic_frame_locks_property.rb
252
275
  - lib/goldendocx/components/properties/graphic_frame_property.rb
253
276
  - lib/goldendocx/components/properties/graphic_property.rb
254
277
  - lib/goldendocx/components/properties/inline.rb
278
+ - lib/goldendocx/components/properties/language_property.rb
255
279
  - lib/goldendocx/components/properties/non_visual_property.rb
256
280
  - lib/goldendocx/components/properties/padding_property.rb
257
281
  - lib/goldendocx/components/properties/property.rb
@@ -268,14 +292,23 @@ files:
268
292
  - lib/goldendocx/documents.rb
269
293
  - lib/goldendocx/documents/body.rb
270
294
  - lib/goldendocx/documents/document.rb
271
- - lib/goldendocx/documents/element.rb
272
- - lib/goldendocx/documents/relationship.rb
273
- - lib/goldendocx/documents/relationships.rb
295
+ - lib/goldendocx/documents/latent_styles.rb
296
+ - lib/goldendocx/documents/properties.rb
297
+ - lib/goldendocx/documents/properties/default_style_property.rb
298
+ - lib/goldendocx/documents/properties/page_margin_property.rb
299
+ - lib/goldendocx/documents/properties/page_size_property.rb
300
+ - lib/goldendocx/documents/properties/paragraph_default_style_property.rb
301
+ - lib/goldendocx/documents/properties/run_default_style_property.rb
302
+ - lib/goldendocx/documents/properties/section_property.rb
303
+ - lib/goldendocx/documents/properties/style_name_property.rb
304
+ - lib/goldendocx/documents/settings.rb
274
305
  - lib/goldendocx/documents/style.rb
275
306
  - lib/goldendocx/documents/styles.rb
276
- - lib/goldendocx/documents/unparsed_style.rb
277
307
  - lib/goldendocx/docx.rb
278
308
  - lib/goldendocx/element.rb
309
+ - lib/goldendocx/has_associations.rb
310
+ - lib/goldendocx/has_attributes.rb
311
+ - lib/goldendocx/has_children.rb
279
312
  - lib/goldendocx/images.rb
280
313
  - lib/goldendocx/images/picture.rb
281
314
  - lib/goldendocx/images/properties.rb
@@ -292,10 +325,21 @@ files:
292
325
  - lib/goldendocx/images/properties/stretch_property.rb
293
326
  - lib/goldendocx/images/properties/transform_property.rb
294
327
  - lib/goldendocx/images/shape.rb
328
+ - lib/goldendocx/models.rb
329
+ - lib/goldendocx/models/relationship.rb
330
+ - lib/goldendocx/models/relationships.rb
295
331
  - lib/goldendocx/parts.rb
332
+ - lib/goldendocx/parts/app.rb
296
333
  - lib/goldendocx/parts/content_types.rb
334
+ - lib/goldendocx/parts/core.rb
297
335
  - lib/goldendocx/parts/documents.rb
298
336
  - lib/goldendocx/parts/media.rb
337
+ - lib/goldendocx/parts/properties.rb
338
+ - lib/goldendocx/parts/properties/created_at_property.rb
339
+ - lib/goldendocx/parts/properties/creator_property.rb
340
+ - lib/goldendocx/parts/properties/revision_property.rb
341
+ - lib/goldendocx/parts/properties/updated_at_property.rb
342
+ - lib/goldendocx/parts/properties/updater_property.rb
299
343
  - lib/goldendocx/tables.rb
300
344
  - lib/goldendocx/tables/cell.rb
301
345
  - lib/goldendocx/tables/header_cell.rb
@@ -324,7 +368,8 @@ files:
324
368
  homepage: https://github.com/SheldonLeo/goldendocx
325
369
  licenses:
326
370
  - Nonstandard
327
- metadata: {}
371
+ metadata:
372
+ rubygems_mfa_required: 'true'
328
373
  post_install_message:
329
374
  rdoc_options: []
330
375
  require_paths:
@@ -333,14 +378,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
333
378
  requirements:
334
379
  - - ">="
335
380
  - !ruby/object:Gem::Version
336
- version: 2.7.0
381
+ version: '3.2'
337
382
  required_rubygems_version: !ruby/object:Gem::Requirement
338
383
  requirements:
339
384
  - - ">="
340
385
  - !ruby/object:Gem::Version
341
386
  version: '0'
342
387
  requirements: []
343
- rubygems_version: 3.3.23
388
+ rubygems_version: 3.4.1
344
389
  signing_key:
345
390
  specification_version: 4
346
391
  summary: The Ruby API for Microsoft Word