docxi 0.0.6 → 0.1.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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +31 -0
- data/README.md +36 -2
- data/Rakefile +28 -0
- data/lib/docxi/content_types.rb +1 -2
- data/lib/docxi/document.rb +1 -1
- data/lib/docxi/properties.rb +2 -4
- data/lib/docxi/relationships.rb +1 -2
- data/lib/docxi/util.rb +19 -0
- data/lib/docxi/version.rb +1 -1
- data/lib/docxi/word/contents/image.rb +1 -1
- data/lib/docxi/word/contents/table.rb +2 -2
- data/lib/docxi/word/contents.rb +2 -0
- data/lib/docxi/word/document.rb +2 -3
- data/lib/docxi/word/effects.rb +1 -2
- data/lib/docxi/word/endnotes.rb +1 -2
- data/lib/docxi/word/fonts.rb +1 -2
- data/lib/docxi/word/footers/footer.rb +2 -4
- data/lib/docxi/word/footnotes.rb +1 -2
- data/lib/docxi/word/headers/header.rb +4 -6
- data/lib/docxi/word/helpers.rb +1 -1
- data/lib/docxi/word/hyperlinks/hyperlink.rb +2 -4
- data/lib/docxi/word/medias/media.rb +18 -0
- data/lib/docxi/word/medias.rb +1 -8
- data/lib/docxi/word/numbering.rb +1 -2
- data/lib/docxi/word/relationships/relationship.rb +1 -1
- data/lib/docxi/word/relationships.rb +1 -2
- data/lib/docxi/word/settings.rb +1 -2
- data/lib/docxi/word/styles.rb +1 -2
- data/lib/docxi/word/themes.rb +1 -2
- data/lib/docxi/word/web_settings.rb +1 -2
- data/lib/docxi.rb +12 -1
- metadata +70 -20
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: c1dc965f6024c4edc44877ee9eab41d37d01902fd45300e6d8a889e7eb68c32e
|
|
4
|
+
data.tar.gz: 2b6f6482b0dc4589e4a77e2bf00b5d8d28bfe350265bca015faef3274260d7e6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 143893cbd4f2ac9973059aa1760a56ada3c81ecc290c19d33b1af05d4958d738ee7afb006a18e37c2b6465218713e73c1772c629c506364026bba1833b668e2e
|
|
7
|
+
data.tar.gz: 626c1713161acd877bee8fd730f1bc67907a14835a37180d66a603ac2c9348ef780a80460f8fab7cd175a33a06c610047b3f325c6fcf22a774aa345750f7c868
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.1.0 (2026-10-28)
|
|
4
|
+
|
|
5
|
+
docxi installs and runs again in current apps, with or without Rails. No code changes are needed, and the generated documents are the same as 0.0.6's (the tests compare them against 0.0.6's output).
|
|
6
|
+
|
|
7
|
+
### Compatibility
|
|
8
|
+
|
|
9
|
+
- Requires Ruby 2.5 or newer. Apps on older Rubies stay on 0.0.6.
|
|
10
|
+
- Works with or without Rails, and is tested alongside Rails 5.2 through 8.1.
|
|
11
|
+
- nokogiri `>= 1.8, < 2` instead of `>= 1.6.3, < 1.7`, which conflicted with every Rails version since 6.0.
|
|
12
|
+
- rubyzip `>= 1.3, < 4` instead of `~> 0.9.9`.
|
|
13
|
+
- No longer calls ActiveSupport's `blank?` and `present?`, which only worked when Rails had loaded them.
|
|
14
|
+
|
|
15
|
+
### Fixes
|
|
16
|
+
|
|
17
|
+
- Documents written with rubyzip 3 no longer contain Zip64 records, which Google Docs and older LibreOffice versions reject.
|
|
18
|
+
- `add_media` with an image URL works on Ruby 3 again.
|
|
19
|
+
- `add_media` no longer runs a string that starts with `|` as a shell command.
|
|
20
|
+
- `tab` and `frame` no longer raise `NameError`.
|
|
21
|
+
- `document.frame("text")` no longer raises `TypeError`.
|
|
22
|
+
- `page_numbers` in a header no longer raises `NameError`.
|
|
23
|
+
|
|
24
|
+
### Gem
|
|
25
|
+
|
|
26
|
+
- New maintainer, homepage and changelog links.
|
|
27
|
+
- Releases require MFA.
|
|
28
|
+
|
|
29
|
+
## 0.0.6 (2016-10-18)
|
|
30
|
+
|
|
31
|
+
Last release before the 0.1.0 update.
|
data/README.md
CHANGED
|
@@ -13,6 +13,26 @@ Docxi gem provides ability to create docx documents using Ruby.
|
|
|
13
13
|
At the moment, the gem supports a limited number of functions, but the development of the gem is still in progress, and perhaps functionality will be expanded in the future. First of all, try to add documentation for the code and tests.
|
|
14
14
|
## NOTE
|
|
15
15
|
Use Latest version of Gem. Old Version has bugs.
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
```ruby
|
|
20
|
+
gem "docxi", "~> 0.1"
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Supported versions
|
|
24
|
+
|
|
25
|
+
| Dependency | Supported versions |
|
|
26
|
+
|---|---|
|
|
27
|
+
| Ruby | 2.5 or newer |
|
|
28
|
+
| Rails | Not required. Tested alongside Rails 5.2, 6.0, 6.1, 7.0, 7.1, 7.2, 8.0 and 8.1 |
|
|
29
|
+
| nokogiri | 1.8 or newer |
|
|
30
|
+
| rubyzip | 1.3 or newer, including 3.x |
|
|
31
|
+
|
|
32
|
+
### Upgrading from 0.0.x
|
|
33
|
+
|
|
34
|
+
Run `bundle update docxi`. The API is unchanged and 0.1.0 generates the same documents as 0.0.6. Apps on a Ruby older than 2.5 stay on 0.0.6 automatically.
|
|
35
|
+
|
|
16
36
|
## Usage
|
|
17
37
|
|
|
18
38
|
```ruby
|
|
@@ -133,7 +153,7 @@ document.p do |p|
|
|
|
133
153
|
# Adds image to container
|
|
134
154
|
media = document.add_media File.open('image.png')
|
|
135
155
|
# Or add image URL
|
|
136
|
-
media = document.add_media image_url
|
|
156
|
+
# media = document.add_media image_url
|
|
137
157
|
# Insert media into paragraph
|
|
138
158
|
p.image media, style: { width: '200pt', height: '200pt' }
|
|
139
159
|
|
|
@@ -157,4 +177,18 @@ end
|
|
|
157
177
|
# Creates Word Document
|
|
158
178
|
io = word.render
|
|
159
179
|
File.open('doc_1.docx', 'wb'){|f| f.write(io.string) }
|
|
160
|
-
```
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Development
|
|
183
|
+
|
|
184
|
+
```sh
|
|
185
|
+
bundle install
|
|
186
|
+
bundle exec rake test # run the tests
|
|
187
|
+
bundle exec rake samples # write tmp/samples/*.docx to open in Word, LibreOffice or Google Docs
|
|
188
|
+
|
|
189
|
+
# run the tests with a specific Rails version loaded
|
|
190
|
+
BUNDLE_GEMFILE=gemfiles/rails_8.1.gemfile bundle install
|
|
191
|
+
BUNDLE_GEMFILE=gemfiles/rails_8.1.gemfile DOCXI_WITH_RAILS=1 bundle exec rake test
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
`test/golden` holds the XML that 0.0.6 generated for the sample documents in `test/support/sample_documents.rb`, and the tests check every release against it. After an intentional change to the generated XML, update it with `bundle exec rake golden` and review the diff.
|
data/Rakefile
CHANGED
|
@@ -4,6 +4,34 @@ require 'rake/testtask'
|
|
|
4
4
|
|
|
5
5
|
Rake::TestTask.new do |t|
|
|
6
6
|
t.libs << 'test'
|
|
7
|
+
t.pattern = 'test/**/test_*.rb'
|
|
8
|
+
t.warning = false
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
desc 'Rewrite test/golden from the current code (only after an intentional output change)'
|
|
12
|
+
task :golden do
|
|
13
|
+
$LOAD_PATH.unshift File.expand_path('lib', __dir__)
|
|
14
|
+
require 'docxi'
|
|
15
|
+
require_relative 'test/support/package'
|
|
16
|
+
require_relative 'test/support/sample_documents'
|
|
17
|
+
|
|
18
|
+
SampleDocuments.all.each do |name, word|
|
|
19
|
+
Package.write_golden(File.join(__dir__, 'test', 'golden', name), word.render.string)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
desc 'Write the sample documents to tmp/samples for opening in Word, LibreOffice or Google Docs'
|
|
24
|
+
task :samples do
|
|
25
|
+
$LOAD_PATH.unshift File.expand_path('lib', __dir__)
|
|
26
|
+
require 'docxi'
|
|
27
|
+
require 'fileutils'
|
|
28
|
+
require_relative 'test/support/sample_documents'
|
|
29
|
+
|
|
30
|
+
FileUtils.mkdir_p('tmp/samples')
|
|
31
|
+
SampleDocuments.all.each do |name, word|
|
|
32
|
+
File.binwrite("tmp/samples/#{name}.docx", word.render.string)
|
|
33
|
+
puts "tmp/samples/#{name}.docx"
|
|
34
|
+
end
|
|
7
35
|
end
|
|
8
36
|
|
|
9
37
|
desc "Run tests"
|
data/lib/docxi/content_types.rb
CHANGED
data/lib/docxi/document.rb
CHANGED
data/lib/docxi/properties.rb
CHANGED
|
@@ -18,11 +18,9 @@ module Docxi
|
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def render(zip)
|
|
21
|
-
|
|
22
|
-
zip.write(Docxi.to_xml(app.document))
|
|
21
|
+
Docxi.write_entry(zip, 'docProps/app.xml', Docxi.to_xml(app.document))
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
zip.write(Docxi.to_xml(core.document))
|
|
23
|
+
Docxi.write_entry(zip, 'docProps/core.xml', Docxi.to_xml(core.document))
|
|
26
24
|
end
|
|
27
25
|
|
|
28
26
|
end
|
data/lib/docxi/relationships.rb
CHANGED
data/lib/docxi/util.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Docxi
|
|
2
|
+
module Util
|
|
3
|
+
|
|
4
|
+
# Same rules as ActiveSupport's Object#blank?, which older versions of this
|
|
5
|
+
# gem called without depending on ActiveSupport.
|
|
6
|
+
def self.blank?(value)
|
|
7
|
+
case value
|
|
8
|
+
when nil, false then true
|
|
9
|
+
when String then /\A[[:space:]]*\z/ === value
|
|
10
|
+
else value.respond_to?(:empty?) ? !!value.empty? : false
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.present?(value)
|
|
15
|
+
!blank?(value)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
end
|
data/lib/docxi/version.rb
CHANGED
|
@@ -85,7 +85,7 @@ module Docxi
|
|
|
85
85
|
end
|
|
86
86
|
else
|
|
87
87
|
xml['v'].rect("fillcolor"=> options[:fill_color], 'id' => @media.uniq_id, 'type' => @media.type, 'style' => styles, :stroked => "f" ) do
|
|
88
|
-
if options[:opacity]
|
|
88
|
+
if Docxi::Util.present?(options[:opacity])
|
|
89
89
|
xml['v'].fill("opacity" => options[:opacity])
|
|
90
90
|
end
|
|
91
91
|
xml['v'].imagedata( 'r:id' => @media.sequence, 'o:title' => @options[:title] )
|
|
@@ -92,7 +92,7 @@ module Docxi
|
|
|
92
92
|
|
|
93
93
|
def render(xml)
|
|
94
94
|
xml['w'].tr do
|
|
95
|
-
if options[:height]
|
|
95
|
+
if Docxi::Util.present?(options[:height])
|
|
96
96
|
xml['w'].trPr do
|
|
97
97
|
xml['w'].trHeight('w:val' => options[:height], 'w:hRule' => 'atLeast')
|
|
98
98
|
xml['w'].cantSplit('w:val' => 'false')
|
|
@@ -119,7 +119,7 @@ module Docxi
|
|
|
119
119
|
end
|
|
120
120
|
|
|
121
121
|
def render(xml)
|
|
122
|
-
if options[:fill]
|
|
122
|
+
if Docxi::Util.blank?(options[:fill])
|
|
123
123
|
options[:fill] = 'FFFFFF'
|
|
124
124
|
end
|
|
125
125
|
xml['w'].tc do
|
data/lib/docxi/word/contents.rb
CHANGED
data/lib/docxi/word/document.rb
CHANGED
|
@@ -125,8 +125,7 @@ module Docxi
|
|
|
125
125
|
end
|
|
126
126
|
|
|
127
127
|
def render(zip)
|
|
128
|
-
|
|
129
|
-
zip.write(Docxi.to_xml(document))
|
|
128
|
+
Docxi.write_entry(zip, 'word/document.xml', Docxi.to_xml(document))
|
|
130
129
|
|
|
131
130
|
fonts.render(zip)
|
|
132
131
|
settings.render(zip)
|
|
@@ -166,7 +165,7 @@ module Docxi
|
|
|
166
165
|
xml['w'].footerReference( 'w:type' => "first", 'r:id' => @first_footer.sequence ) if @first_footer
|
|
167
166
|
xml['w'].titlePg
|
|
168
167
|
xml['w'].pgSz( 'w:w' => 12240, 'w:h' => 15840 )
|
|
169
|
-
xml['w'].pgMar( 'w:top' => @options[:top], 'w:right' => @options[:right], 'w:bottom' => @options[:bottom], 'w:left' => @options[:left], 'w:header' => @options[:header]
|
|
168
|
+
xml['w'].pgMar( 'w:top' => @options[:top], 'w:right' => @options[:right], 'w:bottom' => @options[:bottom], 'w:left' => @options[:left], 'w:header' => Docxi::Util.present?(@options[:header]) ? @options[:header] : 190, 'w:footer' => Docxi::Util.present?(@options[:footer]) ? @options[:footer] : 200 , 'w:gutter' => 0)
|
|
170
169
|
xml['w'].cols( 'w:space' => 720)
|
|
171
170
|
xml['w'].docGrid( 'w:linePitch' => "360")
|
|
172
171
|
end
|
data/lib/docxi/word/effects.rb
CHANGED
data/lib/docxi/word/endnotes.rb
CHANGED
data/lib/docxi/word/fonts.rb
CHANGED
|
@@ -33,12 +33,10 @@ module Docxi
|
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
def render(zip)
|
|
36
|
-
|
|
37
|
-
zip.write(Docxi.to_xml(document))
|
|
36
|
+
Docxi.write_entry(zip, "word/#{target}", Docxi.to_xml(document))
|
|
38
37
|
|
|
39
38
|
if !@relationships.empty?
|
|
40
|
-
|
|
41
|
-
zip.write(Docxi.to_xml(relationships))
|
|
39
|
+
Docxi.write_entry(zip, "word/_rels/#{target}.rels", Docxi.to_xml(relationships))
|
|
42
40
|
end
|
|
43
41
|
end
|
|
44
42
|
|
data/lib/docxi/word/footnotes.rb
CHANGED
|
@@ -27,12 +27,10 @@ module Docxi
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def render(zip)
|
|
30
|
-
|
|
31
|
-
zip.write(Docxi.to_xml(document))
|
|
30
|
+
Docxi.write_entry(zip, "word/#{target}", Docxi.to_xml(document))
|
|
32
31
|
|
|
33
32
|
if !@relationships.empty?
|
|
34
|
-
|
|
35
|
-
zip.write(Docxi.to_xml(relationships))
|
|
33
|
+
Docxi.write_entry(zip, "word/_rels/#{target}.rels", Docxi.to_xml(relationships))
|
|
36
34
|
end
|
|
37
35
|
end
|
|
38
36
|
|
|
@@ -52,8 +50,8 @@ module Docxi
|
|
|
52
50
|
element
|
|
53
51
|
end
|
|
54
52
|
|
|
55
|
-
def page_numbers
|
|
56
|
-
numbers = PageNumbers.new
|
|
53
|
+
def page_numbers(options={})
|
|
54
|
+
numbers = Docxi::Word::Footers::Footer::PageNumbers.new(options)
|
|
57
55
|
@content << numbers
|
|
58
56
|
numbers
|
|
59
57
|
end
|
data/lib/docxi/word/helpers.rb
CHANGED
|
@@ -31,11 +31,9 @@ module Docxi
|
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def render(zip)
|
|
34
|
-
|
|
35
|
-
zip.write(Docxi.to_xml(document))
|
|
34
|
+
Docxi.write_entry(zip, "word/#{target}", Docxi.to_xml(document))
|
|
36
35
|
if !@relationships.empty?
|
|
37
|
-
|
|
38
|
-
zip.write(Docxi.to_xml(relationships))
|
|
36
|
+
Docxi.write_entry(zip, "word/_rels/#{target}.rels", Docxi.to_xml(relationships))
|
|
39
37
|
end
|
|
40
38
|
end
|
|
41
39
|
|
|
@@ -3,6 +3,8 @@ module Docxi
|
|
|
3
3
|
class Medias
|
|
4
4
|
class Media
|
|
5
5
|
|
|
6
|
+
URL = %r{\A(?:https?|ftp)://}i
|
|
7
|
+
|
|
6
8
|
attr_accessor :id, :sequence, :file
|
|
7
9
|
def initialize(id, file, options)
|
|
8
10
|
@id = id
|
|
@@ -10,6 +12,22 @@ module Docxi
|
|
|
10
12
|
self
|
|
11
13
|
end
|
|
12
14
|
|
|
15
|
+
# Strings are URLs or file paths. Kernel#open, and File.binread on
|
|
16
|
+
# Ruby 2.5, run strings starting with "|" as shell commands, and
|
|
17
|
+
# Kernel#open stopped fetching URLs in Ruby 3.
|
|
18
|
+
def read
|
|
19
|
+
if @file.is_a?(String)
|
|
20
|
+
if @file =~ URL
|
|
21
|
+
require 'open-uri'
|
|
22
|
+
URI.parse(@file).open { |io| io.read }
|
|
23
|
+
else
|
|
24
|
+
File.open(@file, 'rb') { |file| file.read }
|
|
25
|
+
end
|
|
26
|
+
else
|
|
27
|
+
@file.read
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
13
31
|
def set_sequence(sequence)
|
|
14
32
|
@sequence = sequence
|
|
15
33
|
self
|
data/lib/docxi/word/medias.rb
CHANGED
|
@@ -21,14 +21,7 @@ module Docxi
|
|
|
21
21
|
|
|
22
22
|
def render(zip)
|
|
23
23
|
@medias.each do |media|
|
|
24
|
-
|
|
25
|
-
if media.file.class == String
|
|
26
|
-
file = open(media.file)
|
|
27
|
-
zip.write(file.read)
|
|
28
|
-
file.close
|
|
29
|
-
else
|
|
30
|
-
zip.write(media.file.read)
|
|
31
|
-
end
|
|
24
|
+
Docxi.write_entry(zip, "word/#{media.target}", media.read)
|
|
32
25
|
end
|
|
33
26
|
end
|
|
34
27
|
|
data/lib/docxi/word/numbering.rb
CHANGED
data/lib/docxi/word/settings.rb
CHANGED
data/lib/docxi/word/styles.rb
CHANGED
data/lib/docxi/word/themes.rb
CHANGED
data/lib/docxi.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
require 'nokogiri'
|
|
2
|
-
require 'zip
|
|
2
|
+
require 'zip'
|
|
3
3
|
|
|
4
|
+
require 'docxi/version'
|
|
5
|
+
require 'docxi/util'
|
|
4
6
|
require 'docxi/relationships'
|
|
5
7
|
require 'docxi/content_types'
|
|
6
8
|
require 'docxi/properties'
|
|
@@ -13,6 +15,15 @@ module Docxi
|
|
|
13
15
|
document.to_xml(:save_with => Nokogiri::XML::Node::SaveOptions::AS_XML).gsub("\n", "\r\n").strip
|
|
14
16
|
end
|
|
15
17
|
|
|
18
|
+
# The size is set up front because rubyzip 3 otherwise adds Zip64 extra
|
|
19
|
+
# fields to every entry, and Google Docs and older LibreOffice reject those.
|
|
20
|
+
def self.write_entry(zip, name, data)
|
|
21
|
+
entry = Zip::Entry.new('', name)
|
|
22
|
+
entry.size = data.bytesize
|
|
23
|
+
zip.put_next_entry(entry)
|
|
24
|
+
zip.write(data)
|
|
25
|
+
end
|
|
26
|
+
|
|
16
27
|
def self.test
|
|
17
28
|
word = Docxi::Document.new
|
|
18
29
|
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: docxi
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
-
|
|
8
|
-
autorequire:
|
|
7
|
+
- Hammad Maqbool
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: nokogiri
|
|
@@ -16,40 +15,89 @@ dependencies:
|
|
|
16
15
|
requirements:
|
|
17
16
|
- - ">="
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 1.
|
|
18
|
+
version: '1.8'
|
|
20
19
|
- - "<"
|
|
21
20
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: '
|
|
21
|
+
version: '2'
|
|
23
22
|
type: :runtime
|
|
24
23
|
prerelease: false
|
|
25
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
25
|
requirements:
|
|
27
26
|
- - ">="
|
|
28
27
|
- !ruby/object:Gem::Version
|
|
29
|
-
version: 1.
|
|
28
|
+
version: '1.8'
|
|
30
29
|
- - "<"
|
|
31
30
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: '
|
|
31
|
+
version: '2'
|
|
33
32
|
- !ruby/object:Gem::Dependency
|
|
34
33
|
name: rubyzip
|
|
35
34
|
requirement: !ruby/object:Gem::Requirement
|
|
36
35
|
requirements:
|
|
37
|
-
- - "
|
|
36
|
+
- - ">="
|
|
37
|
+
- !ruby/object:Gem::Version
|
|
38
|
+
version: '1.3'
|
|
39
|
+
- - "<"
|
|
38
40
|
- !ruby/object:Gem::Version
|
|
39
|
-
version:
|
|
41
|
+
version: '4'
|
|
40
42
|
type: :runtime
|
|
41
43
|
prerelease: false
|
|
42
44
|
version_requirements: !ruby/object:Gem::Requirement
|
|
43
45
|
requirements:
|
|
44
|
-
- - "
|
|
46
|
+
- - ">="
|
|
47
|
+
- !ruby/object:Gem::Version
|
|
48
|
+
version: '1.3'
|
|
49
|
+
- - "<"
|
|
50
|
+
- !ruby/object:Gem::Version
|
|
51
|
+
version: '4'
|
|
52
|
+
- !ruby/object:Gem::Dependency
|
|
53
|
+
name: minitest
|
|
54
|
+
requirement: !ruby/object:Gem::Requirement
|
|
55
|
+
requirements:
|
|
56
|
+
- - ">="
|
|
57
|
+
- !ruby/object:Gem::Version
|
|
58
|
+
version: '5.15'
|
|
59
|
+
- - "<"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '7'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
45
67
|
- !ruby/object:Gem::Version
|
|
46
|
-
version:
|
|
68
|
+
version: '5.15'
|
|
69
|
+
- - "<"
|
|
70
|
+
- !ruby/object:Gem::Version
|
|
71
|
+
version: '7'
|
|
72
|
+
- !ruby/object:Gem::Dependency
|
|
73
|
+
name: rake
|
|
74
|
+
requirement: !ruby/object:Gem::Requirement
|
|
75
|
+
requirements:
|
|
76
|
+
- - ">="
|
|
77
|
+
- !ruby/object:Gem::Version
|
|
78
|
+
version: '12'
|
|
79
|
+
- - "<"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '14'
|
|
82
|
+
type: :development
|
|
83
|
+
prerelease: false
|
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - ">="
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '12'
|
|
89
|
+
- - "<"
|
|
90
|
+
- !ruby/object:Gem::Version
|
|
91
|
+
version: '14'
|
|
47
92
|
description: Create docx template using Ruby
|
|
48
|
-
email:
|
|
93
|
+
email:
|
|
94
|
+
- hammad.maqbool@phaedrasolutions.com
|
|
95
|
+
- hammad417@gmail.com
|
|
49
96
|
executables: []
|
|
50
97
|
extensions: []
|
|
51
98
|
extra_rdoc_files: []
|
|
52
99
|
files:
|
|
100
|
+
- CHANGELOG.md
|
|
53
101
|
- LICENSE
|
|
54
102
|
- README.md
|
|
55
103
|
- Rakefile
|
|
@@ -63,6 +111,7 @@ files:
|
|
|
63
111
|
- lib/docxi/properties/core.rb
|
|
64
112
|
- lib/docxi/relationships.rb
|
|
65
113
|
- lib/docxi/relationships/relationship.rb
|
|
114
|
+
- lib/docxi/util.rb
|
|
66
115
|
- lib/docxi/version.rb
|
|
67
116
|
- lib/docxi/word.rb
|
|
68
117
|
- lib/docxi/word/contents.rb
|
|
@@ -97,11 +146,14 @@ files:
|
|
|
97
146
|
- lib/docxi/word/themes.rb
|
|
98
147
|
- lib/docxi/word/themes/theme.rb
|
|
99
148
|
- lib/docxi/word/web_settings.rb
|
|
100
|
-
homepage:
|
|
149
|
+
homepage: https://github.com/hammad417/docxi
|
|
101
150
|
licenses:
|
|
102
151
|
- MIT
|
|
103
|
-
metadata:
|
|
104
|
-
|
|
152
|
+
metadata:
|
|
153
|
+
source_code_uri: https://github.com/hammad417/docxi
|
|
154
|
+
changelog_uri: https://github.com/hammad417/docxi/blob/master/CHANGELOG.md
|
|
155
|
+
bug_tracker_uri: https://github.com/hammad417/docxi/issues
|
|
156
|
+
rubygems_mfa_required: 'true'
|
|
105
157
|
rdoc_options: []
|
|
106
158
|
require_paths:
|
|
107
159
|
- lib
|
|
@@ -109,16 +161,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
109
161
|
requirements:
|
|
110
162
|
- - ">="
|
|
111
163
|
- !ruby/object:Gem::Version
|
|
112
|
-
version: '
|
|
164
|
+
version: '2.5'
|
|
113
165
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
166
|
requirements:
|
|
115
167
|
- - ">="
|
|
116
168
|
- !ruby/object:Gem::Version
|
|
117
169
|
version: '0'
|
|
118
170
|
requirements: []
|
|
119
|
-
|
|
120
|
-
rubygems_version: 2.4.3
|
|
121
|
-
signing_key:
|
|
171
|
+
rubygems_version: 4.0.20
|
|
122
172
|
specification_version: 4
|
|
123
173
|
summary: Docx Template Generator
|
|
124
174
|
test_files: []
|