open_xml_package 0.0.2 → 0.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2b72f5c67d5a18d27b73e969c287d3901d5180ae
4
- data.tar.gz: 3136fa54c21681c6f1d7025480befbf286313ddf
3
+ metadata.gz: e0c48c674659490cb99dd732878aed3b4f0425cb
4
+ data.tar.gz: db6e4f5b6a5e3275759ab1128acaadbe3157e410
5
5
  SHA512:
6
- metadata.gz: 5fe55147d26a022c6be62eae2cfb5b292198999cd4f0cfa8438c8bcb0019d6af798b7889597b544d92149c44081335425a9076a2716d73a0461180b8f4c0ec27
7
- data.tar.gz: 227b72c1f194c1bdba20b656522b7d6c4c2dd6f742d7b1e2b47e019286f9a5956b3b932b2d80185ba3faff2e39f44ca5ca04d597440cb9bb2e00f52e6974a461
6
+ metadata.gz: 32b928ff33b063c806d10de43e521499c05fb890ff2164a351ace3633450676f2afd1e87eda4e2e648036453df8eeb09eec32da245080047deffd6f5f347f708
7
+ data.tar.gz: d20a4f7eeb74dfbc4ee8bab6dbd42c4b4aabf65c54bd8472a288055ae47ae64ecae59b1c48154d0c719411ad13ee11f1cb8c2e07b531c87e27a7c8aaab4f2264
@@ -1,4 +1,5 @@
1
1
  require "open_xml_package/part"
2
+ require "open_xml_package/rubyzip_fix"
2
3
  require "open_xml_package/version"
3
4
  require "zip"
4
5
 
@@ -16,6 +17,22 @@ class OpenXmlPackage
16
17
  end
17
18
  end
18
19
 
20
+ def self.from_stream(stream)
21
+ stream = StringIO.new(stream) if stream.is_a?(String)
22
+
23
+ # Hack: Zip::Entry.read_c_dir_entry initializes
24
+ # a new Zip::Entry by calling `io.path`. Zip::Entry
25
+ # uses this to open the original zipfile; but in
26
+ # this case, the StringIO _is_ the original.
27
+ def stream.path
28
+ self
29
+ end
30
+
31
+ zipfile = ::Zip::File.new("", true, true)
32
+ zipfile.read_from_stream(stream)
33
+ new(zipfile)
34
+ end
35
+
19
36
  def initialize(zipfile=nil)
20
37
  @zipfile = zipfile
21
38
  @parts = []
@@ -0,0 +1,17 @@
1
+ require "zip"
2
+
3
+ module Zip
4
+ class InputStream
5
+ protected
6
+
7
+ # The problem in RubyZip 1.1.0 is that we only call `seek`
8
+ # when `io` is a File. We need to move the cursor to the
9
+ # right position when `io` is a StringIO as well.
10
+ def get_io(io, offset = 0)
11
+ io = ::File.open(io, "rb") unless io.is_a?(IO) || io.is_a?(StringIO)
12
+ io.seek(offset, ::IO::SEEK_SET)
13
+ io
14
+ end
15
+
16
+ end
17
+ end
@@ -1,3 +1,3 @@
1
1
  class OpenXmlPackage
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -50,7 +50,6 @@ class OpenXmlPackageTest < ActiveSupport::TestCase
50
50
  context "Given a sample Word document" do
51
51
  setup do
52
52
  @temp_file = expand_path "./support/sample.docx"
53
- @package = OpenXmlPackage.open(temp_file)
54
53
  @expected_contents = Set[
55
54
  "[Content_Types].xml",
56
55
  "_rels/.rels",
@@ -68,16 +67,36 @@ class OpenXmlPackageTest < ActiveSupport::TestCase
68
67
  "word/webSettings.xml" ]
69
68
  end
70
69
 
71
- teardown do
72
- package.close
70
+ context ".open" do
71
+ setup do
72
+ @package = OpenXmlPackage.open(temp_file)
73
+ end
74
+
75
+ teardown do
76
+ package.close
77
+ end
78
+
79
+ should "discover the expected parts" do
80
+ assert_equal @expected_contents, package.parts.map(&:path).to_set
81
+ end
82
+
83
+ should "read their content on-demand" do
84
+ assert_equal web_settings_content, package.get_part("word/webSettings.xml").content
85
+ end
73
86
  end
74
87
 
75
- should "discover the expected parts" do
76
- assert_equal @expected_contents, package.parts.map(&:path).to_set
77
- end
78
-
79
- should "read their content on-demand" do
80
- assert_equal web_settings_content, package.get_part("word/webSettings.xml").content
88
+ context ".from_stream" do
89
+ setup do
90
+ @package = OpenXmlPackage.from_stream(File.open(temp_file, "rb", &:read))
91
+ end
92
+
93
+ should "also discover the expected parts" do
94
+ assert_equal @expected_contents, package.parts.map(&:path).to_set
95
+ end
96
+
97
+ should "read their content" do
98
+ assert_equal web_settings_content, package.get_part("word/webSettings.xml").content
99
+ end
81
100
  end
82
101
  end
83
102
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: open_xml_package
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Lail
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-05 00:00:00.000000000 Z
11
+ date: 2014-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -156,6 +156,7 @@ files:
156
156
  - Rakefile
157
157
  - lib/open_xml_package.rb
158
158
  - lib/open_xml_package/part.rb
159
+ - lib/open_xml_package/rubyzip_fix.rb
159
160
  - lib/open_xml_package/version.rb
160
161
  - open_xml_package.gemspec
161
162
  - test/open_xml_package_test.rb