docx_manipulator 0.0.1 → 0.0.2

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.
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: docx_manipulator
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - "Michael St\xC3\xA4mpfli"
@@ -55,14 +55,6 @@ extensions: []
55
55
  extra_rdoc_files: []
56
56
 
57
57
  files:
58
- - .gitignore
59
- - .rvmrc
60
- - Gemfile
61
- - README.rdoc
62
- - Rakefile
63
- - docx_manipulator.gemspec
64
- - lib/docx_manipulator.rb
65
- - lib/docx_manipulator/version.rb
66
58
  - spec/docx_manipulator_spec.rb
67
59
  - spec/files/content.txt
68
60
  - spec/files/data.xml
@@ -96,10 +88,5 @@ rubygems_version: 1.8.11
96
88
  signing_key:
97
89
  specification_version: 3
98
90
  summary: Enables the modification of docx files.
99
- test_files:
100
- - spec/docx_manipulator_spec.rb
101
- - spec/files/content.txt
102
- - spec/files/data.xml
103
- - spec/files/document.xslt
104
- - spec/files/duck.jpeg
105
- - spec/files/movies.docx
91
+ test_files: []
92
+
data/.gitignore DELETED
@@ -1,5 +0,0 @@
1
- *.gem
2
- .bundle
3
- Gemfile.lock
4
- pkg/*
5
- bin/
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm --create ruby-1.9.2-p180@docx_manipulator
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "http://rubygems.org"
2
-
3
- # Specify your gem's dependencies in docx_manipulator.gemspec
4
- gemspec
data/README.rdoc DELETED
@@ -1,3 +0,0 @@
1
- = Docx Manipulator
2
-
3
- The purpose of this gem is to make the modification of the content of Microsoft Word documents easier.
data/Rakefile DELETED
@@ -1 +0,0 @@
1
- require "bundler/gem_tasks"
@@ -1,25 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "docx_manipulator/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = "docx_manipulator"
7
- s.version = DocxManipulator::VERSION
8
- s.authors = ["Michael Stämpfli"]
9
- s.email = ["michael.staempfli@gmail.com"]
10
- s.homepage = ""
11
- s.summary = %q{Enables the modification of docx files.}
12
- s.description = %q{This Gem enables you to modify the contents of docx files.}
13
-
14
- s.rubyforge_project = "docx_manipulator"
15
-
16
- s.files = `git ls-files`.split("\n")
17
- s.test_files = `git ls-files -- spec/*`.split("\n")
18
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
- s.require_paths = ["lib"]
20
-
21
- # specify any dependencies here; for example:
22
- s.add_development_dependency "rspec"
23
- s.add_runtime_dependency "rubyzip"
24
- s.add_runtime_dependency "nokogiri"
25
- end
@@ -1,3 +0,0 @@
1
- class DocxManipulator
2
- VERSION = "0.0.1"
3
- end
@@ -1,77 +0,0 @@
1
- require 'docx_manipulator/version'
2
- require 'nokogiri'
3
- require 'zip/zip'
4
-
5
- class DocxManipulator
6
-
7
- attr_reader :source, :target, :new_content, :new_relationships
8
-
9
- def initialize(source, target)
10
- @source = source
11
- @target = target
12
- @new_relationships = source_relationships
13
- @images = {}
14
- end
15
-
16
- def source_content
17
- content = ''
18
- Zip::ZipFile.open(source) do |file|
19
- content = file.read('word/document.xml')
20
- end
21
- content
22
- end
23
-
24
- def source_relationships
25
- content = ''
26
- Zip::ZipFile.open(source) do |file|
27
- content = file.read('word/_rels/document.xml.rels')
28
- end
29
- Nokogiri::XML.parse(content)
30
- end
31
-
32
- def content(new_content, options = {})
33
- new_content_string = case new_content
34
- when File then new_content.read
35
- else new_content
36
- end
37
- if options.include?(:xslt)
38
- xslt = Nokogiri::XSLT.parse(options[:xslt])
39
- data = Nokogiri::XML.parse(new_content_string)
40
- @new_content = xslt.transform(data).to_s
41
- else
42
- @new_content = new_content_string
43
- end
44
- end
45
-
46
- def add_image(id, path)
47
- @images[id] = path
48
- image_node = Nokogiri::XML::Node.new('Relationship', new_relationships)
49
- image_node['Id'] = id
50
- image_node['Type'] = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image'
51
- image_node['Target'] = "media/#{File.basename(path)}"
52
- new_relationships.root << image_node
53
- end
54
-
55
- def process
56
- Zip::ZipOutputStream.open(target) do |os|
57
- Zip::ZipFile.foreach(source) do |entry|
58
- os.put_next_entry entry.name
59
- if entry.name == 'word/document.xml'
60
- os.write @new_content
61
- elsif entry.name == 'word/_rels/document.xml.rels'
62
- os.write new_relationships.to_s
63
- elsif entry.file?
64
- os.write entry.get_input_stream.read
65
- end
66
- end
67
-
68
- @images.each do |id, path|
69
- os.put_next_entry "word/media/#{File.basename(path)}"
70
- File.open(path) do |file|
71
- IO.copy_stream file, os
72
- end
73
- end
74
- end
75
- end
76
-
77
- end