standard-procedure-consolidate 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5647faddeab8829e8494e02b4b87acc33276e7f293fa147f3b15b1dd2a6d4c09
4
- data.tar.gz: e867ef111010caa13eef6da80f11ccaa7ee0d780f82309a8f4d976bcff058545
3
+ metadata.gz: b2d1794f2a364e867d285325c3a0dd9b5c6b4716145d5eaf964c91c44e937e5c
4
+ data.tar.gz: 6622d19bc3de12fe8d77775b579c1531a057a27bacf227b0b119a252e7fd0003
5
5
  SHA512:
6
- metadata.gz: 3f7e9ebff0ec1706b59983eb8b1f32132e58af066f3e4de56a4e05c55ea2f365a236cc513e5571930cd0173ddaebd6329a7d628cb5a137b0ac1b1b365f1d5672
7
- data.tar.gz: cab09a1aa8f2338b24397fd2eb2252c4244b4890dd965581657fcd025197948a9290896e0fa519ab782719f25b34f292e17f44de3c15f13329b1fe964550162b
6
+ metadata.gz: bb6944c739e5d772a45076b86f5c08d299913575027845ba505aa76b4ade18e3ecb47efe77f4499ac2a01f8782fcbf797b7dde9d00fb479716ac0b927288c9b4
7
+ data.tar.gz: b9c10360e43007c6cd523ad238664786f2aa0884e524349d451989646e05f3f59569821e7361a8f4c553dad182ca61588629d108359b08953287bddf62f8533c
data/CHANGELOG.md CHANGED
@@ -1,15 +1,26 @@
1
+ ## [0.1.3] - 2023-09-07
1
2
 
2
- ## [Unreleased]
3
+ Customer had an issue where some fields were not merging correctly
3
4
 
4
- ## [0.1.0] - 2023-07-25
5
+ - Altered the code so it tries to perform the substitution in all .xml files that aren't obviously configuration data
6
+ - Added verbose option to show what the code was doing
7
+ - Added a list of files to `examine`
8
+ - Still no tests for the header/footer support
5
9
 
6
- - Initial release
10
+ ## [0.1.2] - 2023-08-23
11
+
12
+ - Added untested support for headers and footers
13
+ - this work was done in a rush to deal with a customer requirement - tests to come soon
7
14
 
8
15
  ## [0.1.1] - 2023-08-02
9
16
 
10
17
  - Added `examine` to list the merge fields within a document
11
18
 
12
- ## [0.1.2] - 2023-08-23
19
+ ## [0.1.0] - 2023-07-25
20
+
21
+ - Initial release
22
+
23
+ ## [Unreleased]
24
+
25
+
13
26
 
14
- - Added untested support for headers and footers
15
- - this work was done in a rush to deal with a customer requirement - tests to come soon
@@ -0,0 +1 @@
1
+ fcf685ae67c99908b9d67a57e9bd4bfe6dc8f61c3e421e167d0c9912ab6ac32fd4ad9a273cbbee47e9157cafb311aaecb8db0995eb227aa0afe0bdcc3bc01ee3
@@ -6,12 +6,14 @@ require "nokogiri"
6
6
  module Consolidate
7
7
  module Docx
8
8
  class Merge
9
- def self.open(path, force_settings: true, &block)
10
- new(path, force_settings: force_settings, &block)
9
+ def self.open(path, verbose: false, &block)
10
+ new(path, verbose: verbose, &block)
11
+ path
11
12
  end
12
13
 
13
14
  def examine
14
- extract_field_names
15
+ puts "Documents: #{extract_document_names}"
16
+ puts "Merge fields: #{extract_field_names}"
15
17
  end
16
18
 
17
19
  def data fields = {}
@@ -38,37 +40,46 @@ module Consolidate
38
40
 
39
41
  protected
40
42
 
43
+ attr_reader :verbose
41
44
  attr_reader :zip
42
45
  attr_reader :xml
43
46
  attr_reader :documents
44
47
  attr_accessor :output
45
48
 
46
- def initialize(path, force_settings: true, &block)
49
+ EXCLUSIONS = %w{_rels/.rels [Content_Types].xml word/_rels/document.xml.rels word/theme/theme1.xml word/settings.xml word/_rels/settings.xml.rels word/styles.xml word/webSettings.xml word/fontTable.xml docProps/core.xml docProps/app.xml}
50
+
51
+ def initialize(path, verbose: false, &block)
47
52
  raise "No block given" unless block
53
+ @verbose = verbose
48
54
  @output = {}
49
55
  @documents = {}
50
- set_standard_settings if force_settings
51
56
  begin
52
57
  @zip = Zip::File.open(path)
