goldendocx 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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