53
- ["word/document.xml", "word/header1.xml", "word/footer1.xml"].each do |document|
54
- next unless @zip.find_entry(document)
55
- xml = @zip.read document
56
- @documents[document] = Nokogiri::XML(xml) { |x| x.noent }
57
- yield self
58
+ @zip.entries.each do |entry|
59
+ next if EXCLUSIONS.include? entry.name
60
+ puts "Reading #{entry.name}" if verbose
61
+ xml = @zip.get_input_stream entry
62
+ @documents[entry.name] = Nokogiri::XML(xml) { |x| x.noent }
58
63
  end
64
+ yield self
59
65
  ensure
60
66
  @zip.close
61
67
  end
62
68
  end
63
69
 
70
+ def extract_document_names
71
+ @zip.entries.collect { |entry| entry.name }.join(", ")
72
+ end
73
+
64
74
  def extract_field_names
65
- (extract_style_one + extract_style_two).uniq
75
+ (extract_style_one + extract_style_two).uniq.join(", ")
66
76
  end
67
77
 
68
78
  def extract_style_one
69
79
  documents.collect do |name, document|
70
80
  (document / "//w:fldSimple").collect do |field|
71
81
  value = field.attributes["instr"].value.strip
82
+ puts "...found #{value} (v1) in #{name}" if verbose
72
83
  value.include?("MERGEFIELD") ? value.gsub("MERGEFIELD", "").strip : nil
73
84
  end.compact
74
85
  end.flatten
@@ -78,6 +89,7 @@ module Consolidate
78
89
  documents.collect do |name, document|
79
90
  (document / "//w:instrText").collect do |instr|
80
91
  value = instr.inner_text
92
+ puts "...found #{value} (v2) in #{name}" if verbose
81
93
  value.include?("MERGEFIELD") ? value.gsub("MERGEFIELD", "").strip : nil
82
94
  end.compact
83
95
  end.flatten
@@ -89,6 +101,7 @@ module Consolidate
89
101
  if field.attributes["instr"].value =~ /MERGEFIELD (\S+)/
90
102
  text_node = (field / ".//w:t").first
91
103
  next unless text_node
104
+ puts "...substituting v1 #{field.attributes["instr"]} with #{fields[$1]}" if verbose
92
105
  text_node.inner_html = fields[$1].to_s
93
106
  end
94
107
  end
@@ -102,17 +115,13 @@ module Consolidate
102
115
  text_node = instr.parent.next_sibling.next_sibling.xpath(".//w:t").first
103
116
  text_node ||= instr.parent.next_sibling.next_sibling.next_sibling.xpath(".//w:t").first
104
117
  next unless text_node
118
+ puts "...substituting v2 #{instr.inner_text} with #{fields[$1]}" if verbose
105
119
  text_node.inner_html = fields[$1].to_s
106
120
  end
107
121
  end
108
122
  document
109
123
  end
110
124
 
111
- def set_standard_settings
112
- output["word/settings.xml"] = %(<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
113
- <w:settings xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main"><w:zoom w:percent="100"/></w:settings>)
114
- end
115
-
116
125
  def close
117
126
  zip.close
118
127
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Consolidate
4
- VERSION = "0.1.2"
4
+ VERSION = "0.1.3"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: standard-procedure-consolidate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rahoul Baruah
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-08-29 00:00:00.000000000 Z
11
+ date: 2023-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -57,6 +57,7 @@ files:
57
57
  - Rakefile
58
58
  - checksums/standard-procedure-consolidate-0.1.0.gem.sha512
59
59
  - checksums/standard-procedure-consolidate-0.1.2.gem.sha512
60
+ - checksums/standard-procedure-consolidate-0.1.3.gem.sha512
60
61
  - exe/consolidate
61
62
  - lib/consolidate.rb
62
63
  - lib/consolidate/docx/merge.rb
@@ -71,7 +72,7 @@ metadata:
71
72
  homepage_uri: https://github.com/standard-procedure/standard-procedure-consolidate
72
73
  source_code_uri: https://github.com/standard-procedure/standard-procedure-consolidate
73
74
  changelog_uri: https://github.com/standard-procedure/standard-procedure-consolidate/blob/main/CHANGELOG.md
74
- post_install_message:
75
+ post_install_message:
75
76
  rdoc_options: []
76
77
  require_paths:
77
78
  - lib
@@ -87,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
88
  version: '0'
88
89
  requirements: []
89
90
  rubygems_version: 3.4.10
90
- signing_key:
91
+ signing_key:
91
92
  specification_version: 4
92
93
  summary: Simple ruby mailmerge for Microsoft Word .docx files.
93
94
  test_files: []